aporia 0.2.8 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/dist/components/Panel.d.ts +10 -1
- package/dist/components/Panel.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -66,6 +66,19 @@ Use `Panel` (and usually `Category`) for any real configurator surface so spacin
|
|
|
66
66
|
|
|
67
67
|
Rounded shell for a configurator: drop in `Category` sections and row components as children. By default the panel is **`width: 100%`** with **`max-width: min(360px, 100%)`** via the `:root` token **`--aporia-panel-max-width`** (override on `html` or a wrapper if you need a wider shell).
|
|
68
68
|
|
|
69
|
+
```tsx
|
|
70
|
+
<Panel
|
|
71
|
+
defaultCollapsed
|
|
72
|
+
defaultAnchor="bottom-right"
|
|
73
|
+
>
|
|
74
|
+
{/* categories / rows */}
|
|
75
|
+
</Panel>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Useful panel defaults:
|
|
79
|
+
- `defaultCollapsed`: starts the panel collapsed on first render.
|
|
80
|
+
- `defaultAnchor`: presets the floating origin before any drag (`'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left' | 'right'`).
|
|
81
|
+
|
|
69
82
|
### Category
|
|
70
83
|
|
|
71
84
|
Collapsible section with a title and optional disable-all behavior for its children.
|
|
@@ -3,6 +3,12 @@ export type PanelProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
3
3
|
children: ReactNode;
|
|
4
4
|
/** When true, panel is fixed to top-left and floats above page content. */
|
|
5
5
|
floating?: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Initial floating anchor when uncontrolled.
|
|
8
|
+
* - `'left'` maps to `'top-left'`
|
|
9
|
+
* - `'right'` maps to `'top-right'`
|
|
10
|
+
*/
|
|
11
|
+
defaultAnchor?: PanelAnchor;
|
|
6
12
|
/** Controlled collapsed state. */
|
|
7
13
|
collapsed?: boolean;
|
|
8
14
|
/** Initial collapsed state when uncontrolled. */
|
|
@@ -12,6 +18,8 @@ export type PanelProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
12
18
|
/** aria-label for the toggle button. */
|
|
13
19
|
collapseAriaLabel?: string;
|
|
14
20
|
};
|
|
21
|
+
type FloatingAnchor = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
|
|
22
|
+
export type PanelAnchor = FloatingAnchor | 'left' | 'right';
|
|
15
23
|
/**
|
|
16
24
|
* Black configurator card that morphs between an expanded shell and a 32×32 icon.
|
|
17
25
|
*
|
|
@@ -19,5 +27,6 @@ export type PanelProps = HTMLAttributes<HTMLDivElement> & {
|
|
|
19
27
|
* animate via Motion, content is clipped via `overflow: hidden` on the shell.
|
|
20
28
|
* No `layout` prop — that would scale via transforms and distort the rectangle.
|
|
21
29
|
*/
|
|
22
|
-
export declare function Panel({ children, className, floating, collapsed: collapsedProp, defaultCollapsed, onCollapsedChange, collapseAriaLabel, style: externalStyle, ...domRest }: PanelProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare function Panel({ children, className, floating, defaultAnchor, collapsed: collapsedProp, defaultCollapsed, onCollapsedChange, collapseAriaLabel, style: externalStyle, ...domRest }: PanelProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export {};
|
|
23
32
|
//# sourceMappingURL=Panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/components/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAEd,OAAO,aAAa,CAAA;AAEpB,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IACxD,QAAQ,EAAE,SAAS,CAAA;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAA;IACpD,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;
|
|
1
|
+
{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/components/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,cAAc,EAGnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAEd,OAAO,aAAa,CAAA;AAEpB,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IACxD,QAAQ,EAAE,SAAS,CAAA;IACnB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,WAAW,CAAA;IAC3B,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAA;IACpD,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAkBD,KAAK,cAAc,GACf,UAAU,GACV,WAAW,GACX,aAAa,GACb,cAAc,CAAA;AAElB,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,MAAM,GAAG,OAAO,CAAA;AAoD3D;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,EACpB,QAAQ,EACR,SAAS,EACT,QAAe,EACf,aAA0B,EAC1B,SAAS,EAAE,aAAa,EACxB,gBAAwB,EACxB,iBAAiB,EACjB,iBAAkC,EAClC,KAAK,EAAE,aAAa,EACpB,GAAG,OAAO,EACX,EAAE,UAAU,2CAoZZ"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { Panel, Panel as default } from './components/Panel';
|
|
2
|
-
export type { PanelProps } from './components/Panel';
|
|
2
|
+
export type { PanelProps, PanelAnchor } from './components/Panel';
|
|
3
3
|
export { Category } from './components/Category';
|
|
4
4
|
export type { CategoryProps } from './components/Category';
|
|
5
5
|
export { useCategoryDisabled } from './components/categoryDisabledContext';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,aAAa,CAAA;AAGpB,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,OAAO,aAAa,CAAA;AAGpB,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEjE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpH,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AAG5E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACzD,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,0BAA0B,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAA;AAG1G,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7D,0FAA0F;AAC1F,OAAO,uBAAuB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,11 @@ const SNAP_HINT_ACTIVE_OPACITY = 0.8;
|
|
|
19
19
|
function clamp(n2, min, max) {
|
|
20
20
|
return Math.min(Math.max(n2, min), max);
|
|
21
21
|
}
|
|
22
|
+
function normalizePanelAnchor(anchor) {
|
|
23
|
+
if (anchor === "left") return "top-left";
|
|
24
|
+
if (anchor === "right") return "top-right";
|
|
25
|
+
return anchor;
|
|
26
|
+
}
|
|
22
27
|
function readRootPxVar(name, fallback) {
|
|
23
28
|
if (typeof window === "undefined" || typeof document === "undefined") {
|
|
24
29
|
return fallback;
|
|
@@ -41,6 +46,7 @@ function Panel({
|
|
|
41
46
|
children,
|
|
42
47
|
className,
|
|
43
48
|
floating = true,
|
|
49
|
+
defaultAnchor = "top-left",
|
|
44
50
|
collapsed: collapsedProp,
|
|
45
51
|
defaultCollapsed = false,
|
|
46
52
|
onCollapsedChange,
|
|
@@ -68,7 +74,8 @@ function Panel({
|
|
|
68
74
|
const shellHeightTransition = shouldReduceMotion ? { duration: 0 } : collapsedChanged ? { duration: MORPH_DURATION, ease: EASE_IN_OUT_STRONG } : { duration: 0 };
|
|
69
75
|
const shellShapeTransition = shouldReduceMotion ? { duration: 0 } : collapsedChanged ? { duration: MORPH_DURATION, ease: EASE_IN_OUT_STRONG } : { duration: 0 };
|
|
70
76
|
const bodyTransition = shouldReduceMotion ? { duration: 0 } : { duration: collapsed ? 0.12 : 0.18, ease: FAST_EASE_OUT };
|
|
71
|
-
const
|
|
77
|
+
const initialAnchor = normalizePanelAnchor(defaultAnchor);
|
|
78
|
+
const [floatingAnchor, setFloatingAnchor] = useState(initialAnchor);
|
|
72
79
|
const bodyRef = useRef(null);
|
|
73
80
|
const bodyContentRef = useRef(null);
|
|
74
81
|
const [measuredBodyHeight, setMeasuredBodyHeight] = useState(0);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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/SelectRow.tsx","../src/components/GradientPicker.tsx","../src/components/GradientRow.tsx"],"sourcesContent":["import {\n Fragment,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n} from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport './Panel.css'\n\nexport type PanelProps = HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n /** When true, panel is fixed to top-left and floats above page content. */\n floating?: boolean\n /** Controlled collapsed state. */\n collapsed?: boolean\n /** Initial collapsed state when uncontrolled. */\n defaultCollapsed?: boolean\n /** Fires when the collapsed state changes (controlled or uncontrolled). */\n onCollapsedChange?: (nextCollapsed: boolean) => void\n /** aria-label for the toggle button. */\n collapseAriaLabel?: string\n}\n\n/**\n * Strong ease-in-out for shape morph (per emil-design-eng).\n * Movement on screen → ease-in-out, kept under 300ms so it feels responsive.\n */\nconst EASE_IN_OUT_STRONG = [0.77, 0, 0.175, 1] as const\nconst MORPH_DURATION = 0.28\nconst FAST_EASE_OUT = [0.23, 1, 0.32, 1] as const\nconst COLLAPSED_SIZE_PX = 32\nconst DRAG_THRESHOLD_PX = 4\nconst EDGE_PADDING_PX = 8\nconst PANEL_EXPANDED_PADDING_PX = 16\nconst PANEL_HEADER_HEIGHT_PX = 22\nconst PANEL_BODY_MARGIN_TOP_PX = 16\nconst SNAP_HINT_IDLE_OPACITY = 0.5\nconst SNAP_HINT_ACTIVE_OPACITY = 0.8\n\ntype FloatingAnchor =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(Math.max(n, min), max)\n}\n\nfunction readRootPxVar(name: string, fallback: number): number {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return fallback\n }\n const raw = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim()\n const parsed = Number.parseFloat(raw)\n return Number.isFinite(parsed) ? parsed : fallback\n}\n\nfunction anchorFromPoint(\n centerX: number,\n centerY: number,\n viewportWidth: number,\n viewportHeight: number,\n): FloatingAnchor {\n const vertical = centerY > viewportHeight / 2 ? 'bottom' : 'top'\n const horizontal = centerX > viewportWidth / 2 ? 'right' : 'left'\n return `${vertical}-${horizontal}` as FloatingAnchor\n}\n\nfunction anchorPosition(\n anchor: FloatingAnchor,\n offsets: { top: number; left: number; right: number; bottom: number },\n viewportWidth: number,\n viewportHeight: number,\n): { left: number; top: number } {\n const left =\n anchor.endsWith('left')\n ? offsets.left\n : viewportWidth - offsets.right - COLLAPSED_SIZE_PX\n const top =\n anchor.startsWith('top')\n ? offsets.top\n : viewportHeight - offsets.bottom - COLLAPSED_SIZE_PX\n return { left, top }\n}\n\n/**\n * Black configurator card that morphs between an expanded shell and a 32×32 icon.\n *\n * The same `<section>` element resizes in place: width/height/padding/border-radius\n * animate via Motion, content is clipped via `overflow: hidden` on the shell.\n * No `layout` prop — that would scale via transforms and distort the rectangle.\n */\nexport function Panel({\n children,\n className,\n floating = true,\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n collapseAriaLabel = 'Toggle panel',\n style: externalStyle,\n ...domRest\n}: PanelProps) {\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState(defaultCollapsed)\n const shouldReduceMotion = useReducedMotion()\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 const prevCollapsedRef = useRef(collapsed)\n const collapsedChanged = prevCollapsedRef.current !== collapsed\n useEffect(() => {\n prevCollapsedRef.current = collapsed\n }, [collapsed])\n\n const shellHeightTransition = shouldReduceMotion\n ? { duration: 0 }\n : collapsedChanged\n ? { duration: MORPH_DURATION, ease: EASE_IN_OUT_STRONG }\n : { duration: 0 }\n\n const shellShapeTransition = shouldReduceMotion\n ? { duration: 0 }\n : collapsedChanged\n ? { duration: MORPH_DURATION, ease: EASE_IN_OUT_STRONG }\n : { duration: 0 }\n const bodyTransition = shouldReduceMotion\n ? { duration: 0 }\n : { duration: collapsed ? 0.12 : 0.18, ease: FAST_EASE_OUT }\n const [floatingAnchor, setFloatingAnchor] =\n useState<FloatingAnchor>('top-left')\n const bodyRef = useRef<HTMLDivElement>(null)\n const bodyContentRef = useRef<HTMLDivElement>(null)\n const [measuredBodyHeight, setMeasuredBodyHeight] = useState(0)\n const [viewportHeight, setViewportHeight] = useState(() =>\n typeof window !== 'undefined' ? window.innerHeight : 0,\n )\n const [dragRect, setDragRect] = useState<{\n top: number\n left: number\n } | null>(null)\n const [isDragging, setIsDragging] = useState(false)\n const justDraggedRef = useRef(false)\n const dragSessionRef = useRef<{\n pointerId: number\n startClientX: number\n startClientY: number\n startLeft: number\n startTop: number\n moved: boolean\n } | null>(null)\n\n useLayoutEffect(() => {\n const bodyContent = bodyContentRef.current\n if (!bodyContent) return\n const measure = () => {\n setMeasuredBodyHeight(bodyContent.scrollHeight)\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(bodyContent)\n return () => ro.disconnect()\n }, [])\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n const onResize = () => setViewportHeight(window.innerHeight)\n window.addEventListener('resize', onResize)\n return () => window.removeEventListener('resize', onResize)\n }, [])\n\n const handleShellClick = () => {\n if (!collapsed) return\n if (justDraggedRef.current) {\n justDraggedRef.current = false\n return\n }\n setCollapsed(false)\n }\n\n const handleShellKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n if (!collapsed) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setCollapsed(false)\n }\n }\n\n const handlePointerDown = (e: PointerEvent<HTMLElement>) => {\n if (!collapsed || !floating) return\n if (e.button !== 0) return\n justDraggedRef.current = false\n const rect = e.currentTarget.getBoundingClientRect()\n dragSessionRef.current = {\n pointerId: e.pointerId,\n startClientX: e.clientX,\n startClientY: e.clientY,\n startTop: rect.top,\n startLeft: rect.left,\n moved: false,\n }\n setDragRect({ top: rect.top, left: rect.left })\n e.currentTarget.setPointerCapture(e.pointerId)\n }\n\n const handlePointerMove = (e: PointerEvent<HTMLElement>) => {\n const session = dragSessionRef.current\n if (!session || session.pointerId !== e.pointerId) return\n const deltaY = e.clientY - session.startClientY\n const deltaX = e.clientX - session.startClientX\n if (!session.moved && (Math.abs(deltaY) >= DRAG_THRESHOLD_PX || Math.abs(deltaX) >= DRAG_THRESHOLD_PX)) {\n session.moved = true\n setIsDragging(true)\n }\n if (!session.moved) return\n const viewportHeight =\n typeof window !== 'undefined'\n ? window.innerHeight\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const viewportWidth =\n typeof window !== 'undefined'\n ? window.innerWidth\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const maxTop = Math.max(\n EDGE_PADDING_PX,\n viewportHeight - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n const maxLeft = Math.max(\n EDGE_PADDING_PX,\n viewportWidth - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n setDragRect({\n top: clamp(session.startTop + deltaY, EDGE_PADDING_PX, maxTop),\n left: clamp(session.startLeft + deltaX, EDGE_PADDING_PX, maxLeft),\n })\n }\n\n const handlePointerUp = (e: PointerEvent<HTMLElement>) => {\n const session = dragSessionRef.current\n if (!session || session.pointerId !== e.pointerId) return\n if (e.currentTarget.hasPointerCapture(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId)\n }\n dragSessionRef.current = null\n setIsDragging(false)\n if (!session.moved) {\n setDragRect(null)\n return\n }\n justDraggedRef.current = true\n const viewportHeight =\n typeof window !== 'undefined'\n ? window.innerHeight\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const viewportWidth =\n typeof window !== 'undefined'\n ? window.innerWidth\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const maxTop = Math.max(\n EDGE_PADDING_PX,\n viewportHeight - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n const maxLeft = Math.max(\n EDGE_PADDING_PX,\n viewportWidth - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n const finalTop = clamp(\n dragRect?.top ?? session.startTop,\n EDGE_PADDING_PX,\n maxTop,\n )\n const finalLeft = clamp(\n dragRect?.left ?? session.startLeft,\n EDGE_PADDING_PX,\n maxLeft,\n )\n const centerY = finalTop + COLLAPSED_SIZE_PX / 2\n const centerX = finalLeft + COLLAPSED_SIZE_PX / 2\n setFloatingAnchor(anchorFromPoint(centerX, centerY, viewportWidth, viewportHeight))\n setDragRect(null)\n }\n\n const offsets = {\n top: readRootPxVar('--aporia-panel-offset-top', 40),\n left: readRootPxVar('--aporia-panel-offset-left', 40),\n right: readRootPxVar('--aporia-panel-offset-right', 40),\n bottom: readRootPxVar('--aporia-panel-offset-bottom', 40),\n zIndex: readRootPxVar('--aporia-panel-z-index', 1000),\n }\n\n const expandedChromeHeight =\n PANEL_EXPANDED_PADDING_PX * 2 + PANEL_HEADER_HEIGHT_PX + PANEL_BODY_MARGIN_TOP_PX\n const expandedContentHeight = expandedChromeHeight + measuredBodyHeight\n const maxExpandedHeight = floating\n ? Math.max(\n COLLAPSED_SIZE_PX,\n viewportHeight - offsets.top - offsets.bottom,\n )\n : Number.POSITIVE_INFINITY\n const targetExpandedHeight = Math.max(\n COLLAPSED_SIZE_PX,\n Math.min(expandedContentHeight, maxExpandedHeight),\n )\n\n const viewport = {\n width:\n typeof window !== 'undefined'\n ? window.innerWidth\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2,\n height:\n typeof window !== 'undefined'\n ? window.innerHeight\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2,\n }\n\n const floatingStyle: CSSProperties | undefined = (() => {\n if (!floating) return undefined\n if (dragRect !== null) {\n return {\n left: `${dragRect.left}px`,\n top: `${dragRect.top}px`,\n bottom: 'auto',\n right: 'auto',\n }\n }\n if (floatingAnchor === 'bottom-left') {\n return {\n left: `${offsets.left}px`,\n bottom: `${offsets.bottom}px`,\n top: 'auto',\n right: 'auto',\n }\n }\n if (floatingAnchor === 'top-right') {\n return {\n right: `${offsets.right}px`,\n top: `${offsets.top}px`,\n left: 'auto',\n bottom: 'auto',\n }\n }\n if (floatingAnchor === 'bottom-right') {\n return {\n right: `${offsets.right}px`,\n bottom: `${offsets.bottom}px`,\n left: 'auto',\n top: 'auto',\n }\n }\n return {\n left: `${offsets.left}px`,\n top: `${offsets.top}px`,\n bottom: 'auto',\n right: 'auto',\n }\n })()\n\n const snapHints = (() => {\n if (!floating || !collapsed || !isDragging || dragRect === null) return []\n const corners: FloatingAnchor[] = [\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n ]\n const dragCenter = {\n x: dragRect.left + COLLAPSED_SIZE_PX / 2,\n y: dragRect.top + COLLAPSED_SIZE_PX / 2,\n }\n const activeAnchor = anchorFromPoint(\n dragCenter.x,\n dragCenter.y,\n viewport.width,\n viewport.height,\n )\n return corners.map((anchor) => {\n const pos = anchorPosition(anchor, offsets, viewport.width, viewport.height)\n const isActive = anchor === activeAnchor\n return {\n anchor,\n left: pos.left,\n top: pos.top,\n opacity: isActive ? SNAP_HINT_ACTIVE_OPACITY : SNAP_HINT_IDLE_OPACITY,\n }\n })\n })()\n\n return (\n <Fragment>\n <AnimatePresence>\n {snapHints.map((hint) => (\n <motion.div\n key={hint.anchor}\n className=\"aporiaPanelSnapHint\"\n initial={{ opacity: 0 }}\n animate={{ opacity: hint.opacity }}\n exit={{ opacity: 0 }}\n transition={\n shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT }\n }\n style={{\n top: hint.top,\n left: hint.left,\n zIndex: Math.max(0, Math.round(offsets.zIndex - 1)),\n }}\n />\n ))}\n </AnimatePresence>\n <motion.section\n {...(domRest as Record<string, unknown>)}\n initial={false}\n onClick={handleShellClick}\n onKeyDown={handleShellKeyDown}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n role={collapsed ? 'button' : undefined}\n tabIndex={collapsed ? 0 : undefined}\n aria-label={collapsed ? 'Expand panel' : undefined}\n animate={{\n height: collapsed ? COLLAPSED_SIZE_PX : targetExpandedHeight,\n borderRadius: collapsed ? 12 : 24,\n padding: collapsed ? 5 : 16,\n scale: collapsed && isDragging ? 1.06 : 1,\n rotate: collapsed && isDragging ? -2.5 : 0,\n y: collapsed && isDragging ? -4 : 0,\n }}\n transition={{\n height: shellHeightTransition,\n borderRadius: shellShapeTransition,\n padding: shellShapeTransition,\n scale: shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT },\n rotate: shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT },\n y: shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT },\n }}\n style={{\n ...(externalStyle as CSSProperties | undefined),\n ...floatingStyle,\n }}\n className={['aporiaPanel', className].filter(Boolean).join(' ')}\n data-collapsed={collapsed ? 'true' : 'false'}\n data-floating={floating ? 'true' : 'false'}\n data-anchor={floatingAnchor}\n data-dragging={isDragging ? 'true' : 'false'}\n >\n <div className=\"aporiaPanelHeader\">\n <button\n type=\"button\"\n className=\"aporiaPanelToggle\"\n aria-label={collapseAriaLabel}\n aria-pressed={collapsed}\n onClick={() => setCollapsed(!collapsed)}\n >\n <svg\n className=\"aporiaPanelLogoGlyph\"\n viewBox=\"0 0 22 22\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.6185 16.089C18 15.3403 18 14.3602 18 12.4V9.6C18 7.63982 18 6.65972 17.6185 5.91103C17.283 5.25247 16.7475 4.71703 16.089 4.38148C15.3403 4 14.3602 4 12.4 4H9.6C7.63982 4 6.65972 4 5.91103 4.38148C5.25247 4.71703 4.71703 5.25247 4.38148 5.91103C4 6.65972 4 7.63982 4 9.6V12.4C4 14.3602 4 15.3403 4.38148 16.089C4.71703 16.7475 5.25247 17.283 5.91103 17.6185C6.65972 18 7.63982 18 9.6 18H12.4C14.3602 18 15.3403 18 16.089 17.6185C16.7475 17.283 17.283 16.7475 17.6185 16.089ZM10.125 13.4062V8.59375C10.125 7.5745 10.125 7.06488 10.2915 6.66288C10.5135 6.12688 10.9394 5.70103 11.4754 5.47901C11.8774 5.3125 12.387 5.3125 13.4062 5.3125C14.4255 5.3125 14.9351 5.3125 15.3371 5.47901C15.8731 5.70103 16.299 6.12688 16.521 6.66288C16.6875 7.06488 16.6875 7.5745 16.6875 8.59375V13.4062C16.6875 14.4255 16.6875 14.9351 16.521 15.3371C16.299 15.8731 15.8731 16.299 15.3371 16.521C14.9351 16.6875 14.4255 16.6875 13.4062 16.6875C12.387 16.6875 11.8774 16.6875 11.4754 16.521C10.9394 16.299 10.5135 15.8731 10.2915 15.3371C10.125 14.9351 10.125 14.4255 10.125 13.4062Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n </div>\n <motion.div\n ref={bodyRef}\n className=\"aporiaPanelBody\"\n aria-hidden={collapsed}\n inert={collapsed}\n initial={false}\n animate={{\n opacity: collapsed ? 0 : 1,\n marginTop: collapsed ? 0 : 16,\n }}\n transition={bodyTransition}\n >\n <div ref={bodyContentRef} className=\"aporiaPanelBodyContent\">\n {children}\n </div>\n </motion.div>\n </motion.section>\n </Fragment>\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 {\n useCallback,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\"\nimport { motion } from \"motion/react\"\nimport { CategoryDisabledProvider } from \"./categoryDisabledContext\"\nimport \"./Category.css\"\n\n/** Must match `.category { gap }` in Category.css — negative margin cancels flex gap when height → 0. */\nconst CATEGORY_STACK_GAP_PX = 8\n\n/** Snappy spring (~2× faster than prior) with slight under-damp for a tiny bounce on height. */\nconst categoryBodyTransition = {\n type: \"spring\" as const,\n stiffness: 1000,\n damping: 44,\n mass: 0.28,\n}\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] =\n useState(defaultCollapsed)\n\n const collapsed =\n collapsedProp !== undefined\n ? collapsedProp\n : 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 const innerRef = useRef<HTMLDivElement>(null)\n /** Pixel height of category body content — Motion cannot reliably tween `height: \"auto\"` in embedded apps. */\n const [bodyHeightPx, setBodyHeightPx] = useState(0)\n\n useLayoutEffect(() => {\n const inner = innerRef.current\n if (!inner) return\n\n const measure = () => {\n setBodyHeightPx(inner.scrollHeight)\n }\n\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(inner)\n return () => ro.disconnect()\n }, [])\n\n const openBodyHeight = Math.max(bodyHeightPx, 1)\n\n return (\n <section\n className={[\"category\", className]\n .filter(Boolean)\n .join(\" \")}\n data-disabled={disabled ? \"true\" : \"false\"}\n data-collapsed={collapsed ? \"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={\n collapsed\n ? \"Expand category\"\n : \"Collapse category\"\n }\n onClick={() => setCollapsed(!collapsed)}\n >\n <svg\n className=\"categoryChevronIcon\"\n data-collapsed={\n collapsed ? \"true\" : \"false\"\n }\n width=\"14\"\n height=\"14\"\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\n className=\"categoryTitle\"\n id={`${bodyId}-label`}\n >\n {title}\n </h2>\n </div>\n {onDisabledChange ? (\n <button\n type=\"button\"\n className=\"categoryDisabledDot\"\n aria-label={\n disabled\n ? \"Enable category\"\n : \"Disable category\"\n }\n aria-pressed={disabled}\n onClick={(e) => {\n e.stopPropagation()\n onDisabledChange(!disabled)\n }}\n />\n ) : null}\n </div>\n <CategoryDisabledProvider value={disabled}>\n <motion.div\n id={bodyId}\n className=\"categoryBody\"\n role=\"region\"\n aria-labelledby={`${bodyId}-label`}\n aria-hidden={collapsed}\n initial={false}\n animate={{\n height: collapsed ? 0 : openBodyHeight,\n marginTop: collapsed\n ? -CATEGORY_STACK_GAP_PX\n : 0,\n opacity: collapsed ? 0 : 1,\n }}\n transition={{\n height: categoryBodyTransition,\n marginTop: categoryBodyTransition,\n // Fade out quickly while collapsing so controls don’t peek; gentler fade-in on expand.\n opacity: collapsed\n ? { duration: 0.09, ease: \"easeIn\" }\n : { duration: 0.15, ease: \"easeOut\" },\n }}\n style={{\n // Keep overdrag visible while open, but fully clip collapsed content so\n // the last category cannot leak height into panel measurements.\n overflow: collapsed ? \"hidden\" : \"visible\",\n minHeight: 0,\n boxSizing: \"border-box\",\n }}\n inert={collapsed}\n >\n <div\n ref={innerRef}\n className=\"categoryBodyInner sliderGroup\"\n >\n {children}\n </div>\n </motion.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 { createContext, useContext, type ReactNode } 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 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 /**\n * Base width should match the *available* inline size of the row.\n *\n * Measuring the parent `offsetWidth` includes padding (e.g. `Panel` has 16px),\n * which makes the card too wide and causes overflow in consumer apps.\n * The wrap is `width: 100%`, so its `offsetWidth` tracks the real content-box width.\n */\n const syncBaseWidthFromWrap = () => {\n const wrap = wrapRef.current\n if (!wrap) return\n // offsetWidth: integer layout width; avoids subpixel drift vs getBoundingClientRect\n baseW.set(wrap.offsetWidth)\n }\n\n useLayoutEffect(() => {\n const wrap = wrapRef.current\n if (!wrap) return\n\n syncBaseWidthFromWrap()\n const ro = new ResizeObserver(() => {\n syncBaseWidthFromWrap()\n })\n ro.observe(wrap)\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(syncBaseWidthFromWrap)\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 syncBaseWidthFromWrap()\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(syncBaseWidthFromWrap)\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(syncBaseWidthFromWrap)\n })\n }}\n onLostPointerCapture={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromWrap)\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\n/**\n * Sanitize freeform hex input to up to 6 hex digits (no leading #).\n */\nexport function sanitizeHexDigits(raw: string): string {\n return raw.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n}\n\n/**\n * Expand 1-6 hex digits to exactly 6 by repeating the entered pattern.\n * Examples:\n * - \"e\" -> \"EEEEEE\"\n * - \"2e\" -> \"2E2E2E\"\n * - \"abc\" -> \"ABCABC\"\n */\nexport function expandHexDigitsToSix(raw: string): string | null {\n const digits = sanitizeHexDigits(raw)\n if (!digits) return null\n return digits.repeat(Math.ceil(6 / digits.length)).slice(0, 6).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 expandHexDigitsToSix,\n hexToHsl,\n hexToHsv,\n hexToRgb,\n hslToHex,\n hsvToHex,\n hsvToRgbBytes,\n normalizeHex,\n parseCssColorToHex,\n rgbToHex,\n sanitizeHexDigits,\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 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 expanded = expandHexDigitsToSix(val)\n if (expanded) onChange(`#${expanded}`)\n }}\n sanitize={sanitizeHexDigits}\n validate={(v) => sanitizeHexDigits(v).length > 0}\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 sanitizeHexDigits(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 *\n * **Default `modal={false}`** matches Base UI and keeps pointer events on the document so nested\n * portaled pickers (e.g. gradient editor → stop color) still receive clicks. Use `modal={true}`\n * only when you want scroll lock + outside pointer blocking for a single-layer popover.\n * Use `modal=\"trap-focus\"` for focus trapping without scroll lock.\n */\nexport function SwatchPopover({\n title,\n renderTrigger,\n children,\n modal = false,\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 { expandHexDigitsToSix, normalizeHex, sanitizeHexDigits } 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\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 const expanded = expandHexDigitsToSix(sanitized)\n if (expanded) {\n onChange(`#${expanded}`)\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={sanitizeHexDigits}\n validate={(v) => sanitizeHexDigits(v).length > 0}\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 { useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from 'react'\nimport { Select } from '@base-ui/react'\nimport { useCategoryDisabled } from './categoryDisabledContext'\nimport './SelectRow.css'\n\nexport type SelectRowOption = {\n value: string\n label: string\n}\n\nexport type SelectRowProps = {\n label: string\n options: readonly SelectRowOption[]\n /** Controlled value; `null` shows the placeholder. */\n value: string | null\n onChange: (value: string) => void\n placeholder?: string\n disabled?: boolean\n /** Optional form field name (hidden input). */\n name?: string\n}\n\nexport function SelectRow({\n label,\n options,\n value,\n onChange,\n placeholder = 'Choose…',\n disabled: disabledProp,\n name,\n}: SelectRowProps) {\n const categoryDisabled = useCategoryDisabled()\n const disabled = Boolean(disabledProp || categoryDisabled)\n /** Drives chevron + `data-menu-open`; hover styling uses CSS `:hover` on the trigger to avoid wrap pointer enter/leave flicker. */\n const [menuOpen, setMenuOpen] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n const [anchorWidth, setAnchorWidth] = useState(0)\n\n useLayoutEffect(() => {\n const el = wrapRef.current\n if (!el) return\n const ro = new ResizeObserver(() => {\n setAnchorWidth(el.offsetWidth)\n })\n ro.observe(el)\n setAnchorWidth(el.offsetWidth)\n return () => ro.disconnect()\n }, [])\n\n const portalStyle: CSSProperties | undefined =\n anchorWidth > 0\n ? ({ '--select-anchor-width': `${anchorWidth}px` } as CSSProperties)\n : undefined\n\n const items = useMemo(\n () => Object.fromEntries(options.map((o) => [o.value, o.label])),\n [options],\n )\n\n return (\n <div\n ref={wrapRef}\n className=\"selectRowWrap\"\n data-disabled={disabled ? 'true' : 'false'}\n >\n <Select.Root\n name={name}\n items={items}\n value={value}\n onValueChange={(next) => {\n if (next != null) onChange(next)\n }}\n onOpenChange={(open) => setMenuOpen(open)}\n disabled={disabled}\n modal={false}\n >\n <Select.Trigger className=\"selectCard\" data-menu-open={menuOpen ? 'true' : 'false'}>\n <span className=\"selectLabel\">{label}</span>\n <span className=\"selectValueZone\">\n <Select.Value placeholder={placeholder} className=\"selectValue\" />\n <Select.Icon className=\"selectIcon\" aria-hidden>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" className=\"selectChevronSvg\">\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 </Select.Icon>\n </span>\n </Select.Trigger>\n\n <Select.Portal className=\"selectPortal\" style={portalStyle}>\n {/*\n * alignItemWithTrigger (default true) slides the list so highlighted text lines up with the\n * trigger value — reads like the menu “spills” from the control. false → normal float, like Popover.\n */}\n <Select.Positioner\n className=\"selectPositioner\"\n style={portalStyle}\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"end\"\n sideOffset={6}\n alignItemWithTrigger={false}\n collisionAvoidance={{ side: 'flip', align: 'shift', fallbackAxisSide: 'none' }}\n >\n <Select.Popup className=\"selectPopup\">\n <Select.List className=\"selectList\">\n {options.map((opt) => (\n <Select.Item key={opt.value} value={opt.value} className=\"selectItem\">\n <Select.ItemText className=\"selectItemText\">{opt.label}</Select.ItemText>\n </Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n </div>\n )\n}\n","import { expandHexDigitsToSix, hslToHex, normalizeHex, sanitizeHexDigits } 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\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 hex = normalizeHex(stop.color)\n\n const handleCommit = (val: string) => {\n const expanded = expandHexDigitsToSix(val)\n if (expanded) {\n onColorChange(`#${expanded}`)\n }\n }\n\n const handlePaste = (pasted: string): string => {\n // Strip # and any non-hex characters, take first 6 valid chars\n return sanitizeHexDigits(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={sanitizeHexDigits}\n validate={(v) => sanitizeHexDigits(v).length > 0}\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","viewportHeight","t","l","f","h","DEFAULT_AS","MorphController","v","value","w","b","debugZones","_","TextMorph","x","d","clampHueDeg","clamp01","y","hexDigits"],"mappings":"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","x_google_ignoreList":[3,4]}
|
|
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/SelectRow.tsx","../src/components/GradientPicker.tsx","../src/components/GradientRow.tsx"],"sourcesContent":["import {\n Fragment,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n} from 'react'\nimport { AnimatePresence, motion, useReducedMotion } from 'motion/react'\nimport './Panel.css'\n\nexport type PanelProps = HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n /** When true, panel is fixed to top-left and floats above page content. */\n floating?: boolean\n /**\n * Initial floating anchor when uncontrolled.\n * - `'left'` maps to `'top-left'`\n * - `'right'` maps to `'top-right'`\n */\n defaultAnchor?: PanelAnchor\n /** Controlled collapsed state. */\n collapsed?: boolean\n /** Initial collapsed state when uncontrolled. */\n defaultCollapsed?: boolean\n /** Fires when the collapsed state changes (controlled or uncontrolled). */\n onCollapsedChange?: (nextCollapsed: boolean) => void\n /** aria-label for the toggle button. */\n collapseAriaLabel?: string\n}\n\n/**\n * Strong ease-in-out for shape morph (per emil-design-eng).\n * Movement on screen → ease-in-out, kept under 300ms so it feels responsive.\n */\nconst EASE_IN_OUT_STRONG = [0.77, 0, 0.175, 1] as const\nconst MORPH_DURATION = 0.28\nconst FAST_EASE_OUT = [0.23, 1, 0.32, 1] as const\nconst COLLAPSED_SIZE_PX = 32\nconst DRAG_THRESHOLD_PX = 4\nconst EDGE_PADDING_PX = 8\nconst PANEL_EXPANDED_PADDING_PX = 16\nconst PANEL_HEADER_HEIGHT_PX = 22\nconst PANEL_BODY_MARGIN_TOP_PX = 16\nconst SNAP_HINT_IDLE_OPACITY = 0.5\nconst SNAP_HINT_ACTIVE_OPACITY = 0.8\n\ntype FloatingAnchor =\n | 'top-left'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-right'\n\nexport type PanelAnchor = FloatingAnchor | 'left' | 'right'\n\nfunction clamp(n: number, min: number, max: number): number {\n return Math.min(Math.max(n, min), max)\n}\n\nfunction normalizePanelAnchor(anchor: PanelAnchor): FloatingAnchor {\n if (anchor === 'left') return 'top-left'\n if (anchor === 'right') return 'top-right'\n return anchor\n}\n\nfunction readRootPxVar(name: string, fallback: number): number {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return fallback\n }\n const raw = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(name)\n .trim()\n const parsed = Number.parseFloat(raw)\n return Number.isFinite(parsed) ? parsed : fallback\n}\n\nfunction anchorFromPoint(\n centerX: number,\n centerY: number,\n viewportWidth: number,\n viewportHeight: number,\n): FloatingAnchor {\n const vertical = centerY > viewportHeight / 2 ? 'bottom' : 'top'\n const horizontal = centerX > viewportWidth / 2 ? 'right' : 'left'\n return `${vertical}-${horizontal}` as FloatingAnchor\n}\n\nfunction anchorPosition(\n anchor: FloatingAnchor,\n offsets: { top: number; left: number; right: number; bottom: number },\n viewportWidth: number,\n viewportHeight: number,\n): { left: number; top: number } {\n const left =\n anchor.endsWith('left')\n ? offsets.left\n : viewportWidth - offsets.right - COLLAPSED_SIZE_PX\n const top =\n anchor.startsWith('top')\n ? offsets.top\n : viewportHeight - offsets.bottom - COLLAPSED_SIZE_PX\n return { left, top }\n}\n\n/**\n * Black configurator card that morphs between an expanded shell and a 32×32 icon.\n *\n * The same `<section>` element resizes in place: width/height/padding/border-radius\n * animate via Motion, content is clipped via `overflow: hidden` on the shell.\n * No `layout` prop — that would scale via transforms and distort the rectangle.\n */\nexport function Panel({\n children,\n className,\n floating = true,\n defaultAnchor = 'top-left',\n collapsed: collapsedProp,\n defaultCollapsed = false,\n onCollapsedChange,\n collapseAriaLabel = 'Toggle panel',\n style: externalStyle,\n ...domRest\n}: PanelProps) {\n const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState(defaultCollapsed)\n const shouldReduceMotion = useReducedMotion()\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 const prevCollapsedRef = useRef(collapsed)\n const collapsedChanged = prevCollapsedRef.current !== collapsed\n useEffect(() => {\n prevCollapsedRef.current = collapsed\n }, [collapsed])\n\n const shellHeightTransition = shouldReduceMotion\n ? { duration: 0 }\n : collapsedChanged\n ? { duration: MORPH_DURATION, ease: EASE_IN_OUT_STRONG }\n : { duration: 0 }\n\n const shellShapeTransition = shouldReduceMotion\n ? { duration: 0 }\n : collapsedChanged\n ? { duration: MORPH_DURATION, ease: EASE_IN_OUT_STRONG }\n : { duration: 0 }\n const bodyTransition = shouldReduceMotion\n ? { duration: 0 }\n : { duration: collapsed ? 0.12 : 0.18, ease: FAST_EASE_OUT }\n const initialAnchor = normalizePanelAnchor(defaultAnchor)\n const [floatingAnchor, setFloatingAnchor] =\n useState<FloatingAnchor>(initialAnchor)\n const bodyRef = useRef<HTMLDivElement>(null)\n const bodyContentRef = useRef<HTMLDivElement>(null)\n const [measuredBodyHeight, setMeasuredBodyHeight] = useState(0)\n const [viewportHeight, setViewportHeight] = useState(() =>\n typeof window !== 'undefined' ? window.innerHeight : 0,\n )\n const [dragRect, setDragRect] = useState<{\n top: number\n left: number\n } | null>(null)\n const [isDragging, setIsDragging] = useState(false)\n const justDraggedRef = useRef(false)\n const dragSessionRef = useRef<{\n pointerId: number\n startClientX: number\n startClientY: number\n startLeft: number\n startTop: number\n moved: boolean\n } | null>(null)\n\n useLayoutEffect(() => {\n const bodyContent = bodyContentRef.current\n if (!bodyContent) return\n const measure = () => {\n setMeasuredBodyHeight(bodyContent.scrollHeight)\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(bodyContent)\n return () => ro.disconnect()\n }, [])\n\n useEffect(() => {\n if (typeof window === 'undefined') return\n const onResize = () => setViewportHeight(window.innerHeight)\n window.addEventListener('resize', onResize)\n return () => window.removeEventListener('resize', onResize)\n }, [])\n\n const handleShellClick = () => {\n if (!collapsed) return\n if (justDraggedRef.current) {\n justDraggedRef.current = false\n return\n }\n setCollapsed(false)\n }\n\n const handleShellKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n if (!collapsed) return\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n setCollapsed(false)\n }\n }\n\n const handlePointerDown = (e: PointerEvent<HTMLElement>) => {\n if (!collapsed || !floating) return\n if (e.button !== 0) return\n justDraggedRef.current = false\n const rect = e.currentTarget.getBoundingClientRect()\n dragSessionRef.current = {\n pointerId: e.pointerId,\n startClientX: e.clientX,\n startClientY: e.clientY,\n startTop: rect.top,\n startLeft: rect.left,\n moved: false,\n }\n setDragRect({ top: rect.top, left: rect.left })\n e.currentTarget.setPointerCapture(e.pointerId)\n }\n\n const handlePointerMove = (e: PointerEvent<HTMLElement>) => {\n const session = dragSessionRef.current\n if (!session || session.pointerId !== e.pointerId) return\n const deltaY = e.clientY - session.startClientY\n const deltaX = e.clientX - session.startClientX\n if (!session.moved && (Math.abs(deltaY) >= DRAG_THRESHOLD_PX || Math.abs(deltaX) >= DRAG_THRESHOLD_PX)) {\n session.moved = true\n setIsDragging(true)\n }\n if (!session.moved) return\n const viewportHeight =\n typeof window !== 'undefined'\n ? window.innerHeight\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const viewportWidth =\n typeof window !== 'undefined'\n ? window.innerWidth\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const maxTop = Math.max(\n EDGE_PADDING_PX,\n viewportHeight - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n const maxLeft = Math.max(\n EDGE_PADDING_PX,\n viewportWidth - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n setDragRect({\n top: clamp(session.startTop + deltaY, EDGE_PADDING_PX, maxTop),\n left: clamp(session.startLeft + deltaX, EDGE_PADDING_PX, maxLeft),\n })\n }\n\n const handlePointerUp = (e: PointerEvent<HTMLElement>) => {\n const session = dragSessionRef.current\n if (!session || session.pointerId !== e.pointerId) return\n if (e.currentTarget.hasPointerCapture(e.pointerId)) {\n e.currentTarget.releasePointerCapture(e.pointerId)\n }\n dragSessionRef.current = null\n setIsDragging(false)\n if (!session.moved) {\n setDragRect(null)\n return\n }\n justDraggedRef.current = true\n const viewportHeight =\n typeof window !== 'undefined'\n ? window.innerHeight\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const viewportWidth =\n typeof window !== 'undefined'\n ? window.innerWidth\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2\n const maxTop = Math.max(\n EDGE_PADDING_PX,\n viewportHeight - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n const maxLeft = Math.max(\n EDGE_PADDING_PX,\n viewportWidth - COLLAPSED_SIZE_PX - EDGE_PADDING_PX,\n )\n const finalTop = clamp(\n dragRect?.top ?? session.startTop,\n EDGE_PADDING_PX,\n maxTop,\n )\n const finalLeft = clamp(\n dragRect?.left ?? session.startLeft,\n EDGE_PADDING_PX,\n maxLeft,\n )\n const centerY = finalTop + COLLAPSED_SIZE_PX / 2\n const centerX = finalLeft + COLLAPSED_SIZE_PX / 2\n setFloatingAnchor(anchorFromPoint(centerX, centerY, viewportWidth, viewportHeight))\n setDragRect(null)\n }\n\n const offsets = {\n top: readRootPxVar('--aporia-panel-offset-top', 40),\n left: readRootPxVar('--aporia-panel-offset-left', 40),\n right: readRootPxVar('--aporia-panel-offset-right', 40),\n bottom: readRootPxVar('--aporia-panel-offset-bottom', 40),\n zIndex: readRootPxVar('--aporia-panel-z-index', 1000),\n }\n\n const expandedChromeHeight =\n PANEL_EXPANDED_PADDING_PX * 2 + PANEL_HEADER_HEIGHT_PX + PANEL_BODY_MARGIN_TOP_PX\n const expandedContentHeight = expandedChromeHeight + measuredBodyHeight\n const maxExpandedHeight = floating\n ? Math.max(\n COLLAPSED_SIZE_PX,\n viewportHeight - offsets.top - offsets.bottom,\n )\n : Number.POSITIVE_INFINITY\n const targetExpandedHeight = Math.max(\n COLLAPSED_SIZE_PX,\n Math.min(expandedContentHeight, maxExpandedHeight),\n )\n\n const viewport = {\n width:\n typeof window !== 'undefined'\n ? window.innerWidth\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2,\n height:\n typeof window !== 'undefined'\n ? window.innerHeight\n : COLLAPSED_SIZE_PX + EDGE_PADDING_PX * 2,\n }\n\n const floatingStyle: CSSProperties | undefined = (() => {\n if (!floating) return undefined\n if (dragRect !== null) {\n return {\n left: `${dragRect.left}px`,\n top: `${dragRect.top}px`,\n bottom: 'auto',\n right: 'auto',\n }\n }\n if (floatingAnchor === 'bottom-left') {\n return {\n left: `${offsets.left}px`,\n bottom: `${offsets.bottom}px`,\n top: 'auto',\n right: 'auto',\n }\n }\n if (floatingAnchor === 'top-right') {\n return {\n right: `${offsets.right}px`,\n top: `${offsets.top}px`,\n left: 'auto',\n bottom: 'auto',\n }\n }\n if (floatingAnchor === 'bottom-right') {\n return {\n right: `${offsets.right}px`,\n bottom: `${offsets.bottom}px`,\n left: 'auto',\n top: 'auto',\n }\n }\n return {\n left: `${offsets.left}px`,\n top: `${offsets.top}px`,\n bottom: 'auto',\n right: 'auto',\n }\n })()\n\n const snapHints = (() => {\n if (!floating || !collapsed || !isDragging || dragRect === null) return []\n const corners: FloatingAnchor[] = [\n 'top-left',\n 'top-right',\n 'bottom-left',\n 'bottom-right',\n ]\n const dragCenter = {\n x: dragRect.left + COLLAPSED_SIZE_PX / 2,\n y: dragRect.top + COLLAPSED_SIZE_PX / 2,\n }\n const activeAnchor = anchorFromPoint(\n dragCenter.x,\n dragCenter.y,\n viewport.width,\n viewport.height,\n )\n return corners.map((anchor) => {\n const pos = anchorPosition(anchor, offsets, viewport.width, viewport.height)\n const isActive = anchor === activeAnchor\n return {\n anchor,\n left: pos.left,\n top: pos.top,\n opacity: isActive ? SNAP_HINT_ACTIVE_OPACITY : SNAP_HINT_IDLE_OPACITY,\n }\n })\n })()\n\n return (\n <Fragment>\n <AnimatePresence>\n {snapHints.map((hint) => (\n <motion.div\n key={hint.anchor}\n className=\"aporiaPanelSnapHint\"\n initial={{ opacity: 0 }}\n animate={{ opacity: hint.opacity }}\n exit={{ opacity: 0 }}\n transition={\n shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT }\n }\n style={{\n top: hint.top,\n left: hint.left,\n zIndex: Math.max(0, Math.round(offsets.zIndex - 1)),\n }}\n />\n ))}\n </AnimatePresence>\n <motion.section\n {...(domRest as Record<string, unknown>)}\n initial={false}\n onClick={handleShellClick}\n onKeyDown={handleShellKeyDown}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onPointerCancel={handlePointerUp}\n role={collapsed ? 'button' : undefined}\n tabIndex={collapsed ? 0 : undefined}\n aria-label={collapsed ? 'Expand panel' : undefined}\n animate={{\n height: collapsed ? COLLAPSED_SIZE_PX : targetExpandedHeight,\n borderRadius: collapsed ? 12 : 24,\n padding: collapsed ? 5 : 16,\n scale: collapsed && isDragging ? 1.06 : 1,\n rotate: collapsed && isDragging ? -2.5 : 0,\n y: collapsed && isDragging ? -4 : 0,\n }}\n transition={{\n height: shellHeightTransition,\n borderRadius: shellShapeTransition,\n padding: shellShapeTransition,\n scale: shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT },\n rotate: shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT },\n y: shouldReduceMotion\n ? { duration: 0 }\n : { duration: 0.18, ease: FAST_EASE_OUT },\n }}\n style={{\n ...(externalStyle as CSSProperties | undefined),\n ...floatingStyle,\n }}\n className={['aporiaPanel', className].filter(Boolean).join(' ')}\n data-collapsed={collapsed ? 'true' : 'false'}\n data-floating={floating ? 'true' : 'false'}\n data-anchor={floatingAnchor}\n data-dragging={isDragging ? 'true' : 'false'}\n >\n <div className=\"aporiaPanelHeader\">\n <button\n type=\"button\"\n className=\"aporiaPanelToggle\"\n aria-label={collapseAriaLabel}\n aria-pressed={collapsed}\n onClick={() => setCollapsed(!collapsed)}\n >\n <svg\n className=\"aporiaPanelLogoGlyph\"\n viewBox=\"0 0 22 22\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M17.6185 16.089C18 15.3403 18 14.3602 18 12.4V9.6C18 7.63982 18 6.65972 17.6185 5.91103C17.283 5.25247 16.7475 4.71703 16.089 4.38148C15.3403 4 14.3602 4 12.4 4H9.6C7.63982 4 6.65972 4 5.91103 4.38148C5.25247 4.71703 4.71703 5.25247 4.38148 5.91103C4 6.65972 4 7.63982 4 9.6V12.4C4 14.3602 4 15.3403 4.38148 16.089C4.71703 16.7475 5.25247 17.283 5.91103 17.6185C6.65972 18 7.63982 18 9.6 18H12.4C14.3602 18 15.3403 18 16.089 17.6185C16.7475 17.283 17.283 16.7475 17.6185 16.089ZM10.125 13.4062V8.59375C10.125 7.5745 10.125 7.06488 10.2915 6.66288C10.5135 6.12688 10.9394 5.70103 11.4754 5.47901C11.8774 5.3125 12.387 5.3125 13.4062 5.3125C14.4255 5.3125 14.9351 5.3125 15.3371 5.47901C15.8731 5.70103 16.299 6.12688 16.521 6.66288C16.6875 7.06488 16.6875 7.5745 16.6875 8.59375V13.4062C16.6875 14.4255 16.6875 14.9351 16.521 15.3371C16.299 15.8731 15.8731 16.299 15.3371 16.521C14.9351 16.6875 14.4255 16.6875 13.4062 16.6875C12.387 16.6875 11.8774 16.6875 11.4754 16.521C10.9394 16.299 10.5135 15.8731 10.2915 15.3371C10.125 14.9351 10.125 14.4255 10.125 13.4062Z\"\n fill=\"currentColor\"\n />\n </svg>\n </button>\n </div>\n <motion.div\n ref={bodyRef}\n className=\"aporiaPanelBody\"\n aria-hidden={collapsed}\n inert={collapsed}\n initial={false}\n animate={{\n opacity: collapsed ? 0 : 1,\n marginTop: collapsed ? 0 : 16,\n }}\n transition={bodyTransition}\n >\n <div ref={bodyContentRef} className=\"aporiaPanelBodyContent\">\n {children}\n </div>\n </motion.div>\n </motion.section>\n </Fragment>\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 {\n useCallback,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\"\nimport { motion } from \"motion/react\"\nimport { CategoryDisabledProvider } from \"./categoryDisabledContext\"\nimport \"./Category.css\"\n\n/** Must match `.category { gap }` in Category.css — negative margin cancels flex gap when height → 0. */\nconst CATEGORY_STACK_GAP_PX = 8\n\n/** Snappy spring (~2× faster than prior) with slight under-damp for a tiny bounce on height. */\nconst categoryBodyTransition = {\n type: \"spring\" as const,\n stiffness: 1000,\n damping: 44,\n mass: 0.28,\n}\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] =\n useState(defaultCollapsed)\n\n const collapsed =\n collapsedProp !== undefined\n ? collapsedProp\n : 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 const innerRef = useRef<HTMLDivElement>(null)\n /** Pixel height of category body content — Motion cannot reliably tween `height: \"auto\"` in embedded apps. */\n const [bodyHeightPx, setBodyHeightPx] = useState(0)\n\n useLayoutEffect(() => {\n const inner = innerRef.current\n if (!inner) return\n\n const measure = () => {\n setBodyHeightPx(inner.scrollHeight)\n }\n\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(inner)\n return () => ro.disconnect()\n }, [])\n\n const openBodyHeight = Math.max(bodyHeightPx, 1)\n\n return (\n <section\n className={[\"category\", className]\n .filter(Boolean)\n .join(\" \")}\n data-disabled={disabled ? \"true\" : \"false\"}\n data-collapsed={collapsed ? \"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={\n collapsed\n ? \"Expand category\"\n : \"Collapse category\"\n }\n onClick={() => setCollapsed(!collapsed)}\n >\n <svg\n className=\"categoryChevronIcon\"\n data-collapsed={\n collapsed ? \"true\" : \"false\"\n }\n width=\"14\"\n height=\"14\"\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\n className=\"categoryTitle\"\n id={`${bodyId}-label`}\n >\n {title}\n </h2>\n </div>\n {onDisabledChange ? (\n <button\n type=\"button\"\n className=\"categoryDisabledDot\"\n aria-label={\n disabled\n ? \"Enable category\"\n : \"Disable category\"\n }\n aria-pressed={disabled}\n onClick={(e) => {\n e.stopPropagation()\n onDisabledChange(!disabled)\n }}\n />\n ) : null}\n </div>\n <CategoryDisabledProvider value={disabled}>\n <motion.div\n id={bodyId}\n className=\"categoryBody\"\n role=\"region\"\n aria-labelledby={`${bodyId}-label`}\n aria-hidden={collapsed}\n initial={false}\n animate={{\n height: collapsed ? 0 : openBodyHeight,\n marginTop: collapsed\n ? -CATEGORY_STACK_GAP_PX\n : 0,\n opacity: collapsed ? 0 : 1,\n }}\n transition={{\n height: categoryBodyTransition,\n marginTop: categoryBodyTransition,\n // Fade out quickly while collapsing so controls don’t peek; gentler fade-in on expand.\n opacity: collapsed\n ? { duration: 0.09, ease: \"easeIn\" }\n : { duration: 0.15, ease: \"easeOut\" },\n }}\n style={{\n // Keep overdrag visible while open, but fully clip collapsed content so\n // the last category cannot leak height into panel measurements.\n overflow: collapsed ? \"hidden\" : \"visible\",\n minHeight: 0,\n boxSizing: \"border-box\",\n }}\n inert={collapsed}\n >\n <div\n ref={innerRef}\n className=\"categoryBodyInner sliderGroup\"\n >\n {children}\n </div>\n </motion.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 { createContext, useContext, type ReactNode } 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 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 /**\n * Base width should match the *available* inline size of the row.\n *\n * Measuring the parent `offsetWidth` includes padding (e.g. `Panel` has 16px),\n * which makes the card too wide and causes overflow in consumer apps.\n * The wrap is `width: 100%`, so its `offsetWidth` tracks the real content-box width.\n */\n const syncBaseWidthFromWrap = () => {\n const wrap = wrapRef.current\n if (!wrap) return\n // offsetWidth: integer layout width; avoids subpixel drift vs getBoundingClientRect\n baseW.set(wrap.offsetWidth)\n }\n\n useLayoutEffect(() => {\n const wrap = wrapRef.current\n if (!wrap) return\n\n syncBaseWidthFromWrap()\n const ro = new ResizeObserver(() => {\n syncBaseWidthFromWrap()\n })\n ro.observe(wrap)\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(syncBaseWidthFromWrap)\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 syncBaseWidthFromWrap()\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(syncBaseWidthFromWrap)\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(syncBaseWidthFromWrap)\n })\n }}\n onLostPointerCapture={() => {\n targetStretchL.set(0)\n targetStretchR.set(0)\n resetPull()\n setDragging(false)\n requestAnimationFrame(() => {\n requestAnimationFrame(syncBaseWidthFromWrap)\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\n/**\n * Sanitize freeform hex input to up to 6 hex digits (no leading #).\n */\nexport function sanitizeHexDigits(raw: string): string {\n return raw.replace(/[^0-9a-fA-F]/g, '').slice(0, 6)\n}\n\n/**\n * Expand 1-6 hex digits to exactly 6 by repeating the entered pattern.\n * Examples:\n * - \"e\" -> \"EEEEEE\"\n * - \"2e\" -> \"2E2E2E\"\n * - \"abc\" -> \"ABCABC\"\n */\nexport function expandHexDigitsToSix(raw: string): string | null {\n const digits = sanitizeHexDigits(raw)\n if (!digits) return null\n return digits.repeat(Math.ceil(6 / digits.length)).slice(0, 6).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 expandHexDigitsToSix,\n hexToHsl,\n hexToHsv,\n hexToRgb,\n hslToHex,\n hsvToHex,\n hsvToRgbBytes,\n normalizeHex,\n parseCssColorToHex,\n rgbToHex,\n sanitizeHexDigits,\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 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 expanded = expandHexDigitsToSix(val)\n if (expanded) onChange(`#${expanded}`)\n }}\n sanitize={sanitizeHexDigits}\n validate={(v) => sanitizeHexDigits(v).length > 0}\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 sanitizeHexDigits(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 *\n * **Default `modal={false}`** matches Base UI and keeps pointer events on the document so nested\n * portaled pickers (e.g. gradient editor → stop color) still receive clicks. Use `modal={true}`\n * only when you want scroll lock + outside pointer blocking for a single-layer popover.\n * Use `modal=\"trap-focus\"` for focus trapping without scroll lock.\n */\nexport function SwatchPopover({\n title,\n renderTrigger,\n children,\n modal = false,\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 { expandHexDigitsToSix, normalizeHex, sanitizeHexDigits } 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\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 const expanded = expandHexDigitsToSix(sanitized)\n if (expanded) {\n onChange(`#${expanded}`)\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={sanitizeHexDigits}\n validate={(v) => sanitizeHexDigits(v).length > 0}\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 { useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from 'react'\nimport { Select } from '@base-ui/react'\nimport { useCategoryDisabled } from './categoryDisabledContext'\nimport './SelectRow.css'\n\nexport type SelectRowOption = {\n value: string\n label: string\n}\n\nexport type SelectRowProps = {\n label: string\n options: readonly SelectRowOption[]\n /** Controlled value; `null` shows the placeholder. */\n value: string | null\n onChange: (value: string) => void\n placeholder?: string\n disabled?: boolean\n /** Optional form field name (hidden input). */\n name?: string\n}\n\nexport function SelectRow({\n label,\n options,\n value,\n onChange,\n placeholder = 'Choose…',\n disabled: disabledProp,\n name,\n}: SelectRowProps) {\n const categoryDisabled = useCategoryDisabled()\n const disabled = Boolean(disabledProp || categoryDisabled)\n /** Drives chevron + `data-menu-open`; hover styling uses CSS `:hover` on the trigger to avoid wrap pointer enter/leave flicker. */\n const [menuOpen, setMenuOpen] = useState(false)\n const wrapRef = useRef<HTMLDivElement>(null)\n const [anchorWidth, setAnchorWidth] = useState(0)\n\n useLayoutEffect(() => {\n const el = wrapRef.current\n if (!el) return\n const ro = new ResizeObserver(() => {\n setAnchorWidth(el.offsetWidth)\n })\n ro.observe(el)\n setAnchorWidth(el.offsetWidth)\n return () => ro.disconnect()\n }, [])\n\n const portalStyle: CSSProperties | undefined =\n anchorWidth > 0\n ? ({ '--select-anchor-width': `${anchorWidth}px` } as CSSProperties)\n : undefined\n\n const items = useMemo(\n () => Object.fromEntries(options.map((o) => [o.value, o.label])),\n [options],\n )\n\n return (\n <div\n ref={wrapRef}\n className=\"selectRowWrap\"\n data-disabled={disabled ? 'true' : 'false'}\n >\n <Select.Root\n name={name}\n items={items}\n value={value}\n onValueChange={(next) => {\n if (next != null) onChange(next)\n }}\n onOpenChange={(open) => setMenuOpen(open)}\n disabled={disabled}\n modal={false}\n >\n <Select.Trigger className=\"selectCard\" data-menu-open={menuOpen ? 'true' : 'false'}>\n <span className=\"selectLabel\">{label}</span>\n <span className=\"selectValueZone\">\n <Select.Value placeholder={placeholder} className=\"selectValue\" />\n <Select.Icon className=\"selectIcon\" aria-hidden>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" className=\"selectChevronSvg\">\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 </Select.Icon>\n </span>\n </Select.Trigger>\n\n <Select.Portal className=\"selectPortal\" style={portalStyle}>\n {/*\n * alignItemWithTrigger (default true) slides the list so highlighted text lines up with the\n * trigger value — reads like the menu “spills” from the control. false → normal float, like Popover.\n */}\n <Select.Positioner\n className=\"selectPositioner\"\n style={portalStyle}\n positionMethod=\"fixed\"\n side=\"bottom\"\n align=\"end\"\n sideOffset={6}\n alignItemWithTrigger={false}\n collisionAvoidance={{ side: 'flip', align: 'shift', fallbackAxisSide: 'none' }}\n >\n <Select.Popup className=\"selectPopup\">\n <Select.List className=\"selectList\">\n {options.map((opt) => (\n <Select.Item key={opt.value} value={opt.value} className=\"selectItem\">\n <Select.ItemText className=\"selectItemText\">{opt.label}</Select.ItemText>\n </Select.Item>\n ))}\n </Select.List>\n </Select.Popup>\n </Select.Positioner>\n </Select.Portal>\n </Select.Root>\n </div>\n )\n}\n","import { expandHexDigitsToSix, hslToHex, normalizeHex, sanitizeHexDigits } 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\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 hex = normalizeHex(stop.color)\n\n const handleCommit = (val: string) => {\n const expanded = expandHexDigitsToSix(val)\n if (expanded) {\n onColorChange(`#${expanded}`)\n }\n }\n\n const handlePaste = (pasted: string): string => {\n // Strip # and any non-hex characters, take first 6 valid chars\n return sanitizeHexDigits(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={sanitizeHexDigits}\n validate={(v) => sanitizeHexDigits(v).length > 0}\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","viewportHeight","t","l","f","h","DEFAULT_AS","MorphController","v","value","w","b","debugZones","_","TextMorph","x","d","clampHueDeg","clamp01","y","hexDigits"],"mappings":"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","x_google_ignoreList":[3,4]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aporia",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "A collection of production-quality React components for building configurators - sliders, color pickers, gradient editors, toggles, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|