{"mappings":";;;;;;;;;AA6BO,SAAS,0CACd,KAAoC;IAEpC,IAAI,WAAC,OAAO,cAAE,UAAU,UAAE,MAAM,EAAC,GAAG;IACpC,IAAI,eAAe,CAAA,GAAA,yCAAO,EAAE,MAAM,KAAK;IACvC,IAAI,sBAAsB,CAAA,GAAA,yCAAO,EAAE,MAAM,YAAY;IACrD,IAAI,CAAC,YAAY,SAAS,GAAG,CAAA,GAAA,yCAAiB,EAC5C,cACA,uBAAuB,MACvB,MAAM,QAAQ;IAEhB,IAAI,QAAQ,sCAAgB,YAAY;IACxC,IAAI,CAAC,kBAAkB,GAAG,CAAA,GAAA,eAAO,EAAE;IACnC,IAAI,oBAAoB,uBAAuB;IAC/C,IAAI,eAAe,sCAAgB,mBAAmB;IACtD,IAAI,QAAQ,MAAM,eAAe,CAAC;IAClC,IAAI,QAAQ,MAAM,eAAe,CAAC;IAClC,IAAI,gBAAgB,CAAA,GAAA,cAAM,EAAE,IAAM,MAAM,uBAAuB,CAAC,UAAU;QAAC;QAAO;KAAQ;IAC1F,IAAI,aAAa,cAAc,KAAK,KAAK,aAAa,MAAM,QAAQ,KAAK,MAAM,MAAM;IAErF,IAAI,mBAAmB,CAAA,GAAA,yCAAkB,EAAE;gBACzC;QACA,OAAO,eAAe,OAAO,MAAM,QAAQ;QAC3C,cACE,sBAAsB,OAAO,MAAM,aAAa,eAAe,CAAC,WAAW;QAC7E,UAAU,CAAA;YACR,IAAI,CAAC,OAAO,KAAK,CAAC,IAChB,SAAS,MAAM,gBAAgB,CAAC,SAAS,IAAI;iBAE7C,SAAS;QAEb;QACA,UAAU,MAAM,QAAQ,GAAG;QAC3B,UAAU,MAAM,QAAQ,GAAG;QAC3B,MAAM,MAAM,IAAI,GAAG;uBACnB;IACF;IAEA,OAAO;QACL,GAAG,gBAAgB;QACnB,YAAY;2BACZ;QACA,eAAe;IACjB;AACF;AAEA,SAAS,sCAAgB,UAAwB,EAAE,UAAyC;IAC1F,IAAI,QAAQ,CAAA,GAAA,yCAAO,EAAE;IACrB,OAAO,CAAA,GAAA,cAAM,EAAE;QACb,IAAI,oBAAoB,cAAc;QACtC,OAAO,cAAc,oBACjB,kBAAkB,QAAQ,CAAC,cAC3B;IACN,GAAG;QAAC;QAAO;QAAY;KAAW;AACpC","sources":["packages/react-stately/src/color/useColorChannelFieldState.ts"],"sourcesContent":["import {Color, ColorChannel, ColorSpace} from './types';\nimport {ColorFieldProps} from './useColorFieldState';\nimport {NumberFieldState, useNumberFieldState} from '../numberfield/useNumberFieldState';\nimport {useColor} from './useColor';\nimport {useControlledState} from '../utils/useControlledState';\nimport {useMemo, useState} from 'react';\n\nexport interface ColorChannelFieldProps extends ColorFieldProps {\n  colorSpace?: ColorSpace;\n  channel: ColorChannel;\n}\n\nexport interface ColorChannelFieldStateOptions extends ColorChannelFieldProps {\n  locale: string;\n}\n\nexport interface ColorChannelFieldState extends NumberFieldState {\n  /** The current value of the field. */\n  colorValue: Color;\n  /** The default value of the field. */\n  defaultColorValue: Color | null;\n  /** Sets the color value of the field. */\n  setColorValue(value: Color | null): void;\n}\n\n/**\n * Provides state management for a color channel field, allowing users to edit the\n * value of an individual color channel.\n */\nexport function useColorChannelFieldState(\n  props: ColorChannelFieldStateOptions\n): ColorChannelFieldState {\n  let {channel, colorSpace, locale} = props;\n  let initialValue = useColor(props.value);\n  let initialDefaultValue = useColor(props.defaultValue);\n  let [colorValue, setColor] = useControlledState(\n    initialValue,\n    initialDefaultValue ?? null,\n    props.onChange\n  );\n  let color = useConvertColor(colorValue, colorSpace);\n  let [initialColorValue] = useState(colorValue);\n  let defaultColorValue = initialDefaultValue ?? initialColorValue;\n  let defaultColor = useConvertColor(defaultColorValue, colorSpace);\n  let value = color.getChannelValue(channel);\n  let range = color.getChannelRange(channel);\n  let formatOptions = useMemo(() => color.getChannelFormatOptions(channel), [color, channel]);\n  let multiplier = formatOptions.style === 'percent' && range.maxValue === 100 ? 100 : 1;\n\n  let numberFieldState = useNumberFieldState({\n    locale,\n    value: colorValue === null ? NaN : value / multiplier,\n    defaultValue:\n      defaultColorValue === null ? NaN : defaultColor.getChannelValue(channel) / multiplier,\n    onChange: v => {\n      if (!Number.isNaN(v)) {\n        setColor(color.withChannelValue(channel, v * multiplier));\n      } else {\n        setColor(null);\n      }\n    },\n    minValue: range.minValue / multiplier,\n    maxValue: range.maxValue / multiplier,\n    step: range.step / multiplier,\n    formatOptions\n  });\n\n  return {\n    ...numberFieldState,\n    colorValue: color,\n    defaultColorValue,\n    setColorValue: setColor\n  };\n}\n\nfunction useConvertColor(colorValue: Color | null, colorSpace: ColorSpace | null | undefined) {\n  let black = useColor('#000')!;\n  return useMemo(() => {\n    let nonNullColorValue = colorValue || black;\n    return colorSpace && nonNullColorValue\n      ? nonNullColorValue.toFormat(colorSpace)\n      : nonNullColorValue;\n  }, [black, colorValue, colorSpace]);\n}\n"],"names":[],"version":3,"file":"useColorChannelFieldState.mjs.map"}