@xsolla/xui-color-picker 0.202.3 → 0.203.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -250,6 +250,11 @@ interface ColorChangeResult {
250
250
  - **Reset button**: Reset to initial color value
251
251
  - **Eyedropper**: Pick colors from anywhere on screen (web only, requires browser support)
252
252
 
253
+ ## Theme
254
+
255
+ - ColorPicker is meant to sit in a popover, so its panel background comes from the `layer/float` colour token (`theme.colors.layer.float`) rather than a page-level `background/*` token. This keeps it visually lifted off the page in both light and dark mode.
256
+ - Corner radius comes from `theme.shape.contextMenu.lg.borderRadius` so the panel matches the other overlay surfaces.
257
+
253
258
  ## Accessibility
254
259
 
255
260
  - Copy and reset buttons have accessible labels
package/native/index.js CHANGED
@@ -1086,7 +1086,7 @@ var ColorPicker = (0, import_react6.forwardRef)(
1086
1086
  {
1087
1087
  ref,
1088
1088
  testID,
1089
- backgroundColor: theme.colors.background.secondary,
1089
+ backgroundColor: theme.colors.layer.float,
1090
1090
  borderRadius: theme.shape.contextMenu.lg.borderRadius,
1091
1091
  padding: 16,
1092
1092
  gap: 16,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.tsx","../../src/ColorPicker.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/index.tsx","../../src/ColorPickerArea.tsx","../../src/colorUtils.ts","../../src/utils.ts","../../src/ColorPickerSlider.tsx","../../src/ColorPickerInput.tsx","../../src/ColorPickerHexInput.tsx","../../src/ColorPickerEyedropper.tsx"],"sourcesContent":["export * from \"./ColorPicker\";\nexport * from \"./types\";\nexport * from \"./colorUtils\";\nexport * from \"./ColorPickerArea\";\nexport * from \"./ColorPickerSlider\";\n","import { forwardRef, useRef, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { Select } from \"@xsolla/xui-select\";\nimport { IconButton } from \"@xsolla/xui-button\";\nimport {\n useResolvedTheme,\n isNative,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\nimport { ColorPickerArea } from \"./ColorPickerArea\";\nimport { ColorPickerSlider } from \"./ColorPickerSlider\";\nimport { ColorPickerInput } from \"./ColorPickerInput\";\nimport { ColorPickerHexInput } from \"./ColorPickerHexInput\";\nimport { ColorPickerEyedropper } from \"./ColorPickerEyedropper\";\nimport { parseColor, type ColorChannel, type ColorValue } from \"./colorUtils\";\nimport type { ColorFormat, ColorPickerProps, InputColorFormat } from \"./types\";\nimport { useUpdatableState } from \"./utils\";\n\nconst DEFAULT_VALUE = \"#66E6FFFF\";\n\nconst supportedFormats: InputColorFormat[] = [\"hex\", \"hsl\", \"rgb\", \"hsb\"];\n\nconst addAlfaToChannel = (\n channelName: InputColorFormat,\n alpha: boolean\n): ColorFormat => (alpha ? `${channelName}a` : channelName) as ColorFormat;\n\nconst removeAlfaFromChannel = (channelName: ColorFormat): InputColorFormat =>\n channelName.slice(0, 3) as InputColorFormat;\n\nconst CopyIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n);\n\nconst ResetIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <polyline points=\"3 3 3 8 8 8\" />\n </svg>\n);\n\nexport const ColorPicker = forwardRef<\n any,\n ColorPickerProps & ThemeOverrideProps\n>(\n (\n {\n colorFormat: defaultColorFormat = \"hex\",\n alpha = true,\n value: propValue,\n onChange,\n selectableFormats = supportedFormats,\n copiedIcon,\n eyedropper = false,\n bottomContent,\n testID,\n themeMode,\n themeProductContext,\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const prevColorRef = useRef(propValue);\n\n const [innerValue, setInnerValue] = useUpdatableState<ColorValue>(\n (prevState) => {\n if (prevColorRef.current === propValue && prevState) return prevState;\n const parsedColor = parseColor(propValue || DEFAULT_VALUE);\n return parsedColor;\n },\n [propValue],\n true\n );\n\n const [initialValue] = useState<ColorValue>(() => innerValue);\n const [isValueCopied, setValueCopied] = useState(false);\n\n const [colorFormat, setColorFormat] = useUpdatableState<ColorFormat>(\n () => addAlfaToChannel(defaultColorFormat, alpha),\n [defaultColorFormat, alpha],\n true\n );\n\n const handleChange = (\n newColorString: string,\n currentFormat: ColorFormat = colorFormat\n ) => {\n if (!newColorString) return;\n const newColor = parseColor(newColorString);\n const valueInInitialFormat = newColor.toString(\n addAlfaToChannel(defaultColorFormat, alpha)\n );\n const valueInCurrentFormat = newColor.toString(currentFormat);\n\n setInnerValue(newColor);\n prevColorRef.current = valueInInitialFormat;\n\n onChange?.({\n valueInInitialFormat,\n currentColorFormat: removeAlfaFromChannel(currentFormat),\n valueInCurrentFormat,\n });\n };\n\n const handleChangeFormat = (newFormat: string) => {\n setColorFormat(newFormat as ColorFormat);\n handleChange(innerValue.toString(), newFormat as ColorFormat);\n };\n\n const onCopy = async () => {\n if (isNative) {\n // Native clipboard needs a library like react-native-clipboard\n console.warn(\"Clipboard not yet implemented for native\");\n return;\n }\n try {\n await navigator.clipboard.writeText(innerValue.toString(colorFormat));\n setValueCopied(true);\n setTimeout(() => setValueCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n };\n\n const onReset = () => handleChange(initialValue.toString());\n\n const selectFormatOptions = selectableFormats\n .map((f) => addAlfaToChannel(f, alpha))\n .map((f) => ({\n label: f.toUpperCase(),\n value: f,\n }));\n\n const channels: ColorChannel[] = colorFormat.includes(\"hex\")\n ? []\n : colorFormat.includes(\"rgb\")\n ? [\"red\", \"green\", \"blue\"]\n : colorFormat.includes(\"hsl\")\n ? [\"hue\", \"saturation\", \"lightness\"]\n : [\"hue\", \"saturation\", \"brightness\"];\n\n return (\n <Box\n ref={ref}\n testID={testID}\n backgroundColor={theme.colors.background.secondary}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n padding={16}\n gap={16}\n width={312}\n style={{ boxShadow: \"0px 4px 16px 0px rgba(7, 7, 8, 0.1)\" }}\n >\n <ColorPickerArea\n value={innerValue.toString()}\n onChange={handleChange}\n />\n\n <Box flexDirection=\"row\" gap={8} alignItems=\"center\">\n {eyedropper && <ColorPickerEyedropper onColorPick={handleChange} />}\n <Box flex={1} gap={8}>\n <ColorPickerSlider\n channel=\"hue\"\n value={innerValue.toString()}\n onChange={handleChange}\n />\n {alpha && (\n <ColorPickerSlider\n channel=\"alpha\"\n value={innerValue.toString()}\n onChange={handleChange}\n />\n )}\n </Box>\n </Box>\n\n <Box flexDirection=\"row\" gap={8} alignItems=\"center\">\n <Box width={80}>\n <Select\n size=\"sm\"\n options={selectFormatOptions}\n value={colorFormat}\n onChange={handleChangeFormat}\n />\n </Box>\n\n <Box flex={1} flexDirection=\"row\" gap={4}>\n {colorFormat.includes(\"hex\") ? (\n <ColorPickerHexInput\n value={innerValue.toString(colorFormat)}\n onChange={handleChange}\n />\n ) : (\n channels.map((channel) => (\n <ColorPickerInput\n key={channel}\n value={innerValue}\n valueType={\n innerValue.getChannelRange(channel).maxValue === 100\n ? \"percentage\"\n : \"number\"\n }\n channel={channel}\n onChange={handleChange}\n />\n ))\n )}\n {alpha && (\n <ColorPickerInput\n channel=\"alpha\"\n value={innerValue}\n valueType=\"percentage\"\n onChange={handleChange}\n />\n )}\n </Box>\n\n <Box flexDirection=\"row\" gap={4}>\n <IconButton\n size=\"sm\"\n variant=\"secondary\"\n tone=\"mono\"\n onPress={onCopy}\n icon={isValueCopied ? copiedIcon || <CheckIcon /> : <CopyIcon />}\n aria-label=\"Copy color\"\n />\n <IconButton\n size=\"sm\"\n variant=\"secondary\"\n tone=\"mono\"\n onPress={onReset}\n icon={<ResetIcon />}\n aria-label=\"Reset color\"\n />\n </Box>\n </Box>\n\n {bottomContent}\n </Box>\n );\n }\n);\n\nColorPicker.displayName = \"ColorPicker\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n opacity,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n opacity: opacity ?? (disabled ? 0.5 : undefined),\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","export * from \"./Box\";\nexport * from \"./Text\";\nexport * from \"./Spinner\";\nexport * from \"./Icon\";\nexport * from \"./Divider\";\nexport * from \"./Input\";\nexport * from \"./TextArea\";\nexport * from \"./LinearGradient\";\n\nexport const isWeb = false;\nexport const isNative = true;\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type ForwardedRef,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, isWeb, isNative } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { createColorFromHsb, parseColor } from \"./colorUtils\";\nimport type { CustomColorAreaProps } from \"./types\";\nimport { clamp, snapValueToStep, useMergedRefs } from \"./utils\";\n\nexport const ColorPickerArea = forwardRef(function CustomColorArea(\n props: CustomColorAreaProps,\n ref: ForwardedRef<any>\n) {\n const {\n xChannelStep = 0.1,\n yChannelStep = 0.1,\n value,\n defaultValue,\n onChange,\n onChangeEnd,\n className,\n } = props;\n\n const { theme } = useResolvedTheme();\n const internalRef = useRef<any>(null);\n const containerRef = useMergedRefs(ref, internalRef);\n const [layout, setLayout] = useState({ width: 0, height: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const [currentColor, setCurrentColor] = useState(() => {\n const initialValue = value || defaultValue || \"#ffffff\";\n return parseColor(initialValue);\n });\n\n useEffect(() => {\n if (value !== undefined) {\n setCurrentColor(parseColor(value));\n }\n }, [value]);\n\n const hsb = currentColor.toHsb();\n const hue = hsb.h;\n\n const saturation = hsb.s * 100;\n const brightness = hsb.b * 100;\n const thumbX = (saturation / 100) * 100;\n const thumbY = 100 - (brightness / 100) * 100;\n\n const updateColor = useCallback(\n (x: number, y: number) => {\n const newSaturation = snapValueToStep(x * 100, 0, 100, xChannelStep);\n const newBrightness = snapValueToStep(\n (1 - y) * 100,\n 0,\n 100,\n yChannelStep\n );\n\n const newColor = createColorFromHsb(\n hue,\n newSaturation,\n newBrightness,\n hsb.a\n );\n setCurrentColor(newColor);\n onChange?.(newColor.toString());\n return newColor;\n },\n [hue, hsb.a, xChannelStep, yChannelStep, onChange]\n );\n\n // Web mouse handlers\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (isNative) return;\n setIsDragging(true);\n const rect = e.currentTarget.getBoundingClientRect();\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n const y = clamp((e.clientY - rect.top) / rect.height, 0, 1);\n updateColor(x, y);\n },\n [updateColor]\n );\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging || isNative) return;\n const rect = (internalRef.current as any)?.getBoundingClientRect?.();\n if (!rect) return;\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n const y = clamp((e.clientY - rect.top) / rect.height, 0, 1);\n updateColor(x, y);\n },\n [isDragging, updateColor]\n );\n\n const handleMouseUp = useCallback(() => {\n if (isDragging) {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }\n }, [isDragging, currentColor, onChangeEnd]);\n\n useEffect(() => {\n if (isWeb && isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n // Native responder handlers\n const handleResponderMove = useCallback(\n (e: any) => {\n const { locationX, locationY } = e.nativeEvent;\n const x = clamp(locationX / layout.width, 0, 1);\n const y = clamp(locationY / layout.height, 0, 1);\n updateColor(x, y);\n },\n [layout, updateColor]\n );\n\n const handleResponderRelease = useCallback(() => {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }, [currentColor, onChangeEnd]);\n\n const gradientStyle = isWeb\n ? {\n background: `linear-gradient(to top,\n hsl(${hue}, 100%, 0%),\n hsl(${hue}, 100%, 50%)),\n linear-gradient(to right,\n hsla(${hue}, 0%, 50%, 1),\n hsla(${hue}, 100%, 50%, 1))`,\n }\n : {\n backgroundColor: `hsl(${hue}, 100%, 50%)`, // Fallback for native without LinearGradient\n };\n\n const thumbColor = currentColor.toString(\"hex\");\n\n return (\n <Box\n data-testid=\"color-picker-color-area\"\n ref={containerRef}\n className={className}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n height={240}\n cursor=\"pointer\"\n position=\"relative\"\n style={gradientStyle as any}\n onMouseDown={handleMouseDown}\n onLayout={(e: any) => {\n if (isNative) {\n setLayout(e.nativeEvent.layout);\n }\n }}\n onMoveShouldSetResponder={() => isNative}\n onResponderGrant={(e: any) => {\n setIsDragging(true);\n handleResponderMove(e);\n }}\n onResponderMove={handleResponderMove}\n onResponderRelease={handleResponderRelease}\n onResponderTerminate={handleResponderRelease}\n >\n <Box width=\"100%\" height=\"100%\" position=\"relative\">\n <Box\n data-testid=\"color-picker-color-area-thumb\"\n position=\"absolute\"\n width={16}\n height={16}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n borderWidth={2}\n borderColor=\"#ffffff\"\n style={\n {\n left: `${thumbX}%`,\n top: `${thumbY}%`,\n transform: isWeb\n ? \"translate(-50%, -50%)\"\n : ([{ translateX: -8 }, { translateY: -8 }] as any),\n backgroundColor: thumbColor,\n boxShadow: \"0 0 4px rgba(0,0,0,0.3)\",\n } as any\n }\n />\n </Box>\n </Box>\n );\n});\n","export type ColorChannel =\n | \"hue\"\n | \"saturation\"\n | \"brightness\"\n | \"lightness\"\n | \"red\"\n | \"green\"\n | \"blue\"\n | \"alpha\";\n\nexport interface ColorValue {\n getChannelValue(channel: ColorChannel): number;\n setChannelValue(channel: ColorChannel, value: number): ColorValue;\n getChannelRange(channel: ColorChannel): {\n minValue: number;\n maxValue: number;\n step: number;\n pageSize: number;\n };\n getColorChannels(): ColorChannel[];\n toFormat(format: string): string;\n toString(format?: string): string;\n toHsb(): { h: number; s: number; b: number; a: number };\n toRgb(): { r: number; g: number; b: number; a: number };\n toHsl(): { h: number; s: number; l: number; a: number };\n}\n\nfunction hsbToRgb(h: number, s: number, b: number, a: number = 1) {\n s /= 100;\n b /= 100;\n const k = (n: number) => (n + h / 60) % 6;\n const f = (n: number) =>\n b * (1 - s * Math.max(0, Math.min(k(n), 4 - k(n), 1)));\n return {\n r: Math.round(255 * f(5)),\n g: Math.round(255 * f(3)),\n b: Math.round(255 * f(1)),\n a,\n };\n}\n\nfunction rgbToHsb(r: number, g: number, b: number, a: number = 1) {\n r /= 255;\n g /= 255;\n b /= 255;\n const v = Math.max(r, g, b);\n const n = v - Math.min(r, g, b);\n const h =\n n === 0\n ? 0\n : n && v === r\n ? (g - b) / n\n : v === g\n ? 2 + (b - r) / n\n : 4 + (r - g) / n;\n return {\n h: Math.round(60 * (h < 0 ? h + 6 : h)),\n s: Math.round(v && (n / v) * 100),\n b: Math.round(v * 100),\n a,\n };\n}\n\nfunction rgbToHex(r: number, g: number, b: number, a: number = 1) {\n const toHex = (n: number) => n.toString(16).padStart(2, \"0\");\n const alpha = a === 1 ? \"\" : toHex(Math.round(a * 255));\n return `#${toHex(r)}${toHex(g)}${toHex(b)}${alpha}`.toUpperCase();\n}\n\nfunction hexToRgb(hex: string) {\n hex = hex.replace(/^#/, \"\");\n if (hex.length === 3)\n hex = hex\n .split(\"\")\n .map((s) => s + s)\n .join(\"\");\n if (hex.length === 4)\n hex = hex\n .split(\"\")\n .map((s) => s + s)\n .join(\"\");\n\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n const a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1;\n\n return { r, g, b, a: parseFloat(a.toFixed(2)) };\n}\n\nfunction rgbToHsl(r: number, g: number, b: number, a: number = 1) {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h = 0,\n s = 0,\n l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n a,\n };\n}\n\nclass ColorValueImpl implements ColorValue {\n private h: number;\n private s: number;\n private b: number;\n private a: number;\n\n constructor(h: number, s: number, b: number, a: number = 1) {\n this.h = h;\n this.s = s;\n this.b = b;\n this.a = a;\n }\n\n getChannelValue(channel: ColorChannel): number {\n switch (channel) {\n case \"hue\":\n return this.h;\n case \"saturation\":\n return this.s;\n case \"brightness\":\n return this.b;\n case \"alpha\":\n return this.a;\n case \"red\":\n return hsbToRgb(this.h, this.s, this.b, this.a).r;\n case \"green\":\n return hsbToRgb(this.h, this.s, this.b, this.a).g;\n case \"blue\":\n return hsbToRgb(this.h, this.s, this.b, this.a).b;\n case \"lightness\":\n return rgbToHsl(\n hsbToRgb(this.h, this.s, this.b, this.a).r,\n hsbToRgb(this.h, this.s, this.b, this.a).g,\n hsbToRgb(this.h, this.s, this.b, this.a).b\n ).l;\n default:\n return 0;\n }\n }\n\n setChannelValue(channel: ColorChannel, value: number): ColorValue {\n if (channel === \"hue\")\n return new ColorValueImpl(value, this.s, this.b, this.a);\n if (channel === \"saturation\")\n return new ColorValueImpl(this.h, value, this.b, this.a);\n if (channel === \"brightness\")\n return new ColorValueImpl(this.h, this.s, value, this.a);\n if (channel === \"alpha\")\n return new ColorValueImpl(this.h, this.s, this.b, value);\n\n // For RGB/HSL channels, convert to RGB, update, then back to HSB\n const rgb = hsbToRgb(this.h, this.s, this.b, this.a);\n if (channel === \"red\") rgb.r = value;\n else if (channel === \"green\") rgb.g = value;\n else if (channel === \"blue\") rgb.b = value;\n\n const hsb = rgbToHsb(rgb.r, rgb.g, rgb.b, rgb.a);\n return new ColorValueImpl(hsb.h, hsb.s, hsb.b, hsb.a);\n }\n\n getChannelRange(channel: ColorChannel) {\n switch (channel) {\n case \"hue\":\n return { minValue: 0, maxValue: 360, step: 1, pageSize: 15 };\n case \"alpha\":\n return { minValue: 0, maxValue: 1, step: 0.01, pageSize: 0.1 };\n case \"red\":\n case \"green\":\n case \"blue\":\n return { minValue: 0, maxValue: 255, step: 1, pageSize: 17 };\n default:\n return { minValue: 0, maxValue: 100, step: 1, pageSize: 10 };\n }\n }\n\n getColorChannels(): ColorChannel[] {\n return [\"red\", \"green\", \"blue\"];\n }\n\n toFormat(format: string): string {\n const rgb = hsbToRgb(this.h, this.s, this.b, this.a);\n if (format === \"hex\" || format === \"hexa\")\n return rgbToHex(rgb.r, rgb.g, rgb.b, this.a);\n if (format === \"rgb\") return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n if (format === \"rgba\")\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${this.a})`;\n if (format === \"hsl\") {\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n if (format === \"hsla\") {\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${this.a})`;\n }\n if (format === \"hsb\") return `hsb(${this.h}, ${this.s}%, ${this.b}%)`;\n if (format === \"hsba\")\n return `hsba(${this.h}, ${this.s}%, ${this.b}%, ${this.a})`;\n return rgbToHex(rgb.r, rgb.g, rgb.b, this.a);\n }\n\n toString(format?: string): string {\n return this.toFormat(format || \"hex\");\n }\n\n toHsb() {\n return { h: this.h, s: this.s / 100, b: this.b / 100, a: this.a };\n }\n toRgb() {\n return hsbToRgb(this.h, this.s, this.b, this.a);\n }\n toHsl() {\n const rgb = this.toRgb();\n return rgbToHsl(rgb.r, rgb.g, rgb.b, this.a);\n }\n}\n\nexport function parseColor(color: string): ColorValue {\n if (color.startsWith(\"#\")) {\n const rgb = hexToRgb(color);\n const hsb = rgbToHsb(rgb.r, rgb.g, rgb.b, rgb.a);\n return new ColorValueImpl(hsb.h, hsb.s, hsb.b, hsb.a);\n }\n // Basic support for hsb/rgb/hsl strings if needed, otherwise default to white\n return new ColorValueImpl(0, 0, 100, 1);\n}\n\nexport function createColorFromHsb(\n h: number,\n s: number,\n b: number,\n a: number = 1\n): ColorValue {\n return new ColorValueImpl(h, s, b, a);\n}\n","import { useRef, useEffect, useState, useCallback } from \"react\";\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function snapValueToStep(\n value: number,\n min: number | undefined,\n max: number | undefined,\n step: number\n): number {\n const remainder = (value - (min ?? 0)) % step;\n let snappedValue =\n Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder;\n\n if (min !== undefined && snappedValue < min) {\n snappedValue = min;\n } else if (max !== undefined && snappedValue > max) {\n snappedValue = max;\n }\n\n return snappedValue;\n}\n\nexport function useMergedRefs<T>(...refs: Array<any>) {\n return useCallback((node: T) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref != null) {\n ref.current = node;\n }\n });\n }, refs);\n}\n\nexport function useUpdatableState<T>(\n updater: (prevState: T | undefined) => T,\n deps: any[],\n initialUpdate = false\n): [T, (value: T) => void] {\n const [state, setState] = useState<T>(() => updater(undefined));\n const isFirstRender = useRef(true);\n\n useEffect(() => {\n if (isFirstRender.current && !initialUpdate) {\n isFirstRender.current = false;\n return;\n }\n setState(updater);\n }, deps);\n\n return [state, setState];\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, isWeb, isNative } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, type ThemeOverrideProps } from \"@xsolla/xui-core\";\nimport { createColorFromHsb, parseColor } from \"./colorUtils\";\nimport { clamp, snapValueToStep } from \"./utils\";\n\ntype ColorPickerSliderProps = {\n channel: \"hue\" | \"alpha\";\n value: string;\n onChange?: (color: string) => void;\n onChangeEnd?: (color: string) => void;\n testID?: string;\n};\n\nexport const ColorPickerSlider: React.FC<\n ColorPickerSliderProps & ThemeOverrideProps\n> = ({\n channel,\n value,\n onChange,\n onChangeEnd,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const trackRef = useRef<any>(null);\n const [layout, setLayout] = useState({ width: 0, height: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const currentColor = parseColor(value);\n const hsb = currentColor.toHsb();\n\n const getChannelValue = () => {\n if (channel === \"hue\") return hsb.h;\n return hsb.a * 100;\n };\n\n const getMaxValue = () => (channel === \"hue\" ? 360 : 100);\n\n const channelValue = getChannelValue();\n const maxValue = getMaxValue();\n const thumbPosition = (channelValue / maxValue) * 100;\n\n const updateColor = useCallback(\n (x: number) => {\n const newValue = snapValueToStep(x * maxValue, 0, maxValue, 1);\n let newColor;\n if (channel === \"hue\") {\n newColor = createColorFromHsb(\n newValue,\n hsb.s * 100,\n hsb.b * 100,\n hsb.a\n );\n } else {\n newColor = createColorFromHsb(\n hsb.h,\n hsb.s * 100,\n hsb.b * 100,\n newValue / 100\n );\n }\n onChange?.(newColor.toString());\n return newColor;\n },\n [channel, maxValue, hsb, onChange]\n );\n\n // Web mouse handlers\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (isNative) return;\n setIsDragging(true);\n const rect = e.currentTarget.getBoundingClientRect();\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n updateColor(x);\n },\n [updateColor]\n );\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging || isNative) return;\n const rect = (trackRef.current as any)?.getBoundingClientRect?.();\n if (!rect) return;\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n updateColor(x);\n },\n [isDragging, updateColor]\n );\n\n const handleMouseUp = useCallback(() => {\n if (isDragging) {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }\n }, [isDragging, currentColor, onChangeEnd]);\n\n useEffect(() => {\n if (isWeb && isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n // Native responder handlers\n const handleResponderMove = useCallback(\n (e: any) => {\n const { locationX } = e.nativeEvent;\n const x = clamp(locationX / layout.width, 0, 1);\n updateColor(x);\n },\n [layout, updateColor]\n );\n\n const handleResponderRelease = useCallback(() => {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }, [currentColor, onChangeEnd]);\n\n const getGradient = () => {\n if (channel === \"hue\") {\n return \"linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%)\";\n }\n const colorHex = currentColor.toString(\"hex\");\n return `linear-gradient(to right, transparent 0%, ${colorHex} 100%)`;\n };\n\n const thumbColor =\n channel === \"hue\"\n ? createColorFromHsb(channelValue, 100, 100, 1).toString(\"hex\")\n : currentColor.toString(\"hex\");\n\n return (\n <Box\n testID={testID}\n height={12}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n position=\"relative\"\n style={\n isWeb\n ? { background: getGradient() }\n : ({ backgroundColor: theme.colors.background.primary } as any)\n }\n onLayout={(e: any) => {\n if (isNative) {\n setLayout(e.nativeEvent.layout);\n }\n }}\n onMouseDown={handleMouseDown}\n onMoveShouldSetResponder={() => isNative}\n onResponderGrant={(e: any) => {\n setIsDragging(true);\n handleResponderMove(e);\n }}\n onResponderMove={handleResponderMove}\n onResponderRelease={handleResponderRelease}\n onResponderTerminate={handleResponderRelease}\n >\n <Box ref={trackRef} width=\"100%\" height=\"100%\" position=\"relative\">\n <Box\n position=\"absolute\"\n width={16}\n height={16}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n borderWidth={2}\n borderColor=\"#ffffff\"\n style={\n {\n left: `${thumbPosition}%`,\n top: \"50%\",\n transform: isWeb\n ? \"translate(-50%, -50%)\"\n : ([{ translateX: -8 }, { translateY: -8 }] as any),\n backgroundColor: thumbColor,\n boxShadow: \"0 0 4px rgba(0,0,0,0.3)\",\n } as any\n }\n />\n </Box>\n </Box>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Input } from \"@xsolla/xui-input\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport type { ColorChannel, ColorValue } from \"./colorUtils\";\n\ntype ColorPickerInputProps = {\n value: ColorValue;\n valueType: \"number\" | \"percentage\";\n channel: ColorChannel;\n onChange: (color: string) => void;\n};\n\nexport const ColorPickerInput: React.FC<ColorPickerInputProps> = ({\n value,\n valueType,\n channel,\n onChange,\n}) => {\n const channelValue = value.getChannelValue(channel);\n const channelRange = value.getChannelRange(channel);\n const intValue = channel === \"alpha\" ? channelValue * 100 : channelValue;\n const roundedValue = Math.round(intValue);\n\n const [inputValue, setInputValue] = useState(String(roundedValue));\n\n useEffect(() => {\n setInputValue(String(roundedValue));\n }, [roundedValue]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const text = e.target.value.replace(/[^0-9]/g, \"\");\n setInputValue(text);\n\n const parsedValue = parseInt(text, 10);\n if (!isNaN(parsedValue)) {\n const min = channel === \"alpha\" ? 0 : channelRange.minValue;\n const max = channel === \"alpha\" ? 100 : channelRange.maxValue;\n\n const clampedValue = Math.min(Math.max(parsedValue, min), max);\n const colorValue =\n channel === \"alpha\" ? clampedValue / 100 : clampedValue;\n\n const newColor = value.setChannelValue(channel, colorValue);\n onChange(newColor.toString());\n }\n };\n\n const handleBlur = () => {\n setInputValue(String(roundedValue));\n };\n\n return (\n <Box flex={1} minWidth={40}>\n <Input\n size=\"sm\"\n value={valueType === \"percentage\" ? `${inputValue}%` : inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n </Box>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Input } from \"@xsolla/xui-input\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { parseColor } from \"./colorUtils\";\n\ntype ColorPickerHexInputProps = {\n value: string;\n onChange: (color: string) => void;\n};\n\nexport const ColorPickerHexInput: React.FC<ColorPickerHexInputProps> = ({\n value,\n onChange,\n}) => {\n const [inputValue, setInputValue] = useState(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n\n try {\n const color = parseColor(newValue);\n if (color) {\n onChange(color.toString(\"hex\"));\n }\n } catch {\n // Invalid color\n }\n };\n\n const handleBlur = () => {\n try {\n const color = parseColor(inputValue);\n if (color) {\n onChange(color.toString(\"hex\"));\n } else {\n setInputValue(value);\n }\n } catch {\n setInputValue(value);\n }\n };\n\n return (\n <Box flex={1}>\n <Input\n size=\"sm\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n </Box>\n );\n};\n","import React from \"react\";\nimport { IconButton } from \"@xsolla/xui-button\";\nimport { parseColor } from \"./colorUtils\";\n\nconst DropletIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5s-3 3.5-3 5.5a7 7 0 0 0 7 7z\" />\n </svg>\n);\n\ndeclare let EyeDropper: {\n new (): {\n open(): Promise<{ sRGBHex: string }>;\n };\n};\n\ntype Props = {\n onColorPick: (color: string) => void;\n};\n\nexport const ColorPickerEyedropper: React.FC<Props> = ({ onColorPick }) => {\n const onEyedropperButtonClick = () => {\n if (typeof EyeDropper !== \"undefined\") {\n new EyeDropper().open().then((result) => {\n const pickedColor = parseColor(result.sRGBHex);\n const hsb = pickedColor.toHsb();\n const hsbString = `hsb(${Math.round(hsb.h)}, ${Math.round(hsb.s * 100)}%, ${Math.round(hsb.b * 100)}%)`;\n onColorPick(hsbString);\n });\n }\n };\n\n if (typeof EyeDropper === \"undefined\") return null;\n\n return (\n <IconButton\n size=\"sm\"\n variant=\"secondary\"\n tone=\"mono\"\n onPress={onEyedropperButtonClick}\n icon={<DropletIcon />}\n aria-label=\"Pick color from screen\"\n />\n );\n};\n"],"mappings":"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","names":["import_react","import_xui_button","import_xui_core","import_react","import_jsx_runtime","import_react","import_xui_core","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_xui_input","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../../src/index.tsx","../../src/ColorPicker.tsx","../../../../foundation/primitives-native/src/Box.tsx","../../../../foundation/primitives-native/src/index.tsx","../../src/ColorPickerArea.tsx","../../src/colorUtils.ts","../../src/utils.ts","../../src/ColorPickerSlider.tsx","../../src/ColorPickerInput.tsx","../../src/ColorPickerHexInput.tsx","../../src/ColorPickerEyedropper.tsx"],"sourcesContent":["export * from \"./ColorPicker\";\nexport * from \"./types\";\nexport * from \"./colorUtils\";\nexport * from \"./ColorPickerArea\";\nexport * from \"./ColorPickerSlider\";\n","import { forwardRef, useRef, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { Select } from \"@xsolla/xui-select\";\nimport { IconButton } from \"@xsolla/xui-button\";\nimport {\n useResolvedTheme,\n isNative,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\nimport { ColorPickerArea } from \"./ColorPickerArea\";\nimport { ColorPickerSlider } from \"./ColorPickerSlider\";\nimport { ColorPickerInput } from \"./ColorPickerInput\";\nimport { ColorPickerHexInput } from \"./ColorPickerHexInput\";\nimport { ColorPickerEyedropper } from \"./ColorPickerEyedropper\";\nimport { parseColor, type ColorChannel, type ColorValue } from \"./colorUtils\";\nimport type { ColorFormat, ColorPickerProps, InputColorFormat } from \"./types\";\nimport { useUpdatableState } from \"./utils\";\n\nconst DEFAULT_VALUE = \"#66E6FFFF\";\n\nconst supportedFormats: InputColorFormat[] = [\"hex\", \"hsl\", \"rgb\", \"hsb\"];\n\nconst addAlfaToChannel = (\n channelName: InputColorFormat,\n alpha: boolean\n): ColorFormat => (alpha ? `${channelName}a` : channelName) as ColorFormat;\n\nconst removeAlfaFromChannel = (channelName: ColorFormat): InputColorFormat =>\n channelName.slice(0, 3) as InputColorFormat;\n\nconst CopyIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n);\n\nconst CheckIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n);\n\nconst ResetIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\" />\n <polyline points=\"3 3 3 8 8 8\" />\n </svg>\n);\n\nexport const ColorPicker = forwardRef<\n any,\n ColorPickerProps & ThemeOverrideProps\n>(\n (\n {\n colorFormat: defaultColorFormat = \"hex\",\n alpha = true,\n value: propValue,\n onChange,\n selectableFormats = supportedFormats,\n copiedIcon,\n eyedropper = false,\n bottomContent,\n testID,\n themeMode,\n themeProductContext,\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const prevColorRef = useRef(propValue);\n\n const [innerValue, setInnerValue] = useUpdatableState<ColorValue>(\n (prevState) => {\n if (prevColorRef.current === propValue && prevState) return prevState;\n const parsedColor = parseColor(propValue || DEFAULT_VALUE);\n return parsedColor;\n },\n [propValue],\n true\n );\n\n const [initialValue] = useState<ColorValue>(() => innerValue);\n const [isValueCopied, setValueCopied] = useState(false);\n\n const [colorFormat, setColorFormat] = useUpdatableState<ColorFormat>(\n () => addAlfaToChannel(defaultColorFormat, alpha),\n [defaultColorFormat, alpha],\n true\n );\n\n const handleChange = (\n newColorString: string,\n currentFormat: ColorFormat = colorFormat\n ) => {\n if (!newColorString) return;\n const newColor = parseColor(newColorString);\n const valueInInitialFormat = newColor.toString(\n addAlfaToChannel(defaultColorFormat, alpha)\n );\n const valueInCurrentFormat = newColor.toString(currentFormat);\n\n setInnerValue(newColor);\n prevColorRef.current = valueInInitialFormat;\n\n onChange?.({\n valueInInitialFormat,\n currentColorFormat: removeAlfaFromChannel(currentFormat),\n valueInCurrentFormat,\n });\n };\n\n const handleChangeFormat = (newFormat: string) => {\n setColorFormat(newFormat as ColorFormat);\n handleChange(innerValue.toString(), newFormat as ColorFormat);\n };\n\n const onCopy = async () => {\n if (isNative) {\n // Native clipboard needs a library like react-native-clipboard\n console.warn(\"Clipboard not yet implemented for native\");\n return;\n }\n try {\n await navigator.clipboard.writeText(innerValue.toString(colorFormat));\n setValueCopied(true);\n setTimeout(() => setValueCopied(false), 2000);\n } catch (err) {\n console.error(\"Failed to copy:\", err);\n }\n };\n\n const onReset = () => handleChange(initialValue.toString());\n\n const selectFormatOptions = selectableFormats\n .map((f) => addAlfaToChannel(f, alpha))\n .map((f) => ({\n label: f.toUpperCase(),\n value: f,\n }));\n\n const channels: ColorChannel[] = colorFormat.includes(\"hex\")\n ? []\n : colorFormat.includes(\"rgb\")\n ? [\"red\", \"green\", \"blue\"]\n : colorFormat.includes(\"hsl\")\n ? [\"hue\", \"saturation\", \"lightness\"]\n : [\"hue\", \"saturation\", \"brightness\"];\n\n return (\n <Box\n ref={ref}\n testID={testID}\n backgroundColor={theme.colors.layer.float}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n padding={16}\n gap={16}\n width={312}\n style={{ boxShadow: \"0px 4px 16px 0px rgba(7, 7, 8, 0.1)\" }}\n >\n <ColorPickerArea\n value={innerValue.toString()}\n onChange={handleChange}\n />\n\n <Box flexDirection=\"row\" gap={8} alignItems=\"center\">\n {eyedropper && <ColorPickerEyedropper onColorPick={handleChange} />}\n <Box flex={1} gap={8}>\n <ColorPickerSlider\n channel=\"hue\"\n value={innerValue.toString()}\n onChange={handleChange}\n />\n {alpha && (\n <ColorPickerSlider\n channel=\"alpha\"\n value={innerValue.toString()}\n onChange={handleChange}\n />\n )}\n </Box>\n </Box>\n\n <Box flexDirection=\"row\" gap={8} alignItems=\"center\">\n <Box width={80}>\n <Select\n size=\"sm\"\n options={selectFormatOptions}\n value={colorFormat}\n onChange={handleChangeFormat}\n />\n </Box>\n\n <Box flex={1} flexDirection=\"row\" gap={4}>\n {colorFormat.includes(\"hex\") ? (\n <ColorPickerHexInput\n value={innerValue.toString(colorFormat)}\n onChange={handleChange}\n />\n ) : (\n channels.map((channel) => (\n <ColorPickerInput\n key={channel}\n value={innerValue}\n valueType={\n innerValue.getChannelRange(channel).maxValue === 100\n ? \"percentage\"\n : \"number\"\n }\n channel={channel}\n onChange={handleChange}\n />\n ))\n )}\n {alpha && (\n <ColorPickerInput\n channel=\"alpha\"\n value={innerValue}\n valueType=\"percentage\"\n onChange={handleChange}\n />\n )}\n </Box>\n\n <Box flexDirection=\"row\" gap={4}>\n <IconButton\n size=\"sm\"\n variant=\"secondary\"\n tone=\"mono\"\n onPress={onCopy}\n icon={isValueCopied ? copiedIcon || <CheckIcon /> : <CopyIcon />}\n aria-label=\"Copy color\"\n />\n <IconButton\n size=\"sm\"\n variant=\"secondary\"\n tone=\"mono\"\n onPress={onReset}\n icon={<ResetIcon />}\n aria-label=\"Reset color\"\n />\n </Box>\n </Box>\n\n {bottomContent}\n </Box>\n );\n }\n);\n\nColorPicker.displayName = \"ColorPicker\";\n","import React from \"react\";\nimport {\n View,\n Pressable,\n Image,\n ViewStyle,\n ImageStyle,\n DimensionValue,\n AnimatableNumericValue,\n AccessibilityRole,\n} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\n\nconst roleToAccessibilityRole: Record<string, AccessibilityRole> = {\n button: \"button\",\n link: \"link\",\n img: \"image\",\n image: \"image\",\n summary: \"summary\",\n switch: \"switch\",\n checkbox: \"checkbox\",\n radio: \"radio\",\n heading: \"header\",\n text: \"text\",\n search: \"search\",\n alert: \"alert\",\n none: \"none\",\n presentation: \"none\",\n progressbar: \"progressbar\",\n scrollbar: \"scrollbar\",\n adjustable: \"adjustable\",\n tab: \"tab\",\n menu: \"menu\",\n menuitem: \"menuitem\",\n list: \"list\",\n timer: \"timer\",\n};\n\n/** RN ViewStyle.gap is typed as number (Yoga gap), not DimensionValue. */\nconst toGapValue = (gap: number | string | undefined): number | undefined => {\n if (gap === undefined) return undefined;\n if (typeof gap === \"number\") return gap;\n const pxMatch = /^(\\d+(?:\\.\\d+)?)px$/.exec(gap);\n if (pxMatch) return Number(pxMatch[1]);\n const asNumber = Number(gap);\n return Number.isFinite(asNumber) ? asNumber : undefined;\n};\n\nexport const Box: React.FC<BoxProps> = ({\n children,\n onPress,\n onLayout,\n onMoveShouldSetResponder,\n onResponderGrant,\n onResponderMove,\n onResponderRelease,\n onResponderTerminate,\n backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius,\n borderStyle,\n height,\n padding,\n paddingHorizontal,\n paddingVertical,\n margin,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n flexShrink,\n gap,\n overflow,\n opacity,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\n disabled,\n \"data-testid\": dataTestId,\n testID,\n as,\n src,\n alt,\n ...rest\n}) => {\n const getContainerStyle = (pressed?: boolean): ViewStyle => ({\n backgroundColor:\n pressed && pressStyle?.backgroundColor\n ? pressStyle.backgroundColor\n : backgroundColor,\n borderColor,\n borderWidth,\n borderBottomWidth,\n borderBottomColor,\n borderTopWidth,\n borderTopColor,\n borderLeftWidth,\n borderLeftColor,\n borderRightWidth,\n borderRightColor,\n borderRadius: borderRadius as AnimatableNumericValue,\n borderStyle: borderStyle as ViewStyle[\"borderStyle\"],\n overflow,\n opacity: opacity ?? (disabled ? 0.5 : undefined),\n zIndex,\n height: height as DimensionValue,\n width: width as DimensionValue,\n minWidth: minWidth as DimensionValue,\n minHeight: minHeight as DimensionValue,\n maxWidth: maxWidth as DimensionValue,\n maxHeight: maxHeight as DimensionValue,\n padding: padding as DimensionValue,\n paddingHorizontal: paddingHorizontal as DimensionValue,\n paddingVertical: paddingVertical as DimensionValue,\n margin: margin as DimensionValue,\n marginTop: marginTop as DimensionValue,\n marginBottom: marginBottom as DimensionValue,\n marginLeft: marginLeft as DimensionValue,\n marginRight: marginRight as DimensionValue,\n flexDirection,\n flexWrap,\n alignItems,\n justifyContent,\n alignSelf,\n position: position as ViewStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n flex,\n flexShrink,\n gap: toGapValue(gap),\n ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Map web a11y props; drop the rest of the web-only attributes before\n // spreading onto RN hosts (unknown props warn at runtime).\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const {\n role,\n tabIndex,\n onKeyDown,\n onKeyUp,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": _ariaLabelledBy,\n \"aria-current\": _ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n className,\n \"data-testid\": _dataTestId,\n cursor: _cursor,\n type: _type,\n ...nativeRest\n } = rest as Record<string, unknown>;\n\n const accessibilityRole =\n (typeof role === \"string\" && roleToAccessibilityRole[role]) ||\n (as === \"button\" ? \"button\" : undefined);\n const isDisabled = Boolean(disabled || ariaDisabled);\n const accessibilityState = {\n disabled: isDisabled || undefined,\n busy: Boolean(ariaBusy) || undefined,\n };\n const accessibilityLiveRegion =\n ariaLive === \"polite\" || ariaLive === \"assertive\" ? ariaLive : undefined;\n\n // Handle as=\"img\" for React Native\n if (as === \"img\" && src) {\n const imageStyle: ImageStyle = {\n width: width as DimensionValue,\n height: height as DimensionValue,\n borderRadius: borderRadius as number,\n position: position as ImageStyle[\"position\"],\n top: top as DimensionValue,\n bottom: bottom as DimensionValue,\n left: left as DimensionValue,\n right: right as DimensionValue,\n ...(style as ImageStyle),\n };\n\n return (\n <Image\n source={{ uri: src }}\n style={imageStyle}\n testID={finalTestID}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : alt}\n resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n // Prefer Pressable whenever the node is interactive or explicitly a button,\n // so disabled / aria-disabled controls stay in the a11y tree as buttons.\n if (onPress || as === \"button\") {\n return (\n <Pressable\n onPress={!isDisabled && onPress ? onPress : undefined}\n disabled={isDisabled}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n style={({ pressed }) => getContainerStyle(pressed)}\n testID={finalTestID}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={\n typeof ariaLabel === \"string\" ? ariaLabel : undefined\n }\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </Pressable>\n );\n }\n\n return (\n <View\n style={getContainerStyle()}\n testID={finalTestID}\n onLayout={onLayout}\n onMoveShouldSetResponder={onMoveShouldSetResponder}\n onResponderGrant={onResponderGrant}\n onResponderMove={onResponderMove}\n onResponderRelease={onResponderRelease}\n onResponderTerminate={onResponderTerminate}\n accessibilityRole={accessibilityRole}\n accessibilityLabel={typeof ariaLabel === \"string\" ? ariaLabel : undefined}\n accessibilityState={accessibilityState}\n accessibilityLiveRegion={accessibilityLiveRegion}\n {...nativeRest}\n >\n {children}\n </View>\n );\n};\n","export * from \"./Box\";\nexport * from \"./Text\";\nexport * from \"./Spinner\";\nexport * from \"./Icon\";\nexport * from \"./Divider\";\nexport * from \"./Input\";\nexport * from \"./TextArea\";\nexport * from \"./LinearGradient\";\n\nexport const isWeb = false;\nexport const isNative = true;\n","import React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type ForwardedRef,\n} from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, isWeb, isNative } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme } from \"@xsolla/xui-core\";\nimport { createColorFromHsb, parseColor } from \"./colorUtils\";\nimport type { CustomColorAreaProps } from \"./types\";\nimport { clamp, snapValueToStep, useMergedRefs } from \"./utils\";\n\nexport const ColorPickerArea = forwardRef(function CustomColorArea(\n props: CustomColorAreaProps,\n ref: ForwardedRef<any>\n) {\n const {\n xChannelStep = 0.1,\n yChannelStep = 0.1,\n value,\n defaultValue,\n onChange,\n onChangeEnd,\n className,\n } = props;\n\n const { theme } = useResolvedTheme();\n const internalRef = useRef<any>(null);\n const containerRef = useMergedRefs(ref, internalRef);\n const [layout, setLayout] = useState({ width: 0, height: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const [currentColor, setCurrentColor] = useState(() => {\n const initialValue = value || defaultValue || \"#ffffff\";\n return parseColor(initialValue);\n });\n\n useEffect(() => {\n if (value !== undefined) {\n setCurrentColor(parseColor(value));\n }\n }, [value]);\n\n const hsb = currentColor.toHsb();\n const hue = hsb.h;\n\n const saturation = hsb.s * 100;\n const brightness = hsb.b * 100;\n const thumbX = (saturation / 100) * 100;\n const thumbY = 100 - (brightness / 100) * 100;\n\n const updateColor = useCallback(\n (x: number, y: number) => {\n const newSaturation = snapValueToStep(x * 100, 0, 100, xChannelStep);\n const newBrightness = snapValueToStep(\n (1 - y) * 100,\n 0,\n 100,\n yChannelStep\n );\n\n const newColor = createColorFromHsb(\n hue,\n newSaturation,\n newBrightness,\n hsb.a\n );\n setCurrentColor(newColor);\n onChange?.(newColor.toString());\n return newColor;\n },\n [hue, hsb.a, xChannelStep, yChannelStep, onChange]\n );\n\n // Web mouse handlers\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (isNative) return;\n setIsDragging(true);\n const rect = e.currentTarget.getBoundingClientRect();\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n const y = clamp((e.clientY - rect.top) / rect.height, 0, 1);\n updateColor(x, y);\n },\n [updateColor]\n );\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging || isNative) return;\n const rect = (internalRef.current as any)?.getBoundingClientRect?.();\n if (!rect) return;\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n const y = clamp((e.clientY - rect.top) / rect.height, 0, 1);\n updateColor(x, y);\n },\n [isDragging, updateColor]\n );\n\n const handleMouseUp = useCallback(() => {\n if (isDragging) {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }\n }, [isDragging, currentColor, onChangeEnd]);\n\n useEffect(() => {\n if (isWeb && isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n // Native responder handlers\n const handleResponderMove = useCallback(\n (e: any) => {\n const { locationX, locationY } = e.nativeEvent;\n const x = clamp(locationX / layout.width, 0, 1);\n const y = clamp(locationY / layout.height, 0, 1);\n updateColor(x, y);\n },\n [layout, updateColor]\n );\n\n const handleResponderRelease = useCallback(() => {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }, [currentColor, onChangeEnd]);\n\n const gradientStyle = isWeb\n ? {\n background: `linear-gradient(to top,\n hsl(${hue}, 100%, 0%),\n hsl(${hue}, 100%, 50%)),\n linear-gradient(to right,\n hsla(${hue}, 0%, 50%, 1),\n hsla(${hue}, 100%, 50%, 1))`,\n }\n : {\n backgroundColor: `hsl(${hue}, 100%, 50%)`, // Fallback for native without LinearGradient\n };\n\n const thumbColor = currentColor.toString(\"hex\");\n\n return (\n <Box\n data-testid=\"color-picker-color-area\"\n ref={containerRef}\n className={className}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n height={240}\n cursor=\"pointer\"\n position=\"relative\"\n style={gradientStyle as any}\n onMouseDown={handleMouseDown}\n onLayout={(e: any) => {\n if (isNative) {\n setLayout(e.nativeEvent.layout);\n }\n }}\n onMoveShouldSetResponder={() => isNative}\n onResponderGrant={(e: any) => {\n setIsDragging(true);\n handleResponderMove(e);\n }}\n onResponderMove={handleResponderMove}\n onResponderRelease={handleResponderRelease}\n onResponderTerminate={handleResponderRelease}\n >\n <Box width=\"100%\" height=\"100%\" position=\"relative\">\n <Box\n data-testid=\"color-picker-color-area-thumb\"\n position=\"absolute\"\n width={16}\n height={16}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n borderWidth={2}\n borderColor=\"#ffffff\"\n style={\n {\n left: `${thumbX}%`,\n top: `${thumbY}%`,\n transform: isWeb\n ? \"translate(-50%, -50%)\"\n : ([{ translateX: -8 }, { translateY: -8 }] as any),\n backgroundColor: thumbColor,\n boxShadow: \"0 0 4px rgba(0,0,0,0.3)\",\n } as any\n }\n />\n </Box>\n </Box>\n );\n});\n","export type ColorChannel =\n | \"hue\"\n | \"saturation\"\n | \"brightness\"\n | \"lightness\"\n | \"red\"\n | \"green\"\n | \"blue\"\n | \"alpha\";\n\nexport interface ColorValue {\n getChannelValue(channel: ColorChannel): number;\n setChannelValue(channel: ColorChannel, value: number): ColorValue;\n getChannelRange(channel: ColorChannel): {\n minValue: number;\n maxValue: number;\n step: number;\n pageSize: number;\n };\n getColorChannels(): ColorChannel[];\n toFormat(format: string): string;\n toString(format?: string): string;\n toHsb(): { h: number; s: number; b: number; a: number };\n toRgb(): { r: number; g: number; b: number; a: number };\n toHsl(): { h: number; s: number; l: number; a: number };\n}\n\nfunction hsbToRgb(h: number, s: number, b: number, a: number = 1) {\n s /= 100;\n b /= 100;\n const k = (n: number) => (n + h / 60) % 6;\n const f = (n: number) =>\n b * (1 - s * Math.max(0, Math.min(k(n), 4 - k(n), 1)));\n return {\n r: Math.round(255 * f(5)),\n g: Math.round(255 * f(3)),\n b: Math.round(255 * f(1)),\n a,\n };\n}\n\nfunction rgbToHsb(r: number, g: number, b: number, a: number = 1) {\n r /= 255;\n g /= 255;\n b /= 255;\n const v = Math.max(r, g, b);\n const n = v - Math.min(r, g, b);\n const h =\n n === 0\n ? 0\n : n && v === r\n ? (g - b) / n\n : v === g\n ? 2 + (b - r) / n\n : 4 + (r - g) / n;\n return {\n h: Math.round(60 * (h < 0 ? h + 6 : h)),\n s: Math.round(v && (n / v) * 100),\n b: Math.round(v * 100),\n a,\n };\n}\n\nfunction rgbToHex(r: number, g: number, b: number, a: number = 1) {\n const toHex = (n: number) => n.toString(16).padStart(2, \"0\");\n const alpha = a === 1 ? \"\" : toHex(Math.round(a * 255));\n return `#${toHex(r)}${toHex(g)}${toHex(b)}${alpha}`.toUpperCase();\n}\n\nfunction hexToRgb(hex: string) {\n hex = hex.replace(/^#/, \"\");\n if (hex.length === 3)\n hex = hex\n .split(\"\")\n .map((s) => s + s)\n .join(\"\");\n if (hex.length === 4)\n hex = hex\n .split(\"\")\n .map((s) => s + s)\n .join(\"\");\n\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n const a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1;\n\n return { r, g, b, a: parseFloat(a.toFixed(2)) };\n}\n\nfunction rgbToHsl(r: number, g: number, b: number, a: number = 1) {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h = 0,\n s = 0,\n l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n a,\n };\n}\n\nclass ColorValueImpl implements ColorValue {\n private h: number;\n private s: number;\n private b: number;\n private a: number;\n\n constructor(h: number, s: number, b: number, a: number = 1) {\n this.h = h;\n this.s = s;\n this.b = b;\n this.a = a;\n }\n\n getChannelValue(channel: ColorChannel): number {\n switch (channel) {\n case \"hue\":\n return this.h;\n case \"saturation\":\n return this.s;\n case \"brightness\":\n return this.b;\n case \"alpha\":\n return this.a;\n case \"red\":\n return hsbToRgb(this.h, this.s, this.b, this.a).r;\n case \"green\":\n return hsbToRgb(this.h, this.s, this.b, this.a).g;\n case \"blue\":\n return hsbToRgb(this.h, this.s, this.b, this.a).b;\n case \"lightness\":\n return rgbToHsl(\n hsbToRgb(this.h, this.s, this.b, this.a).r,\n hsbToRgb(this.h, this.s, this.b, this.a).g,\n hsbToRgb(this.h, this.s, this.b, this.a).b\n ).l;\n default:\n return 0;\n }\n }\n\n setChannelValue(channel: ColorChannel, value: number): ColorValue {\n if (channel === \"hue\")\n return new ColorValueImpl(value, this.s, this.b, this.a);\n if (channel === \"saturation\")\n return new ColorValueImpl(this.h, value, this.b, this.a);\n if (channel === \"brightness\")\n return new ColorValueImpl(this.h, this.s, value, this.a);\n if (channel === \"alpha\")\n return new ColorValueImpl(this.h, this.s, this.b, value);\n\n // For RGB/HSL channels, convert to RGB, update, then back to HSB\n const rgb = hsbToRgb(this.h, this.s, this.b, this.a);\n if (channel === \"red\") rgb.r = value;\n else if (channel === \"green\") rgb.g = value;\n else if (channel === \"blue\") rgb.b = value;\n\n const hsb = rgbToHsb(rgb.r, rgb.g, rgb.b, rgb.a);\n return new ColorValueImpl(hsb.h, hsb.s, hsb.b, hsb.a);\n }\n\n getChannelRange(channel: ColorChannel) {\n switch (channel) {\n case \"hue\":\n return { minValue: 0, maxValue: 360, step: 1, pageSize: 15 };\n case \"alpha\":\n return { minValue: 0, maxValue: 1, step: 0.01, pageSize: 0.1 };\n case \"red\":\n case \"green\":\n case \"blue\":\n return { minValue: 0, maxValue: 255, step: 1, pageSize: 17 };\n default:\n return { minValue: 0, maxValue: 100, step: 1, pageSize: 10 };\n }\n }\n\n getColorChannels(): ColorChannel[] {\n return [\"red\", \"green\", \"blue\"];\n }\n\n toFormat(format: string): string {\n const rgb = hsbToRgb(this.h, this.s, this.b, this.a);\n if (format === \"hex\" || format === \"hexa\")\n return rgbToHex(rgb.r, rgb.g, rgb.b, this.a);\n if (format === \"rgb\") return `rgb(${rgb.r}, ${rgb.g}, ${rgb.b})`;\n if (format === \"rgba\")\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${this.a})`;\n if (format === \"hsl\") {\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n return `hsl(${hsl.h}, ${hsl.s}%, ${hsl.l}%)`;\n }\n if (format === \"hsla\") {\n const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);\n return `hsla(${hsl.h}, ${hsl.s}%, ${hsl.l}%, ${this.a})`;\n }\n if (format === \"hsb\") return `hsb(${this.h}, ${this.s}%, ${this.b}%)`;\n if (format === \"hsba\")\n return `hsba(${this.h}, ${this.s}%, ${this.b}%, ${this.a})`;\n return rgbToHex(rgb.r, rgb.g, rgb.b, this.a);\n }\n\n toString(format?: string): string {\n return this.toFormat(format || \"hex\");\n }\n\n toHsb() {\n return { h: this.h, s: this.s / 100, b: this.b / 100, a: this.a };\n }\n toRgb() {\n return hsbToRgb(this.h, this.s, this.b, this.a);\n }\n toHsl() {\n const rgb = this.toRgb();\n return rgbToHsl(rgb.r, rgb.g, rgb.b, this.a);\n }\n}\n\nexport function parseColor(color: string): ColorValue {\n if (color.startsWith(\"#\")) {\n const rgb = hexToRgb(color);\n const hsb = rgbToHsb(rgb.r, rgb.g, rgb.b, rgb.a);\n return new ColorValueImpl(hsb.h, hsb.s, hsb.b, hsb.a);\n }\n // Basic support for hsb/rgb/hsl strings if needed, otherwise default to white\n return new ColorValueImpl(0, 0, 100, 1);\n}\n\nexport function createColorFromHsb(\n h: number,\n s: number,\n b: number,\n a: number = 1\n): ColorValue {\n return new ColorValueImpl(h, s, b, a);\n}\n","import { useRef, useEffect, useState, useCallback } from \"react\";\n\nexport function clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nexport function snapValueToStep(\n value: number,\n min: number | undefined,\n max: number | undefined,\n step: number\n): number {\n const remainder = (value - (min ?? 0)) % step;\n let snappedValue =\n Math.abs(remainder) * 2 >= step\n ? value + Math.sign(remainder) * (step - Math.abs(remainder))\n : value - remainder;\n\n if (min !== undefined && snappedValue < min) {\n snappedValue = min;\n } else if (max !== undefined && snappedValue > max) {\n snappedValue = max;\n }\n\n return snappedValue;\n}\n\nexport function useMergedRefs<T>(...refs: Array<any>) {\n return useCallback((node: T) => {\n refs.forEach((ref) => {\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref != null) {\n ref.current = node;\n }\n });\n }, refs);\n}\n\nexport function useUpdatableState<T>(\n updater: (prevState: T | undefined) => T,\n deps: any[],\n initialUpdate = false\n): [T, (value: T) => void] {\n const [state, setState] = useState<T>(() => updater(undefined));\n const isFirstRender = useRef(true);\n\n useEffect(() => {\n if (isFirstRender.current && !initialUpdate) {\n isFirstRender.current = false;\n return;\n }\n setState(updater);\n }, deps);\n\n return [state, setState];\n}\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box, isWeb, isNative } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, type ThemeOverrideProps } from \"@xsolla/xui-core\";\nimport { createColorFromHsb, parseColor } from \"./colorUtils\";\nimport { clamp, snapValueToStep } from \"./utils\";\n\ntype ColorPickerSliderProps = {\n channel: \"hue\" | \"alpha\";\n value: string;\n onChange?: (color: string) => void;\n onChangeEnd?: (color: string) => void;\n testID?: string;\n};\n\nexport const ColorPickerSlider: React.FC<\n ColorPickerSliderProps & ThemeOverrideProps\n> = ({\n channel,\n value,\n onChange,\n onChangeEnd,\n testID,\n themeMode,\n themeProductContext,\n}) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n const trackRef = useRef<any>(null);\n const [layout, setLayout] = useState({ width: 0, height: 0 });\n const [isDragging, setIsDragging] = useState(false);\n const currentColor = parseColor(value);\n const hsb = currentColor.toHsb();\n\n const getChannelValue = () => {\n if (channel === \"hue\") return hsb.h;\n return hsb.a * 100;\n };\n\n const getMaxValue = () => (channel === \"hue\" ? 360 : 100);\n\n const channelValue = getChannelValue();\n const maxValue = getMaxValue();\n const thumbPosition = (channelValue / maxValue) * 100;\n\n const updateColor = useCallback(\n (x: number) => {\n const newValue = snapValueToStep(x * maxValue, 0, maxValue, 1);\n let newColor;\n if (channel === \"hue\") {\n newColor = createColorFromHsb(\n newValue,\n hsb.s * 100,\n hsb.b * 100,\n hsb.a\n );\n } else {\n newColor = createColorFromHsb(\n hsb.h,\n hsb.s * 100,\n hsb.b * 100,\n newValue / 100\n );\n }\n onChange?.(newColor.toString());\n return newColor;\n },\n [channel, maxValue, hsb, onChange]\n );\n\n // Web mouse handlers\n const handleMouseDown = useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n if (isNative) return;\n setIsDragging(true);\n const rect = e.currentTarget.getBoundingClientRect();\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n updateColor(x);\n },\n [updateColor]\n );\n\n const handleMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isDragging || isNative) return;\n const rect = (trackRef.current as any)?.getBoundingClientRect?.();\n if (!rect) return;\n const x = clamp((e.clientX - rect.left) / rect.width, 0, 1);\n updateColor(x);\n },\n [isDragging, updateColor]\n );\n\n const handleMouseUp = useCallback(() => {\n if (isDragging) {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }\n }, [isDragging, currentColor, onChangeEnd]);\n\n useEffect(() => {\n if (isWeb && isDragging) {\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n return () => {\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n }\n }, [isDragging, handleMouseMove, handleMouseUp]);\n\n // Native responder handlers\n const handleResponderMove = useCallback(\n (e: any) => {\n const { locationX } = e.nativeEvent;\n const x = clamp(locationX / layout.width, 0, 1);\n updateColor(x);\n },\n [layout, updateColor]\n );\n\n const handleResponderRelease = useCallback(() => {\n setIsDragging(false);\n onChangeEnd?.(currentColor.toString());\n }, [currentColor, onChangeEnd]);\n\n const getGradient = () => {\n if (channel === \"hue\") {\n return \"linear-gradient(to right, #ff0000 0%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%)\";\n }\n const colorHex = currentColor.toString(\"hex\");\n return `linear-gradient(to right, transparent 0%, ${colorHex} 100%)`;\n };\n\n const thumbColor =\n channel === \"hue\"\n ? createColorFromHsb(channelValue, 100, 100, 1).toString(\"hex\")\n : currentColor.toString(\"hex\");\n\n return (\n <Box\n testID={testID}\n height={12}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n position=\"relative\"\n style={\n isWeb\n ? { background: getGradient() }\n : ({ backgroundColor: theme.colors.background.primary } as any)\n }\n onLayout={(e: any) => {\n if (isNative) {\n setLayout(e.nativeEvent.layout);\n }\n }}\n onMouseDown={handleMouseDown}\n onMoveShouldSetResponder={() => isNative}\n onResponderGrant={(e: any) => {\n setIsDragging(true);\n handleResponderMove(e);\n }}\n onResponderMove={handleResponderMove}\n onResponderRelease={handleResponderRelease}\n onResponderTerminate={handleResponderRelease}\n >\n <Box ref={trackRef} width=\"100%\" height=\"100%\" position=\"relative\">\n <Box\n position=\"absolute\"\n width={16}\n height={16}\n borderRadius={theme.shape.contextMenu.lg.borderRadius}\n borderWidth={2}\n borderColor=\"#ffffff\"\n style={\n {\n left: `${thumbPosition}%`,\n top: \"50%\",\n transform: isWeb\n ? \"translate(-50%, -50%)\"\n : ([{ translateX: -8 }, { translateY: -8 }] as any),\n backgroundColor: thumbColor,\n boxShadow: \"0 0 4px rgba(0,0,0,0.3)\",\n } as any\n }\n />\n </Box>\n </Box>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Input } from \"@xsolla/xui-input\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport type { ColorChannel, ColorValue } from \"./colorUtils\";\n\ntype ColorPickerInputProps = {\n value: ColorValue;\n valueType: \"number\" | \"percentage\";\n channel: ColorChannel;\n onChange: (color: string) => void;\n};\n\nexport const ColorPickerInput: React.FC<ColorPickerInputProps> = ({\n value,\n valueType,\n channel,\n onChange,\n}) => {\n const channelValue = value.getChannelValue(channel);\n const channelRange = value.getChannelRange(channel);\n const intValue = channel === \"alpha\" ? channelValue * 100 : channelValue;\n const roundedValue = Math.round(intValue);\n\n const [inputValue, setInputValue] = useState(String(roundedValue));\n\n useEffect(() => {\n setInputValue(String(roundedValue));\n }, [roundedValue]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const text = e.target.value.replace(/[^0-9]/g, \"\");\n setInputValue(text);\n\n const parsedValue = parseInt(text, 10);\n if (!isNaN(parsedValue)) {\n const min = channel === \"alpha\" ? 0 : channelRange.minValue;\n const max = channel === \"alpha\" ? 100 : channelRange.maxValue;\n\n const clampedValue = Math.min(Math.max(parsedValue, min), max);\n const colorValue =\n channel === \"alpha\" ? clampedValue / 100 : clampedValue;\n\n const newColor = value.setChannelValue(channel, colorValue);\n onChange(newColor.toString());\n }\n };\n\n const handleBlur = () => {\n setInputValue(String(roundedValue));\n };\n\n return (\n <Box flex={1} minWidth={40}>\n <Input\n size=\"sm\"\n value={valueType === \"percentage\" ? `${inputValue}%` : inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n </Box>\n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Input } from \"@xsolla/xui-input\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { parseColor } from \"./colorUtils\";\n\ntype ColorPickerHexInputProps = {\n value: string;\n onChange: (color: string) => void;\n};\n\nexport const ColorPickerHexInput: React.FC<ColorPickerHexInputProps> = ({\n value,\n onChange,\n}) => {\n const [inputValue, setInputValue] = useState(value);\n\n useEffect(() => {\n setInputValue(value);\n }, [value]);\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n\n try {\n const color = parseColor(newValue);\n if (color) {\n onChange(color.toString(\"hex\"));\n }\n } catch {\n // Invalid color\n }\n };\n\n const handleBlur = () => {\n try {\n const color = parseColor(inputValue);\n if (color) {\n onChange(color.toString(\"hex\"));\n } else {\n setInputValue(value);\n }\n } catch {\n setInputValue(value);\n }\n };\n\n return (\n <Box flex={1}>\n <Input\n size=\"sm\"\n value={inputValue}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n </Box>\n );\n};\n","import React from \"react\";\nimport { IconButton } from \"@xsolla/xui-button\";\nimport { parseColor } from \"./colorUtils\";\n\nconst DropletIcon = () => (\n <svg\n viewBox=\"0 0 24 24\"\n width={18}\n height={18}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5s-3 3.5-3 5.5a7 7 0 0 0 7 7z\" />\n </svg>\n);\n\ndeclare let EyeDropper: {\n new (): {\n open(): Promise<{ sRGBHex: string }>;\n };\n};\n\ntype Props = {\n onColorPick: (color: string) => void;\n};\n\nexport const ColorPickerEyedropper: React.FC<Props> = ({ onColorPick }) => {\n const onEyedropperButtonClick = () => {\n if (typeof EyeDropper !== \"undefined\") {\n new EyeDropper().open().then((result) => {\n const pickedColor = parseColor(result.sRGBHex);\n const hsb = pickedColor.toHsb();\n const hsbString = `hsb(${Math.round(hsb.h)}, ${Math.round(hsb.s * 100)}%, ${Math.round(hsb.b * 100)}%)`;\n onColorPick(hsbString);\n });\n }\n };\n\n if (typeof EyeDropper === \"undefined\") return null;\n\n return (\n <IconButton\n size=\"sm\"\n variant=\"secondary\"\n tone=\"mono\"\n onPress={onEyedropperButtonClick}\n icon={<DropletIcon />}\n aria-label=\"Pick color from screen\"\n />\n );\n};\n"],"mappings":"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","names":["import_react","import_xui_button","import_xui_core","import_react","import_jsx_runtime","import_react","import_xui_core","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_xui_input","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
package/native/index.mjs CHANGED
@@ -1069,7 +1069,7 @@ var ColorPicker = forwardRef2(
1069
1069
  {
1070
1070
  ref,
1071
1071
  testID,
1072
- backgroundColor: theme.colors.background.secondary,
1072
+ backgroundColor: theme.colors.layer.float,
1073
1073
  borderRadius: theme.shape.contextMenu.lg.borderRadius,
1074
1074
  padding: 16,
1075
1075
  gap: 16,