aporia 0.1.0 → 0.2.1

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/isTextInputTarget.ts","../src/components/SliderOverlapDebug.tsx","../src/ThemeProvider.tsx","../src/components/SliderRow.tsx","../src/components/SwatchPopover.tsx","../src/components/ColorRow.tsx","../src/components/ToggleRow.tsx","../src/components/GradientPicker.tsx","../src/components/GradientRow.tsx"],"sourcesContent":["/** True when a keyboard shortcut should not steal focus from editable fields. */\nexport function isTextInputTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) return false\n if (target.isContentEditable) return true\n const tag = target.tagName\n if (tag === 'TEXTAREA' || tag === 'SELECT') return true\n if (tag !== 'INPUT') return false\n const type = (target as HTMLInputElement).type\n return (\n type === 'text' ||\n type === 'search' ||\n type === 'url' ||\n type === 'tel' ||\n type === 'email' ||\n type === 'password' ||\n type === 'number' ||\n type === ''\n )\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from 'react'\nimport { isTextInputTarget } from '../utils/isTextInputTarget'\n\nconst SliderOverlapDebugContext = createContext(false)\n\nexport function SliderOverlapDebugProvider({ children }: { children: ReactNode }) {\n const [enabled, setEnabled] = useState(false)\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (!e.shiftKey || e.repeat) return\n if (e.code !== 'KeyD') return\n if (isTextInputTarget(e.target)) return\n e.preventDefault()\n setEnabled((v) => !v)\n }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [])\n\n return (\n <SliderOverlapDebugContext.Provider value={enabled}>\n {children}\n </SliderOverlapDebugContext.Provider>\n )\n}\n\nexport function useSliderOverlapDebugEnabled() {\n return useContext(SliderOverlapDebugContext)\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from 'react'\nimport { isTextInputTarget } from './utils/isTextInputTarget'\n\nexport type Theme = 'dark' | 'light'\n\nconst STORAGE_KEY = 'aporia-theme'\n\ntype ThemeContextValue = {\n theme: Theme\n setTheme: (t: Theme) => void\n toggleTheme: () => void\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nfunction readStoredTheme(): Theme {\n try {\n const s = localStorage.getItem(STORAGE_KEY)\n if (s === 'light' || s === 'dark') return s\n } catch {\n /* private mode etc. */\n }\n return 'dark'\n}\n\nexport function ThemeProvider({ children }: { children: ReactNode }) {\n const [theme, setThemeState] = useState<Theme>(readStoredTheme)\n\n useEffect(() => {\n document.documentElement.dataset.theme = theme\n try {\n localStorage.setItem(STORAGE_KEY, theme)\n } catch {\n /* ignore */\n }\n }, [theme])\n\n const setTheme = useCallback((t: Theme) => setThemeState(t), [])\n const toggleTheme = useCallback(() => {\n setThemeState((t) => (t === 'dark' ? 'light' : 'dark'))\n }, [])\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (!e.shiftKey || e.repeat) return\n if (e.code !== 'KeyT') return\n if (isTextInputTarget(e.target)) return\n e.preventDefault()\n toggleTheme()\n }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [toggleTheme])\n\n return (\n <ThemeContext.Provider value={{ theme, setTheme, toggleTheme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\nexport function useTheme() {\n const ctx = useContext(ThemeContext)\n if (!ctx) {\n throw new Error('useTheme must be used within ThemeProvider')\n }\n return ctx\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport type { PointerEvent as ReactPointerEvent } from 'react'\nimport { motion, useMotionValue, useSpring, useTransform } from 'motion/react'\nimport { useSliderOverlapDebugEnabled } from './SliderOverlapDebug'\nimport { useTheme } from '../ThemeProvider'\nimport './SliderRow.css'\n\nfunction clearDocumentSelection() {\n const sel = window.getSelection?.()\n if (sel && sel.rangeCount > 0) sel.removeAllRanges()\n}\n\n/** Fractional step → allow one decimal separator while typing. */\nfunction stepAllowsDecimal(step: number): boolean {\n if (!Number.isFinite(step) || step === 0) return true\n return step % 1 !== 0\n}\n\n/** Strip letters/symbols; keep optional leading `-` (if min < 0) and at most one `.` when step is fractional. */\nfunction sanitizeValueDraft(raw: string, min: number, step: number): string {\n const allowNeg = min < 0\n const allowDecimal = stepAllowsDecimal(step)\n let out = ''\n let dotUsed = false\n\n for (let i = 0; i < raw.length; i++) {\n const c = raw[i]\n if (allowNeg && c === '-' && out === '') {\n out += '-'\n continue\n }\n if (allowDecimal && c === '.' && !dotUsed) {\n dotUsed = true\n out += '.'\n continue\n }\n if (c >= '0' && c <= '9') {\n out += c\n continue\n }\n }\n return out\n}\n\n/** Normalized position in [0, 1]; stretch ramps to max within `edge` of each end */\nfunction edgeStretchPx(\n u: number,\n maxStretch: number,\n edge: number,\n dragBoost: number,\n): { left: number; right: number } {\n if (!Number.isFinite(u)) return { left: 0, right: 0 }\n const uClamped = Math.min(1, Math.max(0, u))\n let left = 0\n let right = 0\n if (uClamped < edge) left = (1 - uClamped / edge) * maxStretch\n else if (uClamped > 1 - edge) right = ((uClamped - (1 - edge)) / edge) * maxStretch\n return { left: left * dragBoost, right: right * dragBoost }\n}\n\nexport type SliderRowProps = {\n label: string\n value: number\n min: number\n max: number\n step: number\n onChange: (value: number) => void\n fmt?: (value: number) => string\n}\n\n/** Edge stretch while dragging (px at full deflection) */\nconst MAX_EDGE_STRETCH_PX = 2\nconst EDGE_FRACTION = 0.14\nconst AT_END_DRAG_BOOST = 1.04\n/** Overpull past min/max */\nconst PULL_GAIN = 0.05\nconst PULL_CAP_PX = 3\n\n/** Spring residue below this (px) snaps to 0 so width/margin match base exactly */\nconst STRETCH_SNAP_EPS_PX = 0.4\n\n/** Stiffer pull/stretch = quicker snap back after release */\nconst stretchSpringOpts = {\n stiffness: 340,\n damping: 42,\n mass: 0.4,\n restDelta: 0.012,\n restSpeed: 0.045,\n} as const\n\nconst pullSpringOpts = {\n stiffness: 520,\n damping: 46,\n mass: 0.34,\n restDelta: 0.012,\n restSpeed: 0.045,\n} as const\n\nconst THUMB_WIDTH_PX = 2\nconst THUMB_HEIGHT_PX = 16\nconst THUMB_HEIGHT_BEHIND_LABEL_PX = 10\n/** Gap from progress fill’s right edge to thumb’s right edge (translate anchor) */\nconst THUMB_INSET_FROM_FILL_END_PX = 10\n\n/** Extra space past measured text before the thumb counts as clear of label / value. */\nconst THUMB_OVERLAP_PAD_PX = 10\n\n/** Extra px after measured draft width so the caret isn’t clipped in the number input. */\nconst VALUE_EDIT_WIDTH_CARET_PAD_PX = 6\n\ntype ThumbOverlapDebugZones = {\n overlapLabelEnd: number\n overlapValueStart: number\n domLabelText: { left: number; top: number; width: number; height: number }\n domValueText: { left: number; top: number; width: number; height: number }\n}\n\ntype ThumbOverlapLayout = { labelEnd: number; valueStart: number }\n\nexport function SliderRow({\n label,\n value,\n min,\n max,\n step,\n onChange,\n fmt,\n}: SliderRowProps) {\n const { theme } = useTheme()\n const debugOverlap = useSliderOverlapDebugEnabled()\n const [editing, setEditing] = useState(false)\n const [hovered, setHovered] = useState(false)\n const [dragging, setDragging] = useState(false)\n const [draft, setDraft] = useState('')\n const [mounted, setMounted] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const cardRef = useRef<HTMLDivElement>(null)\n const wrapRef = useRef<HTMLDivElement>(null)\n const labelTextRef = useRef<HTMLSpanElement>(null)\n const valueTextRef = useRef<HTMLSpanElement>(null)\n const valueEditMeasureRef = useRef<HTMLSpanElement>(null)\n const valueRef = useRef<HTMLDivElement>(null)\n const [valueEditWidthPx, setValueEditWidthPx] = useState<number | null>(null)\n const [overlapLayout, setOverlapLayout] = useState<ThumbOverlapLayout | null>(null)\n const [idleThumbOpacity, setIdleThumbOpacity] = useState(0)\n const lastPointerXRef = useRef(0)\n const dragStateRef = useRef({ value, min, max })\n dragStateRef.current = { value, min, max }\n\n const targetStretchL = useMotionValue(0)\n const targetStretchR = useMotionValue(0)\n const stretchL = useSpring(targetStretchL, stretchSpringOpts)\n const stretchR = useSpring(targetStretchR, stretchSpringOpts)\n\n const pullL = useMotionValue(0)\n const pullR = useMotionValue(0)\n const pullLSpring = useSpring(pullL, pullSpringOpts)\n const pullRSpring = useSpring(pullR, pullSpringOpts)\n\n const baseW = useMotionValue(0)\n\n const cardWidth = useTransform(\n [stretchL, stretchR, pullLSpring, pullRSpring, baseW],\n ([l, r, pl, pr, b]) => {\n const base = Number(b)\n let extra = Number(l) + Number(r) + Number(pl) + Number(pr)\n if (Math.abs(extra) < STRETCH_SNAP_EPS_PX) extra = 0\n return Math.max(1, Math.round(base + extra))\n },\n )\n const cardMarginLeft = useTransform([stretchL, pullLSpring], ([l, pl]) => {\n let leftExtra = Number(l) + Number(pl)\n if (Math.abs(leftExtra) < STRETCH_SNAP_EPS_PX) leftExtra = 0\n return Math.round(-leftExtra)\n })\n\n /** Column width for sliders = parent row (e.g. .sliderGroup), not the wrap (can inflate with flex min-width:auto). */\n const syncBaseWidthFromParent = () => {\n const wrap = wrapRef.current\n const parent = wrap?.parentElement\n if (!parent) return\n // offsetWidth: integer layout width; avoids subpixel drift vs getBoundingClientRect\n baseW.set(parent.offsetWidth)\n }\n\n useLayoutEffect(() => {\n const wrap = wrapRef.current\n const parent = wrap?.parentElement\n if (!parent) return\n\n syncBaseWidthFromParent()\n const ro = new ResizeObserver(() => {\n syncBaseWidthFromParent()\n })\n ro.observe(parent)\n return () => ro.disconnect()\n }, [baseW])\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useLayoutEffect(() => {\n if (theme !== 'light') {\n setIdleThumbOpacity(0)\n return\n }\n const raw = getComputedStyle(document.documentElement)\n .getPropertyValue('--slider-thumb-idle-opacity')\n .trim()\n const n = parseFloat(raw)\n setIdleThumbOpacity(Number.isFinite(n) ? n : 0.4)\n }, [theme])\n\n const display = fmt ? fmt(value) : value\n\n useLayoutEffect(() => {\n const card = cardRef.current\n const labelEl = labelTextRef.current\n const valueEl = editing ? inputRef.current : valueTextRef.current\n if (!mounted || !card || !labelEl || !valueEl) {\n setOverlapLayout(null)\n return\n }\n\n const measure = () => {\n const c = cardRef.current\n const le = labelTextRef.current\n const ve = editing ? inputRef.current : valueTextRef.current\n if (!c || !le || !ve) {\n setOverlapLayout(null)\n return\n }\n const cardRect = c.getBoundingClientRect()\n const lr = le.getBoundingClientRect()\n const vr = ve.getBoundingClientRect()\n const w = cardRect.width\n let labelEnd = lr.right - cardRect.left + THUMB_OVERLAP_PAD_PX\n let valueStart = vr.left - cardRect.left - THUMB_OVERLAP_PAD_PX\n labelEnd = Math.min(Math.max(0, labelEnd), w)\n valueStart = Math.min(Math.max(0, valueStart), w)\n if (valueStart < labelEnd) valueStart = labelEnd\n\n setOverlapLayout((prev) => {\n if (\n prev &&\n prev.labelEnd === labelEnd &&\n prev.valueStart === valueStart\n ) {\n return prev\n }\n return { labelEnd, valueStart }\n })\n }\n\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(card)\n return () => ro.disconnect()\n }, [mounted, label, display, editing, draft, value])\n\n useLayoutEffect(() => {\n if (!editing) {\n setValueEditWidthPx(null)\n return\n }\n const measure = () => {\n const m = valueEditMeasureRef.current\n const zone = valueRef.current\n if (!m || !zone) return\n const w = m.getBoundingClientRect().width\n const cs = getComputedStyle(zone)\n const padL = parseFloat(cs.paddingLeft) || 0\n const padR = parseFloat(cs.paddingRight) || 0\n const maxInner = Math.max(0, zone.clientWidth - padL - padR)\n const next = Math.min(\n Math.max(Math.ceil(w + VALUE_EDIT_WIDTH_CARET_PAD_PX), 22),\n Math.max(maxInner, 22),\n )\n setValueEditWidthPx((prev) => (prev === next ? prev : next))\n }\n measure()\n const ro = new ResizeObserver(measure)\n const z = valueRef.current\n if (z) ro.observe(z)\n return () => ro.disconnect()\n }, [editing, draft])\n\n const span = max - min\n const u = span > 0 ? (value - min) / span : 0\n\n /*\n * Edge stretch must only run while the pointer drag is active. If we keep stretching\n * whenever u is near 0/1 (e.g. Spread stuck at 1.00), the card stays wider than siblings\n * forever — that reads as \"stuck overdrag\" and a second click often nudges u/hover.\n */\n useEffect(() => {\n if (span <= 0 || !Number.isFinite(u) || !dragging) {\n targetStretchL.set(0)\n targetStretchR.set(0)\n return\n }\n const atEnd = value <= min + 1e-9 || value >= max - 1e-9\n const dragBoost = atEnd ? AT_END_DRAG_BOOST : 1\n const { left, right } = edgeStretchPx(u, MAX_EDGE_STRETCH_PX, EDGE_FRACTION, dragBoost)\n targetStretchL.set(left)\n targetStretchR.set(right)\n }, [u, span, dragging, value, min, max, targetStretchL, targetStretchR])\n\n const resetPull = () => {\n pullL.set(0)\n pullR.set(0)\n }\n\n useEffect(() => {\n if (!dragging) return\n\n const onMove = (e: PointerEvent) => {\n const { value: v, min: lo, max: hi } = dragStateRef.current\n const sp = hi - lo\n if (sp <= 0) return\n const uNow = (v - lo) / sp\n const dx = e.clientX - lastPointerXRef.current\n lastPointerXRef.current = e.clientX\n\n if (uNow >= 1 - 1e-6 && dx > 0) {\n pullR.set(Math.min(PULL_CAP_PX, Math.max(0, pullR.get() + dx * PULL_GAIN)))\n } else if (uNow <= 1e-6 && dx < 0) {\n pullL.set(Math.min(PULL_CAP_PX, Math.max(0, pullL.get() - dx * PULL_GAIN)))\n }\n }\n\n const onEnd = () => {\n resetPull()\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onEnd)\n window.addEventListener('pointercancel', onEnd)\n return () => {\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onEnd)\n window.removeEventListener('pointercancel', onEnd)\n }\n }, [dragging, pullL, pullR])\n\n const pct = u * 100\n\n const getThumbLayout = (): {\n opacity: number\n height: number\n debugZones: ThumbOverlapDebugZones | null\n } => {\n if (!mounted || !cardRef.current || !overlapLayout) {\n return {\n opacity: dragging ? 1 : 0.7,\n height: THUMB_HEIGHT_PX,\n debugZones: null,\n }\n }\n\n const cardRect = cardRef.current.getBoundingClientRect()\n const fillEndPx = (cardRect.width * pct) / 100\n const thumbRightPx = fillEndPx - THUMB_INSET_FROM_FILL_END_PX\n const thumbCenterX = thumbRightPx - THUMB_WIDTH_PX / 2\n const { labelEnd, valueStart } = overlapLayout\n\n const behindLabel = thumbCenterX < labelEnd\n const behindValue = thumbCenterX > valueStart\n\n let opacity: number\n if (behindLabel || behindValue) {\n opacity = 0.1\n } else {\n opacity = dragging ? 1 : 0.7\n }\n\n const height = behindLabel ? THUMB_HEIGHT_BEHIND_LABEL_PX : THUMB_HEIGHT_PX\n\n let debugZones: ThumbOverlapDebugZones | null = null\n if (\n debugOverlap &&\n labelTextRef.current &&\n (editing ? inputRef.current : valueTextRef.current)\n ) {\n const cr = cardRef.current.getBoundingClientRect()\n const lr = labelTextRef.current.getBoundingClientRect()\n const ve = editing ? inputRef.current! : valueTextRef.current!\n const vr = ve.getBoundingClientRect()\n debugZones = {\n overlapLabelEnd: labelEnd,\n overlapValueStart: valueStart,\n domLabelText: {\n left: lr.left - cr.left,\n top: lr.top - cr.top,\n width: lr.width,\n height: lr.height,\n },\n domValueText: {\n left: vr.left - cr.left,\n top: vr.top - cr.top,\n width: vr.width,\n height: vr.height,\n },\n }\n }\n\n return { opacity, height, debugZones }\n }\n\n const { opacity: thumbOpacity, height: thumbHeight, debugZones } = getThumbLayout()\n\n const startEdit = (e: React.MouseEvent) => {\n e.stopPropagation()\n setDraft(String(value))\n setEditing(true)\n setTimeout(() => inputRef.current?.select(), 0)\n }\n\n const commitEdit = () => {\n const parsed = parseFloat(draft)\n if (!Number.isNaN(parsed)) {\n onChange(Math.max(min, Math.min(max, parsed)))\n }\n setEditing(false)\n }\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commitEdit()\n }\n if (e.key === 'Escape') {\n setEditing(false)\n }\n e.stopPropagation()\n }\n\n const isActive = hovered || dragging\n\n const idleThumbWidth = theme === 'light' ? THUMB_WIDTH_PX : 0\n\n const handleRangePointerDown = (e: ReactPointerEvent<HTMLInputElement>) => {\n clearDocumentSelection()\n lastPointerXRef.current = e.clientX\n syncBaseWidthFromParent()\n try {\n e.currentTarget.setPointerCapture(e.pointerId)\n } catch {\n /* ignore */\n }\n setDragging(true)\n }\n\n const handleRangePointerUp = (e: ReactPointerEvent<HTMLInputElement>) => {\n try {\n if (e.currentTarget.hasPointerCapture?.(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId)\n }\n } catch {\n /* ignore */\n }\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }\n\n return (\n <div\n className=\"sliderCardWrap\"\n ref={wrapRef}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <motion.div\n ref={cardRef}\n className=\"sliderCard\"\n data-active={isActive ? 'true' : 'false'}\n style={{ width: cardWidth, marginLeft: cardMarginLeft }}\n draggable={false}\n onDragStart={(e) => e.preventDefault()}\n >\n <motion.div\n className=\"sliderTrack\"\n data-active={isActive ? 'true' : 'false'}\n style={{ width: `${pct}%` }}\n />\n {debugZones ? (\n <div className=\"sliderDebugOverlap\" aria-hidden>\n <div\n className=\"sliderDebugOverlap__heuristic sliderDebugOverlap__heuristic--label\"\n style={{ width: debugZones.overlapLabelEnd }}\n title=\"Label overlap threshold (text right + pad)\"\n />\n <div\n className=\"sliderDebugOverlap__heuristic sliderDebugOverlap__heuristic--value\"\n style={{ left: debugZones.overlapValueStart }}\n title=\"Value overlap threshold (text left − pad)\"\n />\n <div\n className=\"sliderDebugOverlap__dom sliderDebugOverlap__dom--label\"\n style={{\n left: debugZones.domLabelText.left,\n top: debugZones.domLabelText.top,\n width: debugZones.domLabelText.width,\n height: debugZones.domLabelText.height,\n }}\n title=\"Measured label text box\"\n />\n <div\n className=\"sliderDebugOverlap__dom sliderDebugOverlap__dom--value\"\n style={{\n left: debugZones.domValueText.left,\n top: debugZones.domValueText.top,\n width: debugZones.domValueText.width,\n height: debugZones.domValueText.height,\n }}\n title=\"Measured value text / input box\"\n />\n </div>\n ) : null}\n <motion.div\n className=\"sliderThumb\"\n data-dragging={dragging ? 'true' : 'false'}\n style={{\n left: `calc(${pct}% - ${THUMB_INSET_FROM_FILL_END_PX}px)`,\n }}\n animate={{\n width: isActive ? THUMB_WIDTH_PX : idleThumbWidth,\n height: isActive ? thumbHeight : THUMB_HEIGHT_PX,\n opacity: isActive ? thumbOpacity : idleThumbOpacity,\n }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n />\n <motion.div\n className=\"sliderTicks\"\n animate={{ opacity: isActive ? 1 : 0 }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n >\n {[...Array(10)].map((_, i) => (\n <div key={i} className=\"sliderTick\" />\n ))}\n </motion.div>\n <input\n className=\"sliderInput\"\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n draggable={false}\n onChange={(e) => onChange(parseFloat(e.target.value))}\n onPointerDown={handleRangePointerDown}\n onPointerUp={handleRangePointerUp}\n onPointerCancel={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }}\n onLostPointerCapture={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }}\n />\n <span className=\"sliderLabel\" draggable={false}>\n <span ref={labelTextRef} className=\"sliderLabelText\">\n {label}\n </span>\n </span>\n <div\n ref={valueRef}\n className=\"sliderValueZone\"\n onClick={(e) => e.stopPropagation()}\n >\n {editing ? (\n <>\n <span\n ref={valueEditMeasureRef}\n className=\"sliderValue sliderValueText sliderValueMeasure\"\n aria-hidden\n >\n {draft.length > 0 ? draft : '0'}\n </span>\n <input\n ref={inputRef}\n className=\"sliderValueInput\"\n type=\"text\"\n inputMode={min < 0 || stepAllowsDecimal(step) ? 'decimal' : 'numeric'}\n value={draft}\n autoComplete=\"off\"\n spellCheck={false}\n aria-valuemin={min}\n aria-valuemax={max}\n style={\n valueEditWidthPx != null\n ? { width: valueEditWidthPx }\n : { minWidth: 22 }\n }\n onChange={(e) => setDraft(sanitizeValueDraft(e.target.value, min, step))}\n onBlur={commitEdit}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n />\n </>\n ) : (\n <span\n className=\"sliderValue\"\n draggable={false}\n data-active={isActive ? 'true' : 'false'}\n onClick={startEdit}\n >\n <span ref={valueTextRef} className=\"sliderValueText\">\n {display}\n </span>\n </span>\n )}\n </div>\n </motion.div>\n </div>\n )\n}\n","import { Popover } from '@base-ui/react'\nimport type { PopoverTrigger } from '@base-ui/react/popover'\nimport type { ReactNode } from 'react'\nimport './SwatchPopover.css'\n\nexport type SwatchPopoverRenderTrigger = PopoverTrigger.Props['render']\n\ntype SwatchPopoverProps = {\n title?: string\n renderTrigger: NonNullable<SwatchPopoverRenderTrigger>\n children: ReactNode\n}\n\n/**\n * Base UI Popover anchored to a swatch: opens below, aligned to the inline end (bottom-trailing in LTR).\n * `modal={true}` is required for the internal backdrop (blocks clicks/scroll on the rest of the page).\n * `modal=\"trap-focus\"` does not mount that layer, so controls underneath stayed clickable.\n */\nexport function SwatchPopover({ title, renderTrigger, children }: SwatchPopoverProps) {\n return (\n <Popover.Root modal>\n <Popover.Trigger render={renderTrigger} />\n <Popover.Portal className=\"swatchPopoverPortal\">\n <Popover.Positioner\n className=\"swatchPopoverPositioner\"\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"end\"\n sideOffset={6}\n collisionAvoidance={{ side: 'flip', align: 'shift', fallbackAxisSide: 'none' }}\n >\n <Popover.Popup\n className=\"swatchPopoverPopup\"\n initialFocus={(openType) => openType === 'keyboard'}\n >\n {title && <Popover.Title className=\"swatchPopoverTitle\">{title}</Popover.Title>}\n <Popover.Close type=\"button\" className=\"swatchPopoverCloseSrOnly\">\n Close\n </Popover.Close>\n <div className=\"swatchPopoverBody\">{children}</div>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import { useLayoutEffect, useRef, useState, type ChangeEvent, type ClipboardEvent, type KeyboardEvent, type MouseEvent } from 'react'\nimport { SwatchPopover } from './SwatchPopover'\nimport './ColorRow.css'\n\nfunction normalizeHex(raw: string): string {\n const s = raw.trim()\n const m = s.match(/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/)\n if (!m) return '#808080'\n let h = m[1]\n if (h.length === 3) {\n h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2]\n }\n return `#${h.toUpperCase()}`\n}\n\nfunction hexDigits(hex: string): string {\n const n = normalizeHex(hex)\n return n.slice(1)\n}\n\nfunction isValidSixHex(d: string): boolean {\n return /^[0-9a-fA-F]{6}$/.test(d)\n}\n\nexport type ColorRowProps = {\n label?: string\n value: string\n onChange: (hex: string) => void\n}\n\nexport function ColorRow({ label = 'Color', value, onChange }: ColorRowProps) {\n const [hovered, setHovered] = useState(false)\n const [editing, setEditing] = useState(false)\n const [draft, setDraft] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const hex = normalizeHex(value)\n const isActive = hovered || editing\n\n useLayoutEffect(() => {\n if (!editing) return\n inputRef.current?.focus()\n inputRef.current?.select()\n }, [editing])\n\n const startEdit = (e: MouseEvent) => {\n e.stopPropagation()\n setDraft(hexDigits(value))\n setEditing(true)\n }\n\n const commit = () => {\n const d = draft.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n if (isValidSixHex(d)) {\n onChange(`#${d.toUpperCase()}`)\n }\n setEditing(false)\n }\n\n const onHexKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commit()\n }\n if (e.key === 'Escape') {\n setEditing(false)\n }\n e.stopPropagation()\n }\n\n const onHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(next)\n }\n\n const onHexPaste = (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault()\n const pasted = e.clipboardData.getData('text')\n // Strip # and any non-hex characters, take first 6 valid chars\n const cleaned = pasted.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(cleaned)\n }\n\n const onPickerChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange(normalizeHex(e.target.value))\n }\n\n return (\n <div\n className=\"colorRowWrap\"\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <div className=\"colorCard\" data-active={isActive ? 'true' : 'false'}>\n <span className=\"colorLabel\">{label}</span>\n <div className=\"colorValueZone\">\n {editing ? (\n <span className=\"colorRowValue\" data-active={isActive ? 'true' : 'false'}>\n <span className=\"colorHexHash\">#</span>\n <input\n ref={inputRef}\n className=\"colorHexInput\"\n value={draft}\n onChange={onHexChange}\n onPaste={onHexPaste}\n onBlur={commit}\n onKeyDown={onHexKeyDown}\n onClick={(e) => e.stopPropagation()}\n maxLength={6}\n inputMode=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n aria-label=\"Hex color without hash\"\n />\n </span>\n ) : (\n <span\n className=\"colorRowValue\"\n data-active={isActive ? 'true' : 'false'}\n role=\"button\"\n tabIndex={0}\n aria-label={`Edit hex color, ${hex}`}\n onClick={startEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setDraft(hexDigits(value))\n setEditing(true)\n }\n }}\n >\n <span className=\"colorHexHash\">#</span>\n <span className=\"colorHexDigits\">{hexDigits(hex)}</span>\n </span>\n )}\n <SwatchPopover\n title={label}\n renderTrigger={(props) => (\n <button\n type=\"button\"\n {...props}\n className={['colorSwatchBtn', props.className].filter(Boolean).join(' ')}\n style={{ ...props.style, backgroundColor: hex }}\n aria-label={`Open ${label} picker`}\n />\n )}\n >\n <p>Custom color controls will live here. For now, use the system picker below.</p>\n <input\n type=\"color\"\n className=\"swatchPopoverNativeColor\"\n value={hex}\n onChange={onPickerChange}\n aria-label=\"Native color picker\"\n />\n </SwatchPopover>\n </div>\n </div>\n </div>\n )\n}\n","import type { KeyboardEvent } from 'react'\nimport './ToggleRow.css'\n\nexport type ToggleRowProps = {\n label: string\n checked: boolean\n onChange: (next: boolean) => void\n}\n\nexport function ToggleRow({ label, checked, onChange }: ToggleRowProps) {\n const toggle = () => onChange(!checked)\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n toggle()\n }\n }\n\n return (\n <div className=\"toggleRowWrap\">\n <div\n role=\"switch\"\n tabIndex={0}\n aria-checked={checked}\n aria-label={label}\n className=\"toggleCard\"\n data-on={checked ? 'true' : 'false'}\n onClick={toggle}\n onKeyDown={onKeyDown}\n >\n <span className=\"toggleLabel\">{label}</span>\n <div className=\"toggleControl\" aria-hidden>\n <div className=\"toggleSwitch\">\n <div className=\"toggleSwitch__track\">\n <div className=\"toggleSwitch__thumb\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ClipboardEvent,\n type KeyboardEvent,\n type MouseEvent,\n} from 'react'\nimport './GradientPicker.css'\n\nexport type GradientStop = {\n color: string // hex with #\n}\n\nexport type GradientPickerProps = {\n /** Array of gradient stops (colors only, positions auto-distributed) */\n stops: GradientStop[]\n /** Called when stops change */\n onChange: (stops: GradientStop[]) => void\n /** Gradient angle in degrees, default 90 (left to right) */\n angle?: number\n}\n\nfunction normalizeHex(raw: string): string {\n const s = raw.trim()\n const m = s.match(/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/)\n if (!m) return '#808080'\n let h = m[1]\n if (h.length === 3) {\n h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2]\n }\n return `#${h.toUpperCase()}`\n}\n\n/** Convert HSL to RGB hex */\nfunction hslToHex(h: number, s: number, l: number): string {\n const hue = ((h % 360) + 360) % 360\n const sat = Math.max(0, Math.min(1, s))\n const lit = Math.max(0, Math.min(1, l))\n\n const c = (1 - Math.abs(2 * lit - 1)) * sat\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1))\n const m = lit - c / 2\n\n let r = 0, g = 0, b = 0\n if (hue < 60) { r = c; g = x; b = 0 }\n else if (hue < 120) { r = x; g = c; b = 0 }\n else if (hue < 180) { r = 0; g = c; b = x }\n else if (hue < 240) { r = 0; g = x; b = c }\n else if (hue < 300) { r = x; g = 0; b = c }\n else { r = c; g = 0; b = x }\n\n const toHex = (v: number) => Math.round((v + m) * 255).toString(16).padStart(2, '0')\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase()\n}\n\n/**\n * Generate an aesthetic gradient with smooth color transitions.\n * Creates gradients that flow from light to dark with a cohesive color story.\n */\nfunction generateAestheticGradient(stopCount: number): GradientStop[] {\n // Pick a random base hue (0-360)\n const baseHue = Math.random() * 360\n\n // Hue shift across the gradient (30-60 degrees for analogous feel)\n const hueShift = 25 + Math.random() * 35\n // Direction of hue shift (positive or negative)\n const hueDirection = Math.random() > 0.5 ? 1 : -1\n\n const stops: GradientStop[] = []\n\n for (let i = 0; i < stopCount; i++) {\n const t = i / (stopCount - 1) // 0 to 1\n\n // Hue shifts gradually across the gradient\n const hue = baseHue + hueDirection * hueShift * t\n\n // Saturation curve: starts lower, peaks in middle, can vary\n // This creates more interesting gradients than flat saturation\n const satBase = 0.35 + Math.random() * 0.15 // 0.35-0.50 base\n const satPeak = 0.65 + Math.random() * 0.25 // 0.65-0.90 peak\n const saturation = satBase + (satPeak - satBase) * Math.sin(t * Math.PI * 0.8)\n\n // Lightness: smooth transition from light to dark\n // Start light (0.75-0.85), end dark (0.08-0.15)\n const lightStart = 0.75 + Math.random() * 0.10\n const lightEnd = 0.08 + Math.random() * 0.07\n // Use easing for more natural transition\n const eased = t * t * (3 - 2 * t) // smoothstep\n const lightness = lightStart + (lightEnd - lightStart) * eased\n\n stops.push({ color: hslToHex(hue, saturation, lightness) })\n }\n\n return stops\n}\n\nfunction hexDigits(hex: string): string {\n return normalizeHex(hex).slice(1)\n}\n\nfunction isValidSixHex(d: string): boolean {\n return /^[0-9a-fA-F]{6}$/.test(d)\n}\n\n/** Generate CSS linear-gradient from stops with even distribution */\nexport function stopsToGradient(stops: GradientStop[], angle = 90): string {\n if (stops.length === 0) return 'linear-gradient(90deg, #808080, #808080)'\n if (stops.length === 1) {\n const c = normalizeHex(stops[0].color)\n return `linear-gradient(${angle}deg, ${c}, ${c})`\n }\n const colorStops = stops.map((s, i) => {\n const pos = Math.round((i / (stops.length - 1)) * 100)\n return `${normalizeHex(s.color)} ${pos}%`\n })\n return `linear-gradient(${angle}deg, ${colorStops.join(', ')})`\n}\n\n/** Parse a linear-gradient string into stops */\nexport function parseGradient(gradient: string): GradientStop[] {\n // Match linear-gradient(angle, color1 pos1%, color2 pos2%, ...)\n const match = gradient.match(/linear-gradient\\s*\\([^,]+,\\s*(.+)\\)/)\n if (!match) return [{ color: '#FF0000' }, { color: '#0000FF' }]\n\n const colorPart = match[1]\n // Split by comma, extract colors (ignore positions since we auto-distribute)\n const parts = colorPart.split(/,\\s*/)\n const stops: GradientStop[] = []\n\n for (const part of parts) {\n // Extract hex color from each part (e.g., \"#FF0000 0%\" or just \"#FF0000\")\n const hexMatch = part.match(/#[0-9a-fA-F]{3,6}/)\n if (hexMatch) {\n stops.push({ color: normalizeHex(hexMatch[0]) })\n }\n }\n\n return stops.length >= 2 ? stops : [{ color: '#FF0000' }, { color: '#0000FF' }]\n}\n\n/** Default 6 colors for gradient picker (dark to light, top to bottom) */\nexport const DEFAULT_GRADIENT_STOPS: GradientStop[] = [\n { color: '#0E171B' },\n { color: '#00354F' },\n { color: '#005F7A' },\n { color: '#009A97' },\n { color: '#42C0B0' },\n { color: '#BAC9C7' },\n]\n\ntype StopRowProps = {\n index: number\n stop: GradientStop\n canDelete: boolean\n onColorChange: (color: string) => void\n onDelete: () => void\n}\n\nfunction StopRow({ index, stop, canDelete, onColorChange, onDelete }: StopRowProps) {\n const [editing, setEditing] = useState(false)\n const [draft, setDraft] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const hex = normalizeHex(stop.color)\n\n useLayoutEffect(() => {\n if (!editing) return\n inputRef.current?.focus()\n inputRef.current?.select()\n }, [editing])\n\n const startEdit = (e: MouseEvent) => {\n e.stopPropagation()\n setDraft(hexDigits(stop.color))\n setEditing(true)\n }\n\n const commit = () => {\n const d = draft.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n if (isValidSixHex(d)) {\n onColorChange(`#${d.toUpperCase()}`)\n }\n setEditing(false)\n }\n\n const onHexKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault()\n commit()\n }\n if (e.key === 'Escape') {\n setEditing(false)\n }\n e.stopPropagation()\n }\n\n const onHexChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = e.target.value.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(next)\n }\n\n const onHexPaste = (e: ClipboardEvent<HTMLInputElement>) => {\n e.preventDefault()\n const pasted = e.clipboardData.getData('text')\n // Strip # and any non-hex characters, take first 6 valid chars\n const cleaned = pasted.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n setDraft(cleaned)\n }\n\n return (\n <div className=\"gradientPickerStop\">\n <div className=\"gradientPickerStopColorHex\">\n <button\n type=\"button\"\n className=\"gradientPickerStopSwatch\"\n style={{ backgroundColor: hex }}\n onClick={startEdit}\n aria-label={`Edit color for stop ${index + 1}`}\n />\n {editing ? (\n <span className=\"gradientPickerStopHexWrap\">\n <span className=\"gradientPickerStopHexHash\">#</span>\n <input\n ref={inputRef}\n className=\"gradientPickerStopHexInput\"\n value={draft}\n onChange={onHexChange}\n onPaste={onHexPaste}\n onBlur={commit}\n onKeyDown={onHexKeyDown}\n onClick={(e) => e.stopPropagation()}\n maxLength={6}\n inputMode=\"text\"\n autoComplete=\"off\"\n spellCheck={false}\n aria-label=\"Hex color without hash\"\n />\n </span>\n ) : (\n <span\n className=\"gradientPickerStopHex\"\n role=\"button\"\n tabIndex={0}\n onClick={startEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setDraft(hexDigits(stop.color))\n setEditing(true)\n }\n }}\n >\n <span className=\"gradientPickerStopHexHash\">#</span>\n <span className=\"gradientPickerStopHexDigits\">{hexDigits(hex)}</span>\n </span>\n )}\n </div>\n\n <button\n type=\"button\"\n className=\"gradientPickerStopDelete\"\n onClick={onDelete}\n disabled={!canDelete}\n aria-label={`Remove stop ${index + 1}`}\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#minus\" />\n </svg>\n </button>\n </div>\n )\n}\n\nexport function GradientPicker({ stops, onChange }: GradientPickerProps) {\n const handleInvert = () => {\n onChange([...stops].reverse())\n }\n\n const handleAddStop = () => {\n // Add a new stop with a color interpolated between existing stops, or gray\n let newColor = '#808080'\n if (stops.length >= 2) {\n // Pick the midpoint color (just use the middle stop or first stop)\n const midIdx = Math.floor(stops.length / 2)\n newColor = stops[midIdx].color\n } else if (stops.length === 1) {\n newColor = stops[0].color\n }\n onChange([...stops, { color: newColor }])\n }\n\n const handleShuffle = () => {\n // Generate a new aesthetic gradient with the same number of stops\n onChange(generateAestheticGradient(stops.length))\n }\n\n const handleDeleteStop = (index: number) => {\n if (stops.length <= 2) return\n onChange(stops.filter((_, i) => i !== index))\n }\n\n const handleColorChange = (index: number, color: string) => {\n const newStops = stops.map((s, i) => (i === index ? { ...s, color } : s))\n onChange(newStops)\n }\n\n return (\n <div className=\"gradientPicker\">\n {/* Header with icons */}\n <div className=\"gradientPickerHeader\">\n <div className=\"gradientPickerHeaderIconsLeft\">\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleShuffle}\n aria-label=\"Randomize gradient\"\n title=\"Randomize gradient\"\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#shuffle-sparkle\" />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleInvert}\n aria-label=\"Invert gradient\"\n title=\"Invert gradient\"\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#dark-mode\" />\n </svg>\n </button>\n </div>\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleAddStop}\n aria-label=\"Add color stop\"\n title=\"Add color stop\"\n >\n <svg width=\"14\" height=\"14\" aria-hidden=\"true\">\n <use href=\"/icons.svg#plus\" />\n </svg>\n </button>\n </div>\n\n {/* Color stops list */}\n <div className=\"gradientPickerStopsList\">\n {stops.map((stop, i) => (\n <StopRow\n key={i}\n index={i}\n stop={stop}\n canDelete={stops.length > 2}\n onColorChange={(color) => handleColorChange(i, color)}\n onDelete={() => handleDeleteStop(i)}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { SwatchPopover } from './SwatchPopover'\nimport { GradientPicker, DEFAULT_GRADIENT_STOPS, stopsToGradient, type GradientStop } from './GradientPicker'\nimport './GradientRow.css'\n\nexport type GradientRowProps = {\n label?: string\n /** Initial gradient stops - defaults to 6 teal-to-dark colors */\n initialStops?: GradientStop[]\n /** Called when gradient changes */\n onChange?: (gradient: string) => void\n /** Gradient angle in degrees, default 90 */\n angle?: number\n}\n\nexport function GradientRow({ label = 'Gradient', initialStops, onChange, angle = 90 }: GradientRowProps) {\n const [hovered, setHovered] = useState(false)\n const isActive = hovered\n\n // Use provided stops or default to 6 colors\n const [stops, setStops] = useState<GradientStop[]>(() => initialStops ?? DEFAULT_GRADIENT_STOPS)\n\n const handleStopsChange = (newStops: GradientStop[]) => {\n setStops(newStops)\n if (onChange) {\n onChange(stopsToGradient(newStops, angle))\n }\n }\n\n const currentGradient = stopsToGradient(stops, angle)\n\n return (\n <div\n className=\"gradientRowWrap\"\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <div className=\"gradientCard\" data-active={isActive ? 'true' : 'false'}>\n <span className=\"gradientLabel\">{label}</span>\n <div className=\"gradientSwatchZone\">\n <SwatchPopover\n renderTrigger={(props) => (\n <button\n type=\"button\"\n {...props}\n className={['gradientSwatchBtn', props.className].filter(Boolean).join(' ')}\n style={{ ...props.style, background: currentGradient }}\n aria-label={`Open ${label} editor`}\n />\n )}\n >\n <GradientPicker stops={stops} onChange={handleStopsChange} angle={angle} />\n </SwatchPopover>\n </div>\n </div>\n </div>\n )\n}\n"],"names":["debugZones","normalizeHex","hexDigits","isValidSixHex"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/Panel.tsx","../src/components/categoryDisabledContext.tsx","../src/components/Category.tsx","../node_modules/torph/dist/index.mjs","../node_modules/torph/dist/react/index.mjs","../src/utils/isTextInputTarget.ts","../src/components/SliderOverlapDebug.tsx","../src/ThemeProvider.tsx","../src/components/ValueInput.tsx","../src/components/SliderRow.tsx","../src/utils/colorSpace.ts","../src/components/ColorPicker.tsx","../src/components/SwatchPopover.tsx","../src/components/ColorRow.tsx","../src/components/ToggleRow.tsx","../src/components/GradientPicker.tsx","../src/components/GradientRow.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react'\nimport './Panel.css'\n\nexport type PanelProps = HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n}\n\n/**\n * Default shell for configurator blocks: black surface, 24px radius, 16px padding,\n * column flex anchored to the start (top).\n */\nexport function Panel({ children, className, ...rest }: PanelProps) {\n return (\n <div\n className={['aporiaPanel', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </div>\n )\n}\n","/* eslint-disable react-refresh/only-export-components -- context module exports provider + hook */\nimport { createContext, useContext, type ReactNode } from 'react'\n\nconst CategoryDisabledContext = createContext(false)\n\nexport function CategoryDisabledProvider({\n value,\n children,\n}: {\n value: boolean\n children: ReactNode\n}) {\n return (\n <CategoryDisabledContext.Provider value={value}>\n {children}\n </CategoryDisabledContext.Provider>\n )\n}\n\n/** `true` when wrapped in `Category` with `disabled`. */\nexport function useCategoryDisabled() {\n return useContext(CategoryDisabledContext)\n}\n","import { useCallback, useId, useState, type ReactNode } from 'react'\nimport { CategoryDisabledProvider } from './categoryDisabledContext'\nimport './Category.css'\n\nexport type CategoryProps = {\n title: ReactNode\n children: ReactNode\n /** When true, rows inside respect disabled styling and ignore interaction. */\n disabled?: boolean\n /**\n * When set, renders a 4×4 toggle dot (e.g. bind to UI that enables/disables the block).\n * Called with the next disabled state when the dot is activated.\n */\n onDisabledChange?: (nextDisabled: boolean) => void\n /** Controlled collapse; use with `onCollapsedChange`. */\n collapsed?: boolean\n /** Collapse state change (controlled or uncontrolled). */\n onCollapsedChange?: (nextCollapsed: boolean) => void\n /** Initial collapsed state when uncontrolled. */\n defaultCollapsed?: boolean\n className?: string\n}\n\nexport function Category({\n title,\n children,\n disabled = false,\n onDisabledChange,\n collapsed: collapsedProp,\n onCollapsedChange,\n defaultCollapsed = false,\n className,\n}: CategoryProps) {\n const bodyId = useId()\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState(defaultCollapsed)\n\n const collapsed =\n collapsedProp !== undefined ? collapsedProp : uncontrolledCollapsed\n\n const setCollapsed = useCallback(\n (next: boolean) => {\n onCollapsedChange?.(next)\n if (collapsedProp === undefined) {\n setUncontrolledCollapsed(next)\n }\n },\n [collapsedProp, onCollapsedChange],\n )\n\n return (\n <section\n className={['category', className].filter(Boolean).join(' ')}\n data-disabled={disabled ? 'true' : 'false'}\n >\n <div className=\"categoryHeader\">\n <div className=\"categoryHeaderStart\">\n <div className=\"categoryChevronReveal\">\n <button\n type=\"button\"\n className=\"categoryChevronBtn\"\n aria-expanded={!collapsed}\n aria-controls={bodyId}\n aria-label={collapsed ? 'Expand category' : 'Collapse category'}\n onClick={() => setCollapsed(!collapsed)}\n >\n <svg\n className=\"categoryChevronIcon\"\n data-collapsed={collapsed ? 'true' : 'false'}\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n aria-hidden\n >\n <path\n d=\"M3 4.5L6 7.5L9 4.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </button>\n </div>\n <h2 className=\"categoryTitle\" id={`${bodyId}-label`}>\n {title}\n </h2>\n </div>\n {onDisabledChange ? (\n <button\n type=\"button\"\n className=\"categoryDisabledDot\"\n aria-label={disabled ? 'Enable category' : 'Disable category'}\n aria-pressed={disabled}\n onClick={(e) => {\n e.stopPropagation()\n onDisabledChange(!disabled)\n }}\n />\n ) : null}\n </div>\n <CategoryDisabledProvider value={disabled}>\n <div\n id={bodyId}\n className=\"categoryBody sliderGroup\"\n role=\"region\"\n aria-labelledby={`${bodyId}-label`}\n hidden={collapsed}\n aria-hidden={collapsed}\n >\n {children}\n </div>\n </CategoryDisabledProvider>\n </section>\n )\n}\n","function $(n,e,t){if(t<1){let u=e*Math.sqrt(1-t*t);return 1-Math.exp(-t*e*n)*(Math.cos(u*n)+t*e/u*Math.sin(u*n))}let i=Math.sqrt(t*t-1),s=-e*(t+i),r=-e*(t-i),o=-s/(r-s);return 1-(1-o)*Math.exp(s*n)-o*Math.exp(r*n)}function j(n,e,t){let r=0;for(let o=0;o<10;o+=.001)if(Math.abs($(o,n,e)-1)>t)r=0;else if(r+=.001,r>.1)return Math.ceil((o-r+.001)*1e3);return Math.ceil(10*1e3)}var O=new Map;function D(n){let{stiffness:e=100,damping:t=10,mass:i=1,precision:s=.001}=n??{},r=`${e}:${t}:${i}:${s}`,o=O.get(r);if(o)return o;let a=Math.sqrt(e/i),u=t/(2*Math.sqrt(e*i)),l=j(a,u,s),c=Math.min(100,Math.max(32,Math.round(l/15))),m=[];for(let g=0;g<c;g++){let A=g/(c-1)*(l/1e3),S=g===c-1?1:$(A,a,u);m.push(Math.round(S*1e4)/1e4+\"\");}for(;m.length>2&&m[m.length-2]===\"1\";)m.splice(m.length-2,1);let p={easing:`linear(${m.join(\", \")})`,duration:l};return O.set(r,p),p}function H(n,e){let t=n.includes(\" \");if(typeof Intl.Segmenter<\"u\"){let s=new Intl.Segmenter(e,{granularity:t?\"word\":\"grapheme\"}).segment(n)[Symbol.iterator]();return q(s)}return Y(n,t)}function q(n){return Array.from(n).reduce((e,t)=>t.segment===\" \"?[...e,{id:`space-${t.index}`,string:\"\\xA0\"}]:e.find(s=>s.string===t.segment)?[...e,{id:`${t.segment}-${t.index}`,string:t.segment}]:[...e,{id:t.segment,string:t.segment}],[])}function K(n,e,t){let i=n.find(s=>s.string===e);n.push(i?{id:`${e}-${t}`,string:e}:{id:e,string:e});}function Y(n,e){let t=e?n.split(\" \"):n.split(\"\"),i=[];return t.forEach((s,r)=>{e&&r>0&&i.push({id:`space-${r}`,string:\"\\xA0\"}),K(i,s,r);}),i}var y=\"torph-root\",T=\"torph-item\",d=\"torph-id\",f=\"torph-exiting\",M=\"torph-debug\";function w(n){let e=Array.from(n.children),t={};return e.forEach((i,s)=>{if(i.hasAttribute(f))return;let r=i.getAttribute(d)||`child-${s}`;t[r]={x:i.offsetLeft,y:i.offsetTop};}),t}function R(n,e,t){let i=n[t],s=e[t];return !i||!s?{dx:0,dy:0}:{dx:i.x-s.x,dy:i.y-s.y}}function v(n,e,t,i=\"backward-first\"){let[s,r]=i===\"backward-first\"?[\"backward\",\"forward\"]:[\"forward\",\"backward\"],o=a=>{if(a===\"backward\"){for(let u=n-1;u>=0;u--)if(t.has(e[u]))return e[u]}else for(let u=n+1;u<e.length;u++)if(t.has(e[u]))return e[u];return null};return o(s)??o(r)}function _(n,e,t,i){let s=new Set(t.filter((o,a)=>i.has(o)&&!e.has(n[a]))),r=new Map;for(let o=0;o<n.length;o++){let a=n[o];e.has(a)&&r.set(a,v(o,t,s,\"forward-first\"));}return r}function C(n,e){return Math.min(n*e,150)}function L(n){let e=getComputedStyle(n).transform;if(!e||e===\"none\")return {tx:0,ty:0};let t=e.match(/matrix\\(([^)]+)\\)/);if(!t)return {tx:0,ty:0};let i=t[1].split(\",\").map(Number);return {tx:i[4]||0,ty:i[5]||0}}function Q(n){let{tx:e,ty:t}=L(n),i=Number(getComputedStyle(n).opacity)||1;return n.getAnimations().forEach(s=>s.cancel()),{tx:e,ty:t,opacity:i}}function N(n,e){let{dx:t,dy:i,duration:s,ease:r,scale:o}=e;n.animate({transform:o?`translate(${t}px, ${i}px) scale(0.95)`:`translate(${t}px, ${i}px)`,offset:1},{duration:s,easing:r,fill:\"both\"});let a=n.animate({opacity:0,offset:1},{duration:C(s,.25),easing:\"linear\",fill:\"both\"});a.onfinish=()=>n.remove();}function k(n,e){let{deltaX:t,deltaY:i,isNew:s,duration:r,ease:o}=e,a=Q(n),u=t+a.tx,l=i+a.ty;n.animate({transform:`translate(${u}px, ${l}px) scale(${s?.95:1})`,offset:0},{duration:r,easing:o,fill:\"both\"});let c=s&&a.opacity>=1?0:a.opacity;c<1&&n.animate([{opacity:c},{opacity:1}],{duration:C(r,s?.5:.25),easing:\"linear\",fill:\"both\"});}var x=null;function F(n,e,t,i,s){if(x&&(x(),x=null),e===0||t===0)return;n.style.width=\"auto\",n.style.height=\"auto\",n.offsetWidth;let r=n.offsetWidth,o=n.offsetHeight;n.style.width=`${e}px`,n.style.height=`${t}px`,n.offsetWidth,n.style.width=`${r}px`,n.style.height=`${o}px`;function a(){n.removeEventListener(\"transitionend\",u),clearTimeout(l),x=null,n.style.width=\"auto\",n.style.height=\"auto\",s?.();}function u(c){c.target===n&&(c.propertyName!==\"width\"&&c.propertyName!==\"height\"||a());}n.addEventListener(\"transitionend\",u);let l=setTimeout(a,i+50);x=()=>{n.removeEventListener(\"transitionend\",u),clearTimeout(l),x=null;};}function P(n){let e=n.map(t=>{let{tx:i,ty:s}=L(t),r=Number(getComputedStyle(t).opacity)||1;return t.getAnimations().forEach(o=>o.cancel()),{left:t.offsetLeft+i,top:t.offsetTop+s,width:t.offsetWidth,height:t.offsetHeight,opacity:r}});n.forEach((t,i)=>{let s=e[i];t.setAttribute(f,\"\"),t.style.position=\"absolute\",t.style.pointerEvents=\"none\",t.style.left=`${s.left}px`,t.style.top=`${s.top}px`,t.style.width=`${s.width}px`,t.style.height=`${s.height}px`,t.style.opacity=String(s.opacity);});}function X(n,e,t,i){let s=new Map;e.forEach(r=>{let o=r.getAttribute(d);t.has(o)&&!r.hasAttribute(f)&&(s.set(o,r),r.remove());}),Array.from(n.childNodes).forEach(r=>{r.nodeType===Node.TEXT_NODE&&r.remove();}),i.forEach(r=>{let o=s.get(r.id);if(o)o.textContent=r.string,n.appendChild(o);else {let a=document.createElement(\"span\");a.setAttribute(T,\"\"),a.setAttribute(d,r.id),a.textContent=r.string,n.appendChild(a);}});}var J=`\n[${y}] {\n display: inline-block;\n position: relative;\n will-change: width, height;\n transition-property: width, height;\n white-space: nowrap;\n text-align: left;\n}\n\n[${T}] {\n display: inline-block;\n will-change: opacity, transform;\n transform: none;\n opacity: 1;\n}\n\n[${y}][${M}] {\n outline: 2px solid magenta;\n [${T}] {\n outline: 2px solid cyan;\n outline-offset: -4px;\n }\n}`,h=null,I=0;function G(){I++,!h&&(h=document.createElement(\"style\"),h.dataset.torph=\"true\",h.textContent=J,document.head.appendChild(h));}function U(){I--,!(I>0||!h)&&(h.remove(),h=null);}function W(){if(typeof window>\"u\")return {prefersReducedMotion:false,destroy:()=>{}};let n=window.matchMedia(\"(prefers-reduced-motion: reduce)\"),e={prefersReducedMotion:n.matches,destroy:i};function t(s){e.prefersReducedMotion=s.matches;}function i(){n.removeEventListener(\"change\",t);}return n.addEventListener(\"change\",t),e}var E=class n{instance=null;lastText=\"\";configKey=\"\";attach(e,t){this.instance?.destroy(),this.instance=new b({element:e,...t}),this.configKey=n.serializeConfig(t),this.lastText&&this.instance.update(this.lastText);}update(e){this.lastText=e,this.instance?.update(e);}needsRecreate(e){return n.serializeConfig(e)!==this.configKey}destroy(){this.instance?.destroy(),this.instance=null;}static serializeConfig(e){return JSON.stringify({ease:e.ease,duration:e.duration,locale:e.locale,scale:e.scale,debug:e.debug,disabled:e.disabled,respectReducedMotion:e.respectReducedMotion})}};var V=\"span\",B={debug:false,locale:\"en\",duration:400,scale:true,ease:\"cubic-bezier(0.19, 1, 0.22, 1)\",disabled:false,respectReducedMotion:true},b=class{element;options={};data;currentMeasures={};prevMeasures={};isInitialRender=true;reducedMotion=null;constructor(e){let{ease:t,...i}={...B,...e},s,r;if(typeof t==\"object\"){let o=D(t);s=o.easing,r=o.duration;}else s=t,r=i.duration;this.options={...i,ease:s,duration:r},this.element=e.element,this.options.respectReducedMotion&&(this.reducedMotion=W()),this.isDisabled()||(this.element.setAttribute(y,\"\"),this.element.style.transitionDuration=`${this.options.duration}ms`,this.element.style.transitionTimingFunction=this.options.ease,e.debug&&this.element.setAttribute(M,\"\")),this.data=\"\",this.isDisabled()||G();}destroy(){this.reducedMotion?.destroy(),this.element.getAnimations().forEach(e=>e.cancel()),this.element.removeAttribute(y),this.element.removeAttribute(M),U();}isDisabled(){return !!(this.options.disabled||this.reducedMotion?.prefersReducedMotion)}update(e){if(e!==this.data){if(this.data=e,this.isDisabled()){typeof e==\"string\"&&(this.element.textContent=e);return}if(this.data instanceof HTMLElement)throw new Error(\"HTMLElement not yet supported\");this.options.onAnimationStart&&!this.isInitialRender&&this.options.onAnimationStart(),this.createTextGroup(this.data,this.element);}}createTextGroup(e,t){let i=t.offsetWidth,s=t.offsetHeight,r=H(e,this.options.locale);this.prevMeasures=w(this.element);let o=Array.from(t.children),a=new Set(r.map(p=>p.id)),u=o.filter(p=>!a.has(p.getAttribute(d))&&!p.hasAttribute(f)),l=new Set(u),c=o.map(p=>p.getAttribute(d)),m=_(o,l,c,a);if(P(u),X(t,o,a,r),this.currentMeasures=w(this.element),this.updateStyles(r),u.forEach(p=>{if(this.isInitialRender){p.remove();return}let g=m.get(p),{dx:A,dy:S}=g?R(this.currentMeasures,this.prevMeasures,g):{dx:0,dy:0};N(p,{dx:A,dy:S,duration:this.options.duration,ease:this.options.ease,scale:this.options.scale});}),this.isInitialRender){this.isInitialRender=false,t.style.width=\"auto\",t.style.height=\"auto\";return}F(t,i,s,this.options.duration,this.options.onAnimationComplete);}updateStyles(e){if(this.isInitialRender)return;let t=Array.from(this.element.children),i=e.map(r=>r.id),s=new Set(i.filter(r=>this.prevMeasures[r]));t.forEach((r,o)=>{if(r.hasAttribute(f))return;let a=r.getAttribute(d)||`child-${o}`,u=!this.prevMeasures[a],l=u?v(e.findIndex(p=>p.id===a),i,s):a,{dx:c,dy:m}=l?R(this.prevMeasures,this.currentMeasures,l):{dx:0,dy:0};k(r,{deltaX:c,deltaY:m,isNew:u,duration:this.options.duration,ease:this.options.ease});});}};export{V as DEFAULT_AS,B as DEFAULT_TEXT_MORPH_OPTIONS,E as MorphController,b as TextMorph};","import t from'react';import {DEFAULT_AS,MorphController}from'torph';function f(e){if(typeof e==\"string\")return e;if(typeof e==\"number\")return String(e);if(!e||typeof e==\"boolean\")return \"\";if(Array.isArray(e))return e.map(f).join(\"\");throw t.isValidElement(e)?new Error(\"TextMorph only accepts text content. Found a React element \\u2014 use strings, numbers, or expressions instead.\"):new Error(`TextMorph received an unsupported child of type \"${typeof e}\".`)}var h=({children:e,className:r,style:o,as:n=DEFAULT_AS,...s})=>{let{ref:p,update:c}=l(s),i=f(e),a=t.useRef({__html:i});return t.useEffect(()=>{c(i);},[i,c]),t.createElement(n,{ref:p,className:r,style:o,dangerouslySetInnerHTML:a.current})};function l(e){let r=t.useRef(null),o=t.useRef(new MorphController),n=MorphController.serializeConfig(e);t.useEffect(()=>(r.current&&o.current.attach(r.current,e),()=>{o.current.destroy();}),[n]);let s=t.useCallback(p=>{o.current.update(p);},[]);return {ref:r,update:s}}export{h as TextMorph,l as useTextMorph};","/** True when a keyboard shortcut should not steal focus from editable fields. */\nexport function isTextInputTarget(target: EventTarget | null) {\n if (!(target instanceof HTMLElement)) return false\n if (target.isContentEditable) return true\n const tag = target.tagName\n if (tag === 'TEXTAREA' || tag === 'SELECT') return true\n if (tag !== 'INPUT') return false\n const type = (target as HTMLInputElement).type\n return (\n type === 'text' ||\n type === 'search' ||\n type === 'url' ||\n type === 'tel' ||\n type === 'email' ||\n type === 'password' ||\n type === 'number' ||\n type === ''\n )\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useState,\n type ReactNode,\n} from 'react'\nimport { isTextInputTarget } from '../utils/isTextInputTarget'\n\nconst SliderOverlapDebugContext = createContext(false)\n\nexport function SliderOverlapDebugProvider({ children }: { children: ReactNode }) {\n const [enabled, setEnabled] = useState(false)\n\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n if (!e.shiftKey || e.repeat) return\n if (e.code !== 'KeyD') return\n if (isTextInputTarget(e.target)) return\n e.preventDefault()\n setEnabled((v) => !v)\n }\n window.addEventListener('keydown', onKeyDown)\n return () => window.removeEventListener('keydown', onKeyDown)\n }, [])\n\n return (\n <SliderOverlapDebugContext.Provider value={enabled}>\n {children}\n </SliderOverlapDebugContext.Provider>\n )\n}\n\nexport function useSliderOverlapDebugEnabled() {\n return useContext(SliderOverlapDebugContext)\n}\n","import {\n createContext,\n useContext,\n useEffect,\n type ReactNode,\n} from 'react'\n\nexport type Theme = 'dark'\n\ntype ThemeContextValue = {\n theme: Theme\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null)\n\nexport function ThemeProvider({ children }: { children: ReactNode }) {\n const theme: Theme = 'dark'\n\n useEffect(() => {\n document.documentElement.dataset.theme = theme\n }, [theme])\n\n return (\n <ThemeContext.Provider value={{ theme }}>\n {children}\n </ThemeContext.Provider>\n )\n}\n\nexport function useTheme() {\n const ctx = useContext(ThemeContext)\n if (!ctx) {\n throw new Error('useTheme must be used within ThemeProvider')\n }\n return ctx\n}\n","import {\n useLayoutEffect,\n useRef,\n useState,\n type ChangeEvent,\n type ClipboardEvent,\n type KeyboardEvent,\n type MouseEvent,\n type ReactNode,\n} from 'react'\nimport './ValueInput.css'\n\nexport type ValueInputProps = {\n /** The display value (shown when not editing) */\n value: string\n /** Optional prefix that appears before the value (e.g., \"#\" for hex) */\n prefix?: ReactNode\n /** Optional suffix that appears after the value (e.g., \"%\" for percentages) */\n suffix?: ReactNode\n /** Called when editing is committed */\n onCommit: (value: string) => void\n /** Optional validation/sanitization function for input changes */\n sanitize?: (input: string) => string\n /** Optional validation function that determines if value can be committed */\n validate?: (value: string) => boolean\n /** Maximum length for the input */\n maxLength?: number\n /** Input mode for mobile keyboards */\n inputMode?: 'text' | 'numeric' | 'decimal'\n /** Text alignment */\n align?: 'left' | 'right'\n /** Aria label for the input */\n ariaLabel?: string\n /** Whether the parent is in an \"active\" state (hovered/dragging) */\n isActive?: boolean\n /** Optional class name for the container */\n className?: string\n /** Whether to auto-size the input width to content */\n autoWidth?: boolean\n /** Ref to the value text element for external measurements */\n valueTextRef?: React.RefObject<HTMLSpanElement | null>\n /** Handle paste events (return the processed value or null to use default) */\n onPaste?: (pasted: string) => string | null\n /** Custom renderer for the display value (useful for animations like TextMorph) */\n renderValue?: (value: string) => ReactNode\n /** Ref to the input element when editing */\n inputRef?: React.RefObject<HTMLInputElement | null>\n /** Callback when editing state changes */\n onEditingChange?: (editing: boolean) => void\n /** Non-interactive display-only value */\n disabled?: boolean\n /** External control of editing state */\n editing?: boolean\n /** External control of draft value */\n draft?: string\n /** External control of draft value changes */\n onDraftChange?: (draft: string) => void\n /**\n * Optional ArrowUp/ArrowDown nudge step while editing (Figma-like).\n * If omitted, arrow keys behave normally.\n */\n arrowStep?: number\n /** Optional clamp bounds for arrow nudging only. */\n arrowMin?: number\n /** Optional clamp bounds for arrow nudging only. */\n arrowMax?: number\n}\n\n/**\n * Unified value input component with consistent hover/edit states.\n *\n * Behavior:\n * - Default: muted text, transparent underline\n * - Hover: full opacity text, underline visible\n * - Editing: no underline, white bg/black text selection\n */\nexport function ValueInput({\n value,\n prefix,\n suffix,\n onCommit,\n sanitize = (v) => v,\n validate = () => true,\n maxLength,\n inputMode = 'text',\n align = 'left',\n ariaLabel,\n isActive = false,\n className,\n autoWidth = false,\n valueTextRef,\n onPaste,\n renderValue,\n inputRef: externalInputRef,\n onEditingChange,\n editing: externalEditing,\n draft: externalDraft,\n onDraftChange,\n arrowStep,\n arrowMin,\n arrowMax,\n disabled = false,\n}: ValueInputProps) {\n const [internalEditing, setInternalEditing] = useState(false)\n const [internalDraft, setInternalDraft] = useState('')\n const internalInputRef = useRef<HTMLInputElement>(null)\n const measureRef = useRef<HTMLSpanElement>(null)\n const internalValueTextRef = useRef<HTMLSpanElement>(null)\n const [inputWidth, setInputWidth] = useState<number | null>(null)\n\n // Support both controlled and uncontrolled modes\n const editing = externalEditing !== undefined ? externalEditing : internalEditing\n const draft = externalDraft !== undefined ? externalDraft : internalDraft\n const inputRef = externalInputRef ?? internalInputRef\n\n const setEditing = (value: boolean) => {\n if (externalEditing === undefined) {\n setInternalEditing(value)\n }\n onEditingChange?.(value)\n }\n\n const setDraft = (value: string) => {\n if (externalDraft === undefined) {\n setInternalDraft(value)\n }\n onDraftChange?.(value)\n }\n\n // Use provided ref or internal ref\n const actualValueTextRef = valueTextRef ?? internalValueTextRef\n\n useLayoutEffect(() => {\n if (!editing) return\n inputRef.current?.focus()\n inputRef.current?.select()\n }, [editing, inputRef])\n\n // Measure input width when editing\n useLayoutEffect(() => {\n if (!editing || !autoWidth) {\n setInputWidth(null)\n return\n }\n const measure = () => {\n const m = measureRef.current\n if (!m) return\n const w = m.getBoundingClientRect().width\n // Add padding for caret\n const next = Math.max(Math.ceil(w + 6), 22)\n setInputWidth((prev) => (prev === next ? prev : next))\n }\n measure()\n }, [editing, draft, autoWidth])\n\n const startEdit = (e: MouseEvent) => {\n e.stopPropagation()\n setDraft(value)\n setEditing(true)\n }\n\n const commit = () => {\n const sanitized = sanitize(draft)\n if (validate(sanitized)) {\n onCommit(sanitized)\n }\n setEditing(false)\n }\n\n const stepDecimals = (s: number): number => {\n const txt = String(s)\n const i = txt.indexOf('.')\n return i === -1 ? 0 : Math.max(0, txt.length - i - 1)\n }\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && arrowStep != null) {\n const dir = e.key === 'ArrowUp' ? 1 : -1\n const mult = e.shiftKey ? 10 : 1\n const current = Number(sanitize(draft))\n if (Number.isFinite(current) && Number.isFinite(arrowStep) && arrowStep !== 0) {\n e.preventDefault()\n let nextNum = current + dir * arrowStep * mult\n if (Number.isFinite(arrowMin)) nextNum = Math.max(arrowMin as number, nextNum)\n if (Number.isFinite(arrowMax)) nextNum = Math.min(arrowMax as number, nextNum)\n const decimals = stepDecimals(arrowStep)\n const nextTxt = decimals > 0 ? nextNum.toFixed(decimals) : String(Math.round(nextNum))\n setDraft(sanitize(nextTxt))\n return\n }\n }\n if (e.key === 'Enter') {\n e.preventDefault()\n commit()\n }\n if (e.key === 'Escape') {\n setEditing(false)\n }\n e.stopPropagation()\n }\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const next = sanitize(e.target.value)\n setDraft(next)\n }\n\n const handlePaste = (e: ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text')\n if (onPaste) {\n const result = onPaste(pasted)\n if (result !== null) {\n e.preventDefault()\n setDraft(result)\n return\n }\n }\n // Default paste handling through onChange\n }\n\n const containerClass = [\n 'valueInput',\n className,\n align === 'right' && 'valueInput--right',\n ].filter(Boolean).join(' ')\n\n if (disabled) {\n return (\n <span\n className={containerClass}\n data-disabled=\"true\"\n aria-label={ariaLabel ?? `Value, ${value}`}\n >\n {prefix && <span className=\"valueInputPrefix\">{prefix}</span>}\n <span className=\"valueInputText\">{renderValue ? renderValue(value) : value}</span>\n {suffix && <span className=\"valueInputSuffix\">{suffix}</span>}\n </span>\n )\n }\n\n if (editing) {\n return (\n <span className={containerClass} data-editing=\"true\">\n {prefix && <span className=\"valueInputPrefix\">{prefix}</span>}\n {autoWidth && (\n <span\n ref={measureRef}\n className=\"valueInputMeasure\"\n aria-hidden\n >\n {draft.length > 0 ? draft : '0'}\n </span>\n )}\n <input\n ref={inputRef as React.RefObject<HTMLInputElement>}\n className=\"valueInputField\"\n value={draft}\n onChange={handleChange}\n onPaste={handlePaste}\n onBlur={commit}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n maxLength={maxLength}\n inputMode={inputMode}\n autoComplete=\"off\"\n spellCheck={false}\n aria-label={ariaLabel}\n style={inputWidth != null ? { width: inputWidth } : undefined}\n />\n {suffix && <span className=\"valueInputSuffix\">{suffix}</span>}\n </span>\n )\n }\n\n return (\n <span\n className={containerClass}\n data-active={isActive ? 'true' : 'false'}\n role=\"button\"\n tabIndex={0}\n aria-label={ariaLabel ?? `Edit value, ${value}`}\n onClick={startEdit}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setDraft(value)\n setEditing(true)\n }\n }}\n >\n {prefix && <span className=\"valueInputPrefix\">{prefix}</span>}\n <span ref={actualValueTextRef as React.RefObject<HTMLSpanElement>} className=\"valueInputText\">\n {renderValue ? renderValue(value) : value}\n </span>\n {suffix && <span className=\"valueInputSuffix\">{suffix}</span>}\n </span>\n )\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport type { PointerEvent as ReactPointerEvent } from 'react'\nimport { TextMorph } from 'torph/react'\nimport { motion, useMotionValue, useSpring, useTransform } from 'motion/react'\nimport { useSliderOverlapDebugEnabled } from './SliderOverlapDebug'\nimport { useCategoryDisabled } from './categoryDisabledContext'\nimport { useTheme } from '../ThemeProvider'\nimport { ValueInput } from './ValueInput'\nimport './SliderRow.css'\n\nfunction clearDocumentSelection() {\n const sel = window.getSelection?.()\n if (sel && sel.rangeCount > 0) sel.removeAllRanges()\n}\n\n/** Fractional step → allow one decimal separator while typing. */\nfunction stepAllowsDecimal(step: number): boolean {\n if (!Number.isFinite(step) || step === 0) return true\n return step % 1 !== 0\n}\n\n/** Strip letters/symbols; keep optional leading `-` (if min < 0) and at most one `.` when step is fractional. */\nfunction sanitizeValueDraft(raw: string, min: number, step: number): string {\n const allowNeg = min < 0\n const allowDecimal = stepAllowsDecimal(step)\n let out = ''\n let dotUsed = false\n\n for (let i = 0; i < raw.length; i++) {\n const c = raw[i]\n if (allowNeg && c === '-' && out === '') {\n out += '-'\n continue\n }\n if (allowDecimal && c === '.' && !dotUsed) {\n dotUsed = true\n out += '.'\n continue\n }\n if (c >= '0' && c <= '9') {\n out += c\n continue\n }\n }\n return out\n}\n\n/** Normalized position in [0, 1]; stretch ramps to max within `edge` of each end */\nfunction edgeStretchPx(\n u: number,\n maxStretch: number,\n edge: number,\n dragBoost: number,\n): { left: number; right: number } {\n if (!Number.isFinite(u)) return { left: 0, right: 0 }\n const uClamped = Math.min(1, Math.max(0, u))\n let left = 0\n let right = 0\n if (uClamped < edge) left = (1 - uClamped / edge) * maxStretch\n else if (uClamped > 1 - edge) right = ((uClamped - (1 - edge)) / edge) * maxStretch\n return { left: left * dragBoost, right: right * dragBoost }\n}\n\nexport type SliderRowProps = {\n label: string\n value: number\n min: number\n max: number\n step: number\n onChange: (value: number) => void\n fmt?: (value: number) => string\n /** When true, or when inside a disabled `Category`, the row is non-interactive. */\n disabled?: boolean\n}\n\n/** Edge stretch while dragging (px at full deflection) */\nconst MAX_EDGE_STRETCH_PX = 2\nconst EDGE_FRACTION = 0.14\nconst AT_END_DRAG_BOOST = 1.04\n/** Overpull past min/max */\nconst PULL_GAIN = 0.05\nconst PULL_CAP_PX = 3\n\n/** Spring residue below this (px) snaps to 0 so width/margin match base exactly */\nconst STRETCH_SNAP_EPS_PX = 0.4\n\n/** Stiffer pull/stretch = quicker snap back after release */\nconst stretchSpringOpts = {\n stiffness: 340,\n damping: 42,\n mass: 0.4,\n restDelta: 0.012,\n restSpeed: 0.045,\n} as const\n\nconst pullSpringOpts = {\n stiffness: 520,\n damping: 46,\n mass: 0.34,\n restDelta: 0.012,\n restSpeed: 0.045,\n} as const\n\nconst THUMB_WIDTH_PX = 2\nconst THUMB_HEIGHT_PX = 16\nconst THUMB_HEIGHT_BEHIND_LABEL_PX = 10\n/** Gap from progress fill’s right edge to thumb’s right edge (translate anchor) */\nconst THUMB_INSET_FROM_FILL_END_PX = 10\n\n/** Extra space past measured text before the thumb counts as clear of label / value. */\nconst THUMB_OVERLAP_PAD_PX = 10\n\ntype ThumbOverlapDebugZones = {\n overlapLabelEnd: number\n overlapValueStart: number\n domLabelText: { left: number; top: number; width: number; height: number }\n domValueText: { left: number; top: number; width: number; height: number }\n}\n\ntype ThumbOverlapLayout = { labelEnd: number; valueStart: number }\n\nexport function SliderRow({\n label,\n value,\n min,\n max,\n step,\n onChange,\n fmt,\n disabled: disabledProp,\n}: SliderRowProps) {\n useTheme() // ensures ThemeProvider context is available\n const categoryDisabled = useCategoryDisabled()\n const disabled = Boolean(disabledProp || categoryDisabled)\n const debugOverlap = useSliderOverlapDebugEnabled()\n const [valueEditing, setValueEditing] = useState(false)\n const [hovered, setHovered] = useState(false)\n const [dragging, setDragging] = useState(false)\n const [mounted, setMounted] = useState(false)\n const inputRef = useRef<HTMLInputElement>(null)\n const cardRef = useRef<HTMLDivElement>(null)\n const wrapRef = useRef<HTMLDivElement>(null)\n const labelTextRef = useRef<HTMLSpanElement>(null)\n const valueTextRef = useRef<HTMLSpanElement>(null)\n const valueRef = useRef<HTMLDivElement>(null)\n const [overlapLayout, setOverlapLayout] = useState<ThumbOverlapLayout | null>(null)\n const [idleThumbOpacity, setIdleThumbOpacity] = useState(0)\n const lastPointerXRef = useRef(0)\n const dragStateRef = useRef({ value, min, max })\n dragStateRef.current = { value, min, max }\n\n const targetStretchL = useMotionValue(0)\n const targetStretchR = useMotionValue(0)\n const stretchL = useSpring(targetStretchL, stretchSpringOpts)\n const stretchR = useSpring(targetStretchR, stretchSpringOpts)\n\n const pullL = useMotionValue(0)\n const pullR = useMotionValue(0)\n const pullLSpring = useSpring(pullL, pullSpringOpts)\n const pullRSpring = useSpring(pullR, pullSpringOpts)\n\n const baseW = useMotionValue(0)\n\n const cardWidth = useTransform(\n [stretchL, stretchR, pullLSpring, pullRSpring, baseW],\n ([l, r, pl, pr, b]) => {\n const base = Number(b)\n let extra = Number(l) + Number(r) + Number(pl) + Number(pr)\n if (Math.abs(extra) < STRETCH_SNAP_EPS_PX) extra = 0\n return Math.max(1, Math.round(base + extra))\n },\n )\n const cardMarginLeft = useTransform([stretchL, pullLSpring], ([l, pl]) => {\n let leftExtra = Number(l) + Number(pl)\n if (Math.abs(leftExtra) < STRETCH_SNAP_EPS_PX) leftExtra = 0\n return Math.round(-leftExtra)\n })\n\n /** Column width for sliders = parent row (e.g. .sliderGroup), not the wrap (can inflate with flex min-width:auto). */\n const syncBaseWidthFromParent = () => {\n const wrap = wrapRef.current\n const parent = wrap?.parentElement\n if (!parent) return\n // offsetWidth: integer layout width; avoids subpixel drift vs getBoundingClientRect\n baseW.set(parent.offsetWidth)\n }\n\n useLayoutEffect(() => {\n const wrap = wrapRef.current\n const parent = wrap?.parentElement\n if (!parent) return\n\n syncBaseWidthFromParent()\n const ro = new ResizeObserver(() => {\n syncBaseWidthFromParent()\n })\n ro.observe(parent)\n return () => ro.disconnect()\n }, [baseW])\n\n useEffect(() => {\n setMounted(true)\n }, [])\n\n useLayoutEffect(() => {\n setIdleThumbOpacity(0)\n }, [])\n\n const display = fmt ? fmt(value) : value\n\n useLayoutEffect(() => {\n const card = cardRef.current\n const labelEl = labelTextRef.current\n const valueEl = valueEditing ? inputRef.current : valueTextRef.current\n if (!mounted || !card || !labelEl || !valueEl) {\n setOverlapLayout(null)\n return\n }\n\n const measure = () => {\n const c = cardRef.current\n const le = labelTextRef.current\n const ve = valueEditing ? inputRef.current : valueTextRef.current\n if (!c || !le || !ve) {\n setOverlapLayout(null)\n return\n }\n const cardRect = c.getBoundingClientRect()\n const lr = le.getBoundingClientRect()\n const vr = ve.getBoundingClientRect()\n const w = cardRect.width\n let labelEnd = lr.right - cardRect.left + THUMB_OVERLAP_PAD_PX\n let valueStart = vr.left - cardRect.left - THUMB_OVERLAP_PAD_PX\n labelEnd = Math.min(Math.max(0, labelEnd), w)\n valueStart = Math.min(Math.max(0, valueStart), w)\n if (valueStart < labelEnd) valueStart = labelEnd\n\n setOverlapLayout((prev) => {\n if (\n prev &&\n prev.labelEnd === labelEnd &&\n prev.valueStart === valueStart\n ) {\n return prev\n }\n return { labelEnd, valueStart }\n })\n }\n\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(card)\n return () => ro.disconnect()\n }, [mounted, label, display, valueEditing, value])\n\n\n const span = max - min\n const u = span > 0 ? (value - min) / span : 0\n\n /*\n * Edge stretch must only run while the pointer drag is active. If we keep stretching\n * whenever u is near 0/1 (e.g. Spread stuck at 1.00), the card stays wider than siblings\n * forever — that reads as \"stuck overdrag\" and a second click often nudges u/hover.\n */\n useEffect(() => {\n if (span <= 0 || !Number.isFinite(u) || !dragging) {\n targetStretchL.set(0)\n targetStretchR.set(0)\n return\n }\n const atEnd = value <= min + 1e-9 || value >= max - 1e-9\n const dragBoost = atEnd ? AT_END_DRAG_BOOST : 1\n const { left, right } = edgeStretchPx(u, MAX_EDGE_STRETCH_PX, EDGE_FRACTION, dragBoost)\n targetStretchL.set(left)\n targetStretchR.set(right)\n }, [u, span, dragging, value, min, max, targetStretchL, targetStretchR])\n\n const resetPull = () => {\n pullL.set(0)\n pullR.set(0)\n }\n\n useEffect(() => {\n if (!dragging) return\n\n const onMove = (e: PointerEvent) => {\n const { value: v, min: lo, max: hi } = dragStateRef.current\n const sp = hi - lo\n if (sp <= 0) return\n const uNow = (v - lo) / sp\n const dx = e.clientX - lastPointerXRef.current\n lastPointerXRef.current = e.clientX\n\n if (uNow >= 1 - 1e-6 && dx > 0) {\n pullR.set(Math.min(PULL_CAP_PX, Math.max(0, pullR.get() + dx * PULL_GAIN)))\n } else if (uNow <= 1e-6 && dx < 0) {\n pullL.set(Math.min(PULL_CAP_PX, Math.max(0, pullL.get() - dx * PULL_GAIN)))\n }\n }\n\n const onEnd = () => {\n resetPull()\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }\n\n window.addEventListener('pointermove', onMove)\n window.addEventListener('pointerup', onEnd)\n window.addEventListener('pointercancel', onEnd)\n return () => {\n window.removeEventListener('pointermove', onMove)\n window.removeEventListener('pointerup', onEnd)\n window.removeEventListener('pointercancel', onEnd)\n }\n }, [dragging, pullL, pullR])\n\n const pct = u * 100\n\n const getThumbLayout = (): {\n opacity: number\n height: number\n debugZones: ThumbOverlapDebugZones | null\n } => {\n if (!mounted || !cardRef.current || !overlapLayout) {\n return {\n opacity: dragging ? 1 : 0.7,\n height: THUMB_HEIGHT_PX,\n debugZones: null,\n }\n }\n\n const cardRect = cardRef.current.getBoundingClientRect()\n const fillEndPx = (cardRect.width * pct) / 100\n const thumbRightPx = fillEndPx - THUMB_INSET_FROM_FILL_END_PX\n const thumbCenterX = thumbRightPx - THUMB_WIDTH_PX / 2\n const { labelEnd, valueStart } = overlapLayout\n\n const behindLabel = thumbCenterX < labelEnd\n const behindValue = thumbCenterX > valueStart\n\n let opacity: number\n if (behindLabel || behindValue) {\n opacity = 0.1\n } else {\n opacity = dragging ? 1 : 0.7\n }\n\n const height = behindLabel ? THUMB_HEIGHT_BEHIND_LABEL_PX : THUMB_HEIGHT_PX\n\n let debugZones: ThumbOverlapDebugZones | null = null\n if (\n debugOverlap &&\n labelTextRef.current &&\n (valueEditing ? inputRef.current : valueTextRef.current)\n ) {\n const cr = cardRef.current.getBoundingClientRect()\n const lr = labelTextRef.current.getBoundingClientRect()\n const ve = valueEditing ? inputRef.current! : valueTextRef.current!\n const vr = ve.getBoundingClientRect()\n debugZones = {\n overlapLabelEnd: labelEnd,\n overlapValueStart: valueStart,\n domLabelText: {\n left: lr.left - cr.left,\n top: lr.top - cr.top,\n width: lr.width,\n height: lr.height,\n },\n domValueText: {\n left: vr.left - cr.left,\n top: vr.top - cr.top,\n width: vr.width,\n height: vr.height,\n },\n }\n }\n\n return { opacity, height, debugZones }\n }\n\n const { opacity: thumbOpacity, height: thumbHeight, debugZones } = getThumbLayout()\n\n const isActive = hovered || dragging\n\n const idleThumbWidth = 0\n\n const handleRangePointerDown = (e: ReactPointerEvent<HTMLInputElement>) => {\n if (disabled) return\n clearDocumentSelection()\n lastPointerXRef.current = e.clientX\n syncBaseWidthFromParent()\n try {\n e.currentTarget.setPointerCapture(e.pointerId)\n } catch {\n /* ignore */\n }\n setDragging(true)\n }\n\n const handleRangePointerUp = (e: ReactPointerEvent<HTMLInputElement>) => {\n try {\n if (e.currentTarget.hasPointerCapture?.(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId)\n }\n } catch {\n /* ignore */\n }\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }\n\n return (\n <div\n className=\"sliderCardWrap\"\n ref={wrapRef}\n data-disabled={disabled ? 'true' : 'false'}\n onPointerEnter={() => !disabled && setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <motion.div\n ref={cardRef}\n className=\"sliderCard\"\n data-active={isActive ? 'true' : 'false'}\n style={{ width: cardWidth, marginLeft: cardMarginLeft }}\n draggable={false}\n onDragStart={(e) => e.preventDefault()}\n >\n <motion.div\n className=\"sliderTrack\"\n data-active={isActive ? 'true' : 'false'}\n style={{ width: `${pct}%` }}\n />\n {debugZones ? (\n <div className=\"sliderDebugOverlap\" aria-hidden>\n <div\n className=\"sliderDebugOverlap__heuristic sliderDebugOverlap__heuristic--label\"\n style={{ width: debugZones.overlapLabelEnd }}\n title=\"Label overlap threshold (text right + pad)\"\n />\n <div\n className=\"sliderDebugOverlap__heuristic sliderDebugOverlap__heuristic--value\"\n style={{ left: debugZones.overlapValueStart }}\n title=\"Value overlap threshold (text left − pad)\"\n />\n <div\n className=\"sliderDebugOverlap__dom sliderDebugOverlap__dom--label\"\n style={{\n left: debugZones.domLabelText.left,\n top: debugZones.domLabelText.top,\n width: debugZones.domLabelText.width,\n height: debugZones.domLabelText.height,\n }}\n title=\"Measured label text box\"\n />\n <div\n className=\"sliderDebugOverlap__dom sliderDebugOverlap__dom--value\"\n style={{\n left: debugZones.domValueText.left,\n top: debugZones.domValueText.top,\n width: debugZones.domValueText.width,\n height: debugZones.domValueText.height,\n }}\n title=\"Measured value text / input box\"\n />\n </div>\n ) : null}\n <motion.div\n className=\"sliderThumb\"\n data-dragging={dragging ? 'true' : 'false'}\n style={{\n left: `calc(${pct}% - ${THUMB_INSET_FROM_FILL_END_PX}px)`,\n }}\n animate={{\n width: isActive ? THUMB_WIDTH_PX : idleThumbWidth,\n height: isActive ? thumbHeight : THUMB_HEIGHT_PX,\n opacity: isActive ? thumbOpacity : idleThumbOpacity,\n }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n />\n <motion.div\n className=\"sliderTicks\"\n animate={{ opacity: isActive ? 1 : 0 }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n >\n {[...Array(10)].map((_, i) => (\n <div key={i} className=\"sliderTick\" />\n ))}\n </motion.div>\n <input\n className=\"sliderInput\"\n type=\"range\"\n min={min}\n max={max}\n step={step}\n value={value}\n disabled={disabled}\n draggable={false}\n onChange={(e) => onChange(parseFloat(e.target.value))}\n onPointerDown={handleRangePointerDown}\n onPointerUp={handleRangePointerUp}\n onPointerCancel={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }}\n onLostPointerCapture={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromParent)\n })\n }}\n />\n <span className=\"sliderLabel\" draggable={false}>\n <span ref={labelTextRef} className=\"sliderLabelText\">\n {label}\n </span>\n </span>\n <div\n ref={valueRef}\n className=\"sliderValueZone\"\n onClick={(e) => e.stopPropagation()}\n >\n <ValueInput\n value={String(display)}\n disabled={disabled}\n onCommit={(val) => {\n const parsed = parseFloat(val)\n if (!Number.isNaN(parsed)) {\n onChange(Math.max(min, Math.min(max, parsed)))\n }\n }}\n sanitize={(val) => sanitizeValueDraft(val, min, step)}\n validate={(val) => !Number.isNaN(parseFloat(val))}\n inputMode={min < 0 || stepAllowsDecimal(step) ? 'decimal' : 'numeric'}\n align=\"right\"\n isActive={isActive}\n className=\"sliderValue\"\n autoWidth\n arrowStep={step}\n arrowMin={min}\n arrowMax={max}\n valueTextRef={valueTextRef}\n inputRef={inputRef}\n onEditingChange={setValueEditing}\n renderValue={(val) =>\n dragging ? (\n val\n ) : (\n <TextMorph\n className=\"sliderValueMorph\"\n as=\"span\"\n duration={260}\n ease={{ stiffness: 380, damping: 34, mass: 0.42 }}\n >\n {val}\n </TextMorph>\n )\n }\n />\n </div>\n </motion.div>\n </div>\n )\n}\n","/** Normalize to #RRGGBB uppercase */\nexport function normalizeHex(raw: string): string {\n const s = raw.trim()\n const m = s.match(/^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/)\n if (!m) return '#808080'\n let h = m[1]\n if (h.length === 3) {\n h = h[0] + h[0] + h[1] + h[1] + h[2] + h[2]\n }\n return `#${h.toUpperCase()}`\n}\n\nexport type Hsl = { h: number; s: number; l: number }\nexport type Hsv = { h: number; s: number; v: number }\nexport type Rgb = { r: number; g: number; b: number }\n\n/** H in degrees 0–360; S and L in 0–1 */\nexport function hslToHex(h: number, s: number, l: number): string {\n const [r, g, b] = hslToRgbBytes(h, s, l)\n const toHex = (v: number) => v.toString(16).padStart(2, '0')\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase()\n}\n\nexport function hslToRgbBytes(h: number, s: number, l: number): [number, number, number] {\n const hue = ((h % 360) + 360) % 360\n const sat = Math.max(0, Math.min(1, s))\n const lit = Math.max(0, Math.min(1, l))\n\n const c = (1 - Math.abs(2 * lit - 1)) * sat\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1))\n const m = lit - c / 2\n\n let rp = 0\n let gp = 0\n let bp = 0\n if (hue < 60) {\n rp = c\n gp = x\n } else if (hue < 120) {\n rp = x\n gp = c\n } else if (hue < 180) {\n gp = c\n bp = x\n } else if (hue < 240) {\n gp = x\n bp = c\n } else if (hue < 300) {\n rp = x\n bp = c\n } else {\n rp = c\n bp = x\n }\n\n return [Math.round((rp + m) * 255), Math.round((gp + m) * 255), Math.round((bp + m) * 255)]\n}\n\n/** #RRGGBB → HSL with S,L in 0–1 */\nexport function hexToHsl(hex: string): Hsl {\n const n = normalizeHex(hex)\n const r = parseInt(n.slice(1, 3), 16) / 255\n const g = parseInt(n.slice(3, 5), 16) / 255\n const b = parseInt(n.slice(5, 7), 16) / 255\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n let h = 0\n let s = 0\n const d = max - min\n if (d !== 0) {\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)) * 60\n break\n case g:\n h = ((b - r) / d + 2) * 60\n break\n default:\n h = ((r - g) / d + 4) * 60\n break\n }\n }\n return { h, s, l }\n}\n\n/** H in degrees 0–360; S and V in 0–1 */\nexport function hsvToRgbBytes(h: number, s: number, v: number): [number, number, number] {\n const hue = ((h % 360) + 360) % 360\n const sat = Math.max(0, Math.min(1, s))\n const val = Math.max(0, Math.min(1, v))\n\n const c = val * sat\n const x = c * (1 - Math.abs(((hue / 60) % 2) - 1))\n const m = val - c\n\n let rp = 0\n let gp = 0\n let bp = 0\n\n if (hue < 60) {\n rp = c\n gp = x\n } else if (hue < 120) {\n rp = x\n gp = c\n } else if (hue < 180) {\n gp = c\n bp = x\n } else if (hue < 240) {\n gp = x\n bp = c\n } else if (hue < 300) {\n rp = x\n bp = c\n } else {\n rp = c\n bp = x\n }\n\n return [Math.round((rp + m) * 255), Math.round((gp + m) * 255), Math.round((bp + m) * 255)]\n}\n\nexport function hsvToHex(h: number, s: number, v: number): string {\n const [r, g, b] = hsvToRgbBytes(h, s, v)\n const toHex = (n: number) => n.toString(16).padStart(2, '0')\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase()\n}\n\n/** #RRGGBB → HSV with S,V in 0–1 */\nexport function hexToHsv(hex: string): Hsv {\n const n = normalizeHex(hex)\n const r = parseInt(n.slice(1, 3), 16) / 255\n const g = parseInt(n.slice(3, 5), 16) / 255\n const b = parseInt(n.slice(5, 7), 16) / 255\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const d = max - min\n\n let h = 0\n if (d !== 0) {\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) * 60\n break\n case g:\n h = ((b - r) / d + 2) * 60\n break\n default:\n h = ((r - g) / d + 4) * 60\n break\n }\n }\n\n const v = max\n const s = max === 0 ? 0 : d / max\n\n return { h, s, v }\n}\n\nexport function hexToRgb(hex: string): Rgb {\n const n = normalizeHex(hex)\n return {\n r: parseInt(n.slice(1, 3), 16),\n g: parseInt(n.slice(3, 5), 16),\n b: parseInt(n.slice(5, 7), 16),\n }\n}\n\nexport function rgbToHex(r: number, g: number, b: number): string {\n const clampByte = (v: number) => Math.max(0, Math.min(255, Math.round(v)))\n const toHex = (v: number) => clampByte(v).toString(16).padStart(2, '0')\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`.toUpperCase()\n}\n\nfunction clampHueDeg(h: number): number {\n return ((h % 360) + 360) % 360\n}\n\nfunction clamp01(v: number): number {\n return Math.max(0, Math.min(1, v))\n}\n\nfunction parseNumberish(s: string): number | null {\n const n = Number.parseFloat(s.trim())\n return Number.isFinite(n) ? n : null\n}\n\nfunction splitCssArgs(raw: string): string[] {\n // Supports both modern CSS space-separated and legacy comma-separated syntaxes.\n // Also strips alpha part after \"/\".\n const noAlpha = raw.split('/')[0] ?? raw\n return noAlpha\n .trim()\n .replace(/,/g, ' ')\n .split(/\\s+/)\n .filter(Boolean)\n}\n\nfunction parseRgbArgsToBytes(args: string[]): Rgb | null {\n if (args.length < 3) return null\n const nums = args.slice(0, 3)\n const bytes: number[] = []\n for (const token of nums) {\n if (token.endsWith('%')) {\n const n = parseNumberish(token.slice(0, -1))\n if (n === null) return null\n bytes.push(Math.round((Math.max(0, Math.min(100, n)) / 100) * 255))\n } else {\n const n = parseNumberish(token)\n if (n === null) return null\n bytes.push(Math.round(Math.max(0, Math.min(255, n))))\n }\n }\n return { r: bytes[0]!, g: bytes[1]!, b: bytes[2]! }\n}\n\nfunction parseHslArgs(args: string[]): Hsl | null {\n if (args.length < 3) return null\n const hRaw = parseNumberish(args[0]!)\n if (hRaw === null) return null\n // Hue units: deg is default; accept \"deg\" suffix.\n const h = clampHueDeg(String(args[0]).endsWith('deg') ? parseNumberish(String(args[0]).replace(/deg$/i, '')) ?? hRaw : hRaw)\n\n const sTok = args[1]!\n const lTok = args[2]!\n if (!sTok.endsWith('%') || !lTok.endsWith('%')) return null\n const sN = parseNumberish(sTok.slice(0, -1))\n const lN = parseNumberish(lTok.slice(0, -1))\n if (sN === null || lN === null) return null\n return { h, s: clamp01(sN / 100), l: clamp01(lN / 100) }\n}\n\nfunction parseHsvArgs(args: string[]): Hsv | null {\n if (args.length < 3) return null\n const hRaw = parseNumberish(args[0]!)\n if (hRaw === null) return null\n const h = clampHueDeg(hRaw)\n const sTok = args[1]!\n const vTok = args[2]!\n if (!sTok.endsWith('%') || !vTok.endsWith('%')) return null\n const sN = parseNumberish(sTok.slice(0, -1))\n const vN = parseNumberish(vTok.slice(0, -1))\n if (sN === null || vN === null) return null\n return { h, s: clamp01(sN / 100), v: clamp01(vN / 100) }\n}\n\n/**\n * Parse common CSS color strings to hex.\n * Supports:\n * - #RGB / #RRGGBB\n * - rgb(...) / rgba(...): comma or space-separated, numbers 0-255 or percents\n * - hsl(...) / hsla(...): modern space-separated or legacy commas; S and L must be percents\n * - hsv(...) / hsb(...): non-standard but common in tooling; S and V/B as percents\n *\n * Alpha (if present) is ignored.\n */\nexport function parseCssColorToHex(raw: string): string | null {\n const s = raw.trim()\n if (!s) return null\n\n // Hex\n if (/^#?[0-9a-fA-F]{3}([0-9a-fA-F]{3})?$/.test(s)) {\n return normalizeHex(s)\n }\n\n const fn = s.match(/^([a-zA-Z]+)\\((.*)\\)$/)\n if (!fn) return null\n const name = fn[1]!.toLowerCase()\n const args = splitCssArgs(fn[2] ?? '')\n\n if (name === 'rgb' || name === 'rgba') {\n const rgb = parseRgbArgsToBytes(args)\n return rgb ? rgbToHex(rgb.r, rgb.g, rgb.b) : null\n }\n if (name === 'hsl' || name === 'hsla') {\n const hsl = parseHslArgs(args)\n return hsl ? hslToHex(hsl.h, hsl.s, hsl.l) : null\n }\n if (name === 'hsv' || name === 'hsb') {\n const hsv = parseHsvArgs(args)\n return hsv ? hsvToHex(hsv.h, hsv.s, hsv.v) : null\n }\n\n return null\n}\n","import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react'\nimport {\n hexToHsl,\n hexToHsv,\n hexToRgb,\n hslToHex,\n hsvToHex,\n hsvToRgbBytes,\n normalizeHex,\n parseCssColorToHex,\n rgbToHex,\n type Hsl,\n type Hsv,\n} from '../utils/colorSpace'\nimport { ValueInput } from './ValueInput'\nimport './ColorPicker.css'\n\nexport type ColorPickerProps = {\n value: string\n onChange: (hex: string) => void\n}\n\ntype ValueMode = 'hex' | 'hsl' | 'hsb' | 'rgb'\n\nconst HUE_STOPS = [\n '#FF0000',\n '#FFFF00',\n '#00FF00',\n '#00FFFF',\n '#0000FF',\n '#FF00FF',\n '#FF0000',\n] as const\n\nfunction clamp01(v: number): number {\n return Math.max(0, Math.min(1, v))\n}\n\nfunction clampHueDeg(h: number): number {\n return ((h % 360) + 360) % 360\n}\n\nfunction clampInt(n: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, Math.round(n)))\n}\n\nfunction normalizeHexDigits(raw: string): string {\n return raw.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n}\n\nfunction isValidSixHex(d: string): boolean {\n return /^[0-9a-fA-F]{6}$/.test(d)\n}\n\nfunction clampHsv01(base: Hsv): Hsv {\n return { h: clampHueDeg(base.h), s: clamp01(base.s), v: clamp01(base.v) }\n}\n\nfunction clampHsl01(base: Hsl): Hsl {\n return { h: clampHueDeg(base.h), s: clamp01(base.s), l: clamp01(base.l) }\n}\n\nfunction cycleMode(m: ValueMode): ValueMode {\n if (m === 'hex') return 'hsl'\n if (m === 'hsl') return 'hsb'\n if (m === 'hsb') return 'rgb'\n return 'hex'\n}\n\nfunction drawSvPlane(ctx: CanvasRenderingContext2D, w: number, h: number, hue: number): void {\n const img = ctx.createImageData(w, h)\n const d = img.data\n let p = 0\n for (let y = 0; y < h; y++) {\n const v = 1 - y / Math.max(1, h - 1)\n for (let x = 0; x < w; x++) {\n const s = x / Math.max(1, w - 1)\n const [r, g, b] = hsvToRgbBytes(hue, s, v)\n d[p] = r\n d[p + 1] = g\n d[p + 2] = b\n d[p + 3] = 255\n p += 4\n }\n }\n ctx.putImageData(img, 0, 0)\n}\n\nfunction readSvFromClient(clientX: number, clientY: number, base: Hsv, svEl: HTMLElement | null): Hsv | null {\n if (!svEl) return null\n const r = svEl.getBoundingClientRect()\n if (r.width <= 0 || r.height <= 0) return null\n const s = clamp01((clientX - r.left) / r.width)\n const v = clamp01(1 - (clientY - r.top) / r.height)\n return { ...base, s, v }\n}\n\nfunction readHueFromClient(clientY: number, base: Hsv, hueEl: HTMLElement | null): Hsv | null {\n if (!hueEl) return null\n const r = hueEl.getBoundingClientRect()\n if (r.height <= 0) return null\n const t = clamp01((clientY - r.top) / r.height)\n return { ...base, h: t * 360 }\n}\n\nfunction EyeDropperIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M15.651,2.348c-.998-.998-2.739-.998-3.737,0l-2.503,2.503-1.131-1.131c-.293-.293-.768-.293-1.061,0s-.293,.768,0,1.061l6,6c.146,.146,.338,.22,.53,.22s.384-.073,.53-.22c.293-.293,.293-.768,0-1.061l-1.131-1.131,2.502-2.502c1.03-1.03,1.03-2.708,0-3.738Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M2.596,11.667c-.845,.845-.985,2.12-.444,3.121l-.932,.931c-.293,.292-.293,.768,0,1.061,.146,.146,.338,.22,.53,.22,.191,0,.384-.073,.53-.22l.931-.931c.382,.208,.807,.329,1.254,.329,.706,0,1.369-.275,1.868-.774l4.695-4.695-3.738-3.737L2.596,11.667Z\"\n fill=\"currentColor\"\n />\n </svg>\n )\n}\n\nexport function ColorPicker({ value, onChange }: ColorPickerProps) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n const svWrapRef = useRef<HTMLDivElement>(null)\n const hueRef = useRef<HTMLDivElement>(null)\n const [dragging, setDragging] = useState<'sl' | 'hue' | null>(null)\n const [pointerDraft, setPointerDraft] = useState<Hsv | null>(null)\n const [memory, setMemory] = useState<{ h: number; s: number }>(() => {\n const base = hexToHsv(normalizeHex(value))\n return { h: base.h, s: base.s || 1 }\n })\n const [mode, setMode] = useState<ValueMode>('hex')\n\n const hsvFromValueRaw = useMemo(() => hexToHsv(normalizeHex(value)), [value])\n // When value is grayscale (S=0) or black (V=0), preserve last hue/sat so the cursor doesn't snap left.\n const hsvFromValue = useMemo(() => {\n const base = hsvFromValueRaw\n if (base.v === 0) {\n return { ...base, h: memory.h, s: memory.s }\n }\n if (base.s === 0) {\n return { ...base, h: memory.h }\n }\n return base\n }, [hsvFromValueRaw, memory.h, memory.s])\n const draft = pointerDraft ?? hsvFromValue\n const hex = useMemo(() => normalizeHex(value), [value])\n const hslFromHex = useMemo(() => hexToHsl(hex), [hex])\n const rgbFromHex = useMemo(() => hexToRgb(hex), [hex])\n\n const redrawCanvas = useCallback(() => {\n const canvas = canvasRef.current\n if (!canvas) return\n const rect = canvas.getBoundingClientRect()\n const w = Math.max(1, Math.round(rect.width * (window.devicePixelRatio || 1)))\n const h = Math.max(1, Math.round(rect.height * (window.devicePixelRatio || 1)))\n if (canvas.width !== w || canvas.height !== h) {\n canvas.width = w\n canvas.height = h\n }\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n drawSvPlane(ctx, w, h, draft.h)\n }, [draft.h])\n\n useLayoutEffect(() => {\n redrawCanvas()\n }, [redrawCanvas])\n\n useEffect(() => {\n const el = canvasRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(() => redrawCanvas())\n ro.observe(el)\n return () => ro.disconnect()\n }, [redrawCanvas])\n\n const commit = useCallback(\n (next: Hsv) => {\n setMemory({ h: next.h, s: next.s || memory.s })\n onChange(hsvToHex(next.h, next.s, next.v))\n },\n [onChange, memory.s],\n )\n\n const onToggleMode = () => {\n setMode((m) => cycleMode(m))\n }\n\n // Helper to handle paste with CSS color parsing\n const handleColorPaste = (pasted: string): string | null => {\n const parsed = parseCssColorToHex(pasted)\n if (parsed) {\n onChange(parsed)\n return '' // Clear draft and close\n }\n return null // Let default handling occur\n }\n\n const onEyeDropper = async () => {\n const AnyWindow = window as unknown as { EyeDropper?: { new (): { open: () => Promise<{ sRGBHex: string }> } } }\n if (!AnyWindow.EyeDropper) return\n try {\n const dropper = new AnyWindow.EyeDropper()\n const result = await dropper.open()\n onChange(normalizeHex(result.sRGBHex))\n } catch {\n // cancelled\n }\n }\n\n const onSlPointerDown = (e: ReactPointerEvent) => {\n if (e.button !== 0) return\n e.preventDefault()\n const base = pointerDraft ?? hsvFromValue\n const next = readSvFromClient(e.clientX, e.clientY, base, svWrapRef.current)\n if (!next) return\n setMemory({ h: next.h, s: next.s || memory.s })\n setPointerDraft(next)\n setDragging('sl')\n e.currentTarget.setPointerCapture(e.pointerId)\n }\n\n const onSlPointerMove = (e: ReactPointerEvent) => {\n if (dragging !== 'sl' || !e.currentTarget.hasPointerCapture(e.pointerId)) return\n setPointerDraft((prev) => {\n const base = prev ?? hsvFromValue\n const next = readSvFromClient(e.clientX, e.clientY, base, svWrapRef.current)\n if (next) setMemory({ h: next.h, s: next.s || memory.s })\n return next ?? prev\n })\n }\n\n const onSlPointerUp = (e: ReactPointerEvent) => {\n if (dragging !== 'sl' || !e.currentTarget.hasPointerCapture(e.pointerId)) return\n e.currentTarget.releasePointerCapture(e.pointerId)\n const base = pointerDraft ?? hsvFromValue\n const next = readSvFromClient(e.clientX, e.clientY, base, svWrapRef.current)\n if (next) commit(next)\n setPointerDraft(null)\n setDragging(null)\n }\n\n const onHuePointerDown = (e: ReactPointerEvent) => {\n if (e.button !== 0) return\n e.preventDefault()\n const base = pointerDraft ?? hsvFromValue\n const next = readHueFromClient(e.clientY, base, hueRef.current)\n if (!next) return\n setMemory({ h: next.h, s: next.s || memory.s })\n setPointerDraft(next)\n setDragging('hue')\n e.currentTarget.setPointerCapture(e.pointerId)\n }\n\n const onHuePointerMove = (e: ReactPointerEvent) => {\n if (dragging !== 'hue' || !e.currentTarget.hasPointerCapture(e.pointerId)) return\n setPointerDraft((prev) => {\n const base = prev ?? hsvFromValue\n const next = readHueFromClient(e.clientY, base, hueRef.current)\n if (next) setMemory({ h: next.h, s: next.s || memory.s })\n return next ?? prev\n })\n }\n\n const onHuePointerUp = (e: ReactPointerEvent) => {\n if (dragging !== 'hue' || !e.currentTarget.hasPointerCapture(e.pointerId)) return\n e.currentTarget.releasePointerCapture(e.pointerId)\n const base = pointerDraft ?? hsvFromValue\n const next = readHueFromClient(e.clientY, base, hueRef.current)\n if (next) commit(next)\n setPointerDraft(null)\n setDragging(null)\n }\n\n const previewHex = hsvToHex(draft.h, draft.s, draft.v)\n\n const onSlKeyDown = (e: KeyboardEvent) => {\n const step = e.shiftKey ? 0.05 : 0.01\n let { s, v } = draft\n let handled = true\n switch (e.key) {\n case 'ArrowRight':\n s = clamp01(s + step)\n break\n case 'ArrowLeft':\n s = clamp01(s - step)\n break\n case 'ArrowUp':\n v = clamp01(v + step)\n break\n case 'ArrowDown':\n v = clamp01(v - step)\n break\n case 'Home':\n s = 0\n break\n case 'End':\n s = 1\n break\n case 'PageUp':\n v = clamp01(v + 0.1)\n break\n case 'PageDown':\n v = clamp01(v - 0.1)\n break\n default:\n handled = false\n }\n if (!handled) return\n e.preventDefault()\n e.stopPropagation()\n const next = { ...draft, s, v }\n commit(next)\n }\n\n const onHueKeyDown = (e: KeyboardEvent) => {\n const stepSmall = e.shiftKey ? 10 : 1\n let h = draft.h\n let handled = true\n switch (e.key) {\n case 'ArrowRight':\n h = ((h + stepSmall) % 360) + 360\n h %= 360\n break\n case 'ArrowLeft':\n h = ((h - stepSmall) % 360) + 360\n h %= 360\n break\n case 'Home':\n h = 0\n break\n case 'End':\n h = 359\n break\n case 'PageUp':\n h = (((Math.round(h) + 10) % 360) + 360) % 360\n break\n case 'PageDown':\n h = (((Math.round(h) - 10) % 360) + 360) % 360\n break\n default:\n handled = false\n }\n if (!handled) return\n e.preventDefault()\n e.stopPropagation()\n const next = { ...draft, h }\n commit(next)\n }\n\n const crossLeft = `${draft.s * 100}%`\n const crossTop = `${(1 - draft.v) * 100}%`\n const hueThumbTop = `${(draft.h / 360) * 100}%`\n const hueThumbTopClamped = `clamp(8px, ${hueThumbTop}, calc(100% - 8px))`\n\n const hslUiH = clampInt(hslFromHex.h, 0, 360)\n const hslUiS = clampInt(hslFromHex.s * 100, 0, 100)\n const hslUiL = clampInt(hslFromHex.l * 100, 0, 100)\n const hsbUiH = clampInt(draft.h, 0, 360)\n const hsbUiS = clampInt(draft.s * 100, 0, 100)\n const hsbUiB = clampInt(draft.v * 100, 0, 100)\n\n return (\n <div className=\"colorPicker\">\n <div\n className=\"colorPickerSpace\"\n data-node-id=\"565:1006\"\n >\n <div\n ref={svWrapRef}\n className=\"colorPickerSv\"\n onPointerDown={onSlPointerDown}\n onPointerMove={onSlPointerMove}\n onPointerUp={onSlPointerUp}\n onPointerCancel={onSlPointerUp}\n role=\"group\"\n aria-label=\"Saturation and brightness\"\n tabIndex={0}\n onKeyDown={onSlKeyDown}\n data-node-id=\"565:1007\"\n >\n <canvas ref={canvasRef} className=\"colorPickerSvCanvas\" aria-hidden />\n <span className=\"colorPickerIndicator\" style={{ left: crossLeft, top: crossTop }} aria-hidden />\n </div>\n <div className=\"colorPickerHueWrap\">\n <div\n ref={hueRef}\n className=\"colorPickerHue\"\n onPointerDown={onHuePointerDown}\n onPointerMove={onHuePointerMove}\n onPointerUp={onHuePointerUp}\n onPointerCancel={onHuePointerUp}\n role=\"slider\"\n aria-label=\"Hue\"\n aria-valuemin={0}\n aria-valuemax={360}\n aria-valuenow={Math.round(draft.h)}\n aria-orientation=\"vertical\"\n tabIndex={0}\n onKeyDown={onHueKeyDown}\n style={{\n background: `linear-gradient(to bottom, ${HUE_STOPS.join(', ')})`,\n }}\n data-node-id=\"565:1008\"\n >\n <span className=\"colorPickerIndicator\" style={{ left: '50%', top: hueThumbTopClamped }} aria-hidden />\n </div>\n </div>\n </div>\n\n <div className=\"colorPickerFooter\" data-node-id=\"565:1011\">\n <div className=\"colorPickerValueZone\" data-node-id=\"565:1012\">\n {mode === 'hex' ? (\n <ValueInput\n value={hex.slice(1)}\n prefix=\"#\"\n onCommit={(val) => {\n const d = normalizeHexDigits(val)\n if (isValidSixHex(d)) onChange(`#${d.toUpperCase()}`)\n }}\n sanitize={normalizeHexDigits}\n validate={isValidSixHex}\n maxLength={6}\n inputMode=\"text\"\n ariaLabel={`Edit hex color, ${hex}`}\n className=\"colorPickerHex\"\n onPaste={(pasted) => {\n const parsed = parseCssColorToHex(pasted)\n if (parsed) {\n onChange(parsed)\n return ''\n }\n return normalizeHexDigits(pasted)\n }}\n />\n ) : mode === 'hsl' ? (\n <div className=\"colorPickerTriplet\" aria-label=\"HSL values\">\n <ValueInput\n value={String(hslUiH)}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n const next = clampHsl01({ ...hslFromHex, h: clampHueDeg(n) })\n onChange(hslToHex(next.h, next.s, next.l))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Hue\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n <ValueInput\n value={String(hslUiS)}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n const next = clampHsl01({ ...hslFromHex, s: clamp01(n / 100) })\n onChange(hslToHex(next.h, next.s, next.l))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Saturation\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n <ValueInput\n value={String(hslUiL)}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n const next = clampHsl01({ ...hslFromHex, l: clamp01(n / 100) })\n onChange(hslToHex(next.h, next.s, next.l))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Lightness\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n </div>\n ) : mode === 'hsb' ? (\n <div className=\"colorPickerTriplet\" aria-label=\"HSB values\">\n <ValueInput\n value={String(hsbUiH)}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n const next = clampHsv01({ ...draft, h: clampHueDeg(n) })\n onChange(hsvToHex(next.h, next.s, next.v))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Hue\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n <ValueInput\n value={String(hsbUiS)}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n const next = clampHsv01({ ...draft, s: clamp01(n / 100) })\n onChange(hsvToHex(next.h, next.s, next.v))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Saturation\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n <ValueInput\n value={String(hsbUiB)}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n const next = clampHsv01({ ...draft, v: clamp01(n / 100) })\n onChange(hsvToHex(next.h, next.s, next.v))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Brightness\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n </div>\n ) : (\n <div className=\"colorPickerTriplet\" aria-label=\"RGB values\">\n <ValueInput\n value={String(clampInt(rgbFromHex.r, 0, 255))}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n onChange(rgbToHex(clampInt(n, 0, 255), rgbFromHex.g, rgbFromHex.b))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Red\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n <ValueInput\n value={String(clampInt(rgbFromHex.g, 0, 255))}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n onChange(rgbToHex(rgbFromHex.r, clampInt(n, 0, 255), rgbFromHex.b))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Green\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n <ValueInput\n value={String(clampInt(rgbFromHex.b, 0, 255))}\n onCommit={(val) => {\n const n = Number.parseInt(val, 10)\n if (!Number.isFinite(n)) return\n onChange(rgbToHex(rgbFromHex.r, rgbFromHex.g, clampInt(n, 0, 255)))\n }}\n sanitize={(v) => v.replace(/[^\\d]/g, '').slice(0, 3)}\n maxLength={3}\n inputMode=\"numeric\"\n ariaLabel=\"Blue\"\n className=\"colorPickerTripletBtn\"\n onPaste={handleColorPaste}\n />\n </div>\n )}\n </div>\n\n <div className=\"colorPickerActions\" data-node-id=\"565:1014\">\n <button\n type=\"button\"\n className=\"colorPickerModeBtn\"\n onClick={onToggleMode}\n aria-label=\"Switch color value mode\"\n title=\"Switch value mode\"\n data-node-id=\"565:1015\"\n >\n {mode.toUpperCase()}\n </button>\n <button\n type=\"button\"\n className=\"colorPickerIconBtn\"\n onClick={onEyeDropper}\n aria-label=\"Pick color from screen\"\n title=\"Eyedropper\"\n data-node-id=\"565:1020\"\n >\n <EyeDropperIcon />\n </button>\n </div>\n </div>\n\n <div className=\"colorPickerLiveSr\" aria-live=\"polite\" aria-atomic=\"true\">\n {dragging === null ? `Color ${previewHex}` : ''}\n </div>\n </div>\n )\n}\n","import { Popover } from '@base-ui/react'\nimport type { PopoverTrigger } from '@base-ui/react/popover'\nimport type { ReactNode } from 'react'\nimport './SwatchPopover.css'\n\nexport type SwatchPopoverRenderTrigger = PopoverTrigger.Props['render']\n\ntype SwatchPopoverProps = {\n title?: string\n renderTrigger: NonNullable<SwatchPopoverRenderTrigger>\n children: ReactNode\n modal?: boolean\n side?: Popover.Positioner.Props['side']\n align?: Popover.Positioner.Props['align']\n sideOffset?: Popover.Positioner.Props['sideOffset']\n zIndex?: number\n}\n\n/**\n * Base UI Popover anchored to a swatch: opens below, aligned to the inline end (bottom-trailing in LTR).\n * `modal={true}` is required for the internal backdrop (blocks clicks/scroll on the rest of the page).\n * `modal=\"trap-focus\"` does not mount that layer, so controls underneath stayed clickable.\n */\nexport function SwatchPopover({\n title,\n renderTrigger,\n children,\n modal = true,\n side = 'bottom',\n align = 'end',\n sideOffset = 6,\n zIndex,\n}: SwatchPopoverProps) {\n return (\n <Popover.Root modal={modal}>\n <Popover.Trigger render={renderTrigger} />\n <Popover.Portal className=\"swatchPopoverPortal\" style={zIndex != null ? { zIndex } : undefined}>\n <Popover.Positioner\n className=\"swatchPopoverPositioner\"\n positionMethod=\"fixed\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionAvoidance={{ side: 'flip', align: 'shift', fallbackAxisSide: 'none' }}\n >\n <Popover.Popup\n className=\"swatchPopoverPopup\"\n initialFocus={(openType) => openType === 'keyboard'}\n >\n {title && <Popover.Title className=\"swatchPopoverTitle\">{title}</Popover.Title>}\n <Popover.Close type=\"button\" className=\"swatchPopoverCloseSrOnly\">\n Close\n </Popover.Close>\n <div className=\"swatchPopoverBody\">{children}</div>\n </Popover.Popup>\n </Popover.Positioner>\n </Popover.Portal>\n </Popover.Root>\n )\n}\n","import { useState } from 'react'\nimport { normalizeHex } from '../utils/colorSpace'\nimport { useCategoryDisabled } from './categoryDisabledContext'\nimport { ColorPicker } from './ColorPicker'\nimport { SwatchPopover } from './SwatchPopover'\nimport { ValueInput } from './ValueInput'\nimport './ColorRow.css'\n\nfunction hexDigits(hex: string): string {\n const n = normalizeHex(hex)\n return n.slice(1)\n}\n\nfunction isValidSixHex(d: string): boolean {\n return /^[0-9a-fA-F]{6}$/.test(d)\n}\n\nfunction sanitizeHex(input: string): string {\n return input.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n}\n\nexport type ColorRowProps = {\n label?: string\n value: string\n onChange: (hex: string) => void\n disabled?: boolean\n}\n\nexport function ColorRow({ label = 'Color', value, onChange, disabled: disabledProp }: ColorRowProps) {\n const categoryDisabled = useCategoryDisabled()\n const disabled = Boolean(disabledProp || categoryDisabled)\n const [hovered, setHovered] = useState(false)\n\n const hex = normalizeHex(value)\n\n const handleCommit = (sanitized: string) => {\n if (isValidSixHex(sanitized)) {\n onChange(`#${sanitized.toUpperCase()}`)\n }\n }\n\n const handlePaste = (pasted: string): string => {\n // Strip # and any non-hex characters, take first 6 valid chars\n return pasted.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n }\n\n return (\n <div\n className=\"colorRowWrap\"\n data-disabled={disabled ? 'true' : 'false'}\n onPointerEnter={() => !disabled && setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <div className=\"colorCard\" data-active={!disabled && hovered ? 'true' : 'false'}>\n <span className=\"colorLabel\">{label}</span>\n <div className=\"colorValueZone\">\n <ValueInput\n value={hexDigits(hex)}\n prefix=\"#\"\n onCommit={handleCommit}\n sanitize={sanitizeHex}\n validate={isValidSixHex}\n maxLength={6}\n inputMode=\"text\"\n ariaLabel={`Edit hex color, ${hex}`}\n disabled={disabled}\n isActive={!disabled && hovered}\n className=\"colorRowValue\"\n onPaste={handlePaste}\n />\n <SwatchPopover\n renderTrigger={(props) => (\n <button\n type=\"button\"\n {...props}\n disabled={disabled}\n className={['colorSwatchBtn', props.className].filter(Boolean).join(' ')}\n style={{ ...props.style, ['--swatch-color' as never]: hex }}\n aria-label={`Open ${label} picker`}\n />\n )}\n >\n <ColorPicker value={hex} onChange={onChange} />\n </SwatchPopover>\n </div>\n </div>\n </div>\n )\n}\n","import type { KeyboardEvent } from 'react'\nimport { useCategoryDisabled } from './categoryDisabledContext'\nimport './ToggleRow.css'\n\nexport type ToggleRowProps = {\n label: string\n checked: boolean\n onChange: (next: boolean) => void\n disabled?: boolean\n}\n\nexport function ToggleRow({ label, checked, onChange, disabled: disabledProp }: ToggleRowProps) {\n const categoryDisabled = useCategoryDisabled()\n const disabled = Boolean(disabledProp || categoryDisabled)\n const toggle = () => {\n if (disabled) return\n onChange(!checked)\n }\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (disabled) return\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n toggle()\n }\n }\n\n return (\n <div className=\"toggleRowWrap\" data-disabled={disabled ? 'true' : 'false'}>\n <div\n role=\"switch\"\n tabIndex={disabled ? -1 : 0}\n aria-checked={checked}\n aria-label={label}\n aria-disabled={disabled}\n className=\"toggleCard\"\n data-on={checked ? 'true' : 'false'}\n onClick={toggle}\n onKeyDown={onKeyDown}\n >\n <span className=\"toggleLabel\">{label}</span>\n <div className=\"toggleControl\" aria-hidden>\n <div className=\"toggleSwitch\">\n <div className=\"toggleSwitch__track\">\n <div className=\"toggleSwitch__thumb\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import { hslToHex, normalizeHex } from '../utils/colorSpace'\nimport { ColorPicker } from './ColorPicker'\nimport { SwatchPopover } from './SwatchPopover'\nimport { ValueInput } from './ValueInput'\nimport './GradientPicker.css'\n\nexport type GradientStop = {\n color: string // hex with #\n}\n\nexport type GradientPickerProps = {\n /** Array of gradient stops (colors only, positions auto-distributed) */\n stops: GradientStop[]\n /** Called when stops change */\n onChange: (stops: GradientStop[]) => void\n /** Gradient angle in degrees, default 90 (left to right) */\n angle?: number\n}\n\n/**\n * Generate an aesthetic gradient with smooth color transitions.\n * Creates gradients that flow from light to dark with a cohesive color story.\n */\nfunction generateAestheticGradient(stopCount: number): GradientStop[] {\n // Pick a random base hue (0-360)\n const baseHue = Math.random() * 360\n\n // Hue shift across the gradient (30-60 degrees for analogous feel)\n const hueShift = 25 + Math.random() * 35\n // Direction of hue shift (positive or negative)\n const hueDirection = Math.random() > 0.5 ? 1 : -1\n\n const stops: GradientStop[] = []\n\n for (let i = 0; i < stopCount; i++) {\n const t = i / (stopCount - 1) // 0 to 1\n\n // Hue shifts gradually across the gradient\n const hue = baseHue + hueDirection * hueShift * t\n\n // Saturation curve: starts lower, peaks in middle, can vary\n // This creates more interesting gradients than flat saturation\n const satBase = 0.35 + Math.random() * 0.15 // 0.35-0.50 base\n const satPeak = 0.65 + Math.random() * 0.25 // 0.65-0.90 peak\n const saturation = satBase + (satPeak - satBase) * Math.sin(t * Math.PI * 0.8)\n\n // Lightness: smooth transition from light to dark\n // Start light (0.75-0.85), end dark (0.08-0.15)\n const lightStart = 0.75 + Math.random() * 0.10\n const lightEnd = 0.08 + Math.random() * 0.07\n // Use easing for more natural transition\n const eased = t * t * (3 - 2 * t) // smoothstep\n const lightness = lightStart + (lightEnd - lightStart) * eased\n\n stops.push({ color: hslToHex(hue, saturation, lightness) })\n }\n\n return stops\n}\n\nfunction hexDigits(hex: string): string {\n return normalizeHex(hex).slice(1)\n}\n\nfunction isValidSixHex(d: string): boolean {\n return /^[0-9a-fA-F]{6}$/.test(d)\n}\n\n/** Generate CSS linear-gradient from stops with even distribution */\nexport function stopsToGradient(stops: GradientStop[], angle = 90): string {\n if (stops.length === 0) return 'linear-gradient(90deg, #808080, #808080)'\n if (stops.length === 1) {\n const c = normalizeHex(stops[0].color)\n return `linear-gradient(${angle}deg, ${c}, ${c})`\n }\n const colorStops = stops.map((s, i) => {\n const pos = Math.round((i / (stops.length - 1)) * 100)\n return `${normalizeHex(s.color)} ${pos}%`\n })\n return `linear-gradient(${angle}deg, ${colorStops.join(', ')})`\n}\n\n/** Parse a linear-gradient string into stops */\nexport function parseGradient(gradient: string): GradientStop[] {\n // Match linear-gradient(angle, color1 pos1%, color2 pos2%, ...)\n const match = gradient.match(/linear-gradient\\s*\\([^,]+,\\s*(.+)\\)/)\n if (!match) return [{ color: '#FF0000' }, { color: '#0000FF' }]\n\n const colorPart = match[1]\n // Split by comma, extract colors (ignore positions since we auto-distribute)\n const parts = colorPart.split(/,\\s*/)\n const stops: GradientStop[] = []\n\n for (const part of parts) {\n // Extract hex color from each part (e.g., \"#FF0000 0%\" or just \"#FF0000\")\n const hexMatch = part.match(/#[0-9a-fA-F]{3,6}/)\n if (hexMatch) {\n stops.push({ color: normalizeHex(hexMatch[0]) })\n }\n }\n\n return stops.length >= 2 ? stops : [{ color: '#FF0000' }, { color: '#0000FF' }]\n}\n\n/** Default 6 colors for gradient picker (dark to light, top to bottom) */\nexport const DEFAULT_GRADIENT_STOPS: GradientStop[] = [\n { color: '#0E171B' },\n { color: '#00354F' },\n { color: '#005F7A' },\n { color: '#009A97' },\n { color: '#42C0B0' },\n { color: '#BAC9C7' },\n]\n\ntype StopRowProps = {\n index: number\n stop: GradientStop\n canDelete: boolean\n onColorChange: (color: string) => void\n onDelete: () => void\n}\n\nfunction sanitizeHex(input: string): string {\n return input.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n}\n\nfunction StopRow({ index, stop, canDelete, onColorChange, onDelete }: StopRowProps) {\n const hex = normalizeHex(stop.color)\n\n const handleCommit = (val: string) => {\n const d = sanitizeHex(val)\n if (isValidSixHex(d)) {\n onColorChange(`#${d.toUpperCase()}`)\n }\n }\n\n const handlePaste = (pasted: string): string => {\n // Strip # and any non-hex characters, take first 6 valid chars\n return sanitizeHex(pasted)\n }\n\n return (\n <div className=\"gradientPickerStop\">\n <div className=\"gradientPickerStopColorHex\">\n <SwatchPopover\n modal={false}\n side=\"right\"\n align=\"start\"\n sideOffset={8}\n zIndex={200001}\n renderTrigger={(props) => (\n <button\n type=\"button\"\n {...props}\n className={['gradientPickerStopSwatch', props.className].filter(Boolean).join(' ')}\n style={{ ...props.style, backgroundColor: hex }}\n aria-label={`Edit color for stop ${index + 1}`}\n />\n )}\n >\n <ColorPicker value={hex} onChange={onColorChange} />\n </SwatchPopover>\n <ValueInput\n value={hexDigits(hex)}\n prefix=\"#\"\n onCommit={handleCommit}\n sanitize={sanitizeHex}\n validate={isValidSixHex}\n maxLength={6}\n inputMode=\"text\"\n ariaLabel=\"Hex color without hash\"\n className=\"gradientPickerStopHex\"\n onPaste={handlePaste}\n />\n </div>\n\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn gradientPickerStopDelete\"\n onClick={onDelete}\n disabled={!canDelete}\n aria-label={`Remove stop ${index + 1}`}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <path d=\"M14.75,9.75H3.25c-.414,0-.75-.336-.75-.75s.336-.75,.75-.75H14.75c.414,0,.75,.336,.75,.75s-.336,.75-.75,.75Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n )\n}\n\nexport function GradientPicker({ stops, onChange, angle = 90 }: GradientPickerProps) {\n const handleInvert = () => {\n onChange([...stops].reverse())\n }\n\n const handleAddStop = () => {\n // Add a new stop with a color interpolated between existing stops, or gray\n let newColor = '#808080'\n if (stops.length >= 2) {\n // Pick the midpoint color (just use the middle stop or first stop)\n const midIdx = Math.floor(stops.length / 2)\n newColor = stops[midIdx].color\n } else if (stops.length === 1) {\n newColor = stops[0].color\n }\n onChange([...stops, { color: newColor }])\n }\n\n const handleShuffle = () => {\n // Generate a new aesthetic gradient with the same number of stops\n onChange(generateAestheticGradient(stops.length))\n }\n\n const handleDeleteStop = (index: number) => {\n if (stops.length <= 2) return\n onChange(stops.filter((_, i) => i !== index))\n }\n\n const handleColorChange = (index: number, color: string) => {\n const newStops = stops.map((s, i) => (i === index ? { ...s, color } : s))\n onChange(newStops)\n }\n\n return (\n <div className=\"gradientPicker\">\n <div className=\"gradientPickerPreviewWrap\">\n <div\n className=\"gradientPickerPreview\"\n aria-hidden\n style={{ background: stopsToGradient(stops, angle) }}\n />\n </div>\n {/* Header with icons */}\n <div className=\"gradientPickerHeader\">\n <div className=\"gradientPickerHeaderIconsLeft\">\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleShuffle}\n aria-label=\"Randomize gradient\"\n title=\"Randomize gradient\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M16.525 6.05302L13.245 4.75602L11.947 1.47502C11.72 0.903021 10.779 0.903021 10.552 1.47502L9.25399 4.75602L5.97399 6.05302C5.68799 6.16602 5.49899 6.44302 5.49899 6.75002C5.49899 7.05702 5.68699 7.33402 5.97399 7.44702L9.25399 8.74402L10.552 12.025C10.665 12.311 10.942 12.499 11.249 12.499C11.556 12.499 11.833 12.311 11.946 12.025L13.244 8.74402L16.524 7.44702C16.81 7.33402 16.999 7.05702 16.999 6.75002C16.999 6.44302 16.812 6.16602 16.525 6.05302Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M4.75 9.5C5.09415 9.5 5.39414 9.73422 5.47761 10.0681L5.96847 12.0315L7.9319 12.5224C8.26578 12.6059 8.5 12.9058 8.5 13.25C8.5 13.5942 8.26578 13.8941 7.9319 13.9776L5.96847 14.4685L5.47761 16.4319C5.39414 16.7658 5.09415 17 4.75 17C4.40585 17 4.10586 16.7658 4.02239 16.4319L3.53153 14.4685L1.5681 13.9776C1.23422 13.8941 1 13.5942 1 13.25C1 12.9058 1.23422 12.6059 1.5681 12.5224L3.53153 12.0315L4.02239 10.0681C4.10586 9.73422 4.40585 9.5 4.75 9.5Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleInvert}\n aria-label=\"Invert gradient\"\n title=\"Invert gradient\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M4.061,7h6.189c.414,0,.75-.336,.75-.75s-.336-.75-.75-.75H4.061l1.97-1.97c.293-.293,.293-.768,0-1.061s-.768-.293-1.061,0L1.72,5.72c-.293,.293-.293,.768,0,1.061l3.25,3.25c.146,.146,.338,.22,.53,.22s.384-.073,.53-.22c.293-.293,.293-.768,0-1.061l-1.97-1.97Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M13.03,7.97c-.293-.293-.768-.293-1.061,0s-.293,.768,0,1.061l1.97,1.97H7.75c-.414,0-.75,.336-.75,.75s.336,.75,.75,.75h6.189l-1.97,1.97c-.293,.293-.293,.768,0,1.061,.146,.146,.338,.22,.53,.22s.384-.073,.53-.22l3.25-3.25c.293-.293,.293-.768,0-1.061l-3.25-3.25Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n </div>\n <button\n type=\"button\"\n className=\"gradientPickerIconBtn\"\n onClick={handleAddStop}\n aria-label=\"Add color stop\"\n title=\"Add color stop\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 18 18\" aria-hidden=\"true\">\n <path d=\"M14.75,9.75H3.25c-.414,0-.75-.336-.75-.75s.336-.75,.75-.75H14.75c.414,0,.75,.336,.75,.75s-.336,.75-.75,.75Z\" fill=\"currentColor\"/>\n <path d=\"M9,15.5c-.414,0-.75-.336-.75-.75V3.25c0-.414,.336-.75,.75-.75s.75,.336,.75,.75V14.75c0,.414-.336,.75-.75,.75Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n\n {/* Color stops list */}\n <div className=\"gradientPickerStopsList\">\n {stops.map((stop, i) => (\n <StopRow\n key={i}\n index={i}\n stop={stop}\n canDelete={stops.length > 2}\n onColorChange={(color) => handleColorChange(i, color)}\n onDelete={() => handleDeleteStop(i)}\n />\n ))}\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { SwatchPopover } from './SwatchPopover'\nimport { GradientPicker, DEFAULT_GRADIENT_STOPS, stopsToGradient, type GradientStop } from './GradientPicker'\nimport { useCategoryDisabled } from './categoryDisabledContext'\nimport './GradientRow.css'\n\nexport type GradientRowProps = {\n label?: string\n /** Initial gradient stops - defaults to 6 teal-to-dark colors */\n initialStops?: GradientStop[]\n /** Called when gradient changes */\n onChange?: (gradient: string) => void\n /** Gradient angle in degrees, default 90 */\n angle?: number\n disabled?: boolean\n}\n\nexport function GradientRow({\n label = 'Gradient',\n initialStops,\n onChange,\n angle = 90,\n disabled: disabledProp,\n}: GradientRowProps) {\n const categoryDisabled = useCategoryDisabled()\n const disabled = Boolean(disabledProp || categoryDisabled)\n const [hovered, setHovered] = useState(false)\n const isActive = !disabled && hovered\n\n // Use provided stops or default to 6 colors\n const [stops, setStops] = useState<GradientStop[]>(() => initialStops ?? DEFAULT_GRADIENT_STOPS)\n\n const handleStopsChange = (newStops: GradientStop[]) => {\n setStops(newStops)\n if (onChange) {\n onChange(stopsToGradient(newStops, angle))\n }\n }\n\n const currentGradient = stopsToGradient(stops, angle)\n\n return (\n <div\n className=\"gradientRowWrap\"\n data-disabled={disabled ? 'true' : 'false'}\n onPointerEnter={() => !disabled && setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n >\n <div className=\"gradientCard\" data-active={isActive ? 'true' : 'false'}>\n <span className=\"gradientLabel\">{label}</span>\n <div className=\"gradientSwatchZone\">\n <SwatchPopover\n renderTrigger={(props) => (\n <button\n type=\"button\"\n {...props}\n disabled={disabled}\n className={['gradientSwatchBtn', props.className].filter(Boolean).join(' ')}\n style={{ ...props.style, background: currentGradient }}\n aria-label={`Open ${label} editor`}\n />\n )}\n >\n <GradientPicker stops={stops} onChange={handleStopsChange} angle={angle} />\n </SwatchPopover>\n </div>\n </div>\n </div>\n )\n}\n"],"names":["n","t","l","f","h","DEFAULT_AS","MorphController","v","value","w","b","debugZones","_","TextMorph","x","d","clampHueDeg","clamp01","isValidSixHex","y","hexDigits","sanitizeHex"],"mappings":"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","x_google_ignoreList":[3,4]}