@xsolla/xui-color-picker 0.160.2 → 0.161.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/native/index.js +12 -10
- package/native/index.js.map +1 -1
- package/native/index.mjs +11 -9
- package/native/index.mjs.map +1 -1
- package/package.json +6 -6
- package/web/index.js +12 -10
- package/web/index.js.map +1 -1
- package/web/index.mjs +11 -9
- package/web/index.mjs.map +1 -1
package/native/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../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":["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={8}\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} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\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 alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\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 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 alignItems,\n justifyContent,\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 ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\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 className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\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 resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\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 {...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 {...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 { 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 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={8}\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={8}\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\n// Basic color conversion functions\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 /** Test ID for testing frameworks */\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={6}\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={8}\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":["forwardRef","useRef","useState","IconButton","useResolvedTheme","isNative","useCallback","useEffect","useRef","useState","jsx","useRef","useState","useEffect","useCallback","useCallback","useEffect","useRef","useState","jsx","useRef","useState","useCallback","useEffect","useEffect","useState","jsx","useState","useEffect","useEffect","useState","Input","jsx","useState","useEffect","Input","jsx","jsx","forwardRef","useResolvedTheme","useRef","useState","isNative","IconButton"]}
|
|
1
|
+
{"version":3,"sources":["../../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":["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} from \"react-native\";\nimport { BoxProps } from \"@xsolla/xui-primitives-core\";\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 alignItems,\n justifyContent,\n position,\n top,\n bottom,\n left,\n right,\n width,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n flex,\n overflow,\n zIndex,\n hoverStyle,\n pressStyle,\n style,\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 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 alignItems,\n justifyContent,\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 ...(style as ViewStyle),\n });\n\n const finalTestID = dataTestId || testID;\n\n // Destructure and drop web-only props from rest before passing to RN components\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 className,\n \"data-testid\": _dataTestId,\n ...nativeRest\n } = rest as Record<string, unknown>;\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 resizeMode=\"cover\"\n {...nativeRest}\n />\n );\n }\n\n if (onPress) {\n return (\n <Pressable\n onPress={onPress}\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 {...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 {...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\n// Basic color conversion functions\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 /** Test ID for testing frameworks */\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":["forwardRef","useRef","useState","IconButton","useResolvedTheme","isNative","useCallback","useEffect","useRef","useState","jsx","useRef","useState","useEffect","useCallback","useCallback","useEffect","useRef","useState","useResolvedTheme","jsx","useResolvedTheme","useRef","useState","useCallback","useEffect","useEffect","useState","jsx","useState","useEffect","useEffect","useState","Input","jsx","useState","useEffect","Input","jsx","jsx","forwardRef","useResolvedTheme","useRef","useState","isNative","IconButton"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsolla/xui-color-picker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.161.0",
|
|
4
4
|
"main": "./web/index.js",
|
|
5
5
|
"module": "./web/index.mjs",
|
|
6
6
|
"types": "./web/index.d.ts",
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
"test:coverage": "vitest run --coverage"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@xsolla/xui-button": "0.
|
|
17
|
-
"@xsolla/xui-core": "0.
|
|
18
|
-
"@xsolla/xui-input": "0.
|
|
19
|
-
"@xsolla/xui-primitives-core": "0.
|
|
20
|
-
"@xsolla/xui-select": "0.
|
|
16
|
+
"@xsolla/xui-button": "0.161.0",
|
|
17
|
+
"@xsolla/xui-core": "0.161.0",
|
|
18
|
+
"@xsolla/xui-input": "0.161.0",
|
|
19
|
+
"@xsolla/xui-primitives-core": "0.161.0",
|
|
20
|
+
"@xsolla/xui-select": "0.161.0"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"react": ">=16.8.0"
|
package/web/index.js
CHANGED
|
@@ -299,10 +299,11 @@ var isNative = false;
|
|
|
299
299
|
// src/ColorPicker.tsx
|
|
300
300
|
var import_xui_select = require("@xsolla/xui-select");
|
|
301
301
|
var import_xui_button2 = require("@xsolla/xui-button");
|
|
302
|
-
var
|
|
302
|
+
var import_xui_core3 = require("@xsolla/xui-core");
|
|
303
303
|
|
|
304
304
|
// src/ColorPickerArea.tsx
|
|
305
305
|
var import_react4 = require("react");
|
|
306
|
+
var import_xui_core = require("@xsolla/xui-core");
|
|
306
307
|
|
|
307
308
|
// src/colorUtils.ts
|
|
308
309
|
function hsbToRgb(h, s, b, a = 1) {
|
|
@@ -544,6 +545,7 @@ var ColorPickerArea = (0, import_react4.forwardRef)(function CustomColorArea(pro
|
|
|
544
545
|
onChangeEnd,
|
|
545
546
|
className
|
|
546
547
|
} = props;
|
|
548
|
+
const { theme } = (0, import_xui_core.useResolvedTheme)();
|
|
547
549
|
const internalRef = (0, import_react4.useRef)(null);
|
|
548
550
|
const containerRef = useMergedRefs(ref, internalRef);
|
|
549
551
|
const [layout, setLayout] = (0, import_react4.useState)({ width: 0, height: 0 });
|
|
@@ -653,7 +655,7 @@ var ColorPickerArea = (0, import_react4.forwardRef)(function CustomColorArea(pro
|
|
|
653
655
|
"data-testid": "color-picker-color-area",
|
|
654
656
|
ref: containerRef,
|
|
655
657
|
className,
|
|
656
|
-
borderRadius:
|
|
658
|
+
borderRadius: theme.shape.contextMenu.lg.borderRadius,
|
|
657
659
|
height: 240,
|
|
658
660
|
cursor: "pointer",
|
|
659
661
|
position: "relative",
|
|
@@ -679,7 +681,7 @@ var ColorPickerArea = (0, import_react4.forwardRef)(function CustomColorArea(pro
|
|
|
679
681
|
position: "absolute",
|
|
680
682
|
width: 16,
|
|
681
683
|
height: 16,
|
|
682
|
-
borderRadius:
|
|
684
|
+
borderRadius: theme.shape.contextMenu.lg.borderRadius,
|
|
683
685
|
borderWidth: 2,
|
|
684
686
|
borderColor: "#ffffff",
|
|
685
687
|
style: {
|
|
@@ -697,7 +699,7 @@ var ColorPickerArea = (0, import_react4.forwardRef)(function CustomColorArea(pro
|
|
|
697
699
|
|
|
698
700
|
// src/ColorPickerSlider.tsx
|
|
699
701
|
var import_react5 = require("react");
|
|
700
|
-
var
|
|
702
|
+
var import_xui_core2 = require("@xsolla/xui-core");
|
|
701
703
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
702
704
|
var ColorPickerSlider = ({
|
|
703
705
|
channel,
|
|
@@ -708,7 +710,7 @@ var ColorPickerSlider = ({
|
|
|
708
710
|
themeMode,
|
|
709
711
|
themeProductContext
|
|
710
712
|
}) => {
|
|
711
|
-
const { theme } = (0,
|
|
713
|
+
const { theme } = (0, import_xui_core2.useResolvedTheme)({ themeMode, themeProductContext });
|
|
712
714
|
const trackRef = (0, import_react5.useRef)(null);
|
|
713
715
|
const [layout, setLayout] = (0, import_react5.useState)({ width: 0, height: 0 });
|
|
714
716
|
const [isDragging, setIsDragging] = (0, import_react5.useState)(false);
|
|
@@ -807,7 +809,7 @@ var ColorPickerSlider = ({
|
|
|
807
809
|
{
|
|
808
810
|
testID,
|
|
809
811
|
height: 12,
|
|
810
|
-
borderRadius:
|
|
812
|
+
borderRadius: theme.shape.contextMenu.lg.borderRadius,
|
|
811
813
|
position: "relative",
|
|
812
814
|
style: isWeb ? { background: getGradient() } : { backgroundColor: theme.colors.background.primary },
|
|
813
815
|
onLayout: (e) => {
|
|
@@ -830,7 +832,7 @@ var ColorPickerSlider = ({
|
|
|
830
832
|
position: "absolute",
|
|
831
833
|
width: 16,
|
|
832
834
|
height: 16,
|
|
833
|
-
borderRadius:
|
|
835
|
+
borderRadius: theme.shape.contextMenu.lg.borderRadius,
|
|
834
836
|
borderWidth: 2,
|
|
835
837
|
borderColor: "#ffffff",
|
|
836
838
|
style: {
|
|
@@ -1047,7 +1049,7 @@ var ColorPicker = (0, import_react8.forwardRef)(
|
|
|
1047
1049
|
themeMode,
|
|
1048
1050
|
themeProductContext
|
|
1049
1051
|
}, ref) => {
|
|
1050
|
-
const { theme } = (0,
|
|
1052
|
+
const { theme } = (0, import_xui_core3.useResolvedTheme)({ themeMode, themeProductContext });
|
|
1051
1053
|
const prevColorRef = (0, import_react8.useRef)(propValue);
|
|
1052
1054
|
const [innerValue, setInnerValue] = useUpdatableState(
|
|
1053
1055
|
(prevState) => {
|
|
@@ -1085,7 +1087,7 @@ var ColorPicker = (0, import_react8.forwardRef)(
|
|
|
1085
1087
|
handleChange(innerValue.toString(), newFormat);
|
|
1086
1088
|
};
|
|
1087
1089
|
const onCopy = async () => {
|
|
1088
|
-
if (
|
|
1090
|
+
if (import_xui_core3.isNative) {
|
|
1089
1091
|
console.warn("Clipboard not yet implemented for native");
|
|
1090
1092
|
return;
|
|
1091
1093
|
}
|
|
@@ -1109,7 +1111,7 @@ var ColorPicker = (0, import_react8.forwardRef)(
|
|
|
1109
1111
|
ref,
|
|
1110
1112
|
testID,
|
|
1111
1113
|
backgroundColor: theme.colors.background.secondary,
|
|
1112
|
-
borderRadius:
|
|
1114
|
+
borderRadius: theme.shape.contextMenu.lg.borderRadius,
|
|
1113
1115
|
padding: 16,
|
|
1114
1116
|
gap: 16,
|
|
1115
1117
|
width: 312,
|