@sanity/color-input
6.1.36.1.4
dist/ColorInput-CMhbbfkK.js.map+
dist/ColorInput-CMhbbfkK.js.mapNew file+1
Index: package/dist/ColorInput-CMhbbfkK.js.map
===================================================================
--- package/dist/ColorInput-CMhbbfkK.js.map
+++ package/dist/ColorInput-CMhbbfkK.js.map
@@ -0,0 +1,1 @@
+{"version":3,"file":"ColorInput-CMhbbfkK.js","names":["<Flex {...props} className={colorListWrap} />","<div {...props} className={colorBoxContainer} />","{backgroundColor}: {backgroundColor: string}","assignInlineVars({[swatchBackgroundVar]: backgroundColor})","<div className={colorBox} style={assignInlineVars({[swatchBackgroundVar]: backgroundColor})} />","{colors, onChange}: ColorListProps","validateColors(colors).map(({key, color, backgroundColor}) => (\n <ColorBoxContainer\n key={key}\n onClick={() => {\n onChange(color)\n }}\n >\n <ColorBox backgroundColor={backgroundColor} />\n </ColorBoxContainer>\n ))","({key, color, backgroundColor}) => (\n <ColorBoxContainer\n key={key}\n onClick={() => {\n onChange(color)\n }}\n >\n <ColorBox backgroundColor={backgroundColor} />\n </ColorBoxContainer>\n )","{key, color, backgroundColor}","<ColorListWrap wrap=\"wrap\">\n {validateColors(colors).map(({key, color, backgroundColor}) => (\n <ColorBoxContainer\n key={key}\n onClick={() => {\n onChange(color)\n }}\n >\n <ColorBox backgroundColor={backgroundColor} />\n </ColorBoxContainer>\n ))}\n </ColorListWrap>","{\n white = 'transparent',\n grey = 'rgba(0,0,0,.08)',\n size = 8,\n renderers = EMPTY_RENDERERS,\n borderRadius,\n boxShadow,\n}: CheckboardProps","white = 'transparent'","grey = 'rgba(0,0,0,.08)'","size = 8","renderers = EMPTY_RENDERERS","checkboardHelper.get(white, grey, size, renderers.canvas)","canvas","assignInlineVars({\n [borderRadiusVar]: borderRadius,\n [boxShadowVar]: boxShadow,\n [backgroundImageVar]: background ? `url(${background}) center left` : undefined,\n })","background ? `url(${background}) center left` : undefined","<div\n className={checkboard}\n style={assignInlineVars({\n [borderRadiusVar]: borderRadius,\n [boxShadowVar]: boxShadow,\n [backgroundImageVar]: background ? `url(${background}) center left` : undefined,\n })}\n />","() => window","() => {\n const target = enabled ? targetRef.current : null\n if (!target) {\n return () => {}\n }\n\n const controller = new AbortController()\n let dragController: AbortController | null = null\n\n target.addEventListener(\n 'mousedown',\n (event) => {\n if (!onDragStart(event)) {\n return\n }\n dragController?.abort()\n dragController = new AbortController()\n const {signal} = dragController\n const targetWindow = getWindow()\n targetWindow.addEventListener('mousemove', (moveEvent) => onDrag(moveEvent), {signal})\n targetWindow.addEventListener('mouseup', () => dragController?.abort(), {signal})\n },\n {signal: controller.signal},\n )\n\n return () => {\n controller.abort()\n dragController?.abort()\n }\n }","targetRef.current","() => {}","[enabled, targetRef]","{\n rgb,\n hsl,\n a,\n direction,\n radius,\n shadow,\n renderers,\n onChange,\n}: AlphaProps","(event: PickerEvent) => {\n const containerEl = containerRef.current\n if (!containerEl) {\n return\n }\n const change = alpha.calculateChange(event, hsl, direction, a, containerEl)\n if (change && typeof onChange === 'function') {\n onChange(change)\n }\n }","(event) => {\n handleChange(event)\n return true\n }","event","{\n onDragStart: (event) => {\n handleChange(event)\n return true\n },\n onDrag: handleChange,\n }","assignInlineVars({\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [gradientVar]: gradient,\n [pointerLeftVar]: pointerDirection === 'horizontal' ? `${alphaValue * 100}%` : undefined,\n [pointerTopVar]: pointerDirection === 'vertical' ? `${alphaValue * 100}%` : undefined,\n })","pointerDirection === 'horizontal' ? `${alphaValue * 100}%` : undefined","pointerDirection === 'vertical' ? `${alphaValue * 100}%` : undefined","<div className={checkboardLayer}>\n <Checkboard renderers={renderers} />\n </div>","<div className={gradientLayer} />","<div className={pointerKnob} />","<div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>","pointer[pointerDirection]","<div\n className={container}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>\n </div>","<div\n className={root}\n style={assignInlineVars({\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [gradientVar]: gradient,\n [pointerLeftVar]: pointerDirection === 'horizontal' ? `${alphaValue * 100}%` : undefined,\n [pointerTopVar]: pointerDirection === 'vertical' ? `${alphaValue * 100}%` : undefined,\n })}\n >\n <div className={checkboardLayer}>\n <Checkboard renderers={renderers} />\n </div>\n <div className={gradientLayer} />\n <div\n className={container}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>\n </div>\n </div>","{\n label,\n value: valueProp,\n arrowOffset,\n placeholder,\n hideLabel,\n dragLabel,\n dragMax,\n onChange,\n}: EditableInputProps","normalizeDisplayValue(valueProp)","() => {\n const nextValue = normalizeDisplayValue(valueProp)\n if (nextValue === inputValue) {\n // The prop caught up with what's displayed — drop any blur-sync value\n // captured from an older prop so blur doesn't restore it.\n startTransition(() => {\n setBlurValue('')\n })\n return\n }\n\n const isFocused = inputRef.current === document.activeElement\n\n if (isFocused) {\n setBlurValue(nextValue)\n return\n }\n\n setInputValue(nextValue)\n setBlurValue((currentBlurValue) => (currentBlurValue ? '' : nextValue))\n }","[inputValue, valueProp]","() => {\n if (blurValue) {\n // Restore from the prop rather than the stored value: the transition\n // that clears a stale `blurValue` may not have committed yet, but\n // `valueProp` is always current — so a value the parent already\n // accepted is never rolled back.\n setInputValue(normalizeDisplayValue(valueProp))\n setBlurValue('')\n }\n }","(event: ChangeEvent<HTMLInputElement>) => {\n const {value} = event.target\n onChange?.({[label]: value}, event)\n setInputValue(value)\n }","(event: ReactKeyboardEvent<HTMLInputElement>) => {\n const numericValue = getNumberValue(event.currentTarget.value)\n const isUp = event.key === 'ArrowUp'\n const isDown = event.key === 'ArrowDown'\n if (!Number.isNaN(numericValue) && (isUp || isDown)) {\n const offset = arrowOffset ?? DEFAULT_ARROW_OFFSET\n const updatedValue = isUp ? numericValue + offset : numericValue - offset\n onChange?.({[label]: String(updatedValue)}, event)\n setInputValue(String(updatedValue))\n }\n }","event","(event: MouseEvent) => {\n if (!dragLabel) {\n return\n }\n const numericValue = typeof valueProp === 'number' ? valueProp : Number(valueProp)\n const newValue = Math.round(numericValue + event.movementX)\n if (dragMax !== undefined && newValue >= 0 && newValue <= dragMax) {\n onChange?.({[label]: String(newValue)}, event)\n }\n }","numericValue","(event) => {\n if (!dragLabel) {\n return false\n }\n event.preventDefault()\n handleDrag(event)\n return true\n }","{\n enabled: showLabel,\n onDragStart: (event) => {\n if (!dragLabel) {\n return false\n }\n event.preventDefault()\n handleDrag(event)\n return true\n },\n onDrag: handleDrag,\n }","<input\n id={inputId}\n className={input}\n ref={inputRef}\n value={inputValue}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n spellCheck=\"false\"\n />","showLabel ? (\n <label\n htmlFor={inputId}\n ref={labelRef}\n className={dragLabel ? `${labelClass} ${labelDrag}` : labelClass}\n >\n {label}\n </label>\n ) : null","<div className={wrap}>\n <input\n id={inputId}\n className={input}\n ref={inputRef}\n value={inputValue}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n spellCheck=\"false\"\n />\n {showLabel ? (\n <label\n htmlFor={inputId}\n ref={labelRef}\n className={dragLabel ? `${labelClass} ${labelDrag}` : labelClass}\n >\n {label}\n </label>\n ) : null}\n </div>","{\n hsl,\n direction = 'horizontal',\n radius,\n shadow,\n onChange,\n}: HueProps","direction = 'horizontal'","(event: PickerEvent) => {\n const container = containerRef.current\n if (!container) {\n return\n }\n const change = hue.calculateChange(event, direction, hsl, container)\n if (change && typeof onChange === 'function') {\n onChange(change)\n }\n }","(event) => {\n handleChange(event)\n return true\n }","event","{\n onDragStart: (event) => {\n handleChange(event)\n return true\n },\n onDrag: handleChange,\n }","assignInlineVars({\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [pointerLeftVar]: pointerDirection === 'horizontal' ? `${(hsl.h * 100) / 360}%` : undefined,\n [pointerTopVar]:\n pointerDirection === 'vertical' ? `${-((hsl.h * 100) / 360) + 100}%` : undefined,\n })","pointerDirection === 'horizontal' ? `${(hsl.h * 100) / 360}%` : undefined","pointerDirection === 'vertical' ? `${-((hsl.h * 100) / 360) + 100}%` : undefined","<div className={pointerKnob} />","<div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>","pointer[pointerDirection]","<div\n className={gradient[pointerDirection]}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>\n </div>","gradient[pointerDirection]","<div\n className={root}\n style={assignInlineVars({\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [pointerLeftVar]: pointerDirection === 'horizontal' ? `${(hsl.h * 100) / 360}%` : undefined,\n [pointerTopVar]:\n pointerDirection === 'vertical' ? `${-((hsl.h * 100) / 360) + 100}%` : undefined,\n })}\n >\n <div\n className={gradient[pointerDirection]}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>\n </div>\n </div>","{hsl, hsv, radius, shadow, onChange}: SaturationProps","throttle(\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult): void => {\n handler(data)\n },\n 50,\n )","(handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult): void => {\n handler(data)\n }","useMemo<ThrottledChange>(\n () =>\n throttle(\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult): void => {\n handler(data)\n },\n 50,\n ),\n [],\n )","() => {\n return () => {\n throttledChange.cancel()\n }\n }","[throttledChange]","(event: PickerEvent) => {\n const container = containerRef.current\n if (!container || typeof onChange !== 'function') {\n return\n }\n throttledChange(onChange, saturation.calculateChange(event, hsl, container))\n }","(event) => {\n handleChange(event)\n return true\n }","event","() => {\n let renderWindow: Window = window\n while (\n !renderWindow.document.contains(containerRef.current) &&\n renderWindow.parent !== renderWindow\n ) {\n renderWindow = renderWindow.parent\n }\n return renderWindow\n }","{\n onDragStart: (event) => {\n handleChange(event)\n return true\n },\n onDrag: handleChange,\n // Track the drag on the window the container is actually rendered in\n // (the Studio can render inputs inside nested iframes).\n getWindow: () => {\n let renderWindow: Window = window\n while (\n !renderWindow.document.contains(containerRef.current) &&\n renderWindow.parent !== renderWindow\n ) {\n renderWindow = renderWindow.parent\n }\n return renderWindow\n },\n }","assignInlineVars({\n [hueBackgroundVar]: `hsl(${hsl.h},100%, 50%)`,\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [pointerTopVar]: `${-(hsv.v * 100) + 100}%`,\n [pointerLeftVar]: `${hsv.s * 100}%`,\n })","`${hsv.s * 100}%`","`hsl(${hsl.h},100%, 50%)`","`${-(hsv.v * 100) + 100}%`","<div className={black} />","<div className={white}>\n <div className={black} />\n <div className={pointer}>\n <div className={pointerKnob} />\n </div>\n </div>","<div\n className={root}\n style={assignInlineVars({\n [hueBackgroundVar]: `hsl(${hsl.h},100%, 50%)`,\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [pointerTopVar]: `${-(hsv.v * 100) + 100}%`,\n [pointerLeftVar]: `${hsv.s * 100}%`,\n })}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={white}>\n <div className={black} />\n <div className={pointer}>\n <div className={pointerKnob} />\n </div>\n </div>\n </div>","{\n onChange,\n rgb,\n hsl,\n hex,\n disableAlpha,\n}: ColorPickerFieldsProps","(data) => {\n if ('hex' in data && data['hex'] && isValidHex(data['hex'])) {\n onChange({\n hex: data['hex'],\n source: 'hex',\n })\n } else if (\n rgb &&\n (('r' in data && data['r']) || ('g' in data && data['g']) || ('b' in data && data['b']))\n ) {\n onChange({\n r: Number(data['r']) || rgb.r,\n g: Number(data['g']) || rgb.g,\n b: Number(data['b']) || rgb.b,\n a: rgb.a,\n source: 'rgb',\n })\n } else if (hsl && 'a' in data && data['a']) {\n let alpha = Number(data['a'])\n if (alpha < 0) {\n alpha = 0\n } else if (alpha > 100) {\n alpha = 100\n }\n alpha /= 100\n\n onChange({\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: alpha,\n source: 'hsl',\n })\n }\n }","'hex'","'r'","'g'","'b'","'a'","useCallback(\n (data) => {\n if ('hex' in data && data['hex'] && isValidHex(data['hex'])) {\n onChange({\n hex: data['hex'],\n source: 'hex',\n })\n } else if (\n rgb &&\n (('r' in data && data['r']) || ('g' in data && data['g']) || ('b' in data && data['b']))\n ) {\n onChange({\n r: Number(data['r']) || rgb.r,\n g: Number(data['g']) || rgb.g,\n b: Number(data['b']) || rgb.b,\n a: rgb.a,\n source: 'rgb',\n })\n } else if (hsl && 'a' in data && data['a']) {\n let alpha = Number(data['a'])\n if (alpha < 0) {\n alpha = 0\n } else if (alpha > 100) {\n alpha = 100\n }\n alpha /= 100\n\n onChange({\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: alpha,\n source: 'hsl',\n })\n }\n },\n [onChange, hsl, rgb],\n )","assignInlineVars({\n [inputBorderVar]: inputEnabled.border,\n [inputFgVar]: inputEnabled.fg,\n [inputBgVar]: inputEnabled.bg,\n [inputFontSizeVar]: textFontSize === undefined ? undefined : `${textFontSize}px`,\n [labelFontSizeVar]: labelFontSize === undefined ? undefined : `${labelFontSize}px`,\n [labelFgVar]: color.fg,\n })","fg","bg","border","textFontSize === undefined ? undefined : `${textFontSize}px`","labelFontSize === undefined ? undefined : `${labelFontSize}px`","hex?.replace('#', '')","hex?.replace","<Box flex={2} marginRight={1}>\n <EditableInput label=\"hex\" value={hex?.replace('#', '')} onChange={handleChange} />\n </Box>","<Box flex={1} marginRight={1}>\n <EditableInput label=\"r\" value={rgb?.r} onChange={handleChange} dragLabel dragMax={255} />\n </Box>","rgb?.r","<Box flex={1} marginRight={1}>\n <EditableInput label=\"g\" value={rgb?.g} onChange={handleChange} dragLabel dragMax={255} />\n </Box>","rgb?.g","<Box flex={1} marginRight={1}>\n <EditableInput label=\"b\" value={rgb?.b} onChange={handleChange} dragLabel dragMax={255} />\n </Box>","rgb?.b","!disableAlpha && (\n <Box flex={1}>\n <EditableInput\n label=\"a\"\n value={Math.round((rgb?.a ?? 1) * 100)}\n onChange={handleChange}\n dragLabel\n dragMax={100}\n />\n </Box>\n )","a","<Flex\n style={assignInlineVars({\n [inputBorderVar]: inputEnabled.border,\n [inputFgVar]: inputEnabled.fg,\n [inputBgVar]: inputEnabled.bg,\n [inputFontSizeVar]: textFontSize === undefined ? undefined : `${textFontSize}px`,\n [labelFontSizeVar]: labelFontSize === undefined ? undefined : `${labelFontSize}px`,\n [labelFgVar]: color.fg,\n })}\n >\n <Box flex={2} marginRight={1}>\n <EditableInput label=\"hex\" value={hex?.replace('#', '')} onChange={handleChange} />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput label=\"r\" value={rgb?.r} onChange={handleChange} dragLabel dragMax={255} />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput label=\"g\" value={rgb?.g} onChange={handleChange} dragLabel dragMax={255} />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput label=\"b\" value={rgb?.b} onChange={handleChange} dragLabel dragMax={255} />\n </Box>\n {!disableAlpha && (\n <Box flex={1}>\n <EditableInput\n label=\"a\"\n value={Math.round((rgb?.a ?? 1) * 100)}\n onChange={handleChange}\n dragLabel\n dragMax={100}\n />\n </Box>\n )}\n </Flex>","{backgroundColor}: {backgroundColor: string}","assignInlineVars({[previewBackgroundVar]: backgroundColor})","<Box className={colorBox} style={assignInlineVars({[previewBackgroundVar]: backgroundColor})} />","<Flex {...props} className={readOnlyContainer} />","<Box {...props} className={fieldsBox} />","{rgb, hex, hsv, hsl}","(data: Color): void => {\n if (!simpleCheckForValidColor(data)) {\n return\n }\n const incomingHue = typeof data === 'string' ? undefined : 'h' in data ? data.h : undefined\n const oldHue = hsl && hsl.s > 0 ? hsl.h : oldHueRef.current\n const nextColor = toState(data, incomingHue || oldHue)\n oldHueRef.current = nextColor.oldHue\n onChangeProp(nextColor)\n }","width ? assignInlineVars({[widthVar]: width}) : undefined","!readOnly && (\n <>\n <Card overflow=\"hidden\" className={saturationCard}>\n <Saturation onChange={onChange} hsl={hsl} hsv={hsv} />\n </Card>\n\n <Card shadow={1} radius={3} overflow=\"hidden\" className={sliderCard}>\n <Hue hsl={hsl} onChange={!readOnly && onChange} />\n </Card>\n\n {!disableAlpha && (\n <Card shadow={1} radius={3} overflow=\"hidden\" className={alphaCard}>\n <Alpha rgb={rgb} hsl={hsl} onChange={onChange} />\n </Card>\n )}\n </>\n )","<Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />","<ColorBox backgroundColor={`rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`} />","`rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`","readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )","h","l","s","b","g","r","<Card flex={1} radius={2} overflow=\"hidden\" className={previewCard}>\n <Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />\n <ColorBox backgroundColor={`rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`} />\n\n {readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )}\n </Card>","!readOnly && (\n <Flex align=\"flex-start\" marginLeft={2}>\n <FieldsBox>\n <ColorPickerFields\n rgb={rgb}\n hsl={hsl}\n hex={hex}\n onChange={onChange}\n disableAlpha={disableAlpha}\n />\n </FieldsBox>\n <Box marginLeft={2}>\n <Button onClick={onUnset} title=\"Delete color\" icon={TrashIcon} tone=\"critical\" />\n </Box>\n </Flex>\n )","<Flex>\n <Card flex={1} radius={2} overflow=\"hidden\" className={previewCard}>\n <Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />\n <ColorBox backgroundColor={`rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`} />\n\n {readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )}\n </Card>\n\n {!readOnly && (\n <Flex align=\"flex-start\" marginLeft={2}>\n <FieldsBox>\n <ColorPickerFields\n rgb={rgb}\n hsl={hsl}\n hex={hex}\n onChange={onChange}\n disableAlpha={disableAlpha}\n />\n </FieldsBox>\n <Box marginLeft={2}>\n <Button onClick={onUnset} title=\"Delete color\" icon={TrashIcon} tone=\"critical\" />\n </Box>\n </Flex>\n )}\n </Flex>","colorList && <ColorList colors={colorList} onChange={onChange} />","<Card padding={1} border radius={1}>\n <Stack gap={2}>\n {!readOnly && (\n <>\n <Card overflow=\"hidden\" className={saturationCard}>\n <Saturation onChange={onChange} hsl={hsl} hsv={hsv} />\n </Card>\n\n <Card shadow={1} radius={3} overflow=\"hidden\" className={sliderCard}>\n <Hue hsl={hsl} onChange={!readOnly && onChange} />\n </Card>\n\n {!disableAlpha && (\n <Card shadow={1} radius={3} overflow=\"hidden\" className={alphaCard}>\n <Alpha rgb={rgb} hsl={hsl} onChange={onChange} />\n </Card>\n )}\n </>\n )}\n <Flex>\n <Card flex={1} radius={2} overflow=\"hidden\" className={previewCard}>\n <Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />\n <ColorBox backgroundColor={`rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`} />\n\n {readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )}\n </Card>\n\n {!readOnly && (\n <Flex align=\"flex-start\" marginLeft={2}>\n <FieldsBox>\n <ColorPickerFields\n rgb={rgb}\n hsl={hsl}\n hex={hex}\n onChange={onChange}\n disableAlpha={disableAlpha}\n />\n </FieldsBox>\n <Box marginLeft={2}>\n <Button onClick={onUnset} title=\"Delete color\" icon={TrashIcon} tone=\"critical\" />\n </Box>\n </Flex>\n )}\n </Flex>\n {colorList && <ColorList colors={colorList} onChange={onChange} />}\n </Stack>\n </Card>","<div className={root} style={width ? assignInlineVars({[widthVar]: width}) : undefined}>\n <Card padding={1} border radius={1}>\n <Stack gap={2}>\n {!readOnly && (\n <>\n <Card overflow=\"hidden\" className={saturationCard}>\n <Saturation onChange={onChange} hsl={hsl} hsv={hsv} />\n </Card>\n\n <Card shadow={1} radius={3} overflow=\"hidden\" className={sliderCard}>\n <Hue hsl={hsl} onChange={!readOnly && onChange} />\n </Card>\n\n {!disableAlpha && (\n <Card shadow={1} radius={3} overflow=\"hidden\" className={alphaCard}>\n <Alpha rgb={rgb} hsl={hsl} onChange={onChange} />\n </Card>\n )}\n </>\n )}\n <Flex>\n <Card flex={1} radius={2} overflow=\"hidden\" className={previewCard}>\n <Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />\n <ColorBox backgroundColor={`rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`} />\n\n {readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )}\n </Card>\n\n {!readOnly && (\n <Flex align=\"flex-start\" marginLeft={2}>\n <FieldsBox>\n <ColorPickerFields\n rgb={rgb}\n hsl={hsl}\n hex={hex}\n onChange={onChange}\n disableAlpha={disableAlpha}\n />\n </FieldsBox>\n <Box marginLeft={2}>\n <Button onClick={onUnset} title=\"Delete color\" icon={TrashIcon} tone=\"critical\" />\n </Box>\n </Flex>\n )}\n </Flex>\n {colorList && <ColorList colors={colorList} onChange={onChange} />}\n </Stack>\n </Card>\n </div>","function handleChange(nextColor: ColorValue) {\n const fieldPatches = type.fields\n .filter((field) => field.name in nextColor)\n .map((field) => {\n // oxlint-disable-next-line no-unsafe-type-assertion\n const nextFieldValue = nextColor[field.name as keyof ColorValue]\n const isObject = field.type.jsonType === 'object'\n return set(\n isObject ? Object.assign({_type: field.type.name}, nextFieldValue) : nextFieldValue,\n [field.name],\n )\n })\n\n onChange([\n setIfMissing({_type: type.name}),\n set(type.name, ['_type']),\n set(nextColor.rgb?.a, ['alpha']),\n ...fieldPatches,\n ])\n }","type.fields","field","<>\n {value && value.hex ? (\n <ColorPicker\n color={value}\n onChange={(nextColor) =>\n startTransition(() => {\n setColorOptimistic(nextColor)\n handleChange(nextColor)\n })\n }\n readOnly={readOnly || (typeof type.readOnly === 'boolean' && type.readOnly)}\n disableAlpha={!!type.options?.disableAlpha}\n colorList={type.options?.colorList}\n onUnset={() =>\n startTransition(() => {\n setColorOptimistic(undefined)\n onChange(unset())\n })\n }\n />\n ) : (\n <Button\n icon={AddIcon}\n mode=\"ghost\"\n text=\"Create color\"\n ref={focusRef}\n disabled={Boolean(readOnly)}\n onClick={() =>\n startTransition(() => {\n setColorOptimistic(DEFAULT_COLOR)\n handleChange(DEFAULT_COLOR)\n })\n }\n />\n )}\n </>","type.readOnly","nextColor"],"sources":["../src/ColorList.css.ts","../src/ColorList.tsx","../src/react-color/helpers/checkboard.ts","../src/react-color/Checkboard.css.ts","../src/react-color/Checkboard.tsx","../src/react-color/helpers/alpha.ts","../src/react-color/helpers/useDrag.ts","../src/react-color/Alpha.css.ts","../src/react-color/Alpha.tsx","../src/react-color/EditableInput.css.ts","../src/react-color/EditableInput.tsx","../src/react-color/helpers/color.ts","../src/react-color/helpers/hue.ts","../src/react-color/Hue.css.ts","../src/react-color/Hue.tsx","../src/react-color/helpers/saturation.ts","../src/react-color/Saturation.css.ts","../src/react-color/Saturation.tsx","../src/ColorPickerFields.tsx","../src/ColorInput.css.ts","../src/ColorInput.tsx"],"sourcesContent":["import {createVar, style} from '@vanilla-extract/css'\n\nexport const swatchBackgroundVar = createVar()\n\nexport const colorListWrap = style({\n gap: '0.25em',\n})\n\nexport const colorBoxContainer = style({\n width: '2.1em',\n height: '2.1em',\n cursor: 'pointer',\n position: 'relative',\n overflow: 'hidden',\n borderRadius: '3px',\n background:\n \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAADFJREFUOE9jZGBgEGHAD97gk2YcNYBhmIQBgWSAP52AwoAQwJvQRg1gACckQoC2gQgAIF8IscwEtKYAAAAASUVORK5CYII=') left center #fff\",\n})\n\nexport const colorBox = style({\n borderRadius: 'inherit',\n boxShadow: 'inset 0 0 0 1px var(--card-shadow-outline-color)',\n position: 'absolute',\n inset: 0,\n zIndex: 1,\n background: swatchBackgroundVar,\n})\n","import {Flex} from '@sanity/ui'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport type {ComponentProps} from 'react'\nimport tinycolor from 'tinycolor2'\n\nimport type {Color, ColorChangeHandler} from './react-color'\n\nimport {colorBox, colorBoxContainer, colorListWrap, swatchBackgroundVar} from './ColorList.css'\n\nfunction ColorListWrap(props: ComponentProps<typeof Flex>) {\n return <Flex {...props} className={colorListWrap} />\n}\n\nfunction ColorBoxContainer(props: ComponentProps<'div'>) {\n return <div {...props} className={colorBoxContainer} />\n}\n\nfunction ColorBox({backgroundColor}: {backgroundColor: string}) {\n return (\n <div className={colorBox} style={assignInlineVars({[swatchBackgroundVar]: backgroundColor})} />\n )\n}\n\ninterface ValidatedColor {\n key: string\n color: Color\n backgroundColor: string\n}\n\ninterface ColorListProps {\n colors?: Array<Color>\n onChange: ColorChangeHandler<Color>\n}\n\nconst validateColors = (colors: Array<Color>) => {\n const seen = new Set<string>()\n return colors.reduce((cls: Array<ValidatedColor>, c) => {\n // @ts-expect-error fix types later\n const color = c.hex ? tinycolor(c.hex) : tinycolor(c)\n if (color.isValid()) {\n const backgroundColor = color.toRgbString()\n const key = JSON.stringify({color: c, backgroundColor})\n if (!seen.has(key)) {\n seen.add(key)\n cls.push({key, color: c, backgroundColor})\n }\n }\n return cls\n }, [])\n}\n\nexport function ColorList({colors, onChange}: ColorListProps): React.JSX.Element | null {\n if (!colors) return null\n return (\n <ColorListWrap wrap=\"wrap\">\n {validateColors(colors).map(({key, color, backgroundColor}) => (\n <ColorBoxContainer\n key={key}\n onClick={() => {\n onChange(color)\n }}\n >\n <ColorBox backgroundColor={backgroundColor} />\n </ColorBoxContainer>\n ))}\n </ColorListWrap>\n )\n}\n","/**\n * Renders a checkerboard pattern as a data URL, used as the transparency backdrop.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/checkboard.js | react-color's checkboard helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\n\nconst checkboardCache: Record<string, string | null> = {}\n\nfunction render(\n c1: string,\n c2: string,\n size: number,\n serverCanvas?: new () => HTMLCanvasElement,\n): string | null {\n if (typeof document === 'undefined' && !serverCanvas) {\n return null\n }\n const canvas = serverCanvas ? new serverCanvas() : document.createElement('canvas')\n canvas.width = size * 2\n canvas.height = size * 2\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n // If no context can be found, return early.\n return null\n }\n ctx.fillStyle = c1\n ctx.fillRect(0, 0, canvas.width, canvas.height)\n ctx.fillStyle = c2\n ctx.fillRect(0, 0, size, size)\n ctx.translate(size, size)\n ctx.fillRect(0, 0, size, size)\n return canvas.toDataURL()\n}\n\nexport function get(\n c1: string,\n c2: string,\n size: number,\n serverCanvas?: new () => HTMLCanvasElement,\n): string | null {\n const key = `${c1}-${c2}-${size}${serverCanvas ? '-server' : ''}`\n const cached = checkboardCache[key]\n if (cached) {\n return cached\n }\n const checkboard = render(c1, c2, size, serverCanvas)\n checkboardCache[key] = checkboard\n return checkboard\n}\n","import {createVar, style} from '@vanilla-extract/css'\n\nexport const borderRadiusVar = createVar()\nexport const boxShadowVar = createVar()\nexport const backgroundImageVar = createVar()\n\nexport const checkboard = style({\n borderRadius: borderRadiusVar,\n boxShadow: boxShadowVar,\n position: 'absolute',\n inset: 0,\n background: backgroundImageVar,\n})\n","/**\n * Checkerboard transparency backdrop.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Checkboard.js | react-color's Checkboard}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE. The upstream\n * `children` cloning branch is dropped as it is unused here.\n */\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport type {ReactElement} from 'react'\n\nimport * as checkboardHelper from './helpers/checkboard'\nimport type {CheckboardRenderers, RenderersProps} from './types'\n\nimport {backgroundImageVar, borderRadiusVar, boxShadowVar, checkboard} from './Checkboard.css'\n\nconst EMPTY_RENDERERS: CheckboardRenderers = {}\n\nexport interface CheckboardProps extends RenderersProps {\n white?: string | undefined\n grey?: string | undefined\n size?: number | undefined\n borderRadius?: string | undefined\n boxShadow?: string | undefined\n}\n\nexport function Checkboard({\n white = 'transparent',\n grey = 'rgba(0,0,0,.08)',\n size = 8,\n renderers = EMPTY_RENDERERS,\n borderRadius,\n boxShadow,\n}: CheckboardProps): ReactElement {\n const background = checkboardHelper.get(white, grey, size, renderers.canvas)\n return (\n <div\n className={checkboard}\n style={assignInlineVars({\n [borderRadiusVar]: borderRadius,\n [boxShadowVar]: boxShadow,\n [backgroundImageVar]: background ? `url(${background}) center left` : undefined,\n })}\n />\n )\n}\n","/**\n * Translates a pointer event over the alpha track into a new alpha value.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/alpha.js | react-color's alpha helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {AlphaColorResult, HSLColor, PickerEvent} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n hsl: HSLColor,\n direction: 'horizontal' | 'vertical' | undefined,\n initialA: number | undefined,\n container: HTMLElement,\n): AlphaColorResult | null {\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n const left = x - (container.getBoundingClientRect().left + window.scrollX)\n const top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (direction === 'vertical') {\n let a: number\n if (top < 0) {\n a = 0\n } else if (top > containerHeight) {\n a = 1\n } else {\n a = Math.round((top * 100) / containerHeight) / 100\n }\n\n if (hsl.a !== a) {\n return {h: hsl.h, s: hsl.s, l: hsl.l, a, source: 'rgb'}\n }\n return null\n }\n\n let a: number\n if (left < 0) {\n a = 0\n } else if (left > containerWidth) {\n a = 1\n } else {\n a = Math.round((left * 100) / containerWidth) / 100\n }\n\n if (initialA !== a) {\n return {h: hsl.h, s: hsl.s, l: hsl.l, a, source: 'rgb'}\n }\n return null\n}\n","/**\n * Drag plumbing shared by the picker surfaces (Saturation/Hue/Alpha) and the\n * draggable `EditableInput` label.\n *\n * Attaches a native `mousedown` listener to the target element; each drag then\n * tracks `mousemove`/`mouseup` on a window until the pointer is released or the\n * component unmounts. The callbacks are Effect Events, so every event reads the\n * latest render's props — mirroring how the original react-color class methods\n * read `this.props` on each event.\n *\n * Note: this deliberately does not use a React 19 ref-callback with cleanup —\n * the React Compiler memoizes ref callbacks against their captured deps, so a\n * mid-drag prop update (every `mousemove` triggers `onChange`) would detach and\n * re-attach the ref, aborting the in-flight drag.\n */\nimport {useEffectEvent, useLayoutEffect, type RefObject} from 'react'\n\nexport interface UseDragOptions {\n /** Called on `mousedown`; return `false` to ignore the gesture. */\n onDragStart: (event: MouseEvent) => boolean\n /** Called for every `mousemove` while dragging. */\n onDrag: (event: MouseEvent) => void\n /** Window to track the drag on (e.g. the nearest render window in nested iframes). */\n getWindow?: () => Window\n /** Set when the target element renders conditionally, to re-attach when it appears. */\n enabled?: boolean\n}\n\nexport function useDrag(targetRef: RefObject<HTMLElement | null>, options: UseDragOptions): void {\n const onDragStart = useEffectEvent(options.onDragStart)\n const onDrag = useEffectEvent(options.onDrag)\n const getWindow = useEffectEvent(options.getWindow ?? (() => window))\n const enabled = options.enabled ?? true\n\n // useLayoutEffect so the listener is attached before paint — with useEffect\n // there is a small post-mount window where a drag could start unnoticed.\n useLayoutEffect(() => {\n const target = enabled ? targetRef.current : null\n if (!target) {\n return () => {}\n }\n\n const controller = new AbortController()\n let dragController: AbortController | null = null\n\n target.addEventListener(\n 'mousedown',\n (event) => {\n if (!onDragStart(event)) {\n return\n }\n dragController?.abort()\n dragController = new AbortController()\n const {signal} = dragController\n const targetWindow = getWindow()\n targetWindow.addEventListener('mousemove', (moveEvent) => onDrag(moveEvent), {signal})\n targetWindow.addEventListener('mouseup', () => dragController?.abort(), {signal})\n },\n {signal: controller.signal},\n )\n\n return () => {\n controller.abort()\n dragController?.abort()\n }\n }, [enabled, targetRef])\n}\n","import {createVar, style, styleVariants} from '@vanilla-extract/css'\n\nexport const radiusVar = createVar()\nexport const shadowVar = createVar()\nexport const gradientVar = createVar()\nexport const pointerLeftVar = createVar()\nexport const pointerTopVar = createVar()\n\nexport const root = style({\n position: 'absolute',\n inset: 0,\n borderRadius: radiusVar,\n})\n\nexport const checkboardLayer = style({\n position: 'absolute',\n inset: 0,\n overflow: 'hidden',\n borderRadius: radiusVar,\n})\n\nexport const gradientLayer = style({\n position: 'absolute',\n inset: 0,\n background: gradientVar,\n boxShadow: shadowVar,\n borderRadius: radiusVar,\n})\n\nexport const container = style({\n position: 'relative',\n height: '100%',\n margin: '0 3px',\n})\n\nexport const pointer = styleVariants({\n horizontal: {\n position: 'absolute',\n left: pointerLeftVar,\n },\n vertical: {\n position: 'absolute',\n left: 0,\n top: pointerTopVar,\n },\n})\n\nexport const pointerKnob = style({\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n marginTop: '1px',\n transform: 'translateX(-2px)',\n})\n","/**\n * Alpha (transparency) slider.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Alpha.js | react-color's Alpha}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {useRef, type ReactElement} from 'react'\n\nimport {Checkboard} from './Checkboard'\nimport * as alpha from './helpers/alpha'\nimport {useDrag} from './helpers/useDrag'\nimport type {\n AlphaColorResult,\n CheckboardRenderers,\n ColorChangeHandler,\n HSLColor,\n PickerEvent,\n RGBColor,\n} from './types'\n\nimport {\n checkboardLayer,\n container,\n gradientLayer,\n gradientVar,\n pointer,\n pointerKnob,\n pointerLeftVar,\n pointerTopVar,\n radiusVar,\n root,\n shadowVar,\n} from './Alpha.css'\n\nexport interface AlphaProps {\n rgb: RGBColor\n hsl: HSLColor\n a?: number | undefined\n direction?: 'horizontal' | 'vertical' | undefined\n radius?: string | undefined\n shadow?: string | undefined\n renderers?: CheckboardRenderers | undefined\n onChange?: ColorChangeHandler<AlphaColorResult> | undefined\n}\n\nexport function Alpha({\n rgb,\n hsl,\n a,\n direction,\n radius,\n shadow,\n renderers,\n onChange,\n}: AlphaProps): ReactElement {\n const containerRef = useRef<HTMLDivElement | null>(null)\n\n const handleChange = (event: PickerEvent) => {\n const containerEl = containerRef.current\n if (!containerEl) {\n return\n }\n const change = alpha.calculateChange(event, hsl, direction, a, containerEl)\n if (change && typeof onChange === 'function') {\n onChange(change)\n }\n }\n\n useDrag(containerRef, {\n onDragStart: (event) => {\n handleChange(event)\n return true\n },\n onDrag: handleChange,\n })\n\n const alphaValue = rgb.a ?? 1\n const gradient =\n direction === 'vertical'\n ? `linear-gradient(to bottom, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)`\n : `linear-gradient(to right, rgba(${rgb.r},${rgb.g},${rgb.b}, 0) 0%, rgba(${rgb.r},${rgb.g},${rgb.b}, 1) 100%)`\n const pointerDirection = direction === 'vertical' ? 'vertical' : 'horizontal'\n\n return (\n <div\n className={root}\n style={assignInlineVars({\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [gradientVar]: gradient,\n [pointerLeftVar]: pointerDirection === 'horizontal' ? `${alphaValue * 100}%` : undefined,\n [pointerTopVar]: pointerDirection === 'vertical' ? `${alphaValue * 100}%` : undefined,\n })}\n >\n <div className={checkboardLayer}>\n <Checkboard renderers={renderers} />\n </div>\n <div className={gradientLayer} />\n <div\n className={container}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>\n </div>\n </div>\n )\n}\n","import {createVar, style} from '@vanilla-extract/css'\n\nexport const inputBorderVar = createVar()\nexport const inputFgVar = createVar()\nexport const inputBgVar = createVar()\nexport const inputFontSizeVar = createVar()\nexport const labelFontSizeVar = createVar()\nexport const labelFgVar = createVar()\n\nexport const wrap = style({\n position: 'relative',\n})\n\nexport const input = style({\n width: '80%',\n padding: '4px 10% 3px',\n border: 'none',\n boxShadow: `inset 0 0 0 1px ${inputBorderVar}`,\n color: inputFgVar,\n backgroundColor: inputBgVar,\n fontSize: inputFontSizeVar,\n textAlign: 'center',\n})\n\nexport const label = style({\n display: 'block',\n textAlign: 'center',\n fontSize: labelFontSizeVar,\n color: labelFgVar,\n paddingTop: '3px',\n paddingBottom: '4px',\n textTransform: 'capitalize',\n})\n\nexport const labelDrag = style({\n cursor: 'ew-resize',\n})\n","/**\n * Labeled text input with arrow-key stepping and drag-to-change support.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/EditableInput.js | react-color's EditableInput}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n *\n * @remarks\n * Theme-driven colors are applied via vanilla-extract CSS variables set by the\n * parent (`ColorPickerFields`).\n */\nimport {\n startTransition,\n useEffect,\n useId,\n useRef,\n useState,\n type ChangeEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactElement,\n} from 'react'\n\nimport {useDrag} from './helpers/useDrag'\n\nimport {input, label as labelClass, labelDrag, wrap} from './EditableInput.css'\n\nconst DEFAULT_ARROW_OFFSET = 1\n\nconst getNumberValue = (value: string | number): number => Number(String(value).replace(/%/g, ''))\n\nconst normalizeDisplayValue = (value: string | number | undefined): string =>\n String(value ?? '').toUpperCase()\n\ntype EditableInputEvent =\n | ChangeEvent<HTMLInputElement>\n | ReactKeyboardEvent<HTMLInputElement>\n | MouseEvent\n\nexport interface EditableInputProps {\n label: string\n value?: string | number | undefined\n arrowOffset?: number | undefined\n placeholder?: string | undefined\n hideLabel?: boolean | undefined\n dragLabel?: boolean | undefined\n dragMax?: number | undefined\n onChange?: ((value: Record<string, string>, event: EditableInputEvent) => void) | undefined\n}\n\nexport function EditableInput({\n label,\n value: valueProp,\n arrowOffset,\n placeholder,\n hideLabel,\n dragLabel,\n dragMax,\n onChange,\n}: EditableInputProps): ReactElement {\n const inputId = useId()\n const inputRef = useRef<HTMLInputElement | null>(null)\n const labelRef = useRef<HTMLLabelElement | null>(null)\n const initialValue = normalizeDisplayValue(valueProp)\n const [inputValue, setInputValue] = useState(initialValue)\n const [blurValue, setBlurValue] = useState(initialValue)\n\n useEffect(() => {\n const nextValue = normalizeDisplayValue(valueProp)\n if (nextValue === inputValue) {\n // The prop caught up with what's displayed — drop any blur-sync value\n // captured from an older prop so blur doesn't restore it.\n startTransition(() => {\n setBlurValue('')\n })\n return\n }\n\n const isFocused = inputRef.current === document.activeElement\n\n if (isFocused) {\n setBlurValue(nextValue)\n return\n }\n\n setInputValue(nextValue)\n setBlurValue((currentBlurValue) => (currentBlurValue ? '' : nextValue))\n }, [inputValue, valueProp])\n\n const handleBlur = () => {\n if (blurValue) {\n // Restore from the prop rather than the stored value: the transition\n // that clears a stale `blurValue` may not have committed yet, but\n // `valueProp` is always current — so a value the parent already\n // accepted is never rolled back.\n setInputValue(normalizeDisplayValue(valueProp))\n setBlurValue('')\n }\n }\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const {value} = event.target\n onChange?.({[label]: value}, event)\n setInputValue(value)\n }\n\n const handleKeyDown = (event: ReactKeyboardEvent<HTMLInputElement>) => {\n const numericValue = getNumberValue(event.currentTarget.value)\n const isUp = event.key === 'ArrowUp'\n const isDown = event.key === 'ArrowDown'\n if (!Number.isNaN(numericValue) && (isUp || isDown)) {\n const offset = arrowOffset ?? DEFAULT_ARROW_OFFSET\n const updatedValue = isUp ? numericValue + offset : numericValue - offset\n onChange?.({[label]: String(updatedValue)}, event)\n setInputValue(String(updatedValue))\n }\n }\n\n const handleDrag = (event: MouseEvent) => {\n if (!dragLabel) {\n return\n }\n const numericValue = typeof valueProp === 'number' ? valueProp : Number(valueProp)\n const newValue = Math.round(numericValue + event.movementX)\n if (dragMax !== undefined && newValue >= 0 && newValue <= dragMax) {\n onChange?.({[label]: String(newValue)}, event)\n }\n }\n\n const showLabel = Boolean(label && !hideLabel)\n\n useDrag(labelRef, {\n enabled: showLabel,\n onDragStart: (event) => {\n if (!dragLabel) {\n return false\n }\n event.preventDefault()\n handleDrag(event)\n return true\n },\n onDrag: handleDrag,\n })\n\n return (\n <div className={wrap}>\n <input\n id={inputId}\n className={input}\n ref={inputRef}\n value={inputValue}\n onKeyDown={handleKeyDown}\n onChange={handleChange}\n onBlur={handleBlur}\n placeholder={placeholder}\n spellCheck=\"false\"\n />\n {showLabel ? (\n <label\n htmlFor={inputId}\n ref={labelRef}\n className={dragLabel ? `${labelClass} ${labelDrag}` : labelClass}\n >\n {label}\n </label>\n ) : null}\n </div>\n )\n}\n","/**\n * Color conversion and validation helpers built on `tinycolor2`.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/color.js | react-color's color helpers}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport tinycolor from 'tinycolor2'\n\nimport type {Color, ColorState} from '../types'\n\nconst VALIDATION_KEYS = new Set(['r', 'g', 'b', 'a', 'h', 's', 'l', 'v'])\nconst PERCENT_PATTERN = /^\\d+%$/\n\nexport function simpleCheckForValidColor(data: Color): Color | false {\n if (typeof data === 'string') {\n return data\n }\n\n let checked = 0\n let passed = 0\n for (const [key, value] of Object.entries(data)) {\n if (!VALIDATION_KEYS.has(key) || !value) {\n continue\n }\n checked += 1\n if (!Number.isNaN(Number(value))) {\n passed += 1\n }\n if ((key === 's' || key === 'l') && PERCENT_PATTERN.test(String(value))) {\n passed += 1\n }\n }\n\n return checked === passed ? data : false\n}\n\nexport function toState(data: Color, oldHue?: number): ColorState {\n const instance =\n typeof data === 'string'\n ? tinycolor(data)\n : 'hex' in data\n ? tinycolor(data.hex)\n : tinycolor(data)\n const hsl = instance.toHsl()\n const hsv = instance.toHsv()\n const rgb = instance.toRgb()\n const hex = instance.toHex()\n\n if (hsl.s === 0) {\n hsl.h = oldHue ?? 0\n hsv.h = oldHue ?? 0\n }\n\n const transparent = hex === '000000' && rgb.a === 0\n const incomingHue = typeof data === 'string' ? undefined : 'h' in data ? data.h : undefined\n const source = typeof data === 'string' ? undefined : data.source\n\n return {\n hsl,\n hex: transparent ? 'transparent' : `#${hex}`,\n rgb,\n hsv,\n oldHue: incomingHue || oldHue || hsl.h,\n source: source ?? '',\n }\n}\n\nexport function isValidHex(hex: string): boolean {\n if (hex === 'transparent') {\n return true\n }\n // Disallow hex4 and hex8 (with alpha) to match the original behavior.\n const lh = hex.charAt(0) === '#' ? 1 : 0\n return hex.length !== 4 + lh && hex.length < 7 + lh && tinycolor(hex).isValid()\n}\n","/**\n * Translates a pointer event over the hue track into a new hue value.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/hue.js | react-color's hue helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {HSLColor, HueColorResult, PickerEvent} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n direction: 'horizontal' | 'vertical' | undefined,\n hsl: HSLColor,\n container: HTMLElement,\n): HueColorResult | null {\n const containerWidth = container.clientWidth\n const containerHeight = container.clientHeight\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n const left = x - (container.getBoundingClientRect().left + window.scrollX)\n const top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (direction === 'vertical') {\n let h: number\n if (top < 0) {\n h = 359\n } else if (top > containerHeight) {\n h = 0\n } else {\n const percent = -((top * 100) / containerHeight) + 100\n h = (360 * percent) / 100\n }\n\n if (hsl.h !== h) {\n return {h, s: hsl.s, l: hsl.l, a: hsl.a ?? 1, source: 'hsl'}\n }\n return null\n }\n\n let h: number\n if (left < 0) {\n h = 0\n } else if (left > containerWidth) {\n h = 359\n } else {\n const percent = (left * 100) / containerWidth\n h = (360 * percent) / 100\n }\n\n if (hsl.h !== h) {\n return {h, s: hsl.s, l: hsl.l, a: hsl.a ?? 1, source: 'hsl'}\n }\n return null\n}\n","import {createVar, style, styleVariants} from '@vanilla-extract/css'\n\nexport const radiusVar = createVar()\nexport const shadowVar = createVar()\nexport const pointerLeftVar = createVar()\nexport const pointerTopVar = createVar()\n\nexport const root = style({\n position: 'absolute',\n inset: 0,\n borderRadius: radiusVar,\n boxShadow: shadowVar,\n})\n\nexport const gradient = styleVariants({\n horizontal: {\n background:\n 'linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)',\n padding: '0 2px',\n position: 'relative',\n height: '100%',\n borderRadius: radiusVar,\n },\n vertical: {\n background:\n 'linear-gradient(to top, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%)',\n padding: '0 2px',\n position: 'relative',\n height: '100%',\n borderRadius: radiusVar,\n },\n})\n\nexport const pointer = styleVariants({\n horizontal: {\n position: 'absolute',\n left: pointerLeftVar,\n },\n vertical: {\n position: 'absolute',\n left: '0px',\n top: pointerTopVar,\n },\n})\n\nexport const pointerKnob = style({\n marginTop: '1px',\n width: '4px',\n borderRadius: '1px',\n height: '8px',\n boxShadow: '0 0 2px rgba(0, 0, 0, .6)',\n background: '#fff',\n transform: 'translateX(-2px)',\n})\n","/**\n * Hue slider.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Hue.js | react-color's Hue}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {useRef, type ReactElement} from 'react'\n\nimport * as hue from './helpers/hue'\nimport {useDrag} from './helpers/useDrag'\nimport type {ColorChangeHandler, HSLColor, HueColorResult, PickerEvent} from './types'\n\nimport {\n gradient,\n pointer,\n pointerKnob,\n pointerLeftVar,\n pointerTopVar,\n radiusVar,\n root,\n shadowVar,\n} from './Hue.css'\n\nexport interface HueProps {\n hsl: HSLColor\n direction?: 'horizontal' | 'vertical' | undefined\n radius?: string | undefined\n shadow?: string | undefined\n onChange?: ColorChangeHandler<HueColorResult> | undefined\n}\n\nexport function Hue({\n hsl,\n direction = 'horizontal',\n radius,\n shadow,\n onChange,\n}: HueProps): ReactElement {\n const containerRef = useRef<HTMLDivElement | null>(null)\n\n const handleChange = (event: PickerEvent) => {\n const container = containerRef.current\n if (!container) {\n return\n }\n const change = hue.calculateChange(event, direction, hsl, container)\n if (change && typeof onChange === 'function') {\n onChange(change)\n }\n }\n\n useDrag(containerRef, {\n onDragStart: (event) => {\n handleChange(event)\n return true\n },\n onDrag: handleChange,\n })\n\n const pointerDirection = direction === 'vertical' ? 'vertical' : 'horizontal'\n\n return (\n <div\n className={root}\n style={assignInlineVars({\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [pointerLeftVar]: pointerDirection === 'horizontal' ? `${(hsl.h * 100) / 360}%` : undefined,\n [pointerTopVar]:\n pointerDirection === 'vertical' ? `${-((hsl.h * 100) / 360) + 100}%` : undefined,\n })}\n >\n <div\n className={gradient[pointerDirection]}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={pointer[pointerDirection]}>\n <div className={pointerKnob} />\n </div>\n </div>\n </div>\n )\n}\n","/**\n * Translates a pointer event over the saturation/value box into a new color.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/helpers/saturation.js | react-color's saturation helper}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport type {HSLColor, PickerEvent, SaturationColorResult} from '../types'\n\nexport function calculateChange(\n e: PickerEvent,\n hsl: HSLColor,\n container: HTMLElement,\n): SaturationColorResult {\n const {width: containerWidth, height: containerHeight} = container.getBoundingClientRect()\n const x = 'touches' in e ? (e.touches[0]?.pageX ?? 0) : e.pageX\n const y = 'touches' in e ? (e.touches[0]?.pageY ?? 0) : e.pageY\n let left = x - (container.getBoundingClientRect().left + window.scrollX)\n let top = y - (container.getBoundingClientRect().top + window.scrollY)\n\n if (left < 0) {\n left = 0\n } else if (left > containerWidth) {\n left = containerWidth\n }\n\n if (top < 0) {\n top = 0\n } else if (top > containerHeight) {\n top = containerHeight\n }\n\n const saturation = left / containerWidth\n const bright = 1 - top / containerHeight\n\n return {h: hsl.h, s: saturation, v: bright, a: hsl.a ?? 1, source: 'hsv'}\n}\n","import {createVar, style} from '@vanilla-extract/css'\n\nexport const radiusVar = createVar()\nexport const shadowVar = createVar()\nexport const hueBackgroundVar = createVar()\nexport const pointerTopVar = createVar()\nexport const pointerLeftVar = createVar()\n\nexport const root = style({\n position: 'absolute',\n inset: 0,\n background: hueBackgroundVar,\n borderRadius: radiusVar,\n})\n\nexport const white = style({\n position: 'absolute',\n inset: 0,\n borderRadius: radiusVar,\n background: 'linear-gradient(to right, #fff, rgba(255, 255, 255, 0))',\n})\n\nexport const black = style({\n position: 'absolute',\n inset: 0,\n boxShadow: shadowVar,\n borderRadius: radiusVar,\n background: 'linear-gradient(to top, #000, rgba(0, 0, 0, 0))',\n})\n\nexport const pointer = style({\n position: 'absolute',\n top: pointerTopVar,\n left: pointerLeftVar,\n cursor: 'default',\n})\n\nexport const pointerKnob = style({\n width: '4px',\n height: '4px',\n boxShadow: '0 0 0 1.5px #fff, inset 0 0 1px 1px rgba(0,0,0,.3), 0 0 1px 2px rgba(0,0,0,.4)',\n borderRadius: '50%',\n cursor: 'pointer',\n transform: 'translate(-2px, -2px)',\n})\n","/**\n * Saturation / value box.\n *\n * Forked from\n * {@link https://github.com/casesandberg/react-color/blob/v2.19.3/src/components/common/Saturation.js | react-color's Saturation}\n * (MIT, Copyright (c) 2015 Case Sandberg). See the plugin LICENSE.\n */\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport throttle from 'lodash-es/throttle'\nimport {useEffect, useMemo, useRef, type ReactElement} from 'react'\n\nimport * as saturation from './helpers/saturation'\nimport {useDrag} from './helpers/useDrag'\nimport type {\n ColorChangeHandler,\n HSLColor,\n HSVColor,\n PickerEvent,\n SaturationColorResult,\n} from './types'\n\nimport {\n black,\n hueBackgroundVar,\n pointer,\n pointerKnob,\n pointerLeftVar,\n pointerTopVar,\n radiusVar,\n root,\n shadowVar,\n white,\n} from './Saturation.css'\n\ntype ThrottledChange = ReturnType<\n typeof throttle<\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult) => void\n >\n>\n\nexport interface SaturationProps {\n hsl: HSLColor\n hsv: HSVColor\n radius?: string | undefined\n shadow?: string | undefined\n onChange?: ColorChangeHandler<SaturationColorResult> | undefined\n}\n\nexport function Saturation({hsl, hsv, radius, shadow, onChange}: SaturationProps): ReactElement {\n const containerRef = useRef<HTMLDivElement | null>(null)\n\n const throttledChange = useMemo<ThrottledChange>(\n () =>\n throttle(\n (handler: ColorChangeHandler<SaturationColorResult>, data: SaturationColorResult): void => {\n handler(data)\n },\n 50,\n ),\n [],\n )\n\n useEffect(() => {\n return () => {\n throttledChange.cancel()\n }\n }, [throttledChange])\n\n const handleChange = (event: PickerEvent) => {\n const container = containerRef.current\n if (!container || typeof onChange !== 'function') {\n return\n }\n throttledChange(onChange, saturation.calculateChange(event, hsl, container))\n }\n\n useDrag(containerRef, {\n onDragStart: (event) => {\n handleChange(event)\n return true\n },\n onDrag: handleChange,\n // Track the drag on the window the container is actually rendered in\n // (the Studio can render inputs inside nested iframes).\n getWindow: () => {\n let renderWindow: Window = window\n while (\n !renderWindow.document.contains(containerRef.current) &&\n renderWindow.parent !== renderWindow\n ) {\n renderWindow = renderWindow.parent\n }\n return renderWindow\n },\n })\n\n return (\n <div\n className={root}\n style={assignInlineVars({\n [hueBackgroundVar]: `hsl(${hsl.h},100%, 50%)`,\n [radiusVar]: radius,\n [shadowVar]: shadow,\n [pointerTopVar]: `${-(hsv.v * 100) + 100}%`,\n [pointerLeftVar]: `${hsv.s * 100}%`,\n })}\n ref={containerRef}\n onTouchMove={handleChange}\n onTouchStart={handleChange}\n >\n <div className={white}>\n <div className={black} />\n <div className={pointer}>\n <div className={pointerKnob} />\n </div>\n </div>\n </div>\n )\n}\n","import {Box, Flex, useTheme_v2} from '@sanity/ui'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {useCallback} from 'react'\n\nimport {\n type Color,\n type ColorChangeHandler,\n EditableInput,\n type HSLColor,\n isValidHex,\n type RGBColor,\n} from './react-color'\n\nimport {\n inputBgVar,\n inputBorderVar,\n inputFgVar,\n inputFontSizeVar,\n labelFgVar,\n labelFontSizeVar,\n} from './react-color/EditableInput.css'\n\ninterface ColorPickerFieldsProps {\n rgb?: RGBColor\n hsl?: HSLColor\n hex?: string\n disableAlpha: boolean\n onChange: ColorChangeHandler<Color>\n}\n\nexport const ColorPickerFields = ({\n onChange,\n rgb,\n hsl,\n hex,\n disableAlpha,\n}: ColorPickerFieldsProps): React.JSX.Element => {\n const {color, font} = useTheme_v2()\n const inputEnabled = color.input.default.enabled\n const textFontSize = font.text.sizes[0]?.fontSize\n const labelFontSize = font.label.sizes[0]?.fontSize\n\n const handleChange: ColorChangeHandler<Record<string, string>> = useCallback(\n (data) => {\n if ('hex' in data && data['hex'] && isValidHex(data['hex'])) {\n onChange({\n hex: data['hex'],\n source: 'hex',\n })\n } else if (\n rgb &&\n (('r' in data && data['r']) || ('g' in data && data['g']) || ('b' in data && data['b']))\n ) {\n onChange({\n r: Number(data['r']) || rgb.r,\n g: Number(data['g']) || rgb.g,\n b: Number(data['b']) || rgb.b,\n a: rgb.a,\n source: 'rgb',\n })\n } else if (hsl && 'a' in data && data['a']) {\n let alpha = Number(data['a'])\n if (alpha < 0) {\n alpha = 0\n } else if (alpha > 100) {\n alpha = 100\n }\n alpha /= 100\n\n onChange({\n h: hsl.h,\n s: hsl.s,\n l: hsl.l,\n a: alpha,\n source: 'hsl',\n })\n }\n },\n [onChange, hsl, rgb],\n )\n\n return (\n <Flex\n style={assignInlineVars({\n [inputBorderVar]: inputEnabled.border,\n [inputFgVar]: inputEnabled.fg,\n [inputBgVar]: inputEnabled.bg,\n [inputFontSizeVar]: textFontSize === undefined ? undefined : `${textFontSize}px`,\n [labelFontSizeVar]: labelFontSize === undefined ? undefined : `${labelFontSize}px`,\n [labelFgVar]: color.fg,\n })}\n >\n <Box flex={2} marginRight={1}>\n <EditableInput label=\"hex\" value={hex?.replace('#', '')} onChange={handleChange} />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput label=\"r\" value={rgb?.r} onChange={handleChange} dragLabel dragMax={255} />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput label=\"g\" value={rgb?.g} onChange={handleChange} dragLabel dragMax={255} />\n </Box>\n <Box flex={1} marginRight={1}>\n <EditableInput label=\"b\" value={rgb?.b} onChange={handleChange} dragLabel dragMax={255} />\n </Box>\n {!disableAlpha && (\n <Box flex={1}>\n <EditableInput\n label=\"a\"\n value={Math.round((rgb?.a ?? 1) * 100)}\n onChange={handleChange}\n dragLabel\n dragMax={100}\n />\n </Box>\n )}\n </Flex>\n )\n}\n","import {createVar, style} from '@vanilla-extract/css'\n\nexport const widthVar = createVar()\nexport const previewBackgroundVar = createVar()\n\nexport const root = style({\n width: widthVar,\n})\n\nexport const saturationCard = style({\n position: 'relative',\n height: '5em',\n})\n\nexport const sliderCard = style({\n position: 'relative',\n height: '10px',\n})\n\nexport const alphaCard = style({\n position: 'relative',\n height: '10px',\n selectors: {\n // Doubled class doubles specificity so the white checkerboard base wins\n // over Card's own `background-color` (same 0-1-0 specificity, but the\n // styled-components rule is injected later and would win the tie).\n '&&': {\n background: '#fff',\n },\n },\n})\n\nexport const previewCard = style({\n position: 'relative',\n minWidth: '4em',\n selectors: {\n '&&': {\n background: '#fff',\n },\n },\n})\n\nexport const colorBox = style({\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n backgroundColor: previewBackgroundVar,\n})\n\nexport const readOnlyContainer = style({\n marginTop: '6rem',\n backgroundColor: 'var(--card-bg-color)',\n position: 'relative',\n width: '100%',\n})\n\nexport const fieldsBox = style({\n width: 200,\n})\n","import {AddIcon} from '@sanity/icons/Add'\nimport {TrashIcon} from '@sanity/icons/Trash'\nimport {Box, Button, Card, Flex, Inline, Stack, Text} from '@sanity/ui'\nimport {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {startTransition, useOptimistic, useRef, type ComponentProps} from 'react'\nimport {type ObjectInputProps, set, setIfMissing, unset} from 'sanity'\n\nimport {ColorList} from './ColorList'\nimport {ColorPickerFields} from './ColorPickerFields'\nimport {\n Alpha,\n Checkboard,\n type Color,\n type ColorState,\n Hue,\n Saturation,\n simpleCheckForValidColor,\n toState,\n} from './react-color'\nimport type {ColorSchemaType, ColorValue} from './types'\n\nimport {\n alphaCard,\n colorBox,\n fieldsBox,\n previewBackgroundVar,\n previewCard,\n readOnlyContainer,\n root,\n saturationCard,\n sliderCard,\n widthVar,\n} from './ColorInput.css'\n\nfunction ColorBox({backgroundColor}: {backgroundColor: string}) {\n return (\n <Box className={colorBox} style={assignInlineVars({[previewBackgroundVar]: backgroundColor})} />\n )\n}\n\nfunction ReadOnlyContainer(props: ComponentProps<typeof Flex>) {\n return <Flex {...props} className={readOnlyContainer} />\n}\n\nfunction FieldsBox(props: ComponentProps<typeof Box>) {\n return <Box {...props} className={fieldsBox} />\n}\n\ninterface ColorPickerProps {\n width?: string\n disableAlpha: boolean\n colorList?: Array<Color> | undefined\n readOnly?: boolean\n onChange: (color: ColorState) => void\n onUnset: () => void\n color: ColorValue\n}\n\nconst ColorPicker = (props: ColorPickerProps) => {\n const {\n width,\n color: {rgb, hex, hsv, hsl},\n onChange: onChangeProp,\n onUnset,\n disableAlpha,\n colorList,\n readOnly,\n } = props\n\n // Remembers the hue across achromatic colors (saturation 0), where the hue\n // can't be recovered from the color value itself. While the color is\n // chromatic the live `hsl` prop is authoritative — so external value changes\n // (undo, remote sync) are picked up — and the ref only bridges achromatic\n // spans. Adapted from react-color's `ColorWrap` HOC (MIT, Copyright (c) 2015\n // Case Sandberg).\n const oldHueRef = useRef(hsl?.h ?? 0)\n\n const onChange = (data: Color): void => {\n if (!simpleCheckForValidColor(data)) {\n return\n }\n const incomingHue = typeof data === 'string' ? undefined : 'h' in data ? data.h : undefined\n const oldHue = hsl && hsl.s > 0 ? hsl.h : oldHueRef.current\n const nextColor = toState(data, incomingHue || oldHue)\n oldHueRef.current = nextColor.oldHue\n onChangeProp(nextColor)\n }\n\n if (!hsl || !hsv) {\n return null\n }\n\n return (\n <div className={root} style={width ? assignInlineVars({[widthVar]: width}) : undefined}>\n <Card padding={1} border radius={1}>\n <Stack gap={2}>\n {!readOnly && (\n <>\n <Card overflow=\"hidden\" className={saturationCard}>\n <Saturation onChange={onChange} hsl={hsl} hsv={hsv} />\n </Card>\n\n <Card shadow={1} radius={3} overflow=\"hidden\" className={sliderCard}>\n <Hue hsl={hsl} onChange={!readOnly && onChange} />\n </Card>\n\n {!disableAlpha && (\n <Card shadow={1} radius={3} overflow=\"hidden\" className={alphaCard}>\n <Alpha rgb={rgb} hsl={hsl} onChange={onChange} />\n </Card>\n )}\n </>\n )}\n <Flex>\n <Card flex={1} radius={2} overflow=\"hidden\" className={previewCard}>\n <Checkboard size={8} white=\"transparent\" grey=\"rgba(0,0,0,.08)\" />\n <ColorBox backgroundColor={`rgba(${rgb?.r},${rgb?.g},${rgb?.b},${rgb?.a})`} />\n\n {readOnly && (\n <ReadOnlyContainer\n padding={2}\n paddingBottom={1}\n sizing=\"border\"\n justify=\"space-between\"\n >\n <Stack gap={3} marginTop={1}>\n <Text size={3} weight=\"bold\">\n {hex}\n </Text>\n\n <Inline gap={3}>\n <Text size={1}>\n <strong>RGB: </strong>\n {rgb?.r} {rgb?.g} {rgb?.b}\n </Text>\n <Text size={1}>\n <strong>HSL: </strong> {Math.round(hsl?.h ?? 0)}{' '}\n {Math.round((hsl?.s ?? 0) * 100)}% {Math.round((hsl?.l ?? 0) * 100)}%\n </Text>\n </Inline>\n </Stack>\n </ReadOnlyContainer>\n )}\n </Card>\n\n {!readOnly && (\n <Flex align=\"flex-start\" marginLeft={2}>\n <FieldsBox>\n <ColorPickerFields\n rgb={rgb}\n hsl={hsl}\n hex={hex}\n onChange={onChange}\n disableAlpha={disableAlpha}\n />\n </FieldsBox>\n <Box marginLeft={2}>\n <Button onClick={onUnset} title=\"Delete color\" icon={TrashIcon} tone=\"critical\" />\n </Box>\n </Flex>\n )}\n </Flex>\n {colorList && <ColorList colors={colorList} onChange={onChange} />}\n </Stack>\n </Card>\n </div>\n )\n}\n\nconst DEFAULT_COLOR: ColorValue & {source: string} = {\n hex: '#24a3e3',\n hsl: {h: 200, s: 0.7732, l: 0.5156, a: 1},\n hsv: {h: 200, s: 0.8414, v: 0.8901, a: 1},\n rgb: {r: 46, g: 163, b: 227, a: 1},\n source: 'hex',\n}\n\nexport default function ColorInput(props: ObjectInputProps): React.JSX.Element {\n const {onChange, readOnly} = props\n // oxlint-disable-next-line no-unsafe-type-assertion\n const _value = props.value as ColorValue | undefined\n const [value, setColorOptimistic] = useOptimistic(_value)\n const type = props.schemaType as ColorSchemaType\n const focusRef = useRef<HTMLButtonElement>(null)\n\n function handleChange(nextColor: ColorValue) {\n const fieldPatches = type.fields\n .filter((field) => field.name in nextColor)\n .map((field) => {\n // oxlint-disable-next-line no-unsafe-type-assertion\n const nextFieldValue = nextColor[field.name as keyof ColorValue]\n const isObject = field.type.jsonType === 'object'\n return set(\n isObject ? Object.assign({_type: field.type.name}, nextFieldValue) : nextFieldValue,\n [field.name],\n )\n })\n\n onChange([\n setIfMissing({_type: type.name}),\n set(type.name, ['_type']),\n set(nextColor.rgb?.a, ['alpha']),\n ...fieldPatches,\n ])\n }\n\n return (\n <>\n {value && value.hex ? (\n <ColorPicker\n color={value}\n onChange={(nextColor) =>\n startTransition(() => {\n setColorOptimistic(nextColor)\n handleChange(nextColor)\n })\n }\n readOnly={readOnly || (typeof type.readOnly === 'boolean' && type.readOnly)}\n disableAlpha={!!type.options?.disableAlpha}\n colorList={type.options?.colorList}\n onUnset={() =>\n startTransition(() => {\n setColorOptimistic(undefined)\n onChange(unset())\n })\n }\n />\n ) : (\n <Button\n icon={AddIcon}\n mode=\"ghost\"\n text=\"Create color\"\n ref={focusRef}\n disabled={Boolean(readOnly)}\n onClick={() =>\n startTransition(() => {\n setColorOptimistic(DEFAULT_COLOR)\n handleChange(DEFAULT_COLOR)\n })\n }\n />\n )}\n </>\n )\n}\n"],"mappings":"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"}
\ No newline at end of file