{"version":3,"sources":["../src/lib/utils.ts","../src/ui/ripple.tsx","../src/ui/checkbox.tsx","../src/ui/chip.tsx","../src/ui/radio-button.tsx","../src/hooks/useVirtualList.ts","../src/ui/shared/motion-tokens.ts","../src/ui/shared/constants.ts","../src/ui/icon.tsx","../src/ui/scroll-area.tsx","../src/ui/menu/menu-animations.ts","../src/ui/menu/menu-context.tsx","../src/ui/menu/menu-tokens.ts","../src/ui/menu/menu-utils.ts","../src/ui/menu/menu.tsx","../src/ui/menu/menu-item.tsx","../src/ui/progress-indicator/utils.ts","../src/ui/progress-indicator/circular.tsx","../src/ui/progress-indicator/hooks.ts","../src/ui/progress-indicator/linear-flat.tsx","../src/ui/progress-indicator/linear-wavy.tsx","../src/ui/progress-indicator/linear.tsx","../src/ui/progress-indicator/index.tsx","../src/ui/toolbar/toolbar-context.tsx","../src/ui/text-field/text-field.tokens.ts","../src/ui/text-field/subcomponents/active-indicator.tsx","../src/ui/text-field/subcomponents/floating-label.tsx","../src/ui/text-field/subcomponents/leading-icon.tsx","../src/ui/text-field/subcomponents/outline-container.tsx","../src/ui/text-field/subcomponents/prefix-suffix.tsx","../src/ui/text-field/subcomponents/supporting-text.tsx","../src/ui/text-field/subcomponents/trailing-icon.tsx","../src/ui/text-field/text-field.tsx","../src/ui/select/select.tsx","../src/ui/slider/hooks/useSliderMath.ts","../src/ui/slider/slider.tokens.ts","../src/ui/slider/slider-thumb.tsx","../src/ui/slider/range-slider.tsx","../src/ui/slider/slider-track.tsx","../src/ui/slider/slider.tsx","../src/ui/switch/switch.tokens.ts","../src/ui/switch/switch.tsx"],"names":["React","RippleItem","React2","CheckboxVisual","jsx","m","AnimatePresence","useReducedMotion","jsxs","React3","_a","_b","Root","LazyMotion","domMax","MD3_FAST_EFFECTS","useMergedRef","RadioVisual","React5","React6","React7","React8","React9","React10","React11","Slot","DropdownMenu2","React12","Fragment","React13","React14","FlatLinearTrack","React15","WavyLinearTrack","useMotionValue","animate","useAnimationFrame","React16","React17","React18","React19","ActiveIndicator","React20","FloatingLabel","React21","LeadingIcon","React22","OutlineContainer","React23","PrefixSuffix","React24","SupportingText","React25","TrailingIcon","React26","React27","useMemo","React28","ValueIndicator","SliderThumb","insetLimit","trackInset","React29","RangeTrack","gapWithThumbStr","React30","InsetIcon","SliderTrack","segments","React31","React32","SwitchVisual"],"mappings":"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","file":"forms.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Ripple\n//\n// - Origin: pointer-down coordinates (x, y) relative to container\n// - Shape: perfectly round circle, expands from origin to diagonally fill btn\n// - Color: currentColor at 12% opacity (matches MD3 state layer spec)\n// - A11y: disabled when `prefers-reduced-motion` is active (configurable)\n// - Clipping: caller wraps in overflow-hidden; border-radius handled on parent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Represents a single ripple wave instance with position and size metadata.\n *\n * @example\n * ```tsx\n * const ripple: RippleOrigin = { id: Date.now(), x: 50, y: 30, size: 200 };\n * ```\n */\nexport interface RippleOrigin {\n\t/** Unique identifier used as React key and for removal. */\n\tid: number;\n\t/** X coordinate of the pointer event relative to the container's left edge (px). */\n\tx: number;\n\t/** Y coordinate of the pointer event relative to the container's top edge (px). */\n\ty: number;\n\t/**\n\t * Diameter of the ripple circle (px).\n\t * Typically `Math.hypot(width, height) * 2` to ensure it fills the container.\n\t */\n\tsize: number;\n}\n\n/** @internal Props for a single animated ripple element. */\ninterface RippleItemProps {\n\tripple: RippleOrigin;\n\tonDone: (id: number) => void;\n}\n\n/** @internal Memoized single ripple wave — minimises re-renders. */\nconst RippleItem = React.memo(function RippleItem({\n\tripple,\n\tonDone,\n}: RippleItemProps) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={ripple.id}\n\t\t\taria-hidden=\"true\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: ripple.x - ripple.size / 2,\n\t\t\t\ttop: ripple.y - ripple.size / 2,\n\t\t\t\twidth: ripple.size,\n\t\t\t\theight: ripple.size,\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tbackgroundColor: \"currentColor\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\ttransformOrigin: \"center\",\n\t\t\t}}\n\t\t\tinitial={{ scale: 0, opacity: 0.12 }}\n\t\t\tanimate={{ scale: 1, opacity: 0 }}\n\t\t\texit={{ opacity: 0 }}\n\t\t\ttransition={{\n\t\t\t\tscale: { duration: 0.5, ease: [0.2, 0, 0, 1] },\n\t\t\t\topacity: { duration: 0.4, ease: \"easeOut\", delay: 0.1 },\n\t\t\t}}\n\t\t\tonAnimationComplete={() => onDone(ripple.id)}\n\t\t/>\n\t);\n});\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Ripple Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the `Ripple` presentation component.\n */\nexport interface RippleProps {\n\t/** Active ripple instances to render. Managed by the parent via `useRipple`. */\n\tripples: RippleOrigin[];\n\t/** Called when a ripple's exit animation completes — remove it from state. */\n\tonRippleDone: (id: number) => void;\n\t/**\n\t * Completely disables the ripple effect.\n\t * Use this when the parent element is disabled or interaction is not desired.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * When `true`, the ripple respects the user's OS-level\n\t * `prefers-reduced-motion` accessibility setting and renders nothing if active.\n\t *\n\t * Set to `false` to always show ripples regardless of system preference.\n\t * @default true\n\t */\n\trespectSystemMotion?: boolean;\n}\n\n/**\n * MD3 Expressive Ripple — animated touch-feedback wave layer.\n *\n * Renders absolutely-positioned ripple circles inside an `overflow-hidden`\n * container. Must be placed as a direct child of the interactive element.\n *\n * @remarks\n * - The parent element **must** have `overflow: hidden` and `position: relative`\n *   (or equivalent) for clipping to work correctly.\n * - Set `disabled` to `true` on parent's disabled state to avoid stale ripples.\n * - The ripple color is `currentColor` at 12% opacity — matching MD3 state layer spec.\n *\n * @example\n * ```tsx\n * const { ripples, onPointerDown, removeRipple } = useRippleState();\n *\n * <button onPointerDown={onPointerDown} className=\"relative overflow-hidden\">\n *   <Ripple ripples={ripples} onRippleDone={removeRipple} />\n *   Click me\n * </button>\n * ```\n *\n * @see {@link useRippleState} for the state management hook\n * @see https://m3.material.io/foundations/interaction/states/overview\n */\nexport function Ripple({\n\tripples,\n\tonRippleDone,\n\tdisabled = false,\n\trespectSystemMotion = true,\n}: RippleProps) {\n\tconst prefersReduced = useReducedMotion();\n\n\t// Disabled prop: explicitly turned off by consumer\n\tif (disabled) return null;\n\n\t// Respect system prefers-reduced-motion when opted-in\n\tif (respectSystemMotion && prefersReduced) return null;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{ripples.map((r) => (\n\t\t\t\t<RippleItem key={r.id} ripple={r} onDone={onRippleDone} />\n\t\t\t))}\n\t\t</AnimatePresence>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useRippleState Hook\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Options for configuring `useRippleState` behaviour.\n */\nexport interface UseRippleStateOptions {\n\t/**\n\t * When `true`, the ripple is suppressed — `onPointerDown` becomes a no-op.\n\t * Use this to sync the ripple with the parent element's `disabled` state.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * `useRippleState` — state manager for MD3 Expressive ripple waves.\n *\n * Tracks active ripple instances and provides pointer event handlers.\n * Pair with the `<Ripple>` component for rendering.\n *\n * @remarks\n * This hook only manages ripple *state* (coordinates, size, lifecycle).\n * The actual animation is handled by `<Ripple>` via Framer Motion.\n * Respecting `prefers-reduced-motion` is handled by `<Ripple>` itself.\n *\n * @param options - Configuration options. See {@link UseRippleStateOptions}.\n * @returns `{ ripples, onPointerDown, removeRipple }` — bind to the interactive element.\n *\n * @example\n * ```tsx\n * function MyButton({ disabled, children }) {\n *   const { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n *\n *   return (\n *     <button\n *       disabled={disabled}\n *       onPointerDown={onPointerDown}\n *       className=\"relative overflow-hidden\"\n *     >\n *       <Ripple ripples={ripples} onRippleDone={removeRipple} disabled={disabled} />\n *       {children}\n *     </button>\n *   );\n * }\n * ```\n *\n * @see {@link Ripple} for the rendering component\n */\nexport function useRippleState(options: UseRippleStateOptions = {}) {\n\tconst { disabled = false } = options;\n\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\n\tconst onPointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst y = e.clientY - rect.top;\n\t\t\tconst rippleSize = Math.max(\n\t\t\t\tMath.hypot(rect.width, rect.height) * 2.5,\n\t\t\t\t320,\n\t\t\t);\n\t\t\tsetRipples((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t]);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst removeRipple = React.useCallback((id: number) => {\n\t\tsetRipples((prev) => prev.filter((r) => r.id !== id));\n\t}, []);\n\n\treturn { ripples, onPointerDown, removeRipple };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Legacy alias — preserved for backward-compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * @deprecated Use `useRippleState` instead. This alias will be removed in a future version.\n * @see {@link useRippleState}\n */\nexport const useRipple = useRippleState;\n","/**\n * @file checkbox.tsx\n * MD3 Expressive Checkbox — 2-state and tri-state support.\n * Spec: https://m3.material.io/components/checkbox/overview\n */\n\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseReducedMotion,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Ripple, type RippleOrigin } from \"./ripple\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** MD3 Standard easing: checkmark draw and path morph. */\nconst MD3_STANDARD = [0.2, 0, 0, 1] as const;\n\n/** MD3 FastEffects easing: container fill (emphasizedAccelerate). */\nconst MD3_FAST_EFFECTS = [0.3, 0, 1, 1] as const;\n\n/**\n * SVG paths share the same command count (M→L→L) for Framer Motion d-morph.\n * viewBox: 18×18\n */\nconst CHECKMARK_PATH = \"M 4.5 9.5 L 7.5 12.5 L 13.5 5.5\";\nconst DASH_PATH = \"M 4.5 9 L 9 9 L 13.5 9\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Tri-state value: `\"unchecked\"` | `\"checked\"` | `\"indeterminate\"`.\n */\nexport type CheckboxState = \"unchecked\" | \"checked\" | \"indeterminate\";\n\n/**\n * Props for `Checkbox`. Supports boolean (`checked`/`onCheckedChange`)\n * and tri-state (`state`/`onStateChange`) modes.\n */\nexport interface CheckboxProps {\n\t/** Controlled checked value (2-state mode). */\n\tchecked?: boolean;\n\t/** Initial value for uncontrolled mode. @default false */\n\tdefaultChecked?: boolean;\n\t/** Forces indeterminate rendering regardless of `checked`. */\n\tindeterminate?: boolean;\n\t/** Fired on checked change (simple mode). Not called when disabled. */\n\tonCheckedChange?: (checked: boolean) => void;\n\n\t/** Controlled tri-state value. Takes priority over `checked`/`indeterminate`. */\n\tstate?: CheckboxState;\n\t/** Fired on tri-state change. Cycles: unchecked → checked → indeterminate. */\n\tonStateChange?: (state: CheckboxState) => void;\n\n\t/** Disables interaction and applies 0.38 opacity. */\n\tdisabled?: boolean;\n\t/** Error state — changes colors to `m3-error` and sets `aria-invalid`. */\n\terror?: boolean;\n\n\t/** Adjacent label text. Wraps checkbox + span in `<label>`. */\n\tlabel?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n\t\"aria-describedby\"?: string;\n\t\"aria-required\"?: boolean;\n\n\t/** Passed to the hidden `<input>` for form submission. */\n\tname?: string;\n\t/** Passed to the hidden `<input>` for form submission. */\n\tvalue?: string;\n\t/** ID for the hidden `<input>`. Auto-generated when `label` is set. */\n\tid?: string;\n\n\t/** Extra class names on the outermost wrapper. */\n\tclassName?: string;\n\t/** Ref pointing to the hidden `<input type=\"checkbox\">`. */\n\tref?: React.Ref<HTMLInputElement>;\n}\n\n/**\n * `TriStateCheckbox` props — requires `state` + `onStateChange`.\n */\nexport interface TriStateCheckboxProps\n\textends Omit<\n\t\tCheckboxProps,\n\t\t\"checked\" | \"defaultChecked\" | \"onCheckedChange\"\n\t> {\n\tstate: CheckboxState;\n\tonStateChange: (state: CheckboxState) => void;\n}\n\n// ─── State helpers ────────────────────────────────────────────────────────────\n\n/** Priority: `state` prop > `indeterminate` > `checked`. @internal */\nfunction resolveState(\n\tchecked?: boolean,\n\tindeterminate?: boolean,\n\tstate?: CheckboxState,\n): CheckboxState {\n\tif (state !== undefined) return state;\n\tif (indeterminate) return \"indeterminate\";\n\treturn checked ? \"checked\" : \"unchecked\";\n}\n\n/** Tri-state cycle: unchecked → checked → indeterminate → unchecked. */\nconst NEXT_STATE: Record<CheckboxState, CheckboxState> = {\n\tunchecked: \"checked\",\n\tchecked: \"indeterminate\",\n\tindeterminate: \"unchecked\",\n};\n\n// ─── Internal subcomponents ───────────────────────────────────────────────────\n\ninterface CheckboxVisualProps {\n\tisSelected: boolean;\n\tisIndeterminate: boolean;\n\tcontainerBg: string;\n\tcontainerBorderColor: string;\n\tcontainerBorderWidth: number;\n\ticonColor: string;\n\tsvgPath: string;\n\tpathLength: number;\n\tfillDuration: number;\n\tdrawDuration: number;\n\tmorphDuration: number;\n\tprefersReduced: boolean;\n}\n\n/** Animated 18×18dp checkbox box (container + SVG icon). @internal */\nconst CheckboxVisual = React.memo(function CheckboxVisual({\n\tisSelected,\n\tisIndeterminate,\n\tcontainerBg,\n\tcontainerBorderColor,\n\tcontainerBorderWidth,\n\ticonColor,\n\tsvgPath,\n\tpathLength,\n\tfillDuration,\n\tdrawDuration,\n\tmorphDuration,\n\tprefersReduced,\n}: CheckboxVisualProps) {\n\treturn (\n\t\t<m.div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"relative flex items-center justify-center w-4.5 h-4.5 rounded-sm overflow-hidden\"\n\t\t\tanimate={{\n\t\t\t\tbackgroundColor: containerBg,\n\t\t\t\tborderColor: containerBorderColor,\n\t\t\t\tborderWidth: containerBorderWidth,\n\t\t\t}}\n\t\t\ttransition={{\n\t\t\t\tbackgroundColor: {\n\t\t\t\t\tduration: fillDuration,\n\t\t\t\t\tease: isSelected ? MD3_FAST_EFFECTS : \"easeOut\",\n\t\t\t\t},\n\t\t\t\tborderColor: { duration: fillDuration, ease: \"easeOut\" },\n\t\t\t\tborderWidth: { duration: fillDuration, ease: \"easeOut\" },\n\t\t\t}}\n\t\t\tstyle={{ borderStyle: \"solid\" }}\n\t\t>\n\t\t\t<AnimatePresence>\n\t\t\t\t{isSelected && (\n\t\t\t\t\t<m.svg\n\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\tviewBox=\"0 0 18 18\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\twidth={18}\n\t\t\t\t\t\theight={18}\n\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: prefersReduced ? 0 : 0.1 }}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<m.path\n\t\t\t\t\t\t\td={svgPath}\n\t\t\t\t\t\t\tstroke={iconColor}\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\td: svgPath,\n\t\t\t\t\t\t\t\tpathLength: isIndeterminate ? 1 : pathLength,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\td: { duration: morphDuration, ease: MD3_STANDARD },\n\t\t\t\t\t\t\t\tpathLength: { duration: drawDuration, ease: MD3_STANDARD },\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</m.svg>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</m.div>\n\t);\n});\n\n// ─── useMergedRef ─────────────────────────────────────────────────────────────\n\n/** Merges external + internal refs into a single callback ref. @internal */\nfunction useMergedRef<T>(\n\texternalRef: React.Ref<T> | undefined,\n\tinternalRef: React.RefObject<T | null>,\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\t(internalRef as React.MutableRefObject<T | null>).current = node;\n\t\t\tif (!externalRef) return;\n\t\t\tif (typeof externalRef === \"function\") {\n\t\t\t\texternalRef(node);\n\t\t\t} else {\n\t\t\t\t(externalRef as React.MutableRefObject<T | null>).current = node;\n\t\t\t}\n\t\t},\n\t\t[externalRef, internalRef],\n\t);\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nconst CheckboxComponent = React.forwardRef<HTMLInputElement, CheckboxProps>(\n\t(\n\t\t{\n\t\t\tchecked,\n\t\t\tdefaultChecked = false,\n\t\t\tindeterminate = false,\n\t\t\tonCheckedChange,\n\t\t\tstate: stateProp,\n\t\t\tonStateChange,\n\t\t\tdisabled = false,\n\t\t\terror = false,\n\t\t\tlabel,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\t\"aria-describedby\": ariaDescribedby,\n\t\t\t\"aria-required\": ariaRequired,\n\t\t\tname,\n\t\t\tvalue,\n\t\t\tid: idProp,\n\t\t\tclassName,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\tconst generatedId = React.useId();\n\t\tconst inputId = idProp ?? (label ? `checkbox-${generatedId}` : undefined);\n\n\t\tconst [internalState, setInternalState] = React.useState<CheckboxState>(\n\t\t\t() => (defaultChecked ? \"checked\" : \"unchecked\"),\n\t\t);\n\n\t\t// `state` and `checked` determine controlled vs uncontrolled.\n\t\t// `indeterminate` is visual-only and always overrides.\n\t\tconst isControlled = stateProp !== undefined || checked !== undefined;\n\t\tconst baseState = isControlled\n\t\t\t? resolveState(checked, false, stateProp)\n\t\t\t: internalState;\n\t\tconst effectiveState: CheckboxState = indeterminate\n\t\t\t? \"indeterminate\"\n\t\t\t: baseState;\n\n\t\t// ── Ripple ──────────────────────────────────────────────────────────\n\t\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\t\tconst removeRipple = React.useCallback(\n\t\t\t(id: number) => setRipples((prev) => prev.filter((r) => r.id !== id)),\n\t\t\t[],\n\t\t);\n\n\t\tconst onPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\t\t// Ripple origin offset by 4px to simulate a 40×40 state layer inside 48×48 touch target.\n\t\t\t\tconst x = e.clientX - rect.left - 4;\n\t\t\t\tconst y = e.clientY - rect.top - 4;\n\t\t\t\tconst rippleSize = Math.hypot(40, 40) * 2;\n\t\t\t\tsetRipples((prev) => [\n\t\t\t\t\t...prev,\n\t\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t\t]);\n\t\t\t},\n\t\t\t[disabled],\n\t\t);\n\n\t\t// ── Change handler ───────────────────────────────────────────────────\n\t\tconst handleChange = React.useCallback(\n\t\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\tif (disabled) return;\n\n\t\t\t\tif (stateProp !== undefined) {\n\t\t\t\t\tonStateChange?.(NEXT_STATE[effectiveState]);\n\t\t\t\t} else if (checked !== undefined) {\n\t\t\t\t\tonCheckedChange?.(e.target.checked);\n\t\t\t\t} else {\n\t\t\t\t\tconst next = NEXT_STATE[effectiveState];\n\t\t\t\t\tsetInternalState(next);\n\t\t\t\t\tif (next === \"indeterminate\") {\n\t\t\t\t\t\tonStateChange?.(next);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonCheckedChange?.(next === \"checked\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tdisabled,\n\t\t\t\tstateProp,\n\t\t\t\tchecked,\n\t\t\t\teffectiveState,\n\t\t\t\tonStateChange,\n\t\t\t\tonCheckedChange,\n\t\t\t],\n\t\t);\n\n\t\t// ── Sync indeterminate DOM property ──────────────────────────────────\n\t\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, inputRef);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (inputRef.current) {\n\t\t\t\tinputRef.current.indeterminate = effectiveState === \"indeterminate\";\n\t\t\t}\n\t\t}, [effectiveState]);\n\n\t\t// ── Derived visual state ─────────────────────────────────────────────\n\t\tconst isChecked = effectiveState === \"checked\";\n\t\tconst isIndeterminate = effectiveState === \"indeterminate\";\n\t\tconst isSelected = isChecked || isIndeterminate;\n\t\tconst ariaChecked = isIndeterminate ? (\"mixed\" as const) : isChecked;\n\n\t\t// ── Animation values ─────────────────────────────────────────────────\n\t\tconst accentColor = error\n\t\t\t? \"var(--color-m3-error)\"\n\t\t\t: \"var(--color-m3-primary)\";\n\t\tconst onAccentColor = error\n\t\t\t? \"var(--color-m3-on-error)\"\n\t\t\t: \"var(--color-m3-on-primary)\";\n\n\t\t// MD3 Outline color (on-surface with 38% opacity)\n\t\t// We use a CSS variable or a static RGBA to ensure Framer Motion can animate it.\n\t\t// Since color-mix is not animatable, we'll use the variable directly if it's a plain color,\n\t\t// or use a fallback. Better yet, we can use the style prop for static colors\n\t\t// and only animate opacity if needed, but here we want to animate the color itself.\n\t\tconst outlineColor = error\n\t\t\t? \"var(--color-m3-error)\"\n\t\t\t: \"rgba(0, 0, 0, 0.38)\"; // Standard fallback for on-surface 38%\n\n\t\tconst containerBg = isSelected ? accentColor : \"rgba(0, 0, 0, 0)\";\n\t\tconst containerBorderColor = isSelected ? \"rgba(0, 0, 0, 0)\" : outlineColor;\n\t\tconst containerBorderWidth = isSelected ? 0 : 2;\n\t\tconst iconColor = isSelected ? onAccentColor : \"rgba(0, 0, 0, 0)\";\n\n\t\tconst svgPath = isIndeterminate ? DASH_PATH : CHECKMARK_PATH;\n\t\tconst pathLength = isSelected ? 1 : 0;\n\n\t\tconst fillDuration = prefersReduced ? 0 : isSelected ? 0.15 : 0.1;\n\t\tconst drawDuration = prefersReduced ? 0 : isSelected ? 0.2 : 0.1;\n\t\tconst morphDuration = prefersReduced ? 0 : 0.2;\n\n\t\t// ── State layer classes ──────────────────────────────────────────────\n\t\tconst stateLayerBg = isSelected\n\t\t\t? error\n\t\t\t\t? \"before:bg-m3-error\"\n\t\t\t\t: \"before:bg-m3-primary\"\n\t\t\t: error\n\t\t\t\t? \"before:bg-m3-error\"\n\t\t\t\t: \"before:bg-m3-on-surface\";\n\n\t\tconst stateLayerClass = cn(\n\t\t\t\"before:absolute before:inset-0 before:rounded-full before:pointer-events-none\",\n\t\t\t\"before:transition-opacity before:duration-150 before:opacity-0\",\n\t\t\t\"group-hover/cbx:before:opacity-[0.08]\",\n\t\t\t\"group-focus-within/cbx:before:opacity-[0.10]\",\n\t\t\t\"group-active/cbx:before:opacity-[0.10]\",\n\t\t\tstateLayerBg,\n\t\t);\n\n\t\t// ── Shared visual props ──────────────────────────────────────────────\n\t\tconst visualProps: CheckboxVisualProps = {\n\t\t\tisSelected,\n\t\t\tisIndeterminate,\n\t\t\tcontainerBg,\n\t\t\tcontainerBorderColor,\n\t\t\tcontainerBorderWidth,\n\t\t\ticonColor,\n\t\t\tsvgPath,\n\t\t\tpathLength,\n\t\t\tfillDuration,\n\t\t\tdrawDuration,\n\t\t\tmorphDuration,\n\t\t\tprefersReduced,\n\t\t};\n\n\t\tconst touchTargetClass = cn(\n\t\t\t\"relative inline-flex items-center justify-center outline-none shrink-0\",\n\t\t\t\"w-12 h-12 group/cbx\",\n\t\t\tdisabled && \"pointer-events-none\",\n\t\t);\n\n\t\t// ── Render ───────────────────────────────────────────────────────────\n\t\tconst stateLayerAndRipple = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute flex items-center justify-center w-10 h-10 m-auto inset-0 rounded-full overflow-hidden pointer-events-none\",\n\t\t\t\t\tstateLayerClass,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t<Ripple\n\t\t\t\t\tripples={ripples}\n\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\n\t\tconst hiddenInput = (\n\t\t\t<input\n\t\t\t\tref={mergedRef}\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tvalue={value}\n\t\t\t\tchecked={isChecked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-checked={ariaChecked}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\taria-describedby={ariaDescribedby}\n\t\t\t\taria-required={ariaRequired}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tclassName=\"sr-only\"\n\t\t\t/>\n\t\t);\n\n\t\tif (label) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<label\n\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"inline-flex items-center gap-2 cursor-pointer select-none\",\n\t\t\t\t\t\t\tdisabled &&\n\t\t\t\t\t\t\t\t\"cursor-not-allowed opacity-[0.38] pointer-events-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className={touchTargetClass} onPointerDown={onPointerDown}>\n\t\t\t\t\t\t\t{stateLayerAndRipple}\n\t\t\t\t\t\t\t{hiddenInput}\n\t\t\t\t\t\t\t<CheckboxVisual {...visualProps} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span className=\"text-sm leading-none text-m3-on-surface\">\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\tclassName={cn(touchTargetClass, \"cursor-pointer\", className)}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t>\n\t\t\t\t\t{stateLayerAndRipple}\n\t\t\t\t\t{hiddenInput}\n\t\t\t\t\t<CheckboxVisual {...visualProps} />\n\t\t\t\t</label>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nCheckboxComponent.displayName = \"Checkbox\";\n\n/**\n * MD3 Expressive Checkbox component.\n *\n * Supports 2-state and tri-state patterns. Fully animated per MD3 spec:\n * checkmark draw, indeterminate dash morph, container fill, state layer, and ripple.\n *\n * @example\n * ```tsx\n * <Checkbox checked={isChecked} onCheckedChange={setIsChecked} label=\"Accept terms\" />\n * <Checkbox state={parentState} onStateChange={setParentState} label=\"Select all\" />\n * <Checkbox error label=\"Required field\" aria-describedby=\"err-msg\" />\n * ```\n * @see https://m3.material.io/components/checkbox/overview\n */\nexport const Checkbox = React.memo(CheckboxComponent);\n\n// ─── TriStateCheckbox ─────────────────────────────────────────────────────────\n\nconst TriStateCheckboxComponent = React.forwardRef<\n\tHTMLInputElement,\n\tTriStateCheckboxProps\n>(({ state, onStateChange, ...rest }, ref) => (\n\t<Checkbox ref={ref} state={state} onStateChange={onStateChange} {...rest} />\n));\n\nTriStateCheckboxComponent.displayName = \"TriStateCheckbox\";\n\n/**\n * MD3 Expressive Tri-State Checkbox.\n *\n * Convenience wrapper around `Checkbox` that enforces `state` + `onStateChange`.\n * Ideal for parent-child selection patterns.\n *\n * @example\n * ```tsx\n * <TriStateCheckbox state={parentState} onStateChange={setParentState} label=\"Select all\" />\n * ```\n */\nexport const TriStateCheckbox = React.memo(TriStateCheckboxComponent);\n","/**\n * @file chip.tsx\n *\n * MD3 Expressive Chip component — 4 variants.\n *\n * - `assist`     → Triggered actions spanning multiple apps. Flat (bordered) or Elevated.\n * - `filter`     → Toggleable selections. Animated checkmark on select.\n * - `input`      → Entities/tags with optional avatar and a dedicated remove button.\n * - `suggestion` → Contextual dynamic recommendations. Flat (bordered) or Elevated.\n *\n * @remarks\n * Token references (Kotlin source):\n * AssistChipTokens, FilterChipTokens, InputChipTokens, SuggestionChipTokens\n *\n * Architecture:\n * - Styling: `cva` + `cn` (clsx/tailwind-merge)\n * - Animation: Framer Motion (`LazyMotion` + `domMax`) for animated checkmark\n * - Ripple: `Ripple` + `useRippleState` from `./ripple.tsx`\n * - A11y: `role=\"checkbox\"` (filter), `role=\"button\"` (others); full keyboard support\n *\n * @see https://m3.material.io/components/chips/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Ripple, useRippleState } from \"./ripple\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal Icons\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Animated checkmark icon for selected Filter chips.\n * @internal\n */\nfunction CheckIcon({ className }: { className?: string }) {\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\twidth={18}\n\t\t\theight={18}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2.5}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={className}\n\t\t>\n\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t</svg>\n\t);\n}\n\n/**\n * Close (×) icon for the trailing remove button on Input chips.\n * @internal\n */\nfunction CloseIcon({ className }: { className?: string }) {\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\twidth={18}\n\t\t\theight={18}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2.5}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={className}\n\t\t>\n\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t\t</svg>\n\t);\n}\n\n// CVA Variants\n// Token mapping references (Kotlin source):\n// - FlatOutlineColor (all variants): border-m3-outline-variant\n// - FlatSelectedContainerColor: bg-m3-secondary-container\n// - SelectedLabelTextColor: text-m3-on-secondary-container\n// - ElevatedContainerColor: bg-m3-surface-container-low\n\nconst chipVariants = cva(\n\t[\n\t\t// Base layout\n\t\t\"inline-flex items-center h-8 rounded-lg shrink-0\",\n\t\t// Typography: LabelLarge\n\t\t\"text-sm font-medium leading-none\",\n\t\t// Interaction\n\t\t\"relative overflow-hidden cursor-pointer select-none\",\n\t\t\"transition-all duration-200 ease-in-out\",\n\t\t// Remove browser default focus; use MD3 focus ring\n\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-1\",\n\t\t\"focus-visible:ring-m3-secondary\",\n\t\t// MD3 State Layer (pseudo-element overlay)\n\t\t// Use inset-[-1px] to ensure the state layer covers the 1px border perfectly\n\t\t\"before:absolute before:inset-[-1px] before:pointer-events-none before:rounded-lg\",\n\t\t\"before:transition-opacity before:duration-200 before:opacity-0\",\n\t\t\"hover:before:opacity-[0.08] focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\",\n\t].join(\" \"),\n\t{\n\t\tvariants: {\n\t\t\t/**\n\t\t\t * Chip variant controlling default colors and border behavior.\n\t\t\t * Selected/elevated state overrides are applied via `cn()` at runtime.\n\t\t\t */\n\t\t\tvariant: {\n\t\t\t\t/**\n\t\t\t\t * Assist chip – FlatOutlineColor: outline-variant, LabelTextColor: on-surface\n\t\t\t\t * Leading icon color: primary (AssistChipTokens.IconColor)\n\t\t\t\t */\n\t\t\t\tassist:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface before:bg-m3-on-surface\",\n\t\t\t\t/**\n\t\t\t\t * Filter chip (unselected) – FlatUnselectedOutlineColor: outline-variant\n\t\t\t\t * UnselectedLabelTextColor: on-surface-variant\n\t\t\t\t */\n\t\t\t\tfilter:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface-variant before:bg-m3-on-surface-variant\",\n\t\t\t\t/**\n\t\t\t\t * Input chip (unselected) – UnselectedOutlineColor: outline-variant\n\t\t\t\t * UnselectedLabelTextColor: on-surface-variant\n\t\t\t\t */\n\t\t\t\tinput:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface-variant before:bg-m3-on-surface-variant\",\n\t\t\t\t/**\n\t\t\t\t * Suggestion chip – FlatOutlineColor: outline-variant\n\t\t\t\t * LabelTextColor: on-surface-variant (SuggestionChipTokens)\n\t\t\t\t */\n\t\t\t\tsuggestion:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface-variant before:bg-m3-on-surface-variant\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { variant: \"assist\" },\n\t},\n);\n\nexport interface ChipProps\n\textends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n\t/**\n\t * Chip variant.\n\t * - `assist`     → Smart/automated actions. Flat by default, can be elevated.\n\t * - `filter`     → Toggleable tag/filter. Shows animated checkmark when selected.\n\t * - `input`      → Entity representation (tag, contact). Has optional avatar + remove button.\n\t * - `suggestion` → Contextual suggestions. Like assist, flat by default, can be elevated.\n\t * @default 'assist'\n\t */\n\tvariant?: VariantProps<typeof chipVariants>[\"variant\"];\n\n\t/**\n\t * Renders with elevation shadow (Level 1) and fills background with `surface-container-low`.\n\t * Applicable to `assist`, `filter` (unselected), and `suggestion` variants.\n\t * Source: AssistChipTokens.ElevatedContainerColor / SuggestionChipTokens.ElevatedContainerColor\n\t */\n\televated?: boolean;\n\n\t/**\n\t * Toggle/selection state.\n\t * - `filter`:     selected → bg `secondary-container`, animated checkmark appears.\n\t * - `input`:      selected → bg `secondary-container`.\n\t * - `suggestion`: selected → bg `secondary-container`.\n\t * Used for `role=\"checkbox\"` (filter) / `aria-pressed` (input/suggestion).\n\t */\n\tselected?: boolean;\n\n\t/**\n\t * Disables the chip. Applies:\n\t * - `pointer-events-none` – no mouse/touch interaction\n\t * - `opacity-[0.38]`      – DisabledLabelTextOpacity (0.38) per MD3 tokens\n\t * - `text-m3-on-surface`  – DisabledLabelTextColor per MD3 tokens\n\t * - `aria-disabled=\"true\"`\n\t * - `tabIndex={-1}`\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Visible label. Required. Can be a string or ReactNode.\n\t */\n\tlabel: React.ReactNode;\n\n\t/**\n\t * Optional leading icon element (18×18px recommended).\n\t * For `filter` chips with `selected=true`, this is replaced by an animated checkmark.\n\t * For `assist`/`suggestion`: icon color → `primary`\n\t * For `input` (unselected): icon color → `on-surface-variant`\n\t */\n\tleadingIcon?: React.ReactNode;\n\n\t/**\n\t * Optional trailing icon element (18×18px recommended).\n\t * Supported across all chip variants including `filter` (alongside checkmark).\n\t * Color: `on-surface-variant` (unselected) / `on-secondary-container` (selected).\n\t */\n\ttrailingIcon?: React.ReactNode;\n\n\t/**\n\t * Avatar element for `input` chips. Takes priority over `leadingIcon`.\n\t * Rendered as a 24×24px circle (InputChipTokens: AvatarSize = 24.dp, AvatarShape = CornerFull).\n\t */\n\tavatar?: React.ReactNode;\n\n\t/**\n\t * Callback when the trailing remove (×) button is activated on `input` chips.\n\t * When provided, a dedicated tabbable close button with `aria-label=\"Remove {label}\"` is rendered.\n\t */\n\tonRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\nconst ChipImpl = React.forwardRef<HTMLButtonElement, ChipProps>(\n\t(\n\t\t{\n\t\t\tvariant = \"assist\",\n\t\t\televated = false,\n\t\t\tselected = false,\n\t\t\tdisabled = false,\n\t\t\tlabel,\n\t\t\tleadingIcon,\n\t\t\ttrailingIcon,\n\t\t\tavatar,\n\t\t\tonRemove,\n\t\t\tclassName,\n\t\t\tonClick,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tif (\n\t\t\t(\n\t\t\t\tglobalThis as unknown as {\n\t\t\t\t\tprocess?: { env?: { NODE_ENV?: string } };\n\t\t\t\t}\n\t\t\t).process?.env?.NODE_ENV !== \"production\"\n\t\t) {\n\t\t\tif (variant === \"assist\" && selected) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[Chip] variant='assist' does not support `selected` state per Material Design 3 specification.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled,\n\t\t});\n\n\t\tconst isFilter = variant === \"filter\";\n\t\tconst isInput = variant === \"input\";\n\t\tconst isSelectable = isFilter || isInput || variant === \"suggestion\";\n\n\t\t/**\n\t\t * For input chips, avatar takes priority over leadingIcon.\n\t\t * Source: leadingContent() in Chip.kt – \"An avatar takes precedence\"\n\t\t */\n\t\tconst resolvedLeadingIcon = isInput && avatar ? avatar : leadingIcon;\n\n\t\t/**\n\t\t * Filter chip: when selected, show animated checkmark.\n\t\t * If a leadingIcon is provided, the checkmark replaces it when selected.\n\t\t * Source: Chip.kt – AnimatedVisibility with expandHorizontally + fadeIn\n\t\t */\n\t\tconst showCheckmark = isFilter && selected;\n\n\t\t/** Trailing slot: custom trailingIcon OR the remove button for input chips */\n\t\tconst hasTrailingContent = !!trailingIcon || !!onRemove;\n\n\t\t/**\n\t\t * Leading slot: filter chips have leading content when selected (checkmark)\n\t\t * or when a leadingIcon is provided. Otherwise depends on resolvedLeadingIcon.\n\t\t */\n\t\tconst hasLeadingContent =\n\t\t\t(isFilter && (selected || !!resolvedLeadingIcon)) ||\n\t\t\t(!isFilter && !!resolvedLeadingIcon);\n\n\t\t// Source: AssistChipDefaults.ContentPadding / inputChipPadding in Chip.kt\n\t\t// No icons:      px-4 | Input: px-3\n\t\t// Leading only:  pl-2 pr-4 | Input: pl-1 pr-3\n\t\t// Trailing only: pl-4 pr-2 | Input: pl-3 pr-2\n\t\t// Both:          px-2 | Input: pl-1 pr-2\n\t\tconst paddingClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcn(\n\t\t\t\t\t!isInput && !hasLeadingContent && !hasTrailingContent && \"px-4\",\n\t\t\t\t\t!isInput && hasLeadingContent && !hasTrailingContent && \"pl-2 pr-4\",\n\t\t\t\t\t!isInput && !hasLeadingContent && hasTrailingContent && \"pl-4 pr-2\",\n\t\t\t\t\t!isInput && hasLeadingContent && hasTrailingContent && \"px-2\",\n\t\t\t\t\tisInput && !hasLeadingContent && !hasTrailingContent && \"px-3\",\n\t\t\t\t\tisInput && hasLeadingContent && !hasTrailingContent && \"pl-1 pr-3\",\n\t\t\t\t\tisInput && !hasLeadingContent && hasTrailingContent && \"pl-3 pr-2\",\n\t\t\t\t\tisInput && hasLeadingContent && hasTrailingContent && \"pl-1 pr-2\",\n\t\t\t\t),\n\t\t\t[isInput, hasLeadingContent, hasTrailingContent],\n\t\t);\n\n\t\t// Selected / elevated / disabled state overrides.\n\t\t// Source: MD3 tokens — DisabledLabelTextOpacity=0.38, FlatDisabledOutlineOpacity=0.12\n\t\tconst stateClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcn(\n\t\t\t\t\tisSelectable &&\n\t\t\t\t\t\tselected &&\n\t\t\t\t\t\t\"bg-m3-secondary-container text-m3-on-secondary-container border-none before:bg-m3-on-secondary-container\",\n\t\t\t\t\televated &&\n\t\t\t\t\t\t!selected &&\n\t\t\t\t\t\t\"bg-m3-surface-container-low border-none elevation-1\",\n\t\t\t\t\televated && isFilter && selected && \"elevation-1\",\n\t\t\t\t\tdisabled &&\n\t\t\t\t\t\t\"opacity-[0.38] pointer-events-none cursor-not-allowed text-m3-on-surface\",\n\t\t\t\t\tdisabled && !selected && \"border-m3-outline-variant/[.12]\",\n\t\t\t\t\tdisabled && selected && \"bg-m3-on-surface/[.12] border-none\",\n\t\t\t\t),\n\t\t\t[isSelectable, isFilter, selected, elevated, disabled],\n\t\t);\n\n\t\t// Leading icon color tokens:\n\t\t// assist/suggestion → Primary | filter unselected → Primary\n\t\t// filter selected → OnSecondaryContainer | input unselected → OnSurfaceVariant | input selected → Primary\n\t\tconst leadingIconColorClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcn(\n\t\t\t\t\t(variant === \"assist\" || variant === \"suggestion\") &&\n\t\t\t\t\t\t\"text-m3-primary\",\n\t\t\t\t\tisFilter && !selected && \"text-m3-primary\",\n\t\t\t\t\tisFilter && selected && \"text-m3-on-secondary-container\",\n\t\t\t\t\tisInput && !selected && \"text-m3-on-surface-variant\",\n\t\t\t\t\tisInput && selected && \"text-m3-primary\",\n\t\t\t\t),\n\t\t\t[variant, isFilter, isInput, selected],\n\t\t);\n\n\t\tconst isCompound = !!onRemove;\n\t\tconst Root = (isCompound ? \"div\" : \"button\") as React.ElementType;\n\n\t\t// Composed class for the root container\n\t\tconst containerClass = cn(\n\t\t\tchipVariants({ variant }),\n\t\t\t!isCompound && paddingClass,\n\t\t\t!isCompound && \"gap-2\",\n\t\t\tstateClass,\n\t\t\t// When compound, the root div handles the overall shape and the main state layer\n\t\t\tisCompound && [\n\t\t\t\t\"items-stretch cursor-default gap-0 group/chip\",\n\t\t\t\t\"hover:before:opacity-0 focus-visible:before:opacity-0 active:before:opacity-0\",\n\t\t\t\t\"focus-visible:ring-0\",\n\t\t\t\t\"has-[.main-btn:hover]:before:opacity-[0.08]!\",\n\t\t\t\t\"has-[.main-btn:focus-visible]:before:opacity-[0.10]!\",\n\t\t\t\t\"has-[.main-btn:active]:before:opacity-[0.10]!\",\n\t\t\t\t\"has-[.main-btn:focus-visible]:ring-2 has-[.main-btn:focus-visible]:ring-m3-secondary has-[.main-btn:focus-visible]:ring-offset-1\",\n\t\t\t],\n\t\t\tclassName,\n\t\t);\n\n\t\t/** Main hit area content (Leading Icon + Label) */\n\t\tconst mainContent = (\n\t\t\t<>\n\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t{isFilter ? (\n\t\t\t\t\t\tshowCheckmark ? (\n\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\tkey=\"checkmark\"\n\t\t\t\t\t\t\t\tinitial={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ width: 18, opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\twidth: { duration: 0.2, ease: [0.2, 0, 0, 1] },\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"easeOut\" },\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 overflow-hidden\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckIcon />\n\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t) : resolvedLeadingIcon ? (\n\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\tkey=\"leading-icon\"\n\t\t\t\t\t\t\t\tinitial={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ width: 18, opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\twidth: { duration: 0.2, ease: [0.2, 0, 0, 1] },\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"easeOut\" },\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 overflow-hidden [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\tleadingIconColorClass,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{resolvedLeadingIcon}\n\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t) : null\n\t\t\t\t\t) : resolvedLeadingIcon ? (\n\t\t\t\t\t\tisInput && avatar ? (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey=\"avatar\"\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-6 h-6 rounded-full overflow-hidden\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{resolvedLeadingIcon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey=\"leading-icon\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\tleadingIconColorClass,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{resolvedLeadingIcon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : null}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t<span className=\"whitespace-nowrap\">{label}</span>\n\t\t\t</>\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\t\t\tconst innerContent = (\n\t\t\t\t<>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t{mainContent}\n\t\t\t\t\t{hasTrailingContent && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\tonRemove\n\t\t\t\t\t\t\t\t\t? \"absolute right-1 top-1/2 -translate-y-1/2 z-10\"\n\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{onRemove ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\ttypeof label === \"string\" ? `Remove ${label}` : \"Remove\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tonRemove(e);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonPointerDown={(e: React.PointerEvent<HTMLButtonElement>) =>\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"remove-btn flex items-center justify-center w-6 h-6 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"cursor-pointer focus-visible:outline-none\",\n\t\t\t\t\t\t\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-m3-secondary\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\t\t\"relative overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\"before:absolute before:inset-0 before:pointer-events-none before:bg-current before:rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"before:transition-opacity before:duration-200 before:opacity-0\",\n\t\t\t\t\t\t\t\t\t\t\"hover:before:opacity-[0.08] active:before:opacity-[0.12]\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CloseIcon />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : trailingIcon ? (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\tconst strippedProps = { ...props } as Record<string, unknown>;\n\t\t\tdelete strippedProps.children;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tclassName={containerClass}\n\t\t\t\t\t\t{...(strippedProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<Root\n\t\t\t\t\tref={(!isCompound ? ref : undefined) as React.Ref<HTMLButtonElement>}\n\t\t\t\t\ttype={!isCompound ? \"button\" : undefined}\n\t\t\t\t\t// Filter chips act as checkboxes; Input chips can be buttons/toggleable; others buttons\n\t\t\t\t\t// Source: Material Design 3 Accessibility\n\t\t\t\t\t{...(isFilter\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\trole: \"checkbox\" as React.AriaRole,\n\t\t\t\t\t\t\t\t\"aria-checked\": selected,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: isInput && !isCompound && selected\n\t\t\t\t\t\t\t? { role: \"button\", \"aria-pressed\": true }\n\t\t\t\t\t\t\t: isCompound\n\t\t\t\t\t\t\t\t? { role: \"group\" }\n\t\t\t\t\t\t\t\t: { role: \"button\" })}\n\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\ttabIndex={isCompound ? -1 : disabled ? -1 : 0}\n\t\t\t\t\tdisabled={!isCompound ? disabled : undefined}\n\t\t\t\t\tonClick={!isCompound ? onClick : undefined}\n\t\t\t\t\tonPointerDown={!isCompound ? onPointerDown : undefined}\n\t\t\t\t\tclassName={containerClass}\n\t\t\t\t\t// Filter out props that shouldn't be on a div if isCompound\n\t\t\t\t\t{...(isCompound ? {} : props)}\n\t\t\t\t>\n\t\t\t\t\t{/* State Ripple layer */}\n\t\t\t\t\t{!isCompound && (\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Main action area: if compound, this is a nested button for a11y & avoids nesting buttons */}\n\t\t\t\t\t{isCompound ? (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"main-btn flex items-center h-full w-full focus:outline-none appearance-none bg-transparent border-none\",\n\t\t\t\t\t\t\t\t\"text-inherit font-inherit cursor-pointer\",\n\t\t\t\t\t\t\t\tpaddingClass,\n\t\t\t\t\t\t\t\t\"gap-2\",\n\t\t\t\t\t\t\t\t\"pr-8\",\n\t\t\t\t\t\t\t\t\"relative overflow-hidden rounded-lg\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t\t{mainContent}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tmainContent\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Trailing slot */}\n\t\t\t\t\t{hasTrailingContent && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\tonRemove\n\t\t\t\t\t\t\t\t\t? \"absolute right-1 top-1/2 -translate-y-1/2 z-10\"\n\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{onRemove ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\ttypeof label === \"string\" ? `Remove ${label}` : \"Remove\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tonRemove(e);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonPointerDown={(e: React.PointerEvent<HTMLButtonElement>) =>\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"remove-btn flex items-center justify-center w-6 h-6 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"cursor-pointer focus-visible:outline-none\",\n\t\t\t\t\t\t\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-m3-secondary\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\t\t\"relative overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\"before:absolute before:inset-0 before:pointer-events-none before:bg-current before:rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"before:transition-opacity before:duration-200 before:opacity-0\",\n\t\t\t\t\t\t\t\t\t\t\"hover:before:opacity-[0.08] active:before:opacity-[0.12]\",\n\t\t\t\t\t\t\t\t\t\t// TrailingIcon color tokens\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CloseIcon />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : trailingIcon ? (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</Root>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nChipImpl.displayName = \"Chip\";\n\n/**\n * MD3 Expressive Chip — 4-variant interactive tag component.\n *\n * @remarks\n * - `filter` chips accept `selected` and render an animated checkmark.\n * - `input` chips accept `onRemove` to render a compound close button.\n * - `elevated` is supported on `assist`, `filter` (unselected), and `suggestion`.\n * - Fully accessible: `role=\"checkbox\"` for filter, `role=\"group\"` for compound chips.\n *\n * @example\n * ```tsx\n * // Assist chip\n * <Chip variant=\"assist\" label=\"Share\" onClick={share} />\n *\n * // Filter chip\n * <Chip variant=\"filter\" label=\"Unread\" selected={showUnread} onClick={toggle} />\n *\n * // Input chip with remove\n * <Chip variant=\"input\" label=\"React\" onRemove={() => removeTag(\"React\")} />\n * ```\n *\n * @see https://m3.material.io/components/chips/overview\n */\nexport const Chip = React.memo(ChipImpl);\n","/**\n * @file radio-button.tsx\n * MD3 Expressive RadioButton — single-select with RadioGroup support.\n * Spec: https://m3.material.io/components/radio-button/overview\n */\n\nimport { domMax, LazyMotion, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Ripple, type RippleOrigin } from \"./ripple\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** MD3 FastEffects easing: dot grow (emphasizedAccelerate). */\nconst MD3_FAST_EFFECTS = [0.3, 0, 1, 1] as const;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Color variant for `RadioButton`.\n * - `\"primary\"` — standard selection (default)\n * - `\"error\"` — error/invalid state\n */\nexport type RadioButtonColors = \"primary\" | \"error\";\n\n/** Props for `RadioButton`. */\nexport interface RadioButtonProps {\n\t/** Whether this radio is selected. */\n\tselected?: boolean;\n\t/** Initial selected state (uncontrolled). @default false */\n\tdefaultSelected?: boolean;\n\t/** Called when user clicks. Pass `null` to disable interaction. */\n\tonClick?: (() => void) | null;\n\t/** Disables the radio — visual disabled state + no interaction. @default false */\n\tdisabled?: boolean;\n\t/** Color variant. @default \"primary\" */\n\tcolor?: RadioButtonColors;\n\t/** Error state — changes colors to `m3-error`. @default false */\n\terror?: boolean;\n\t/** Adjacent label text. Renders a `<label>` wrapper. */\n\tlabel?: string;\n\t/** Value used for form submission. */\n\tvalue?: string;\n\t/** Name for grouping (used in RadioGroup context). */\n\tname?: string;\n\t/** ID for the hidden `<input>`. Auto-generated when `label` is set. */\n\tid?: string;\n\t/** Extra class names on the outermost wrapper. */\n\tclassName?: string;\n\t/** ARIA label for the radio when no visible label exists. */\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n\t\"aria-describedby\"?: string;\n\t/** Whether the radio is required for form submission. */\n\trequired?: boolean;\n\t/** Ref to the hidden `<input type=\"radio\">`. */\n\tref?: React.Ref<HTMLInputElement>;\n}\n\n/** Props for `RadioGroup`. */\nexport interface RadioGroupProps {\n\t/** The name attribute shared across all child RadioButtons. */\n\tname: string;\n\t/** The currently selected value (controlled). */\n\tvalue?: string;\n\t/** Default value (uncontrolled). */\n\tdefaultValue?: string;\n\t/** Called when selection changes. */\n\tonValueChange?: (value: string) => void;\n\t/** Disables all radio buttons in the group. */\n\tdisabled?: boolean;\n\t/** Error state for the entire group. */\n\terror?: boolean;\n\t/** Label for the group (renders as visually hidden or visible heading). */\n\tlabel?: string;\n\t/** ID of an external element that labels this group. */\n\t\"aria-labelledby\"?: string;\n\t/** Direction of layout. @default \"vertical\" */\n\torientation?: \"horizontal\" | \"vertical\";\n\t/** Whether at least one radio in the group must be selected. */\n\trequired?: boolean;\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface RadioGroupContextValue {\n\tname: string;\n\tselectedValue: string | undefined;\n\tonValueChange: (value: string) => void;\n\tdisabled: boolean;\n\terror: boolean;\n\trequired: boolean;\n}\n\nconst RadioGroupContext = React.createContext<RadioGroupContextValue | null>(\n\tnull,\n);\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/** Merges external + internal refs into a single callback ref. @internal */\nfunction useMergedRef<T>(\n\texternalRef: React.Ref<T> | undefined,\n\tinternalRef: React.RefObject<T | null>,\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\t(internalRef as React.MutableRefObject<T | null>).current = node;\n\t\t\tif (!externalRef) return;\n\t\t\tif (typeof externalRef === \"function\") {\n\t\t\t\texternalRef(node);\n\t\t\t} else {\n\t\t\t\t(externalRef as React.MutableRefObject<T | null>).current = node;\n\t\t\t}\n\t\t},\n\t\t[externalRef, internalRef],\n\t);\n}\n\n// ─── RadioVisual ──────────────────────────────────────────────────────────────\n\ninterface RadioVisualProps {\n\tisSelected: boolean;\n\tdisabled: boolean;\n\terror: boolean;\n\tisHovered: boolean;\n\tprefersReduced: boolean;\n}\n\n/**\n * Animated 20×20dp radio circle (outer ring + inner dot). @internal\n * Uses `m.circle` for Framer Motion SVG animation.\n */\nconst RadioVisual = React.memo(function RadioVisual({\n\tisSelected,\n\tdisabled,\n\terror,\n\tisHovered,\n\tprefersReduced,\n}: RadioVisualProps) {\n\tconst accentColor = error\n\t\t? \"var(--color-m3-error)\"\n\t\t: \"var(--color-m3-primary)\";\n\n\tconst disabledColor = \"rgba(0, 0, 0, 0.38)\";\n\n\tconst outerStroke = disabled\n\t\t? disabledColor\n\t\t: isSelected\n\t\t\t? accentColor\n\t\t\t: isHovered\n\t\t\t\t? \"var(--color-m3-on-surface)\"\n\t\t\t\t: \"var(--color-m3-on-surface-variant)\";\n\n\tconst dotFill = disabled\n\t\t? disabledColor\n\t\t: isSelected\n\t\t\t? accentColor\n\t\t\t: \"rgba(0, 0, 0, 0)\";\n\n\tconst ringDuration = prefersReduced ? 0 : 0.15;\n\tconst dotDuration = prefersReduced ? 0 : isSelected ? 0.2 : 0.1;\n\tconst dotEase = isSelected ? MD3_FAST_EFFECTS : (\"easeOut\" as const);\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"0 0 20 20\"\n\t\t\twidth={20}\n\t\t\theight={20}\n\t\t\tfill=\"none\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<m.circle\n\t\t\t\tcx={10}\n\t\t\t\tcy={10}\n\t\t\t\tr={9}\n\t\t\t\tstrokeWidth={2}\n\t\t\t\tfill=\"none\"\n\t\t\t\tanimate={{ stroke: outerStroke }}\n\t\t\t\ttransition={{ duration: ringDuration, ease: \"easeOut\" }}\n\t\t\t/>\n\t\t\t<m.circle\n\t\t\t\tcx={10}\n\t\t\t\tcy={10}\n\t\t\t\tinitial={{ r: 0 }}\n\t\t\t\tanimate={{ r: isSelected ? 5 : 0, fill: dotFill }}\n\t\t\t\ttransition={{\n\t\t\t\t\tr: { duration: dotDuration, ease: dotEase },\n\t\t\t\t\tfill: { duration: ringDuration, ease: \"easeOut\" },\n\t\t\t\t}}\n\t\t\t\tstroke=\"none\"\n\t\t\t/>\n\t\t</svg>\n\t);\n});\n\n// ─── RadioButton ──────────────────────────────────────────────────────────────\n\nconst RadioButtonComponent = React.forwardRef<\n\tHTMLInputElement,\n\tRadioButtonProps\n>(\n\t(\n\t\t{\n\t\t\tselected,\n\t\t\tdefaultSelected = false,\n\t\t\tonClick,\n\t\t\tdisabled: disabledProp = false,\n\t\t\tcolor,\n\t\t\terror: errorProp = false,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t\tname: nameProp,\n\t\t\tid: idProp,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\t\"aria-describedby\": ariaDescribedby,\n\t\t\trequired: requiredProp,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst group = React.useContext(RadioGroupContext);\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\tconst generatedId = React.useId();\n\t\tconst inputId = idProp ?? (label ? `radio-${generatedId}` : undefined);\n\n\t\tconst name = group?.name ?? nameProp;\n\t\tconst disabled = group?.disabled || disabledProp;\n\t\tconst error = group?.error || errorProp || color === \"error\";\n\t\tconst required = group?.required || requiredProp;\n\n\t\tconst [internalSelected, setInternalSelected] =\n\t\t\tReact.useState(defaultSelected);\n\n\t\tconst isControlled = selected !== undefined;\n\t\tconst isSelected: boolean = group\n\t\t\t? group.selectedValue === value\n\t\t\t: isControlled\n\t\t\t\t? (selected ?? false)\n\t\t\t\t: internalSelected;\n\n\t\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\t\tconst removeRipple = React.useCallback(\n\t\t\t(id: number) => setRipples((prev) => prev.filter((r) => r.id !== id)),\n\t\t\t[],\n\t\t);\n\n\t\tconst onPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\t\tconst x = e.clientX - rect.left - 4;\n\t\t\t\tconst y = e.clientY - rect.top - 4;\n\t\t\t\tconst rippleSize = Math.hypot(40, 40) * 2;\n\t\t\t\tsetRipples((prev) => [\n\t\t\t\t\t...prev,\n\t\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t\t]);\n\t\t\t},\n\t\t\t[disabled],\n\t\t);\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst onPointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) setIsHovered(true);\n\t\t}, [disabled]);\n\t\tconst onPointerLeave = React.useCallback(() => setIsHovered(false), []);\n\n\t\tconst handleChange = React.useCallback(\n\t\t\t(_e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\tif (disabled || onClick === null) return;\n\n\t\t\t\tif (group) {\n\t\t\t\t\tif (value !== undefined) group.onValueChange(value);\n\t\t\t\t} else if (!isControlled) {\n\t\t\t\t\tsetInternalSelected(true);\n\t\t\t\t\tonClick?.();\n\t\t\t\t} else {\n\t\t\t\t\tonClick?.();\n\t\t\t\t}\n\t\t\t},\n\t\t\t[disabled, onClick, group, value, isControlled],\n\t\t);\n\n\t\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, inputRef);\n\n\t\tconst stateLayerBg = error ? \"before:bg-m3-error\" : \"before:bg-m3-primary\";\n\n\t\tconst stateLayerClass = cn(\n\t\t\t\"before:absolute before:inset-0 before:rounded-full before:pointer-events-none\",\n\t\t\t\"before:transition-opacity before:duration-150 before:opacity-0\",\n\t\t\t\"group-hover/radio:before:opacity-[0.08]\",\n\t\t\t\"group-focus-within/radio:before:opacity-[0.10]\",\n\t\t\t\"group-active/radio:before:opacity-[0.10]\",\n\t\t\tstateLayerBg,\n\t\t);\n\n\t\tconst touchTargetClass = cn(\n\t\t\t\"relative inline-flex items-center justify-center outline-none shrink-0\",\n\t\t\t\"w-12 h-12 group/radio cursor-pointer\",\n\t\t\tdisabled && \"pointer-events-none\",\n\t\t);\n\n\t\tconst stateLayerAndRipple = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute flex items-center justify-center w-10 h-10 m-auto inset-0 rounded-full overflow-hidden pointer-events-none\",\n\t\t\t\t\tstateLayerClass,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t<Ripple\n\t\t\t\t\tripples={ripples}\n\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\n\t\tconst hiddenInput = (\n\t\t\t<input\n\t\t\t\tref={mergedRef}\n\t\t\t\ttype=\"radio\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tvalue={value}\n\t\t\t\tchecked={isSelected}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\taria-describedby={ariaDescribedby}\n\t\t\t\trequired={required}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tclassName=\"sr-only\"\n\t\t\t/>\n\t\t);\n\n\t\tconst visual = (\n\t\t\t<RadioVisual\n\t\t\t\tisSelected={isSelected}\n\t\t\t\tdisabled={disabled}\n\t\t\t\terror={error}\n\t\t\t\tisHovered={isHovered}\n\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t/>\n\t\t);\n\n\t\tif (label) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<label\n\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"inline-flex items-center gap-2 cursor-pointer select-none\",\n\t\t\t\t\t\t\tdisabled &&\n\t\t\t\t\t\t\t\t\"cursor-not-allowed opacity-[0.38] pointer-events-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={touchTargetClass}\n\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\tonPointerEnter={onPointerEnter}\n\t\t\t\t\t\t\tonPointerLeave={onPointerLeave}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{stateLayerAndRipple}\n\t\t\t\t\t\t\t{hiddenInput}\n\t\t\t\t\t\t\t{visual}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span className=\"text-sm leading-none text-m3-on-surface\">\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\tclassName={cn(touchTargetClass, className)}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tonPointerEnter={onPointerEnter}\n\t\t\t\t\tonPointerLeave={onPointerLeave}\n\t\t\t\t>\n\t\t\t\t\t{stateLayerAndRipple}\n\t\t\t\t\t{hiddenInput}\n\t\t\t\t\t{visual}\n\t\t\t\t</label>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nRadioButtonComponent.displayName = \"RadioButton\";\n\n/**\n * MD3 Expressive RadioButton component.\n *\n * Single-select control. Supports standalone (controlled/uncontrolled) and\n * `RadioGroup` context. Animated per MD3 spec: inner dot radius morph,\n * outer ring color transition, state layer, and ripple.\n *\n * @example\n * ```tsx\n * <RadioButton selected={isSelected} onClick={() => setSelected(true)} label=\"Option A\" />\n *\n * <RadioGroup name=\"plan\" value={plan} onValueChange={setPlan}>\n *   <RadioButton value=\"free\" label=\"Free\" />\n *   <RadioButton value=\"pro\" label=\"Pro\" />\n * </RadioGroup>\n * ```\n * @see https://m3.material.io/components/radio-button/overview\n */\nexport const RadioButton = React.memo(RadioButtonComponent);\n\n// ─── RadioGroup ────────────────────────────────────────────────────────────────\n\nconst RadioGroupComponent = React.forwardRef<HTMLDivElement, RadioGroupProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tvalue: valueProp,\n\t\t\tdefaultValue,\n\t\t\tonValueChange,\n\t\t\tdisabled = false,\n\t\t\terror = false,\n\t\t\tlabel,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\trequired = false,\n\t\t\torientation = \"vertical\",\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [internalValue, setInternalValue] = React.useState<\n\t\t\tstring | undefined\n\t\t>(defaultValue);\n\t\tconst isControlled = valueProp !== undefined;\n\t\tconst selectedValue = isControlled ? valueProp : internalValue;\n\n\t\tconst handleValueChange = React.useCallback(\n\t\t\t(val: string) => {\n\t\t\t\tif (!isControlled) setInternalValue(val);\n\t\t\t\tonValueChange?.(val);\n\t\t\t},\n\t\t\t[isControlled, onValueChange],\n\t\t);\n\n\t\tconst groupRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, groupRef);\n\n\t\tconst onKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\t\tif (disabled) return;\n\n\t\t\t\tconst isNext = e.key === \"ArrowDown\" || e.key === \"ArrowRight\";\n\t\t\t\tconst isPrev = e.key === \"ArrowUp\" || e.key === \"ArrowLeft\";\n\t\t\t\tif (!isNext && !isPrev) return;\n\n\t\t\t\te.preventDefault();\n\n\t\t\t\tconst inputs = Array.from(\n\t\t\t\t\tgroupRef.current?.querySelectorAll<HTMLInputElement>(\n\t\t\t\t\t\t'input[type=\"radio\"]:not(:disabled)',\n\t\t\t\t\t) ?? [],\n\t\t\t\t);\n\t\t\t\tif (inputs.length === 0) return;\n\n\t\t\t\tconst currentIdx = inputs.indexOf(\n\t\t\t\t\tdocument.activeElement as HTMLInputElement,\n\t\t\t\t);\n\n\t\t\t\tconst nextIdx = isNext\n\t\t\t\t\t? currentIdx < inputs.length - 1\n\t\t\t\t\t\t? currentIdx + 1\n\t\t\t\t\t\t: 0\n\t\t\t\t\t: currentIdx > 0\n\t\t\t\t\t\t? currentIdx - 1\n\t\t\t\t\t\t: inputs.length - 1;\n\n\t\t\t\tconst target = inputs[nextIdx];\n\t\t\t\ttarget.focus();\n\t\t\t\thandleValueChange(target.value);\n\t\t\t},\n\t\t\t[disabled, handleValueChange],\n\t\t);\n\n\t\tconst contextValue = React.useMemo<RadioGroupContextValue>(\n\t\t\t() => ({\n\t\t\t\tname,\n\t\t\t\tselectedValue,\n\t\t\t\tonValueChange: handleValueChange,\n\t\t\t\tdisabled,\n\t\t\t\terror,\n\t\t\t\trequired,\n\t\t\t}),\n\t\t\t[name, selectedValue, handleValueChange, disabled, error, required],\n\t\t);\n\n\t\treturn (\n\t\t\t<RadioGroupContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\trole=\"radiogroup\"\n\t\t\t\t\taria-label={label && !ariaLabelledby ? label : undefined}\n\t\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\taria-required={required || undefined}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex\",\n\t\t\t\t\t\torientation === \"horizontal\" ? \"flex-row gap-4\" : \"flex-col gap-1\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t>\n\t\t\t\t\t{label && !ariaLabelledby && <span className=\"sr-only\">{label}</span>}\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</RadioGroupContext.Provider>\n\t\t);\n\t},\n);\n\nRadioGroupComponent.displayName = \"RadioGroup\";\n\n/**\n * MD3 Expressive RadioGroup component.\n *\n * Groups multiple `RadioButton` components under a shared `name` with keyboard\n * navigation (Arrow keys with wrapping) and ARIA `radiogroup` semantics.\n *\n * @example\n * ```tsx\n * <RadioGroup name=\"theme\" value={theme} onValueChange={setTheme} label=\"Theme\">\n *   <RadioButton value=\"light\" label=\"Light\" />\n *   <RadioButton value=\"dark\" label=\"Dark\" />\n *   <RadioButton value=\"system\" label=\"System\" />\n * </RadioGroup>\n * ```\n * @see https://m3.material.io/components/radio-button/overview\n */\nexport const RadioGroup = React.memo(RadioGroupComponent);\n","import * as React from \"react\";\n\nexport interface UseVirtualListOptions {\n\t/** Initial and increment batch size for rendering items. Default: 50 */\n\tbatchSize?: number;\n\t/** Root margin for IntersectionObserver to trigger pre-fetching next batch. Default: \"100px\" */\n\trootMargin?: string;\n\t/** The element used as the viewport for checking visibility of the target. Default: null (browser viewport) */\n\troot?: Element | Document | null;\n}\n\nexport interface UseVirtualListReturn<T> {\n\t/** Slice of items currently visible / mounted in DOM */\n\tvisibleItems: T[];\n\t/** True if there are remaining items not yet mounted */\n\thasMore: boolean;\n\t/** Ref to attach to the sentinel bottom element */\n\tsentinelRef: React.RefObject<HTMLDivElement | null>;\n\t/** Reset visible items count back to batchSize */\n\treset: () => void;\n\t/** Current number of visible items */\n\tvisibleCount: number;\n}\n\n/**\n * Lightweight slice-based progressive virtualization hook using IntersectionObserver.\n * Zero external dependencies. Ideal for menus, dropdowns, and popup lists.\n */\nexport function useVirtualList<T>(\n\titems: T[],\n\toptions: UseVirtualListOptions = {},\n): UseVirtualListReturn<T> {\n\tconst { batchSize = 50, rootMargin = \"100px\", root = null } = options;\n\tconst [visibleCount, setVisibleCount] = React.useState(batchSize);\n\tconst sentinelRef = React.useRef<HTMLDivElement | null>(null);\n\n\t// Reset visibleCount when items array changes or is reset\n\tReact.useEffect(() => {\n\t\tvoid items;\n\t\tsetVisibleCount(batchSize);\n\t}, [items, batchSize]);\n\n\tconst hasMore = visibleCount < items.length;\n\n\tReact.useEffect(() => {\n\t\tconst target = sentinelRef.current;\n\t\tif (!target || !hasMore) return;\n\n\t\tif (typeof IntersectionObserver === \"undefined\") {\n\t\t\tsetVisibleCount(items.length);\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst [entry] = entries;\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\tsetVisibleCount((prev) => Math.min(prev + batchSize, items.length));\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: root ?? null,\n\t\t\t\trootMargin,\n\t\t\t},\n\t\t);\n\n\t\tobserver.observe(target);\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [hasMore, batchSize, items.length, rootMargin, root]);\n\n\tconst visibleItems = React.useMemo(\n\t\t() => items.slice(0, visibleCount),\n\t\t[items, visibleCount],\n\t);\n\n\tconst reset = React.useCallback(() => {\n\t\tsetVisibleCount(batchSize);\n\t}, [batchSize]);\n\n\treturn {\n\t\tvisibleItems,\n\t\thasMore,\n\t\tsentinelRef,\n\t\treset,\n\t\tvisibleCount,\n\t};\n}\n","/**\n * @file ui/shared/motion-tokens.ts\n *\n * Framer Motion spring presets derived from the official MD3 Expressive\n * motion physics system (May 2025).\n *\n * Usage hierarchy:\n *   1. Import a named preset (e.g. `FAST_SPATIAL_SPRING`) for convenience.\n *   2. Call `getMotionSpring(speed, type)` when you need to pick dynamically.\n *   3. Call `getMotionTransitionCSS(speed, type, scheme?)` for pure-CSS contexts.\n *\n * @see https://m3.material.io/styles/motion/overview/how-it-works\n * @see https://m3.material.io/styles/motion/overview/specs\n */\n\nimport type { Transition } from \"motion/react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Spring Token Structure\n//\n// MD3 defines springs as dampingRatio (0–1) + stiffness.\n// Framer Motion uses absolute `damping` coefficient.\n//\n// Conversion (with Framer's default mass = 1):\n//   damping = 2 × dampingRatio × √stiffness\n//\n// Computed values (rounded to 2 decimal places):\n//\n//   fast  spatial:  2 × 0.6 × √800   = 2 × 0.6 × 28.28  ≈ 33.94\n//   fast  effects:  2 × 1.0 × √3800  = 2 × 61.64         ≈ 123.29\n//   default spatial: 2 × 0.8 × √380  = 2 × 0.8 × 19.49  ≈ 31.19\n//   default effects: 2 × 1.0 × √1600 = 2 × 40            = 80\n//   slow  spatial:  2 × 0.8 × √200   = 2 × 0.8 × 14.14  ≈ 22.63\n//   slow  effects:  2 × 1.0 × √800   = 2 × 28.28         ≈ 56.57\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Spatial springs — use for position, size, border-radius, rotation, scale ─\n\n/**\n * MD3 Expressive — Fast Spatial Spring\n * `md.sys.motion.spring.fast.spatial` (dampingRatio: 0.6, stiffness: 800)\n *\n * Use for: small components (buttons, switches, chips).\n * Has notable bounce/overshoot — feels snappy and expressive.\n */\nexport const FAST_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 33.94,\n} as const;\n\n/**\n * MD3 Expressive — Default Spatial Spring\n * `md.sys.motion.spring.default.spatial` (dampingRatio: 0.8, stiffness: 380)\n *\n * Use for: medium elements (bottom sheets, menus, navigation rail).\n * Gentle overshoot — the go-to spring for most UI animations.\n */\nexport const DEFAULT_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 380,\n\tdamping: 31.19,\n} as const;\n\n/**\n * MD3 Expressive — Slow Spatial Spring\n * `md.sys.motion.spring.slow.spatial` (dampingRatio: 0.8, stiffness: 200)\n *\n * Use for: full-screen transitions and large layout shifts.\n * Subtle, slow overshoot.\n */\nexport const SLOW_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 22.63,\n} as const;\n\n// ── Effects springs — use for color, opacity (critically damped, no bounce) ──\n\n/**\n * MD3 Expressive — Fast Effects Spring\n * `md.sys.motion.spring.fast.effects` (dampingRatio: 1.0, stiffness: 3800)\n *\n * Use for: color changes on switches, icon swaps, badge counts.\n * Critically damped — very fast, no overshoot.\n */\nexport const FAST_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 3800,\n\tdamping: 123.29,\n} as const;\n\n/**\n * MD3 Expressive — Default Effects Spring\n * `md.sys.motion.spring.default.effects` (dampingRatio: 1.0, stiffness: 1600)\n *\n * Use for: opacity fades, color transitions for medium-sized elements.\n * Critically damped — smooth with no overshoot.\n */\nexport const DEFAULT_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 1600,\n\tdamping: 80,\n} as const;\n\n/**\n * MD3 Expressive — Slow Effects Spring\n * `md.sys.motion.spring.slow.effects` (dampingRatio: 1.0, stiffness: 800)\n *\n * Use for: full-screen opacity/color transitions.\n * Critically damped — slow and smooth.\n */\nexport const SLOW_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 56.57,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dynamic helper\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SpringSpeed = \"fast\" | \"default\" | \"slow\";\nexport type SpringAnimationType = \"spatial\" | \"effects\";\n\nconst springMap = {\n\tfast: { spatial: FAST_SPATIAL_SPRING, effects: FAST_EFFECTS_SPRING },\n\tdefault: { spatial: DEFAULT_SPATIAL_SPRING, effects: DEFAULT_EFFECTS_SPRING },\n\tslow: { spatial: SLOW_SPATIAL_SPRING, effects: SLOW_EFFECTS_SPRING },\n} as const;\n\n/**\n * Pick a Framer Motion spring by speed and type.\n *\n * @example\n * ```tsx\n * transition={getMotionSpring(\"fast\", \"spatial\")}\n * ```\n */\nexport function getMotionSpring(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n): Transition {\n\treturn springMap[speed][type];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CSS transition strings\n// For contexts where Framer Motion is not used (plain CSS / Tailwind).\n// Uses official Web spring → CSS cubic-bezier conversion table.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst CSS_CURVES = {\n\texpressive: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.42, 1.67, 0.21, 0.90)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.38, 1.21, 0.22, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.39, 1.29, 0.35, 0.98)\",\n\t\t\t\tdurationMs: 650,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n\tstandard: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 750,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n} as const;\n\nexport type MotionScheme = \"expressive\" | \"standard\";\n\n/**\n * Returns a CSS `transition` value string using the official MD3 web curve\n * conversion, e.g. `\"500ms cubic-bezier(0.38, 1.21, 0.22, 1.00)\"`.\n *\n * @example\n * ```ts\n * element.style.transition = `border-radius ${getMotionTransitionCSS(\"default\", \"spatial\")}`;\n * ```\n */\nexport function getMotionTransitionCSS(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n\tscheme: MotionScheme = \"expressive\",\n): string {\n\tconst { curve, durationMs } = CSS_CURVES[scheme][speed][type];\n\treturn `${durationMs}ms ${curve}`;\n}\n","/**\n * @file shared/constants.ts\n *\n * Shared animation constants for MD3 Expressive UI components.\n * Centralises spring transition configs and motion variant objects to avoid\n * duplication across button, icon-button, FAB, and other interactive components.\n *\n * @see https://m3.material.io/foundations/animation/overview\n */\n\nimport type { Target, TargetAndTransition, Transition } from \"motion/react\";\nimport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n} from \"./motion-tokens\";\n\nexport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n\tgetMotionSpring,\n\tgetMotionTransitionCSS,\n\tSLOW_EFFECTS_SPRING,\n\tSLOW_SPATIAL_SPRING,\n} from \"./motion-tokens\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Spring Transitions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fast spring — used for border-radius morphing, icon swaps.\n * Maps to MD3 `fast.effects` (critically damped, stiffness 3800).\n *\n * @example\n * ```tsx\n * <m.button transition={{ borderRadius: SPRING_TRANSITION_FAST }}>...</m.button>\n * ```\n */\nexport const SPRING_TRANSITION_FAST: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Standard spring — used for icon/content scale animations.\n * Maps to MD3 `default.effects` (critically damped, stiffness 1600).\n *\n * @example\n * ```tsx\n * <m.span transition={SPRING_TRANSITION}>...</m.span>\n * ```\n */\nexport const SPRING_TRANSITION: Transition = DEFAULT_EFFECTS_SPRING;\n\n/**\n * MD3 Expressive spring — active indicator expand/collapse.\n * Maps to MD3 `default.spatial` (dampingRatio: 0.8, stiffness: 380).\n * Gentle bounce for the \"pop\" effect per MD3 Expressive spec.\n */\nexport const SPRING_TRANSITION_EXPRESSIVE: Transition = DEFAULT_SPATIAL_SPRING;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Icon Span Motion Variants\n// Used for icon/loading indicator swap animation inside FAB and IconButton.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Framer Motion variants for animating icon spans in/out.\n *\n * Scale from near-zero → 1 on enter; back to near-zero on exit.\n * The near-zero value (0.01) avoids the SMIL freeze bug on Chromium\n * that occurs when an element starts at exactly `scale(0)`.\n *\n * @example\n * ```tsx\n * <AnimatePresence mode=\"wait\">\n *   {loading ? (\n *     <m.span key=\"loading\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n *       <LoadingIndicator />\n *     </m.span>\n *   ) : (\n *     <m.span key=\"icon\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n *       {icon}\n *     </m.span>\n *   )}\n * </AnimatePresence>\n * ```\n */\nexport const ICON_SPAN_VARIANTS: {\n\tinitial: Target;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { scale: 0.01 },\n\tanimate: { scale: 1 },\n\texit: { scale: 0.01 },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 TextField Animation Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Standard easing curve — used for label float, active indicator expand.\n * cubic-bezier(0.2, 0, 0, 1)\n *\n * @see https://m3.material.io/foundations/animation/easing-and-duration\n */\nexport const MD3_STANDARD_EASING: [number, number, number, number] = [\n\t0.2, 0, 0, 1,\n];\n\n/**\n * Duration for floating label transition: 150ms.\n * Used when label moves between inline position ↔ floated position.\n */\nexport const MD3_LABEL_FLOAT_DURATION = 0.15;\n\n/**\n * Duration for active indicator expand/collapse: 200ms.\n * Used for the bottom border (filled) and outline (outlined) on focus.\n */\nexport const MD3_INDICATOR_DURATION = 0.2;\n\n/**\n * Duration for supporting text / error text appear/disappear: 120ms.\n */\nexport const MD3_SUPPORTING_DURATION = 0.12;\n\n/**\n * Duration for trailing icon appear/disappear (clear button, password toggle): 100ms.\n */\nexport const MD3_ICON_SWAP_DURATION = 0.1;\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SPRING_TRANSITION_FAST } from \"./shared/constants\";\n\n// @internal — font must be loaded via '@bug-on/m3-expressive/material-symbols.css'\nconst VARIANT_FONT: Record<NonNullable<IconProps[\"variant\"]>, string> = {\n\toutlined: \"'Material Symbols Outlined'\",\n\trounded: \"'Material Symbols Rounded'\",\n\tsharp: \"'Material Symbols Sharp'\",\n};\n\n/**\n * Props cho component {@link Icon}.\n *\n * All variable font axes are mapped directly to `font-variation-settings`.\n */\nexport interface IconProps extends React.HTMLAttributes<HTMLSpanElement> {\n\t/**\n\t * Name of the Material Symbol in snake_case format.\n\t * @example \"home\", \"arrow_forward\", \"settings\"\n\t * @see https://fonts.google.com/icons\n\t */\n\tname: string;\n\n\t/**\n\t * Geometric style variant — maps to font family.\n\t * @default \"outlined\"\n\t */\n\tvariant?: \"outlined\" | \"rounded\" | \"sharp\";\n\n\t/**\n\t * `FILL` axis. `0` = outlined, `1` = filled.\n\t * Features spring animation when `animateFill` is true.\n\t * @default 0\n\t */\n\tfill?: 0 | 1;\n\n\t/**\n\t * `wght` axis — stroke weight. Should match surrounding text weight.\n\t * @default 400\n\t */\n\tweight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n\n\t/**\n\t * `GRAD` axis — fine-tunes visual weight without affecting layout dimensions.\n\t * Use `-25` on dark backgrounds to offset light halation effects.\n\t * @default 0\n\t */\n\tgrade?: -50 | -25 | 0 | 100 | 200;\n\n\t/**\n\t * `opsz` axis — optical size in dp. Used to set `font-size` if `size` is not specified.\n\t * Match rendered pixel size for best quality.\n\t * @default 24\n\t */\n\topticalSize?: 20 | 24 | 40 | 48;\n\n\t/**\n\t * Direct `font-size` override in px. `opsz` axis still respects `opticalSize`.\n\t * @example size={18} opticalSize={20}\n\t */\n\tsize?: number | \"inherit\";\n\n\t/**\n\t * Enables smooth spring animation when toggling FILL axis (uses `SPRING_TRANSITION_FAST`).\n\t * Requires `motion` dependency.\n\t * @default false\n\t * @example <Icon name=\"favorite\" fill={isLiked ? 1 : 0} animateFill />\n\t */\n\tanimateFill?: boolean;\n}\n\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tvariant = \"outlined\",\n\t\t\tfill = 0,\n\t\t\tweight = 400,\n\t\t\tgrade = 0,\n\t\t\topticalSize = 24,\n\t\t\tsize,\n\t\t\tanimateFill = false,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst fontVariationSettings = `'FILL' ${fill}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opticalSize}`;\n\n\t\tconst computedStyle: React.CSSProperties = {\n\t\t\tfontFamily: VARIANT_FONT[variant],\n\t\t\tfontSize:\n\t\t\t\tsize === \"inherit\"\n\t\t\t\t\t? \"inherit\"\n\t\t\t\t\t: size != null\n\t\t\t\t\t\t? `${size}px`\n\t\t\t\t\t\t: `${opticalSize}px`,\n\t\t\tfontVariationSettings,\n\t\t\t...style,\n\t\t};\n\n\t\tif (animateFill) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tanimate={{ fontVariationSettings }}\n\t\t\t\t\t\ttransition={SPRING_TRANSITION_FAST}\n\t\t\t\t\t\tstyle={computedStyle}\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: motion v12 HTMLMotionProps conflicts with React's event types\n\t\t\t\t\t\t{...(restProps as any)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</m.span>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={computedStyle}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</span>\n\t\t);\n\t},\n);\n\nIconComponent.displayName = \"Icon\";\n\n/**\n * Material Symbols (variable font) Icon component.\n *\n * Make sure to import the icon font CSS before usage:\n * ```ts\n * import '@bug-on/m3-expressive/material-symbols-cdn.css';\n * ```\n *\n * @remarks\n * - Use snake_case for icon names: `\"arrow_forward\"`, NOT `\"ArrowForward\"`.\n * - `aria-hidden=\"true\"` is attached automatically — provide screen reader labels on parent elements.\n *\n * @example\n * ```tsx\n * // Basic Icon\n * <Icon name=\"home\" />\n *\n * // Visual customization (filled, heavy weight)\n * <Icon name=\"favorite\" variant=\"rounded\" fill={1} weight={300} />\n *\n * // Animated transition on state change\n * <Icon name=\"bookmark\" fill={saved ? 1 : 0} animateFill />\n *\n * // Custom size override\n * <Icon name=\"close\" size={18} opticalSize={20} />\n *\n * // Combination with other components\n * <Button icon={<Icon name=\"add\" />}>Add to cart</Button>\n * ```\n *\n * @see https://fonts.google.com/icons\n * @see https://m3.material.io/styles/icons/overview\n */\nexport const Icon = React.memo(IconComponent);\n","\"use client\";\n\nimport * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n/** Radix accepts hover/scroll/always/auto. We add 'none' as a UI-only hide. */\nexport type ScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"none\";\ntype RadixScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"auto\";\nexport type ScrollAreaOrientation = \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface ScrollAreaProps\n\textends Omit<\n\t\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Root>,\n\t\t\"type\"\n\t> {\n\t/**\n\t * Controls when the scrollbars are visible.\n\t * - `hover`: Show on hover (default, recommended for desktop)\n\t * - `scroll`: Show only while scrolling (recommended for mobile)\n\t * - `always`: Always visible\n\t * - `none`: Never visible\n\t */\n\ttype?: ScrollAreaType;\n\t/**\n\t * The scrollbar orientation to render.\n\t * @default \"vertical\"\n\t */\n\torientation?: ScrollAreaOrientation;\n\t/** Delay in ms before scrollbars hide when `type` is `hover` or `scroll`. */\n\tscrollHideDelay?: number;\n\t/** Extra classes applied to the inner viewport element. */\n\tviewportClassName?: string;\n\t/** Ref to the scrolling viewport element. */\n\tviewportRef?: React.Ref<HTMLDivElement>;\n\t/** Extra props applied to the viewport element. */\n\tviewportProps?: React.ComponentPropsWithoutRef<\n\t\ttypeof RadixScrollArea.Viewport\n\t>;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\nconst ScrollArea = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Root>,\n\tScrollAreaProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tviewportClassName,\n\t\t\tchildren,\n\t\t\ttype = \"hover\",\n\t\t\torientation = \"vertical\",\n\t\t\tscrollHideDelay = 600,\n\t\t\tviewportRef,\n\t\t\tviewportProps,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [isTouchDevice, setIsTouchDevice] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tsetIsTouchDevice(\n\t\t\t\t\t\"ontouchstart\" in window || navigator.maxTouchPoints > 0,\n\t\t\t\t);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst resolvedType = React.useMemo(() => {\n\t\t\tif (type === \"hover\" && isTouchDevice) {\n\t\t\t\treturn \"scroll\";\n\t\t\t}\n\t\t\treturn type;\n\t\t}, [type, isTouchDevice]);\n\n\t\tconst radixType: RadixScrollAreaType =\n\t\t\tresolvedType === \"none\" ? \"always\" : resolvedType;\n\n\t\treturn (\n\t\t\t<RadixScrollArea.Root\n\t\t\t\tref={ref}\n\t\t\t\ttype={radixType}\n\t\t\t\tscrollHideDelay={scrollHideDelay}\n\t\t\t\tclassName={cn(\"relative overflow-hidden flex flex-col\", className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<RadixScrollArea.Viewport\n\t\t\t\t\tref={viewportRef}\n\t\t\t\t\t{...viewportProps}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"h-full w-full flex-1 min-h-0 min-w-0 rounded-[inherit]\",\n\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1\",\n\t\t\t\t\t\tviewportClassName,\n\t\t\t\t\t\tviewportProps?.className,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RadixScrollArea.Viewport>\n\n\t\t\t\t{(orientation === \"vertical\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{(orientation === \"horizontal\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"horizontal\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<RadixScrollArea.Corner className=\"bg-m3-surface-container\" />\n\t\t\t</RadixScrollArea.Root>\n\t\t);\n\t},\n);\nScrollArea.displayName = \"ScrollArea\";\n\n// ─── Scrollbar ────────────────────────────────────────────────────────────────\nconst ScrollAreaScrollbar = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Scrollbar>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Scrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n\t<RadixScrollArea.Scrollbar\n\t\tref={ref}\n\t\torientation={orientation}\n\t\tclassName={cn(\n\t\t\t\"flex touch-none select-none transition-all duration-300 ease-in-out\",\n\t\t\t\"absolute z-50\",\n\t\t\torientation === \"vertical\" &&\n\t\t\t\t\"right-0 top-0 bottom-0 w-2.5 border-l border-l-transparent p-px\",\n\t\t\torientation === \"horizontal\" &&\n\t\t\t\t\"bottom-0 left-0 right-0 h-2.5 flex-col border-t border-t-transparent p-px\",\n\t\t\t\"data-[state=hidden]:opacity-0 data-[state=visible]:opacity-100\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t<RadixScrollArea.Thumb\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex-1 rounded-full bg-m3-on-surface/25 transition-colors duration-200\",\n\t\t\t\t\"hover:bg-m3-on-surface/40 active:bg-m3-on-surface/55\",\n\t\t\t\t\"before:absolute before:left-1/2 before:top-1/2 before:min-h-11 before:min-w-11 before:-translate-x-1/2 before:-translate-y-1/2\",\n\t\t\t)}\n\t\t/>\n\t</RadixScrollArea.Scrollbar>\n));\nScrollAreaScrollbar.displayName = RadixScrollArea.Scrollbar.displayName;\n\n// ─── Corner ───────────────────────────────────────────────────────────────────\nconst ScrollAreaCorner = React.forwardRef<\n\tReact.ComponentRef<typeof RadixScrollArea.Corner>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Corner>\n>(({ className, ...props }, ref) => (\n\t<RadixScrollArea.Corner\n\t\tref={ref}\n\t\tclassName={cn(\"bg-m3-surface-container\", className)}\n\t\t{...props}\n\t/>\n));\nScrollAreaCorner.displayName = \"ScrollAreaCorner\";\n\nexport { ScrollArea, ScrollAreaScrollbar };\n","// ─── MD3 Expressive Menu — Framer Motion Animation Variants ──────────────────\n// FastSpatial: md.sys.motion.spring.fast.spatial\n//   MD3: stiffness=800, dampingRatio=0.6 → Framer damping ≈ 33.94\n// FastEffects: md.sys.motion.spring.fast.effects (CSS fallback used for exit)\n//   MD3: duration=150ms, cubic-bezier(0.31, 0.94, 0.34, 1.00)\n\nimport type { Variants } from \"motion/react\";\nimport {\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../shared/motion-tokens\";\n\nexport { FAST_EFFECTS_SPRING, FAST_SPATIAL_SPRING };\n\n/** FastEffects CSS-fallback transition — used for opacity/exit animations */\nexport const FAST_EFFECTS_TRANSITION = {\n\tduration: 0.15,\n\tease: [0.31, 0.94, 0.34, 1.0] as [number, number, number, number],\n} as const;\n\n// ─── Menu popup container ─────────────────────────────────────────────────────\n\n/**\n * Enter/exit animation for the menu popup container.\n * Scale from 0.8→1.0 with FastSpatial spring.\n * Transform-origin is driven by the Radix CSS variable\n * `--radix-dropdown-menu-content-transform-origin`.\n */\nexport const MENU_CONTAINER_VARIANTS: Variants = {\n\thidden: {\n\t\topacity: 0,\n\t\tscale: 0.8,\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ttransition: FAST_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.8,\n\t\ttransition: FAST_EFFECTS_TRANSITION,\n\t},\n};\n\n// ─── Selected check icon ──────────────────────────────────────────────────────\n\n/** Size of the check icon in px (20dp per SegmentedMenuTokens.ItemLeadingIconSize) */\nexport const MENU_CHECK_ICON_SIZE = 20;\n\n/**\n * Expand/collapse animation for the check icon that appears when a MenuItem is\n * selected. Uses horizontal expansion (width + marginInlineEnd) with FastSpatial.\n *\n * ONLY used for the animated check ↔ selectedIcon swap in selectable items.\n * Regular (static) leading icons should NOT use these variants.\n */\nexport const CHECK_ICON_VARIANTS: Variants = {\n\thidden: {\n\t\topacity: 0,\n\t\twidth: 0,\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\twidth: MENU_CHECK_ICON_SIZE,\n\t\ttransition: FAST_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\twidth: 0,\n\t\ttransition: FAST_EFFECTS_TRANSITION,\n\t},\n};\n\n// ─── SubMenu content ──────────────────────────────────────────────────────────\n\n/** SubMenu popup uses the same FastSpatial/FastEffects pattern as root menu */\nexport const SUBMENU_CONTAINER_VARIANTS: Variants = {\n\thidden: {\n\t\topacity: 0,\n\t\tscale: 0.9,\n\t\tx: -4,\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\tx: 0,\n\t\ttransition: FAST_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.9,\n\t\tx: -4,\n\t\ttransition: FAST_EFFECTS_TRANSITION,\n\t},\n};\n","// ─── MD3 Expressive Menu — React Context ──────────────────────────────────────\nimport * as React from \"react\";\nimport type {\n\tMenuColorVariant,\n\tMenuDensity,\n\tMenuPrimitive,\n\tMenuVariant,\n} from \"./menu-types\";\n\n// ─── Context shape ────────────────────────────────────────────────────────────\n\ninterface MenuContextValue {\n\t/** Visual variant: baseline (M3 standard) or expressive (shape-morphing) */\n\tvariant: MenuVariant;\n\t/** Color variant inherited by all children unless overridden */\n\tcolorVariant: MenuColorVariant;\n\t/** Density of menu items: 0, -2, -4 */\n\tdensity: MenuDensity;\n\t/**\n\t * Which Radix primitive family drives this menu:\n\t * - \"dropdown\" → @radix-ui/react-dropdown-menu (button/field trigger)\n\t * - \"context\"  → @radix-ui/react-context-menu (right-click trigger)\n\t * - \"static\"   → plain HTML via Slot (VerticalMenu, always-visible)\n\t */\n\tmenuPrimitive: MenuPrimitive;\n\t/**\n\t * Whether the menu popup is currently open.\n\t * Used by MenuContent to drive AnimatePresence for exit animations.\n\t */\n\topen: boolean;\n\t/** Setter forwarded from Menu root — kept in sync with Radix Root open state */\n\tonOpenChange: (open: boolean) => void;\n}\n\n// ─── Backward-compat derived getter ───────────────────────────────────────────\n// Components that still reference `isStatic` (MenuGroup, etc.) use this helper\n// during the incremental migration period.\nexport function isStaticPrimitive(primitive: MenuPrimitive): boolean {\n\treturn primitive === \"static\";\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nconst MenuContext = React.createContext<MenuContextValue>({\n\tvariant: \"baseline\",\n\tcolorVariant: \"standard\",\n\tdensity: 0,\n\tmenuPrimitive: \"dropdown\",\n\topen: false,\n\tonOpenChange: () => {},\n});\n\n// ─── Provider ─────────────────────────────────────────────────────────────────\n\nexport interface MenuProviderProps {\n\tvariant?: MenuVariant;\n\tcolorVariant?: MenuColorVariant;\n\tdensity?: MenuDensity;\n\tmenuPrimitive?: MenuPrimitive;\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tchildren: React.ReactNode;\n}\n\nexport function MenuProvider({\n\tvariant = \"baseline\",\n\tcolorVariant = \"standard\",\n\tdensity = 0,\n\tmenuPrimitive = \"dropdown\",\n\topen,\n\tonOpenChange,\n\tchildren,\n}: MenuProviderProps) {\n\tconst value = React.useMemo<MenuContextValue>(\n\t\t() => ({\n\t\t\tvariant,\n\t\t\tcolorVariant,\n\t\t\tdensity,\n\t\t\tmenuPrimitive,\n\t\t\topen,\n\t\t\tonOpenChange,\n\t\t}),\n\t\t[variant, colorVariant, density, menuPrimitive, open, onOpenChange],\n\t);\n\n\treturn <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\n/**\n * Returns the nearest MenuContext value.\n * Safe to use outside a MenuProvider (returns default: baseline, dropdown, closed).\n *\n * Includes backward-compat shims:\n * - `menuVariant` → alias for `variant` (deprecated, will be removed)\n * - `isStatic`    → `menuPrimitive === \"static\"`\n */\nexport function useMenuContext(): MenuContextValue & {\n\tisStatic: boolean;\n\tmenuVariant: MenuVariant;\n} {\n\tconst ctx = React.useContext(MenuContext);\n\t// Return ctx reference directly — avoids creating a new object every render.\n\t// Shims are computed as getters so they don't need a wrapper object.\n\treturn React.useMemo(\n\t\t() =>\n\t\t\tObject.assign(ctx, {\n\t\t\t\tget isStatic() {\n\t\t\t\t\treturn ctx.menuPrimitive === \"static\";\n\t\t\t\t},\n\t\t\t\tget menuVariant() {\n\t\t\t\t\treturn ctx.variant;\n\t\t\t\t},\n\t\t\t}),\n\t\t[ctx],\n\t);\n}\n","// ─── MD3 Expressive Menu — Design Token Constants ─────────────────────────────\n// Sourced from: SegmentedMenuTokens.kt, StandardMenuTokens.kt, VibrantMenuTokens.kt,\n//               MenuTokens.kt, MenuDefaults.kt, ListTokens.kt\n\nimport { cornerRadius } from \"@bug-on/m3-tokens\";\n\n// ─── Spacing (px → dp) ────────────────────────────────────────────────────────\n\n/** Horizontal padding for menu items: 16dp (ItemLeadingSpace / ItemTrailingSpace) */\nexport const MENU_ITEM_HORIZONTAL_PADDING = \"px-4\"; // 16dp\n\n/** Horizontal padding for baseline menu items: 12dp */\nexport const MENU_BASELINE_ITEM_HORIZONTAL_PADDING = \"px-3\"; // 12dp\n\n/** Min height for selectable items: 44dp (SegmentedMenuTokens.Item) */\nexport const MENU_ITEM_MIN_HEIGHT = \"min-h-11\"; // 44dp = 11 * 4px\n\n/** Min height for standard list items: 48dp (MenuListItemContainerHeight) */\nexport const MENU_LIST_ITEM_MIN_HEIGHT = \"min-h-12\"; // 48dp\n\n/** Min height classes mapped by density: 0 → 48dp, -2 → 40dp, -4 → 32dp */\nexport const DENSITY_MIN_HEIGHT: Record<0 | -2 | -4, string> = {\n\t0: \"min-h-12\",\n\t\"-2\": \"min-h-10\",\n\t\"-4\": \"min-h-8\",\n} as const;\n\n/** Min width of menu container: 112dp (DropdownMenuItemDefaultMinWidth) */\nexport const MENU_MIN_WIDTH = \"min-w-28\"; // 112dp\n\n/** Max width of menu container: 280dp (DropdownMenuItemDefaultMaxWidth) */\nexport const MENU_MAX_WIDTH = \"max-w-70\"; // 280dp\n\n/** Gap between MenuGroup segments: 2dp (SegmentedMenuTokens.SegmentedGap) */\nexport const MENU_GROUP_GAP = \"gap-0.5\"; // 2dp\n\n/** Internal group vertical padding: 4dp (DropdownMenuGroupVerticalPadding) */\nexport const MENU_GROUP_PADDING_Y = \"py-1\"; // 4dp\n\n/** Popup container vertical padding: 8dp (DropdownMenuVerticalPadding) */\nexport const MENU_POPUP_PADDING_Y = \"py-2\"; // 8dp\n\n/** Leading icon size: 20dp (SegmentedMenuTokens.ItemLeadingIconSize) */\nexport const MENU_ICON_SIZE = 20;\n\n// ─── Container Shape ──────────────────────────────────────────────────────────\n\n/**\n * Menu popup container shape: CornerExtraSmall = 4px.\n * Source: MenuTokens.ContainerShape = ShapeKeyTokens.CornerExtraSmall\n */\nexport const MENU_CONTAINER_SHAPE = \"rounded-[4px]\"; // CornerExtraSmall\n\n/**\n * Shape for Baseline menu item (no shape morphing, edge-to-edge state layer).\n */\nexport const BASELINE_ITEM_SHAPE = \"rounded-none\";\n\n// ─── Shape: CSS border-radius values (used with motion/react `animate`) ────────\n// These are used for animated shape morphing via Framer Motion's `borderRadius`\n// property — NOT as Tailwind classes (Tailwind cannot animate between values).\n\n/**\n * Shape values for MenuGroup container (borderRadius CSS shorthand string).\n * Format: \"topLeft topRight bottomRight bottomLeft\"\n *\n * Source: MenuDefaults.kt groupShape() + SegmentedMenuTokens/ShapeTokens\n * - ContainerShape (standalone) = CornerLarge (16px) all corners\n * - InactiveContainerShape = CornerSmall (8px) all corners\n * - Leading group: topStart=CornerLarge, topEnd=CornerLarge, bottomStart=CornerSmall, bottomEnd=CornerSmall\n * - Middle group: GroupShape = CornerSmall (8px)\n * - Trailing group: topStart=CornerSmall, topEnd=CornerSmall, bottomStart=CornerLarge, bottomEnd=CornerLarge\n */\nexport const GROUP_SHAPES = {\n\t/** Active standalone group shape: CornerLarge all corners (16px) */\n\tstandaloneActive: `${cornerRadius.large}px`,\n\t/**\n\t * Active leading group shape: top=CornerLarge(16px), bottom=CornerSmall(8px)\n\t * Source: SegmentedMenuTokens — LeadingContainerShape:\n\t * topStart=CornerLarge, topEnd=CornerLarge, bottomStart=CornerSmall, bottomEnd=CornerSmall\n\t */\n\tleadingActive: `${cornerRadius.large}px ${cornerRadius.large}px ${cornerRadius.small}px ${cornerRadius.small}px`,\n\t/** Active middle group shape: CornerExtraSmall all corners (4px) */\n\tmiddleActive: `${cornerRadius.extraSmall}px`,\n\t/**\n\t * Active trailing group shape: top=CornerSmall(8px), bottom=CornerLarge(16px)\n\t * Source: SegmentedMenuTokens — TrailingContainerShape:\n\t * topStart=CornerSmall, topEnd=CornerSmall, bottomStart=CornerLarge, bottomEnd=CornerLarge\n\t */\n\ttrailingActive: `${cornerRadius.small}px ${cornerRadius.small}px ${cornerRadius.large}px ${cornerRadius.large}px`,\n\t/** Inactive (default, pre-hover) shape for all groups: CornerExtraSmall (4px) */\n\tinactive: `${cornerRadius.extraSmall}px`,\n} as const;\n\n/**\n * Shape values for MenuItem (borderRadius CSS shorthand string).\n * Used as Tailwind classes via arbitrary values for static rendering.\n * Animated shape (selected ↔ unselected) is handled via `transition-[border-radius]`.\n *\n * Source: MenuDefaults.kt itemShape() + SegmentedMenuTokens/ShapeTokens\n * - leading item: topStart/topEnd=CornerMedium(12px), bottomStart/bottomEnd=CornerExtraSmall(4px)\n * - middle item: CornerExtraSmall all (ItemShape = 4px)\n * - trailing item: topStart/topEnd=CornerExtraSmall(4px), bottomStart/bottomEnd=CornerMedium(12px)\n * - standalone item: same as middle (ItemShape = 4px)\n * - selected (all positions): CornerMedium all (ItemSelectedShape = 12px)\n */\nexport const ITEM_SHAPE_CLASSES = {\n\tleading: \"rounded-t-[12px] rounded-b-[4px]\",\n\tmiddle: \"rounded-[4px]\",\n\ttrailing: \"rounded-t-[4px] rounded-b-[12px]\",\n\tstandalone: \"rounded-[12px]\",\n\tselected: \"rounded-[12px]\",\n} as const;\n\n// ─── Color token Tailwind classes ─────────────────────────────────────────────\n\n/**\n * Standard color variant tokens (SurfaceContainerLow-based).\n * Source: StandardMenuTokens.kt\n *\n * Container: SurfaceContainerLow\n * Text: OnSurface\n * Icons: OnSurfaceVariant\n * Selected container: TertiaryContainer\n * Selected text/icons: OnTertiaryContainer\n */\nexport const STANDARD_COLORS = {\n\t/** Group/popup container background (StandardMenuTokens.ContainerColor) */\n\tcontainerBg: \"bg-m3-surface-container-low\",\n\t/** Label text color (StandardMenuTokens.ItemLabelTextColor) */\n\tlabelText: \"text-m3-on-surface\",\n\t/** Leading/trailing icon color (StandardMenuTokens.ItemLeadingIconColor) */\n\ticonColor: \"text-m3-on-surface-variant\",\n\t/** Supporting text below label (StandardMenuTokens.ItemSupportingTextColor) */\n\tsupportingTextColor: \"text-m3-on-surface-variant\",\n\t/** Trailing supporting text (StandardMenuTokens.ItemTrailingSupportingTextColor) */\n\ttrailingSupportingTextColor: \"text-m3-on-surface-variant\",\n\t/** Trailing icon color (StandardMenuTokens.ItemTrailingIconColor) */\n\ttrailingIconColor: \"text-m3-on-surface-variant\",\n\t/** Hover state layer (OnSurface @ 8% opacity) */\n\thoverLayer: \"hover:bg-m3-on-surface/8 data-[highlighted]:bg-m3-on-surface/8\",\n\t/** Focus state layer (OnSurface @ 12% opacity) */\n\tfocusLayer: \"focus:bg-m3-on-surface/12 data-[highlighted]:bg-m3-on-surface/8\",\n\t/** Selected item background (StandardMenuTokens.ItemSelectedContainerColor) */\n\tselectedBg: \"bg-m3-tertiary-container\",\n\t/** Selected item text (StandardMenuTokens.ItemSelectedLabelTextColor) */\n\tselectedText: \"text-m3-on-tertiary-container\",\n\t/** Selected item icon (StandardMenuTokens.ItemSelectedLeadingIconColor) */\n\tselectedIcon: \"text-m3-on-tertiary-container\",\n\t/** Disabled opacity: 38% (StandardMenuTokens.ItemDisabledLabelTextOpacity) */\n\tdisabledOpacity: \"data-disabled:opacity-[0.38]\",\n} as const;\n\n/**\n * Baseline color variant tokens.\n * Container uses SurfaceContainer, Selected uses SecondaryContainer.\n */\nexport const BASELINE_COLORS = {\n\tcontainerBg: \"bg-m3-surface-container\",\n\tlabelText: \"text-m3-on-surface\",\n\ticonColor: \"text-m3-on-surface-variant\",\n\tsupportingTextColor: \"text-m3-on-surface-variant\",\n\ttrailingSupportingTextColor: \"text-m3-on-surface-variant\",\n\ttrailingIconColor: \"text-m3-on-surface-variant\",\n\thoverLayer: \"hover:bg-m3-on-surface/8 data-[highlighted]:bg-m3-on-surface/8\",\n\tfocusLayer: \"focus:bg-m3-on-surface/12 data-[highlighted]:bg-m3-on-surface/8\",\n\tselectedBg: \"bg-m3-secondary-container\",\n\tselectedText: \"text-m3-on-secondary-container\",\n\tselectedIcon: \"text-m3-on-secondary-container\",\n\tdisabledOpacity: \"data-disabled:opacity-[0.38]\",\n} as const;\n\n/**\n * Vibrant color variant tokens (TertiaryContainer-based).\n * Source: VibrantMenuTokens.kt\n *\n * Container: TertiaryContainer\n * Text: OnTertiaryContainer\n * Icons: OnTertiaryContainer\n * Selected container: Tertiary\n * Selected text/icons: OnTertiary\n */\nexport const VIBRANT_COLORS = {\n\t/** Group/popup container background (VibrantMenuTokens.ContainerColor) */\n\tcontainerBg: \"bg-m3-tertiary-container\",\n\t/** Label text color (VibrantMenuTokens.ItemLabelTextColor) */\n\tlabelText: \"text-m3-on-tertiary-container\",\n\t/** Leading/trailing icon color (VibrantMenuTokens.ItemLeadingIconColor) */\n\ticonColor: \"text-m3-on-tertiary-container\",\n\t/** Supporting text below label (VibrantMenuTokens.ItemSupportingTextColor) */\n\tsupportingTextColor: \"text-m3-on-tertiary-container\",\n\t/** Trailing supporting text (VibrantMenuTokens.ItemTrailingSupportingTextColor) */\n\ttrailingSupportingTextColor: \"text-m3-on-tertiary-container\",\n\t/** Trailing icon color (VibrantMenuTokens.ItemTrailingIconColor) */\n\ttrailingIconColor: \"text-m3-on-tertiary-container\",\n\t/** Hover state layer (OnTertiaryContainer @ 8% opacity) */\n\thoverLayer:\n\t\t\"hover:bg-m3-on-tertiary-container/8 data-[highlighted]:bg-m3-on-tertiary-container/8\",\n\t/** Focus state layer (OnTertiaryContainer @ 12% opacity) */\n\tfocusLayer:\n\t\t\"focus:bg-m3-on-tertiary-container/12 data-[highlighted]:bg-m3-on-tertiary-container/8\",\n\t/** Selected item background (VibrantMenuTokens.ItemSelectedContainerColor = Tertiary) */\n\tselectedBg: \"bg-m3-tertiary\",\n\t/** Selected item text (VibrantMenuTokens.ItemSelectedLabelTextColor = OnTertiary) */\n\tselectedText: \"text-m3-on-tertiary\",\n\t/** Selected item icon (VibrantMenuTokens.ItemSelectedLeadingIconColor = OnTertiary) */\n\tselectedIcon: \"text-m3-on-tertiary\",\n\t/** Disabled opacity: 38% (VibrantMenuTokens.ItemDisabledLabelTextOpacity) */\n\tdisabledOpacity: \"data-disabled:opacity-[0.38]\",\n} as const;\n\n// ─── Divider ──────────────────────────────────────────────────────────────────\n\n/**\n * HorizontalDivider padding: horizontal=12dp, vertical=2dp.\n * Source: MenuDefaults.HorizontalDividerPadding\n */\nexport const DIVIDER_PADDING = \"mx-3 my-0.5\"; // 12dp horizontal, 2dp vertical\nexport const DIVIDER_COLOR = \"bg-m3-outline-variant\";\n","// ─── MD3 Expressive Menu — Shared Utilities ──────────────────────────────────\nimport * as React from \"react\";\n\n/**\n * Recursively flattens React.Fragment nodes and collects valid React elements.\n * Required before using `React.cloneElement`, which cannot be called on Fragment.\n */\nexport function flattenChildren(nodes: React.ReactNode): React.ReactElement[] {\n\treturn React.Children.toArray(nodes).reduce(\n\t\t(acc: React.ReactElement[], child) => {\n\t\t\tif (!React.isValidElement(child)) return acc;\n\t\t\tif (child.type === React.Fragment) {\n\t\t\t\treturn acc.concat(\n\t\t\t\t\tflattenChildren(\n\t\t\t\t\t\t(child as React.ReactElement<{ children?: React.ReactNode }>).props\n\t\t\t\t\t\t\t.children,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tacc.push(child as React.ReactElement);\n\t\t\treturn acc;\n\t\t},\n\t\t[],\n\t);\n}\n","// ─── MD3 Expressive Menu — Root (Menu, MenuTrigger, MenuContent) ─────────────\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { MENU_CONTAINER_VARIANTS } from \"./menu-animations\";\nimport { MenuProvider, useMenuContext } from \"./menu-context\";\nimport {\n\tBASELINE_COLORS,\n\tMENU_CONTAINER_SHAPE,\n\tMENU_GROUP_GAP,\n\tMENU_MAX_WIDTH,\n\tMENU_MIN_WIDTH,\n\tMENU_POPUP_PADDING_Y,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tMenuContentProps,\n\tMenuGroupProps,\n\tMenuItemPosition,\n\tMenuItemProps,\n\tMenuProps,\n\tMenuTriggerProps,\n} from \"./menu-types\";\nimport { flattenChildren } from \"./menu-utils\";\n\n// ─── Menu (Root) ──────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Menu root component.\n *\n * Wraps Radix `DropdownMenu.Root` and provides `MenuContext` with `colorVariant`\n * and `open` state to all descendant MenuItem and MenuGroup components.\n *\n * @example\n * <Menu colorVariant=\"standard\">\n *   <MenuTrigger asChild>\n *     <IconButton name=\"more_vert\" />\n *   </MenuTrigger>\n *   <MenuContent>\n *     <MenuGroup index={0} count={2}>\n *       <MenuItem>Cut</MenuItem>\n *       <MenuItem>Copy</MenuItem>\n *     </MenuGroup>\n *     <MenuGroup index={1} count={2}>\n *       <MenuItem>Paste</MenuItem>\n *     </MenuGroup>\n *   </MenuContent>\n * </Menu>\n */\nexport function Menu({\n\tchildren,\n\tvariant,\n\tmenuVariant,\n\tcolorVariant = \"standard\",\n\tdensity = 0,\n\topen: controlledOpen,\n\tonOpenChange: controlledOnOpenChange,\n\tdefaultOpen,\n\t...props\n}: MenuProps &\n\tOmit<React.ComponentPropsWithoutRef<typeof DropdownMenu.Root>, \"children\">) {\n\t// Support deprecated menuVariant prop\n\tconst resolvedVariant = variant ?? menuVariant ?? \"baseline\";\n\n\t// Support both controlled and uncontrolled open state.\n\t// Initialize internalOpen from defaultOpen so that `defaultOpen={true}` works.\n\tconst [internalOpen, setInternalOpen] = React.useState(\n\t\t() => defaultOpen ?? false,\n\t);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : internalOpen;\n\n\tconst handleOpenChange = React.useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (!isControlled) setInternalOpen(next);\n\t\t\tcontrolledOnOpenChange?.(next);\n\t\t},\n\t\t[isControlled, controlledOnOpenChange],\n\t);\n\n\treturn (\n\t\t<MenuProvider\n\t\t\tvariant={resolvedVariant}\n\t\t\tcolorVariant={colorVariant}\n\t\t\tdensity={density}\n\t\t\topen={open}\n\t\t\tonOpenChange={handleOpenChange}\n\t\t>\n\t\t\t<DropdownMenu.Root\n\t\t\t\t{...props}\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\topen={isControlled ? open : undefined}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</DropdownMenu.Root>\n\t\t</MenuProvider>\n\t);\n}\nMenu.displayName = \"Menu\";\n\n// ─── MenuTrigger ──────────────────────────────────────────────────────────────\n\n/**\n * The trigger element that opens/closes the Menu.\n *\n * Use `asChild` to merge trigger behavior with your own element (e.g. a Button or IconButton).\n */\nexport const MenuTrigger = React.forwardRef<\n\tReact.ComponentRef<typeof DropdownMenu.Trigger>,\n\tMenuTriggerProps & React.ComponentPropsWithoutRef<typeof DropdownMenu.Trigger>\n>(({ children, asChild = true, ...props }, ref) => (\n\t<DropdownMenu.Trigger ref={ref} asChild={asChild} {...props}>\n\t\t{children}\n\t</DropdownMenu.Trigger>\n));\nMenuTrigger.displayName = \"MenuTrigger\";\n\n// ─── MenuContent (popup panel) ────────────────────────────────────────────────\n\n/**\n * The popup container for the menu's contents.\n *\n * Renders into a portal. Uses Radix `forceMount` + Framer Motion `AnimatePresence`\n * so the exit animation (scale + opacity via FastEffects) plays before the portal\n * unmounts. The `open` state is read from `MenuContext`.\n *\n * Transform-origin is automatically set via the Radix CSS variable\n * `--radix-dropdown-menu-content-transform-origin`.\n *\n * @param hasOverflow - Set true when using SubMenu to prevent clipping\n */\nexport const MenuContent = React.forwardRef<\n\tReact.ComponentRef<typeof DropdownMenu.Content>,\n\tMenuContentProps &\n\t\tOmit<React.ComponentPropsWithoutRef<typeof DropdownMenu.Content>, \"asChild\">\n>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tsideOffset = 6,\n\t\t\tside = \"bottom\",\n\t\t\talign = \"start\",\n\t\t\thasOverflow = false,\n\t\t\tcolorVariant: propColorVariant,\n\t\t\tseparatorStyle = \"gap\",\n\t\t\tmatchTriggerWidth = false,\n\t\t\tmaxHeight = \"360px\",\n\t\t\tviewportRef,\n\t\t\tonViewportRef,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\topen,\n\t\t\tvariant,\n\t\t\tcolorVariant: contextColorVariant,\n\t\t} = useMenuContext();\n\t\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\n\t\t// Baseline always uses baseline colors; expressive uses colorVariant\n\t\tconst colors =\n\t\t\tvariant === \"baseline\"\n\t\t\t\t? BASELINE_COLORS\n\t\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t\t? VIBRANT_COLORS\n\t\t\t\t\t: STANDARD_COLORS;\n\n\t\tconst isExpressiveGap =\n\t\t\tvariant === \"expressive\" && separatorStyle === \"gap\";\n\n\t\tconst setViewportNode = React.useCallback(\n\t\t\t(node: HTMLDivElement | null) => {\n\t\t\t\tif (typeof viewportRef === \"function\") {\n\t\t\t\t\tviewportRef(node);\n\t\t\t\t} else if (viewportRef && typeof viewportRef === \"object\") {\n\t\t\t\t\t(\n\t\t\t\t\t\tviewportRef as React.MutableRefObject<HTMLDivElement | null>\n\t\t\t\t\t).current = node;\n\t\t\t\t}\n\t\t\t\tonViewportRef?.(node);\n\t\t\t},\n\t\t\t[viewportRef, onViewportRef],\n\t\t);\n\n\t\t// Memoize containerClassName — cn() is expensive and inputs rarely change\n\t\tconst containerClassName = React.useMemo(() => {\n\t\t\tconst widthClass = matchTriggerWidth\n\t\t\t\t? \"w-[var(--radix-dropdown-menu-trigger-width)]\"\n\t\t\t\t: cn(MENU_MIN_WIDTH, MENU_MAX_WIDTH);\n\n\t\t\treturn variant === \"expressive\"\n\t\t\t\t? cn(\n\t\t\t\t\t\t\"z-50 flex flex-col\",\n\t\t\t\t\t\twidthClass,\n\t\t\t\t\t\tisExpressiveGap ? MENU_GROUP_GAP : \"\",\n\t\t\t\t\t\tisExpressiveGap ? \"bg-transparent\" : colors.containerBg,\n\t\t\t\t\t\tisExpressiveGap ? \"\" : \"p-1\",\n\t\t\t\t\t\tisExpressiveGap ? \"\" : \"rounded-2xl\",\n\t\t\t\t\t\tisExpressiveGap ? \"\" : \"elevation-2\",\n\t\t\t\t\t\thasOverflow || isExpressiveGap\n\t\t\t\t\t\t\t? \"overflow-visible\"\n\t\t\t\t\t\t\t: \"overflow-hidden\",\n\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)\n\t\t\t\t: cn(\n\t\t\t\t\t\t\"z-50 flex flex-col\",\n\t\t\t\t\t\twidthClass,\n\t\t\t\t\t\tMENU_POPUP_PADDING_Y,\n\t\t\t\t\t\tMENU_GROUP_GAP,\n\t\t\t\t\t\tcolors.containerBg,\n\t\t\t\t\t\tMENU_CONTAINER_SHAPE,\n\t\t\t\t\t\t\"elevation-2\",\n\t\t\t\t\t\thasOverflow ? \"overflow-visible\" : \"overflow-hidden\",\n\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t);\n\t\t}, [\n\t\t\tvariant,\n\t\t\tisExpressiveGap,\n\t\t\thasOverflow,\n\t\t\tmatchTriggerWidth,\n\t\t\tclassName,\n\t\t\tcolors.containerBg,\n\t\t]);\n\n\t\t// Memoize child processing — flattenChildren + cloneElement + optional reduce\n\t\tconst renderedChildren = React.useMemo(() => {\n\t\t\tif (variant !== \"expressive\") return children;\n\n\t\t\tconst validChildren = flattenChildren(children);\n\t\t\tconst groupCount = validChildren.length;\n\n\t\t\tconst enhanced = validChildren.map((child, i) => {\n\t\t\t\tif (typeof child.type === \"string\") return child;\n\n\t\t\t\tconst defaultItemPosition: MenuItemPosition =\n\t\t\t\t\tgroupCount === 1\n\t\t\t\t\t\t? \"standalone\"\n\t\t\t\t\t\t: i === 0\n\t\t\t\t\t\t\t? \"leading\"\n\t\t\t\t\t\t\t: i === groupCount - 1\n\t\t\t\t\t\t\t\t? \"trailing\"\n\t\t\t\t\t\t\t\t: \"middle\";\n\n\t\t\t\tconst itemPosition =\n\t\t\t\t\t(child.props as MenuItemProps).itemPosition ?? defaultItemPosition;\n\n\t\t\t\treturn React.cloneElement(\n\t\t\t\t\tchild as React.ReactElement<MenuGroupProps & MenuItemProps>,\n\t\t\t\t\t{\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tcount: groupCount,\n\t\t\t\t\t\titemPosition,\n\t\t\t\t\t\tisGapVariant: isExpressiveGap,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tif (separatorStyle !== \"divider\") return enhanced;\n\n\t\t\treturn enhanced.reduce<React.ReactNode[]>((acc, child, i) => {\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tacc.push(\n\t\t\t\t\t\t<hr\n\t\t\t\t\t\t\tkey={`divider-${(child as React.ReactElement).key || i}`}\n\t\t\t\t\t\t\tclassName={cn(\"mx-3 my-0.5 h-px border-0 bg-m3-outline-variant\")}\n\t\t\t\t\t\t/>,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tacc.push(child);\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\t\t}, [children, variant, isExpressiveGap, separatorStyle]);\n\n\t\treturn (\n\t\t\t<AnimatePresence>\n\t\t\t\t{open && (\n\t\t\t\t\t<DropdownMenu.Portal forceMount>\n\t\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsideOffset={sideOffset}\n\t\t\t\t\t\t\tside={side}\n\t\t\t\t\t\t\talign={align}\n\t\t\t\t\t\t\tasChild\n\t\t\t\t\t\t\tforceMount\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\trole=\"menu\"\n\t\t\t\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\tvariants={MENU_CONTAINER_VARIANTS}\n\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(props.style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\t\t\t\"var(--radix-dropdown-menu-content-transform-origin)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hasOverflow || !maxHeight ? (\n\t\t\t\t\t\t\t\t\trenderedChildren\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\t\t\t\tstyle={{ maxHeight }}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full flex-1 min-h-0\"\n\t\t\t\t\t\t\t\t\t\tviewportRef={setViewportNode}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderedChildren}\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\t},\n);\nMenuContent.displayName = \"MenuContent\";\n","// ─── MD3 Expressive Menu — MenuItem ─────────────────────────────────────────\n// Shape morphing + Standard/Vibrant color variants + selection state\n// Animation: only selectable items animate the leading icon slot\nimport * as ContextMenu from \"@radix-ui/react-context-menu\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../icon\";\nimport { CHECK_ICON_VARIANTS, MENU_CHECK_ICON_SIZE } from \"./menu-animations\";\nimport { useMenuContext } from \"./menu-context\";\nimport {\n\tBASELINE_COLORS,\n\tBASELINE_ITEM_SHAPE,\n\tDENSITY_MIN_HEIGHT,\n\tITEM_SHAPE_CLASSES,\n\tMENU_BASELINE_ITEM_HORIZONTAL_PADDING,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tMenuItemPosition,\n\tMenuItemProps,\n\tMenuVariant,\n} from \"./menu-types\";\n\n// ─── Shape helper ─────────────────────────────────────────────────────────────\n\nfunction getItemShapeClass(\n\tposition: MenuItemPosition,\n\tselected: boolean,\n\tisStatic: boolean = false,\n\tmenuVariant: MenuVariant = \"expressive\",\n): string {\n\tif (menuVariant === \"baseline\") return BASELINE_ITEM_SHAPE;\n\tif (selected) return ITEM_SHAPE_CLASSES.selected;\n\t// Vertical Menu standalone items have 12px border radius\n\tif (isStatic && position === \"standalone\") return \"rounded-[12px]\";\n\treturn ITEM_SHAPE_CLASSES[position];\n}\n\n// ─── MenuItem ─────────────────────────────────────────────────────────────────\n\n/**\n * An interactive item within a Menu or MenuGroup.\n *\n * ### Shape morphing\n * `itemPosition` (auto-set by MenuGroup) controls border-radius. When `selected=true`,\n * shape overrides to `CornerMedium (12px)` with a CSS transition.\n *\n * ### Leading icon animation\n * - **Selectable items** (`selected` prop defined): `AnimatePresence` swaps between\n *   a check icon and the user `leadingIcon` using FastSpatial expand + FastEffects fade.\n * - **Static items** (`selected` prop undefined): `leadingIcon` renders at fixed width\n *   with no enter/exit animation (matches Android's static rendering).\n *\n * ### Selected state\n * Container color transitions with `transition-colors duration-150` (maps to\n * Android's `animateColorAsState` with `FastEffects` spec).\n */\nexport const MenuItem = React.forwardRef<HTMLDivElement, MenuItemProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tleadingIcon,\n\t\t\ttrailingIcon,\n\t\t\tsupportingText,\n\t\t\ttrailingText,\n\t\t\tselected,\n\t\t\tdisabled = false,\n\t\t\titemPosition = \"standalone\",\n\t\t\tcolorVariant: propColorVariant,\n\t\t\tdensity: propDensity,\n\t\t\tkeepOpen = false,\n\t\t\tclassName,\n\t\t\tisSubTrigger,\n\t\t\tvalue,\n\t\t\trole,\n\t\t\tisGapVariant: _isGapVariant,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tmenuVariant,\n\t\t\tcolorVariant: contextColorVariant,\n\t\t\tdensity: contextDensity,\n\t\t\tmenuPrimitive,\n\t\t} = useMenuContext();\n\t\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\t\tconst density = propDensity ?? contextDensity ?? 0;\n\t\tconst minHeightClass = DENSITY_MIN_HEIGHT[density];\n\n\t\tconst colors =\n\t\t\tmenuVariant === \"baseline\"\n\t\t\t\t? BASELINE_COLORS\n\t\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t\t? VIBRANT_COLORS\n\t\t\t\t\t: STANDARD_COLORS;\n\n\t\tconst isStaticMenu = menuPrimitive === \"static\";\n\t\tconst shapeClass = getItemShapeClass(\n\t\t\titemPosition,\n\t\t\t!!selected,\n\t\t\tisStaticMenu,\n\t\t\tmenuVariant,\n\t\t);\n\n\t\t// A selectable item is one where `selected` prop is explicitly passed\n\t\t// (even if false). Non-selectable items do not animate the leading slot.\n\t\tconst isSelectable = selected !== undefined && !isSubTrigger;\n\n\t\t// Determine which Radix primitive to use based on selection state and role\n\t\tconst isCheckbox =\n\t\t\trole === \"menuitemcheckbox\" ||\n\t\t\t(selected !== undefined && !role && !isSubTrigger);\n\t\tconst isRadio = role === \"menuitemradio\";\n\n\t\t// Select the correct Radix primitive based on which menu family is active.\n\t\t// static  → Slot (plain HTML, manages own ARIA)\n\t\t// context → @radix-ui/react-context-menu primitives\n\t\t// dropdown (default) → @radix-ui/react-dropdown-menu primitives\n\t\tconst ItemPrimitive =\n\t\t\tisStaticMenu || isSubTrigger\n\t\t\t\t? Slot\n\t\t\t\t: menuPrimitive === \"context\"\n\t\t\t\t\t? ((isCheckbox\n\t\t\t\t\t\t\t? ContextMenu.CheckboxItem\n\t\t\t\t\t\t\t: isRadio\n\t\t\t\t\t\t\t\t? ContextMenu.RadioItem\n\t\t\t\t\t\t\t\t: ContextMenu.Item) as React.ElementType)\n\t\t\t\t\t: ((isCheckbox\n\t\t\t\t\t\t\t? DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t: isRadio\n\t\t\t\t\t\t\t\t? DropdownMenu.RadioItem\n\t\t\t\t\t\t\t\t: DropdownMenu.Item) as React.ElementType);\n\n\t\treturn (\n\t\t\t<ItemPrimitive\n\t\t\t\tref={ref}\n\t\t\t\t{...(isStaticMenu || isSubTrigger\n\t\t\t\t\t? {\n\t\t\t\t\t\t\trole:\n\t\t\t\t\t\t\t\trole ||\n\t\t\t\t\t\t\t\t(isCheckbox\n\t\t\t\t\t\t\t\t\t? \"menuitemcheckbox\"\n\t\t\t\t\t\t\t\t\t: isRadio\n\t\t\t\t\t\t\t\t\t\t? \"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t: \"menuitem\"),\n\t\t\t\t\t\t\t\"aria-checked\": isCheckbox || isRadio ? !!selected : undefined,\n\t\t\t\t\t\t\t\"aria-disabled\": disabled ? true : undefined,\n\t\t\t\t\t\t\ttabIndex: disabled ? -1 : 0,\n\t\t\t\t\t\t\tonKeyDown: (e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\tonClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonClick,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t\tonSelect: keepOpen ? (e: Event) => e.preventDefault() : undefined,\n\t\t\t\t\t\t\tonClick,\n\t\t\t\t\t\t\t...(isCheckbox || isRadio ? { checked: !!selected } : {}),\n\t\t\t\t\t\t\t...(isRadio ? { value: value ?? \"\" } : {}),\n\t\t\t\t\t\t\tasChild: true,\n\t\t\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\t// Role provided by Radix primitives via asChild, or manually set when static\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// Layout\n\t\t\t\t\t\t\"relative flex w-full cursor-pointer select-none items-center outline-none\",\n\t\t\t\t\t\t// Sizing: min-h based on density (48dp, 40dp, 32dp), min-w 112dp\n\t\t\t\t\t\tminHeightClass,\n\t\t\t\t\t\t\"min-w-28\",\n\t\t\t\t\t\t// Horizontal padding\n\t\t\t\t\t\tmenuVariant === \"baseline\"\n\t\t\t\t\t\t\t? MENU_BASELINE_ITEM_HORIZONTAL_PADDING\n\t\t\t\t\t\t\t: \"px-4\",\n\t\t\t\t\t\t// Shape morphing (position-based + selected override)\n\t\t\t\t\t\tshapeClass,\n\t\t\t\t\t\t// Animate border-radius AND background-color together (FastEffects: 150ms)\n\t\t\t\t\t\t\"transition-[border-radius,background-color] duration-150 ease-in\",\n\t\t\t\t\t\t// Colors based on variant + selection\n\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t? cn(colors.selectedBg, colors.selectedText)\n\t\t\t\t\t\t\t: cn(colors.labelText),\n\t\t\t\t\t\t// State layers (only on unselected items)\n\t\t\t\t\t\t!selected && colors.hoverLayer,\n\t\t\t\t\t\t!selected && colors.focusLayer,\n\t\t\t\t\t\t// Focus visible ring (WCAG 2.4.11 — visible focus indicator)\n\t\t\t\t\t\t// Uses ring-inset so the ring doesn't overflow the item bounds.\n\t\t\t\t\t\t\"focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-m3-secondary data-highlighted:ring-0\",\n\t\t\t\t\t\t// Disabled\n\t\t\t\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...rest}\n\t\t\t\t>\n\t\t\t\t\t{/* ── Leading slot ── */}\n\t\t\t\t\t{(isSelectable || leadingIcon) && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"flex h-5 w-5 shrink-0 items-center justify-center mr-3\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isSelectable ? (\n\t\t\t\t\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t\t\t\t\t{selected ? (\n\t\t\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"check\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex h-full w-full items-center justify-center overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolors.selectedIcon,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tvariants={CHECK_ICON_VARIANTS}\n\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"check\" fill={1} size={MENU_CHECK_ICON_SIZE} />\n\t\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t\t) : leadingIcon ? (\n\t\t\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex h-full w-full items-center justify-center overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolors.iconColor,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tvariants={CHECK_ICON_VARIANTS}\n\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{leadingIcon}\n\t\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t// Spacer for selectable items with no icon, to keep text aligned\n\t\t\t\t\t\t\t\t\t\t<div className=\"w-5\" />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t// Static icon for non-selectable items\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex h-full w-full items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\tcolors.iconColor,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{leadingIcon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* ── Label + Supporting Text ── */}\n\t\t\t\t\t<span className=\"flex flex-1 flex-col\">\n\t\t\t\t\t\t<span className=\"text-body-large leading-snug\">{children}</span>\n\t\t\t\t\t\t{supportingText && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-body-medium leading-snug\",\n\t\t\t\t\t\t\t\t\t// Source: StandardMenuTokens.ItemSupportingTextColor / VibrantMenuTokens\n\t\t\t\t\t\t\t\t\tselected ? colors.selectedText : colors.supportingTextColor,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{supportingText}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t{/* ── Trailing: shortcut text OR trailing icon ── */}\n\t\t\t\t\t{(trailingText || trailingIcon) && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t// Minimum 12dp gap from label column (ListTokens)\n\t\t\t\t\t\t\t\t\"ml-3 flex shrink-0 items-center\",\n\t\t\t\t\t\t\t\t// Source: StandardMenuTokens.ItemTrailingIconColor / VibrantMenuTokens\n\t\t\t\t\t\t\t\tselected ? colors.selectedText : colors.trailingIconColor,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-hidden={trailingIcon ? \"true\" : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingText ? (\n\t\t\t\t\t\t\t\t<span className=\"text-label-small tracking-wider\">\n\t\t\t\t\t\t\t\t\t{trailingText}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\ttrailingIcon\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</ItemPrimitive>\n\t\t);\n\t},\n);\nMenuItem.displayName = \"MenuItem\";\n","export function easeInOutCubic(x: number): number {\n\treturn x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\nexport function generateWavyCircularPath(\n\tcenter: number,\n\tradius: number,\n\tamplitude: number,\n\twavelength: number,\n\tphase = 0,\n): string {\n\tconst circumference = 2 * Math.PI * radius;\n\tconst numWaves = Math.max(\n\t\t3,\n\t\tMath.round(circumference / Math.max(1, wavelength)),\n\t);\n\tconst steps = numWaves * 4;\n\tconst dt = (2 * Math.PI) / steps;\n\n\tconst rAt = (t: number) =>\n\t\tradius + amplitude * Math.sin(numWaves * t + phase);\n\tconst drAt = (t: number) =>\n\t\tamplitude * numWaves * Math.cos(numWaves * t + phase);\n\tconst xAt = (t: number) => center + rAt(t) * Math.cos(t);\n\tconst yAt = (t: number) => center + rAt(t) * Math.sin(t);\n\tconst dxAt = (t: number) => drAt(t) * Math.cos(t) - rAt(t) * Math.sin(t);\n\tconst dyAt = (t: number) => drAt(t) * Math.sin(t) + rAt(t) * Math.cos(t);\n\n\tlet d = \"\";\n\tconst tStart = 0;\n\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst t0 = tStart + i * dt;\n\t\tconst t1 = tStart + (i + 1) * dt;\n\n\t\tconst scale = dt / 3;\n\t\tconst cp1x = xAt(t0) + scale * dxAt(t0);\n\t\tconst cp1y = yAt(t0) + scale * dyAt(t0);\n\t\tconst cp2x = xAt(t1) - scale * dxAt(t1);\n\t\tconst cp2y = yAt(t1) - scale * dyAt(t1);\n\n\t\tif (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;\n\t}\n\treturn `${d} Z`;\n}\n\nexport function getSinePath(\n\tstartX: number,\n\tendX: number,\n\tphase: number,\n\twl: number,\n\tamp: number,\n): string {\n\tif (startX >= endX) return \"\";\n\tif (amp <= 0.01) {\n\t\treturn `M ${startX.toFixed(2)} 0 L ${endX.toFixed(2)} 0`;\n\t}\n\n\tconst safeWl = Math.max(1, wl);\n\tconst k = (2 * Math.PI) / safeWl;\n\tconst phi = (phase / safeWl) * 2 * Math.PI;\n\n\tconst yAt = (x: number) => amp * Math.sin(k * x + phi);\n\tconst dyAt = (x: number) => amp * k * Math.cos(k * x + phi);\n\n\tconst step = safeWl / 4; // 4 segments per wavelength for accurate sine wave\n\tlet d = `M ${startX.toFixed(2)} ${yAt(startX).toFixed(2)}`;\n\n\tlet currentX = startX;\n\twhile (currentX < endX) {\n\t\tconst nextX = Math.min(endX, currentX + step);\n\t\tconst dx = nextX - currentX;\n\t\tconst scale = dx / 3;\n\n\t\tconst y0 = yAt(currentX);\n\t\tconst dy0 = dyAt(currentX);\n\t\tconst y1 = yAt(nextX);\n\t\tconst dy1 = dyAt(nextX);\n\n\t\tconst cp1x = currentX + scale;\n\t\tconst cp1y = y0 + scale * dy0;\n\t\tconst cp2x = nextX - scale;\n\t\tconst cp2y = y1 - scale * dy1;\n\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${nextX.toFixed(2)} ${y1.toFixed(2)}`;\n\t\tcurrentX = nextX;\n\t}\n\n\treturn d;\n}\n","import {\n\tanimate,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseAnimationFrame,\n\tuseMotionValue,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CircularProgressProps } from \"./types\";\nimport { easeInOutCubic, generateWavyCircularPath } from \"./utils\";\n\n// --- M3 Kotlin Constants (from ProgressIndicator.kt) ---\n// Global rotation: 1080° (3 full turns) over 6 seconds, linear\nconst GLOBAL_ROTATION_DURATION = 6000;\nconst GLOBAL_ROTATION_TARGET = 1080;\n\n// Additional rotation: 90° stepped increments, 1.5s per cycle\n// Each cycle: ease during first 500ms, then hold for remaining 1000ms\nconst ADDITIONAL_ROTATION_CYCLE = 1500;\nconst ADDITIONAL_ROTATION_STEP = 90;\nconst ADDITIONAL_ROTATION_EASE_DURATION = 500;\n\n// Progress oscillation: arc fraction oscillates between min and max\nconst DEFAULT_MIN_PROGRESS = 0.1; // 36°\nconst DEFAULT_MAX_PROGRESS = 0.8; // 288°\nconst PROGRESS_CYCLE_DURATION = 1500; // 1.5s per half-cycle (grow or shrink)\n\nexport const CircularProgress = React.forwardRef<\n\tHTMLDivElement,\n\tCircularProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tsize = 48,\n\t\t\ttrackHeight = 4,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape = \"flat\",\n\t\t\tamplitude,\n\t\t\twavelength,\n\t\t\tgapSize = 4,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tshowTrack = \"auto\",\n\t\t\tminProgress = DEFAULT_MIN_PROGRESS,\n\t\t\tmaxProgress = DEFAULT_MAX_PROGRESS,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tamplitudeRange,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst radius = (size - trackHeight) / 2;\n\t\tconst center = size / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst isWavy = shape === \"wavy\";\n\n\t\t// Resolve track visibility\n\t\tconst shouldShowIndeterminateTrack =\n\t\t\tshowTrack === \"auto\" ? isWavy : showTrack;\n\t\tconst shouldShowDeterminateTrack = showTrack === \"auto\" ? true : showTrack;\n\n\t\tconst BASELINE_SIZE = 48;\n\t\tconst scaleFactor = size / BASELINE_SIZE;\n\t\tconst effectiveAmplitude = React.useMemo(\n\t\t\t() => amplitude ?? 1.6 * scaleFactor,\n\t\t\t[amplitude, scaleFactor],\n\t\t);\n\t\tconst effectiveWavelength = React.useMemo(\n\t\t\t() => wavelength ?? 15 * scaleFactor,\n\t\t\t[wavelength, scaleFactor],\n\t\t);\n\n\t\t// Resolved amplitude range for wavy indeterminate\n\t\tconst resolvedAmplitudeRange = React.useMemo<[number, number]>(\n\t\t\t() => amplitudeRange ?? [0, effectiveAmplitude],\n\t\t\t[amplitudeRange, effectiveAmplitude],\n\t\t);\n\n\t\t// Static wavy path for initial layout/SSR\n\t\tconst wavyActivePath = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisWavy\n\t\t\t\t\t? generateWavyCircularPath(\n\t\t\t\t\t\t\tcenter,\n\t\t\t\t\t\t\tradius,\n\t\t\t\t\t\t\teffectiveAmplitude,\n\t\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t[isWavy, center, radius, effectiveAmplitude, effectiveWavelength],\n\t\t);\n\n\t\tconst circumference = React.useMemo(() => 2 * Math.PI * radius, [radius]);\n\t\tconst gapForTrack = React.useMemo(\n\t\t\t() => (gapSize + trackHeight) / circumference,\n\t\t\t[gapSize, trackHeight, circumference],\n\t\t);\n\t\tconst activeAngularFraction = isDeterminate ? clampedValue / 100 : 0;\n\n\t\tconst trackOffset = isDeterminate ? activeAngularFraction + gapForTrack : 0;\n\t\tconst trackLength = isDeterminate\n\t\t\t? Math.max(0.001, 1 - activeAngularFraction - 2 * gapForTrack)\n\t\t\t: 1;\n\n\t\tconst ActiveCircleElem = m.circle;\n\n\t\tconst indeterminateSvgRef = React.useRef<SVGSVGElement>(null);\n\t\tconst indeterminateTrackRef = React.useRef<SVGElement>(null);\n\t\tconst indeterminateActiveRef = React.useRef<SVGElement>(null);\n\t\tconst indeterminateWavyTrackPathRef = React.useRef<SVGPathElement>(null);\n\t\tconst indeterminateWavyActivePathRef = React.useRef<SVGPathElement>(null);\n\t\tconst determinateWavyActivePathRef = React.useRef<SVGPathElement>(null);\n\t\tconst determinateWavyTrackPathRef = React.useRef<SVGPathElement>(null);\n\t\tconst cachedPathLengthRef = React.useRef<number>(0);\n\n\t\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 0);\n\t\tconst amplitudeMV = useMotionValue(isWavy ? effectiveAmplitude : 0);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (isDeterminate) {\n\t\t\t\tanimate(fractionMV, clampedValue / 100, {\n\t\t\t\t\tduration: 0.4,\n\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t});\n\t\t\t}\n\t\t}, [clampedValue, isDeterminate, fractionMV]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!isDeterminate || !isWavy) return;\n\t\t\tconst fraction = clampedValue / 100;\n\t\t\tlet targetAmp = effectiveAmplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp =\n\t\t\t\t\tfraction <= 0.1 || fraction >= 0.95 ? 0 : effectiveAmplitude;\n\t\t\t}\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t}, [\n\t\t\tclampedValue,\n\t\t\tisDeterminate,\n\t\t\tisWavy,\n\t\t\teffectiveAmplitude,\n\t\t\tamplitudeMV,\n\t\t\tdeterminateAnimation,\n\t\t]);\n\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (!isWavy || !wavyActivePath) {\n\t\t\t\tcachedPathLengthRef.current = circumference;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst el = (indeterminateActiveRef.current ||\n\t\t\t\tdeterminateWavyActivePathRef.current) as SVGPathElement | null;\n\t\t\tif (el && \"getTotalLength\" in el) {\n\t\t\t\ttry {\n\t\t\t\t\tconst len = el.getTotalLength();\n\t\t\t\t\tif (len > 0) {\n\t\t\t\t\t\tcachedPathLengthRef.current = len;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Fallback below\n\t\t\t\t}\n\t\t\t}\n\t\t\tcachedPathLengthRef.current = circumference;\n\t\t}, [isWavy, circumference, wavyActivePath]);\n\n\t\tuseAnimationFrame((time) => {\n\t\t\tconst safeWaveSpeed = Math.max(0.1, waveSpeed);\n\t\t\tconst wavePhase = (time / 1000) * safeWaveSpeed * 2 * Math.PI;\n\n\t\t\tif (isDeterminate) {\n\t\t\t\tif (isWavy) {\n\t\t\t\t\tconst currentAmp = amplitudeMV.get();\n\t\t\t\t\tconst dynamicPath = generateWavyCircularPath(\n\t\t\t\t\t\tcenter,\n\t\t\t\t\t\tradius,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\twavePhase,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (determinateWavyActivePathRef.current) {\n\t\t\t\t\t\tdeterminateWavyActivePathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t\t}\n\t\t\t\t\tif (trackShape === \"wavy\" && determinateWavyTrackPathRef.current) {\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pathEl = determinateWavyActivePathRef.current;\n\t\t\t\t\tlet totalLen = cachedPathLengthRef.current || circumference;\n\t\t\t\t\tif (pathEl) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst len = pathEl.getTotalLength();\n\t\t\t\t\t\t\tif (len > 0) totalLen = len;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Fallback\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst activeFrac = Math.max(0, Math.min(1, fractionMV.get()));\n\t\t\t\t\tconst activeLen = totalLen * activeFrac;\n\n\t\t\t\t\tif (determinateWavyActivePathRef.current) {\n\t\t\t\t\t\tdeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t\t`${activeLen} ${totalLen}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t\t\"0\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tshouldShowDeterminateTrack &&\n\t\t\t\t\t\ttrackShape === \"wavy\" &&\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst gapFrac = (gapSize + trackHeight) / totalLen;\n\t\t\t\t\t\tconst trackStartFrac = activeFrac + gapFrac;\n\t\t\t\t\t\tconst trackLen = Math.max(\n\t\t\t\t\t\t\t0.001,\n\t\t\t\t\t\t\ttotalLen * (1 - activeFrac - 2 * gapFrac),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst trackOff = -totalLen * trackStartFrac;\n\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t\t`${trackLen} ${totalLen}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t\t`${trackOff}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst scaledTime = time * safeCrawlerSpeed;\n\n\t\t\t// --- 1. ROTATION (M3 Kotlin dual-rotation system) ---\n\n\t\t\t// Global rotation: linear 1080° over 6s\n\t\t\tconst globalCycle = scaledTime % GLOBAL_ROTATION_DURATION;\n\t\t\tconst globalAngle =\n\t\t\t\t(globalCycle / GLOBAL_ROTATION_DURATION) * GLOBAL_ROTATION_TARGET;\n\n\t\t\t// Additional rotation: stepped 90° per 1.5s cycle\n\t\t\t// Each cycle: eases in first 500ms, then holds for 1000ms\n\t\t\tconst additionalFullCycles = Math.floor(\n\t\t\t\tscaledTime / ADDITIONAL_ROTATION_CYCLE,\n\t\t\t);\n\t\t\tconst additionalCycleTime = scaledTime % ADDITIONAL_ROTATION_CYCLE;\n\t\t\tconst additionalEaseT = Math.min(\n\t\t\t\t1,\n\t\t\t\tadditionalCycleTime / ADDITIONAL_ROTATION_EASE_DURATION,\n\t\t\t);\n\t\t\tconst additionalAngle =\n\t\t\t\t(additionalFullCycles + easeInOutCubic(additionalEaseT)) *\n\t\t\t\tADDITIONAL_ROTATION_STEP;\n\n\t\t\tconst totalRotation = globalAngle + additionalAngle;\n\n\t\t\tif (indeterminateSvgRef.current) {\n\t\t\t\tindeterminateSvgRef.current.style.transform = `rotate(${totalRotation - 90}deg)`;\n\t\t\t}\n\n\t\t\t// --- 2. ARC PROGRESS (M3 Kotlin oscillation) ---\n\n\t\t\t// Full cycle = grow (1.5s) + shrink (1.5s) = 3s\n\t\t\tconst progressFullCycle = PROGRESS_CYCLE_DURATION * 2;\n\t\t\tconst progressCycleTime = scaledTime % progressFullCycle;\n\n\t\t\tlet progress: number;\n\t\t\tif (progressCycleTime < PROGRESS_CYCLE_DURATION) {\n\t\t\t\t// Growing phase: MIN → MAX\n\t\t\t\tconst t = progressCycleTime / PROGRESS_CYCLE_DURATION;\n\t\t\t\tprogress =\n\t\t\t\t\tminProgress + (maxProgress - minProgress) * easeInOutCubic(t);\n\t\t\t} else {\n\t\t\t\t// Shrinking phase: MAX → MIN\n\t\t\t\tconst t =\n\t\t\t\t\t(progressCycleTime - PROGRESS_CYCLE_DURATION) /\n\t\t\t\t\tPROGRESS_CYCLE_DURATION;\n\t\t\t\tprogress =\n\t\t\t\t\tmaxProgress - (maxProgress - minProgress) * easeInOutCubic(t);\n\t\t\t}\n\n\t\t\t// --- 3. WAVY AMPLITUDE MODULATION ---\n\n\t\t\tif (isWavy) {\n\t\t\t\t// Amplitude scales with progress:\n\t\t\t\t// short arc (min) → amplitude approaches amplitudeRange[0] (flat)\n\t\t\t\t// long arc (max) → amplitude approaches amplitudeRange[1] (full wave)\n\t\t\t\tconst amplitudeT =\n\t\t\t\t\t(progress - minProgress) / (maxProgress - minProgress);\n\t\t\t\tconst currentAmplitude =\n\t\t\t\t\tresolvedAmplitudeRange[0] +\n\t\t\t\t\t(resolvedAmplitudeRange[1] - resolvedAmplitudeRange[0]) * amplitudeT;\n\n\t\t\t\t// Regenerate wavy path with current amplitude and wavePhase\n\t\t\t\tconst dynamicPath = generateWavyCircularPath(\n\t\t\t\t\tcenter,\n\t\t\t\t\tradius,\n\t\t\t\t\tcurrentAmplitude,\n\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\twavePhase,\n\t\t\t\t);\n\n\t\t\t\t// Update both track and active indicator paths\n\t\t\t\tif (indeterminateWavyActivePathRef.current) {\n\t\t\t\t\tindeterminateWavyActivePathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t}\n\t\t\t\tif (indeterminateWavyTrackPathRef.current) {\n\t\t\t\t\tindeterminateWavyTrackPathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t}\n\n\t\t\t\t// Get path length for dasharray calculation\n\t\t\t\tconst pathEl = indeterminateWavyActivePathRef.current;\n\t\t\t\tlet totalLen = cachedPathLengthRef.current || circumference;\n\t\t\t\tif (pathEl) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst len = pathEl.getTotalLength();\n\t\t\t\t\t\tif (len > 0) totalLen = len;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// use cached\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// --- 4. STROKE-DASHARRAY for wavy (with gap) ---\n\t\t\t\tconst gapFrac = (gapSize + trackHeight) / totalLen;\n\t\t\t\tconst activeLen = totalLen * progress;\n\t\t\t\tconst activeOff = 0; // Arc starts at 0 (rotation handles positioning)\n\n\t\t\t\tif (indeterminateWavyActivePathRef.current) {\n\t\t\t\t\tindeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${activeLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${activeOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tshouldShowIndeterminateTrack &&\n\t\t\t\t\tindeterminateWavyTrackPathRef.current\n\t\t\t\t) {\n\t\t\t\t\tconst trackStartFrac = progress + gapFrac;\n\t\t\t\t\tconst trackLen = Math.max(\n\t\t\t\t\t\t0.001,\n\t\t\t\t\t\ttotalLen * (1 - progress - 2 * gapFrac),\n\t\t\t\t\t);\n\t\t\t\t\tconst trackOff = -totalLen * trackStartFrac;\n\n\t\t\t\t\tindeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${trackLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${trackOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// --- 5. FLAT CIRCLE (stroke-dasharray on circle element) ---\n\t\t\t\tconst totalLen = circumference;\n\t\t\t\tconst activeLen = totalLen * progress;\n\t\t\t\tconst activeOff = 0;\n\n\t\t\t\tif (indeterminateActiveRef.current) {\n\t\t\t\t\tindeterminateActiveRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${activeLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateActiveRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${activeOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (shouldShowIndeterminateTrack && indeterminateTrackRef.current) {\n\t\t\t\t\tconst gapFrac = (gapSize + trackHeight) / totalLen;\n\t\t\t\t\tconst trackStartFrac = progress + gapFrac;\n\t\t\t\t\tconst trackLen = Math.max(\n\t\t\t\t\t\t0.001,\n\t\t\t\t\t\ttotalLen * (1 - progress - 2 * gapFrac),\n\t\t\t\t\t);\n\t\t\t\t\tconst trackOff = -totalLen * trackStartFrac;\n\n\t\t\t\t\tindeterminateTrackRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${trackLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateTrackRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${trackOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{ transform: \"rotate(-90deg)\", overflow: \"visible\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\tisWavy ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{shouldShowDeterminateTrack &&\n\t\t\t\t\t\t\t\t\t\t(trackShape === \"wavy\" ? (\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\tref={determinateWavyTrackPathRef}\n\t\t\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tref={determinateWavyActivePathRef}\n\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</svg>\n\n\t\t\t\t\t{!isDeterminate && (\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tref={indeterminateSvgRef}\n\t\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\t\theight={size}\n\t\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\t\t\ttransformOrigin: \"center\",\n\t\t\t\t\t\t\t\ttransform: \"rotate(-90deg)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{shouldShowIndeterminateTrack && (\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\tref={indeterminateWavyTrackPathRef}\n\t\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tref={indeterminateWavyActivePathRef}\n\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{shouldShowIndeterminateTrack && (\n\t\t\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\t\t\tref={\n\t\t\t\t\t\t\t\t\t\t\t\tindeterminateTrackRef as React.RefObject<SVGCircleElement>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\t\tref={\n\t\t\t\t\t\t\t\t\t\t\tindeterminateActiveRef as React.RefObject<SVGCircleElement>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</LazyMotion>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCircularProgress.displayName = \"CircularProgress\";\n","import * as React from \"react\";\n\nexport function useContainerWidth() {\n\tconst [width, setWidth] = React.useState(0);\n\tconst observerRef = React.useRef<ResizeObserver | null>(null);\n\n\tconst ref = React.useCallback((node: HTMLDivElement | null) => {\n\t\tif (observerRef.current) {\n\t\t\tobserverRef.current.disconnect();\n\t\t\tobserverRef.current = null;\n\t\t}\n\n\t\tif (node) {\n\t\t\tconst obs = new ResizeObserver((entries) => {\n\t\t\t\tconst contentRect = entries[0].contentRect;\n\t\t\t\tsetWidth(contentRect.width);\n\t\t\t});\n\t\t\tobs.observe(node);\n\t\t\tobserverRef.current = obs;\n\t\t}\n\t}, []);\n\n\t// Cleanup on unmount\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (observerRef.current) {\n\t\t\t\tobserverRef.current.disconnect();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn [ref, width] as const;\n}\n\nexport function useMergedRef<T>(\n\t...refs: (React.Ref<T> | undefined | null)[]\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t\t(ref as React.MutableRefObject<T | null>).current = node;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[refs],\n\t);\n}\n","import { m } from \"motion/react\";\nimport * as React from \"react\";\n\nexport const FlatLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\tcrawlerSpeed: number;\n}>(function FlatLinearTrack({\n\ttrackHeight,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\tcrawlerSpeed,\n}) {\n\tconst isDeterminate = value !== undefined;\n\tconst radius = trackHeight / 2;\n\tconst minActiveWidth = trackHeight;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: trackHeight, borderRadius: radius }}\n\t\t>\n\t\t\t{isDeterminate ? (\n\t\t\t\t<>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: trackColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, 0%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, ${value}%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\tminWidth: minActiveWidth,\n\t\t\t\t\t\t\t...(isRtl ? { right: 0 } : { left: 0 }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{ width: `${minActiveWidth}px` }}\n\t\t\t\t\t\tanimate={{ width: `${value}%` }}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: trackColor, borderRadius: radius }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: activeColor, borderRadius: radius }}\n\t\t\t\t\t\tinitial={{ left: \"-40%\", width: \"40%\" }}\n\t\t\t\t\t\tanimate={{ left: [\"-40%\", \"100%\"], width: [\"40%\", \"20%\", \"40%\"] }}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { animate, useAnimationFrame, useMotionValue } from \"motion/react\";\nimport * as React from \"react\";\nimport { useContainerWidth } from \"./hooks\";\nimport { easeInOutCubic, getSinePath } from \"./utils\";\n\nexport const WavyLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tsvgHeight: number;\n\tamplitude: number;\n\twavelength: number;\n\tindeterminateWavelength: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\twaveSpeed: number;\n\tcrawlerSpeed: number;\n\tdeterminateAnimation: \"md3\" | \"continuous\";\n\tindeterminateAnimation: \"md3\" | \"continuous\";\n\ttrackShape: \"flat\" | \"wavy\";\n}>(function WavyLinearTrack({\n\ttrackHeight,\n\tsvgHeight,\n\tamplitude,\n\twavelength,\n\tindeterminateWavelength,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\twaveSpeed,\n\tcrawlerSpeed,\n\tdeterminateAnimation,\n\tindeterminateAnimation,\n\ttrackShape,\n}) {\n\tconst isDeterminate = typeof value === \"number\";\n\tconst clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 100;\n\tconst titleId = React.useId();\n\n\tconst [containerRef, width] = useContainerWidth();\n\n\tconst activePathRef = React.useRef<SVGPathElement>(null);\n\tconst trackPathRef = React.useRef<SVGPathElement>(null);\n\n\tconst amplitudeMV = useMotionValue(amplitude);\n\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 1);\n\n\tReact.useEffect(() => {\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = clampedValue / 100;\n\n\t\t\t// Handle Flattening Logic based on determinateAnimation prop\n\t\t\tlet targetAmp = amplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp = fraction <= 0.1 || fraction >= 0.95 ? 0 : amplitude;\n\t\t\t}\n\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t\tanimate(fractionMV, fraction, { duration: 0.4, ease: [0.2, 0, 0, 1] });\n\t\t} else {\n\t\t\tanimate(amplitudeMV, amplitude, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t}\n\t}, [\n\t\tclampedValue,\n\t\tisDeterminate,\n\t\tamplitude,\n\t\tamplitudeMV,\n\t\tfractionMV,\n\t\tdeterminateAnimation,\n\t]);\n\n\tconst activeWavelength = Math.max(\n\t\t1,\n\t\tisDeterminate ? wavelength : indeterminateWavelength,\n\t);\n\n\tuseAnimationFrame((time) => {\n\t\tif (width === 0) return;\n\n\t\tconst currentAmp = amplitudeMV.get();\n\t\tconst trackAmp = trackShape === \"wavy\" ? amplitude : 0;\n\t\tconst phase = (time / 1000) * waveSpeed * activeWavelength;\n\t\tconst capWidth = trackHeight / 2;\n\n\t\tlet activePathD = \"\";\n\t\tlet trackD = \"\";\n\t\tconst totalGap = gapSize + trackHeight;\n\n\t\t// 1. DETERMINATE MODE\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = fractionMV.get();\n\t\t\tconst barHead = fraction * width;\n\n\t\t\tconst adjHead = Math.max(capWidth, Math.min(width - capWidth, barHead));\n\t\t\tconst adjTail = capWidth;\n\n\t\t\tif (fraction > 0 && adjHead - adjTail > 0.1) {\n\t\t\t\tactivePathD = getSinePath(\n\t\t\t\t\tadjTail,\n\t\t\t\t\tadjHead,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\tcurrentAmp,\n\t\t\t\t);\n\t\t\t} else if (fraction === 0) {\n\t\t\t\tactivePathD = \"\";\n\t\t\t}\n\n\t\t\tconst trackStart = adjHead + totalGap;\n\t\t\tif (trackStart < width - capWidth) {\n\t\t\t\ttrackD = getSinePath(\n\t\t\t\t\ttrackStart,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// 2. INDETERMINATE MODE\n\t\telse {\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst activeLines: { tail: number; head: number }[] = [];\n\n\t\t\tif (indeterminateAnimation === \"continuous\") {\n\t\t\t\tconst cycle = 2000 / safeCrawlerSpeed;\n\t\t\t\tconst fraction = (time % cycle) / cycle;\n\t\t\t\tactiveLines.push({\n\t\t\t\t\ttail: easeInOutCubic(Math.max(0, fraction * 1.5 - 0.5)),\n\t\t\t\t\thead: easeInOutCubic(Math.min(1, fraction * 1.5)),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst cycle = 1750 / safeCrawlerSpeed;\n\t\t\t\tconst t = (time % cycle) * safeCrawlerSpeed;\n\n\t\t\t\tconst l1H = easeInOutCubic(Math.max(0, Math.min(1, t / 1000)));\n\t\t\t\tconst l1T = easeInOutCubic(Math.max(0, Math.min(1, (t - 250) / 1000)));\n\t\t\t\tconst l2H = easeInOutCubic(Math.max(0, Math.min(1, (t - 650) / 850)));\n\t\t\t\tconst l2T = easeInOutCubic(Math.max(0, Math.min(1, (t - 900) / 850)));\n\n\t\t\t\tactiveLines.push({ tail: l1T, head: l1H });\n\t\t\t\tactiveLines.push({ tail: l2T, head: l2H });\n\t\t\t}\n\n\t\t\tconst activeSegments = activeLines\n\t\t\t\t.map((line) => {\n\t\t\t\t\tconst rawTail = line.tail * width;\n\t\t\t\t\tconst rawHead = line.head * width;\n\t\t\t\t\tconst adjTail = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, rawTail),\n\t\t\t\t\t);\n\t\t\t\t\tconst adjHead = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, rawHead),\n\t\t\t\t\t);\n\t\t\t\t\treturn { adjTail, adjHead };\n\t\t\t\t})\n\t\t\t\t.filter((seg) => seg.adjHead - seg.adjTail > 0.1);\n\n\t\t\tactivePathD = activeSegments\n\t\t\t\t.map((seg) =>\n\t\t\t\t\tgetSinePath(\n\t\t\t\t\t\tseg.adjTail,\n\t\t\t\t\t\tseg.adjHead,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\" \");\n\n\t\t\tconst validActiveLines = activeLines\n\t\t\t\t.filter(\n\t\t\t\t\t(line) =>\n\t\t\t\t\t\tline.head > line.tail &&\n\t\t\t\t\t\tline.head * width > 0 &&\n\t\t\t\t\t\tline.tail * width < width,\n\t\t\t\t)\n\t\t\t\t.sort((a, b) => a.tail - b.tail);\n\n\t\t\tlet currentTrackX = capWidth;\n\t\t\tfor (const line of validActiveLines) {\n\t\t\t\tconst blockStart = line.tail * width - totalGap;\n\t\t\t\tconst blockEnd = line.head * width + totalGap;\n\n\t\t\t\tconst trackEnd = Math.min(width - capWidth, blockStart);\n\t\t\t\tif (trackEnd > currentTrackX) {\n\t\t\t\t\ttrackD += `${getSinePath(\n\t\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\t\ttrackEnd,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\ttrackAmp,\n\t\t\t\t\t)} `;\n\t\t\t\t}\n\t\t\t\tcurrentTrackX = Math.max(currentTrackX, blockEnd);\n\t\t\t}\n\n\t\t\tif (currentTrackX < width - capWidth) {\n\t\t\t\ttrackD += getSinePath(\n\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (activePathRef.current)\n\t\t\tactivePathRef.current.setAttribute(\"d\", activePathD || \"\");\n\t\tif (trackPathRef.current)\n\t\t\ttrackPathRef.current.setAttribute(\"d\", trackD.trim() || \"\");\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName=\"relative w-full\"\n\t\t\tstyle={{ height: svgHeight }}\n\t\t>\n\t\t\t{width > 0 && (\n\t\t\t\t<svg\n\t\t\t\t\tclassName=\"absolute inset-0 w-full h-full\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\ttransform: isRtl ? \"scaleX(-1)\" : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t>\n\t\t\t\t\t<title id={titleId}>\n\t\t\t\t\t\t{isDeterminate\n\t\t\t\t\t\t\t? `Progress: ${clampedValue}%`\n\t\t\t\t\t\t\t: \"Indeterminate loading progress\"}\n\t\t\t\t\t</title>\n\t\t\t\t\t<g transform={`translate(0, ${svgHeight / 2})`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={trackPathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={trackColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={activePathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useMergedRef } from \"./hooks\";\nimport { FlatLinearTrack } from \"./linear-flat\";\nimport { WavyLinearTrack } from \"./linear-wavy\";\nimport type { LinearProgressProps } from \"./types\";\n\nexport const LinearProgress = React.forwardRef<\n\tHTMLDivElement,\n\tLinearProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape,\n\t\t\ttrackHeight = 4,\n\t\t\tamplitude,\n\t\t\twavelength = 40,\n\t\t\tindeterminateWavelength = 20,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tindeterminateAnimation = \"md3\",\n\t\t\tgapSize = 4,\n\t\t\tshowStopIndicator = \"auto\",\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, containerRef);\n\t\tconst [isRtl, setIsRtl] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (containerRef.current) {\n\t\t\t\tconst dir = getComputedStyle(containerRef.current).direction;\n\t\t\t\tsetIsRtl(dir === \"rtl\");\n\t\t\t}\n\t\t}, []);\n\n\t\tconst resolvedTrackShape = trackShape ?? shape;\n\t\tconst isWavy = shape === \"wavy\" || resolvedTrackShape === \"wavy\";\n\n\t\tconst effectiveAmplitude = React.useMemo(() => amplitude ?? 3, [amplitude]);\n\t\tconst svgHeight = React.useMemo(\n\t\t\t() => (isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight),\n\t\t\t[isWavy, trackHeight, effectiveAmplitude],\n\t\t);\n\n\t\tconst shouldShowStop = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisDeterminate &&\n\t\t\t\tresolvedTrackShape === \"flat\" &&\n\t\t\t\tshowStopIndicator !== false,\n\t\t\t[isDeterminate, resolvedTrackShape, showStopIndicator],\n\t\t);\n\n\t\tconst stopSize = React.useMemo(\n\t\t\t() => Math.max(2, trackHeight > 4 ? 4 : trackHeight / 2),\n\t\t\t[trackHeight],\n\t\t);\n\n\t\tconst stopOffset = (trackHeight - stopSize) / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst useWavyTrack = isWavy || !isDeterminate;\n\t\tconst trackAmp = isWavy ? effectiveAmplitude : 0;\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex w-full flex-col justify-center\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: svgHeight }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{useWavyTrack ? (\n\t\t\t\t\t\t<WavyLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tsvgHeight={svgHeight}\n\t\t\t\t\t\t\tamplitude={trackAmp}\n\t\t\t\t\t\t\twavelength={wavelength}\n\t\t\t\t\t\t\tindeterminateWavelength={indeterminateWavelength}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\twaveSpeed={waveSpeed}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t\tdeterminateAnimation={determinateAnimation}\n\t\t\t\t\t\t\tindeterminateAnimation={indeterminateAnimation}\n\t\t\t\t\t\t\ttrackShape={resolvedTrackShape}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<FlatLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{shouldShowStop && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute rounded-full\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: stopSize,\n\t\t\t\t\t\t\t\theight: stopSize,\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--md-sys-color-indicator-stop)\",\n\t\t\t\t\t\t\t\ttop: svgHeight / 2 - stopSize / 2,\n\t\t\t\t\t\t\t\t...(isRtl ? { left: stopOffset } : { right: stopOffset }),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nLinearProgress.displayName = \"LinearProgress\";\n","import * as React from \"react\";\nimport { CircularProgress } from \"./circular\";\nimport { LinearProgress } from \"./linear\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\n/**\n * Progress Indicator component based on Material Design 3 Expressive guidelines.\n * Flexible support for 2 presentation variants: Linear and Circular,\n * with smooth dynamic Wavy shape profiles.\n *\n * @example\n * ```tsx\n * // Determinate Flat Linear\n * <ProgressIndicator variant=\"linear\" value={60} aria-label=\"Loading profile...\" />\n *\n * // Indeterminate Wavy Linear\n * <ProgressIndicator variant=\"linear\" shape=\"wavy\" aria-label=\"Connecting to server...\" />\n *\n * // Determinate Flat Circular\n * <ProgressIndicator variant=\"circular\" value={45} size={48} aria-label=\"Syncing...\" />\n * ```\n */\n\nexport const ProgressIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tProgressIndicatorProps\n>((props, ref) => {\n\tif (props.variant === \"circular\") {\n\t\treturn <CircularProgress ref={ref} {...props} />;\n\t}\n\treturn <LinearProgress ref={ref} {...props} />;\n});\n\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport type {\n\tCircularProgressProps,\n\tLinearProgressProps,\n\tProgressIndicatorProps,\n} from \"./types\";\n","import * as React from \"react\";\n\nexport interface ToolbarContextValue {\n\torientation: \"horizontal\" | \"vertical\";\n\titemClassName?: string;\n}\n\nexport const ToolbarContext = React.createContext<ToolbarContextValue | null>(\n\tnull,\n);\n\nexport function useToolbarContext() {\n\treturn React.useContext(ToolbarContext);\n}\n","/**\n * @file text-field.tokens.ts\n * MD3 design token mapping for the TextField component.\n *\n * All color values reference CSS custom properties defined by the MD3 theme.\n * Do NOT use raw hex values — always use CSS variables.\n *\n * @see https://m3.material.io/components/text-fields/specs\n */\n\n// ─── Color Tokens ────────────────────────────────────────────────────────────\n\nexport const TF_COLORS = {\n\t/** Filled container background */\n\tfilledBg: \"var(--md-sys-color-surface-container-highest)\",\n\t/** Input text color */\n\tinputText: \"var(--md-sys-color-on-surface)\",\n\t/** Label (unfloated) + icons + prefix/suffix + supporting text */\n\tonSurfaceVariant: \"var(--md-sys-color-on-surface-variant)\",\n\t/** Focused active indicator / outline, floated label */\n\tprimary: \"var(--md-sys-color-primary)\",\n\t/** Error indicator / outline / label / icon / supporting text */\n\terror: \"var(--md-sys-color-error)\",\n\t/** Outlined border (enabled) */\n\toutline: \"var(--md-sys-color-outline)\",\n\t/** Transparent */\n\ttransparent: \"transparent\",\n} as const;\n\n// ─── Size Tokens ──────────────────────────────────────────────────────────────\n\nexport const TF_SIZE = {\n\t/** Container height — normal */\n\theight: 56,\n\t/** Container height — dense variant */\n\tdenseHeight: 48,\n\t/** Active indicator height — enabled */\n\tindicatorThin: 1,\n\t/** Active indicator height — focused */\n\tindicatorThick: 2,\n\t/** Outline stroke width — enabled */\n\toutlineThin: 1,\n\t/** Outline stroke width — focused */\n\toutlineThick: 2,\n\t/** Corner radius — all variants */\n\tcornerRadius: 4,\n\t/** Leading/Trailing icon size */\n\ticonSize: 24,\n\t/** Padding inline start (no leading icon) */\n\tpaddingStart: 16,\n\t/** Padding inline start (with leading icon) */\n\tpaddingStartWithIcon: 12,\n\t/** Padding inline end */\n\tpaddingEnd: 16,\n\t/** Padding inline end (with trailing icon) */\n\tpaddingEndWithIcon: 12,\n\t/** Notch extra padding per side on outlined label gap */\n\tnotchPadding: 4,\n} as const;\n\n// ─── Typography Tokens ────────────────────────────────────────────────────────\n\nexport const TF_TYPOGRAPHY = {\n\t/** Body Large — input text, unfloated label */\n\tbodyLargePx: 16,\n\t/** Body Small — floated label, supporting text, counter */\n\tbodySmallPx: 12,\n\t/** Scale ratio when label floats: 12/16 = 0.75 */\n\tlabelScaleRatio: 12 / 16,\n} as const;\n\n// ─── Tailwind Class Snippets ──────────────────────────────────────────────────\n\n/**\n * Tailwind utility classes for key TextField elements.\n * Use via cn() — do NOT use these as standalone strings without merging.\n */\nexport const TF_CLASSES = {\n\t// Container\n\tfilledContainer:\n\t\t\"bg-[var(--md-sys-color-surface-container-highest)] rounded-tl-[4px] rounded-tr-[4px] rounded-bl-none rounded-br-none\",\n\toutlinedContainer: \"bg-transparent rounded-[4px]\",\n\n\t// Input\n\tinput:\n\t\t\"bg-transparent outline-none w-full text-base text-[var(--md-sys-color-on-surface)] caret-[var(--md-sys-color-primary)] placeholder:text-[var(--md-sys-color-on-surface-variant)]\",\n\tinputNoSpinner:\n\t\t\"[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\",\n\n\t// States\n\tdisabled: \"opacity-[0.38] pointer-events-none cursor-not-allowed\",\n\n\t// Supporting text\n\tsupportingText: \"text-xs text-[var(--md-sys-color-on-surface-variant)] px-4\",\n\terrorText: \"text-xs text-[var(--md-sys-color-error)] px-4\",\n\n\t// Prefix / Suffix\n\tprefixSuffix:\n\t\t\"text-base text-[var(--md-sys-color-on-surface-variant)] select-none shrink-0\",\n\n\t// State layer (hover)\n\tstateLayer:\n\t\t\"absolute inset-0 bg-[var(--md-sys-color-on-surface)] opacity-0 transition-opacity duration-150 pointer-events-none rounded-[inherit]\",\n} as const;\n","/**\n * @file active-indicator.tsx\n * Animated bottom border line for the MD3 Filled TextField.\n * Expands height from 1px → 2px and color changes on focus.\n */\n\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_INDICATOR_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS, TF_SIZE } from \"../text-field.tokens\";\n\nexport interface ActiveIndicatorProps {\n\tisFocused: boolean;\n\tisError: boolean;\n\tisDisabled: boolean;\n\tisHovered: boolean;\n\tprefersReduced: boolean;\n}\n\n/**\n * MD3 Active Indicator — the bottom border line for Filled TextField.\n *\n * Animates:\n * - `height`: 1px (enabled) → 2px (focused)\n * - `backgroundColor`: on-surface-variant → primary (focused) → error\n * - `scaleX`: 0 → 1 expanding from center on focus in\n *\n * @see https://m3.material.io/components/text-fields/specs#filled-text-field\n */\nexport const ActiveIndicator = React.memo(function ActiveIndicator({\n\tisFocused,\n\tisError,\n\tisDisabled,\n\tisHovered,\n\tprefersReduced,\n}: ActiveIndicatorProps) {\n\tconst duration = prefersReduced ? 0 : MD3_INDICATOR_DURATION;\n\tconst ease = MD3_STANDARD_EASING;\n\n\tconst height =\n\t\tisFocused || isError ? TF_SIZE.indicatorThick : TF_SIZE.indicatorThin;\n\n\tlet backgroundColor: string;\n\tif (isError) {\n\t\tbackgroundColor = TF_COLORS.error;\n\t} else if (isFocused) {\n\t\tbackgroundColor = TF_COLORS.primary;\n\t} else if (isHovered && !isDisabled) {\n\t\tbackgroundColor = TF_COLORS.inputText;\n\t} else {\n\t\tbackgroundColor = TF_COLORS.onSurfaceVariant;\n\t}\n\n\treturn (\n\t\t<m.div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute bottom-0 left-0 right-0 origin-center\"\n\t\t\tanimate={{ height, backgroundColor }}\n\t\t\ttransition={{ duration, ease }}\n\t\t/>\n\t);\n});\n\nActiveIndicator.displayName = \"ActiveIndicator\";\n","/**\n * @file floating-label.tsx\n * Animated floating label for MD3 TextField.\n * Animates between inline (body large) and floated (body small) positions.\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n\tMD3_LABEL_FLOAT_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS, TF_TYPOGRAPHY } from \"../text-field.tokens\";\n\nexport interface FloatingLabelProps {\n\t/** The label text content. */\n\ttext: string;\n\t/** Whether the label is in the floated (small) position. */\n\tisFloated: boolean;\n\t/** Whether the field is currently focused. */\n\tisFocused: boolean;\n\t/** Whether the field is in error state. */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n\t/** 'filled' or 'outlined' — determines vertical y offset. */\n\tvariant: \"filled\" | \"outlined\";\n\t/** Container height in px (56 normal, 48 dense). */\n\tcontainerHeight: number;\n\t/** Whether to skip animations (prefers-reduced-motion). */\n\tprefersReduced: boolean;\n\t/** Whether the required asterisk should be shown. */\n\tshowAsterisk: boolean;\n\t/** ID of the label element, for associating with a containing element. */\n\thtmlFor?: string;\n\t/** Ref callback so the parent can measure label width for the outlined notch. */\n\tlabelRef?: React.Ref<HTMLSpanElement>;\n\t/** Whether there is a leading icon. */\n\thasLeading?: boolean;\n}\n\n/**\n * Calculates the y-translation (in px) for the floated label position.\n *\n * For FILLED: move up from vertical center to the top inline padding area.\n * For OUTLINED: move up so the label sits on the top border line.\n *\n * The label starts at y=0 (vertically centered by flex parent).\n * When floated, it moves upward by `offset` pixels.\n */\nfunction getFloatedY(\n\tvariant: \"filled\" | \"outlined\",\n\tcontainerHeight: number,\n): number {\n\t// Label body-large line height ≈ 24px (16px * 1.5)\n\t// Label body-small line height ≈ 16px (12px * 1.33)\n\t// Floated container top-padding: 8px from top of container\n\tconst labelSmallHeight = 16;\n\tconst paddingTop = 8;\n\n\tif (variant === \"filled\") {\n\t\t// Center of container → top-padding area\n\t\t// Center is at containerHeight/2, floated center is at paddingTop + labelSmallHeight/2\n\t\tconst floatedCenter = paddingTop + labelSmallHeight / 2;\n\t\tconst unfloatedCenter = containerHeight / 2;\n\t\treturn -(unfloatedCenter - floatedCenter);\n\t}\n\t// Outlined: label sits on the border line (y = 0 relative to container top)\n\t// We move up by half the container height to reach the border\n\treturn -(containerHeight / 2);\n}\n\n/**\n * Returns the label color based on current state.\n */\nfunction getLabelColor(\n\tisFloated: boolean,\n\tisFocused: boolean,\n\tisError: boolean,\n\tisDisabled: boolean,\n): string {\n\tif (isDisabled) return TF_COLORS.onSurfaceVariant;\n\tif (isError) return TF_COLORS.error;\n\tif (isFloated && isFocused) return TF_COLORS.primary;\n\treturn TF_COLORS.onSurfaceVariant;\n}\n\n/**\n * MD3 Expressive Floating Label.\n *\n * Animates y-position, scale, and color when the label floats.\n * Uses `transformOrigin: 'left center'` so scaling anchors at the start.\n *\n * @accessibility\n * Rendered as a `<label>` with `htmlFor` linking to the `<input>`.\n * When floated, visual size changes but the semantic label is unchanged.\n */\nexport const FloatingLabel = React.memo(function FloatingLabel({\n\ttext,\n\tisFloated,\n\tisFocused,\n\tisError,\n\tisDisabled,\n\tvariant,\n\tcontainerHeight,\n\tprefersReduced,\n\tshowAsterisk,\n\thtmlFor,\n\tlabelRef,\n\thasLeading = false,\n}: FloatingLabelProps) {\n\tconst duration = prefersReduced ? 0 : MD3_LABEL_FLOAT_DURATION;\n\tconst ease = MD3_STANDARD_EASING;\n\n\tconst y = isFloated ? getFloatedY(variant, containerHeight) : 0;\n\tconst x = variant === \"outlined\" && isFloated && hasLeading ? -36 : 0;\n\tconst scale = isFloated ? TF_TYPOGRAPHY.labelScaleRatio : 1;\n\tconst color = getLabelColor(isFloated, isFocused, isError, isDisabled);\n\n\treturn (\n\t\t<m.label\n\t\t\thtmlFor={htmlFor}\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute pointer-events-none select-none origin-[left_center] leading-6 text-base whitespace-nowrap\",\n\t\t\t\t\"px-1 -mx-1\", // Clear the notch gap and keep text aligned\n\t\t\t\t\"left-4\",\n\t\t\t\tisDisabled && \"opacity-[0.38]\",\n\t\t\t)}\n\t\t\tanimate={{ y, x, scale, color }}\n\t\t\ttransition={{ duration, ease }}\n\t\t\tstyle={{\n\t\t\t\ttop: (containerHeight - 24) / 2, // 24px is the resting line-height\n\t\t\t\ttransformOrigin: \"left center\",\n\t\t\t\tzIndex: 1,\n\t\t\t}}\n\t\t>\n\t\t\t<span ref={labelRef} className=\"inline-block relative\">\n\t\t\t\t{text}\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showAsterisk && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"asterisk\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: prefersReduced ? 0 : 0.1 }}\n\t\t\t\t\t\t\tclassName=\"ml-0.5 text-m3-error\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t*\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</span>\n\t\t</m.label>\n\t);\n});\n\nFloatingLabel.displayName = \"FloatingLabel\";\n","/**\n * @file leading-icon.tsx\n * Leading icon slot for MD3 TextField.\n */\n\nimport * as React from \"react\";\nimport { TF_COLORS } from \"../text-field.tokens\";\n\nexport interface LeadingIconProps {\n\t/** Icon node — should be 24×24px. */\n\tchildren: React.ReactNode;\n\t/** Whether the field is in error state (changes icon color). */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n}\n\n/**\n * MD3 Leading Icon wrapper.\n *\n * Decorative — `aria-hidden=\"true\"`.\n * Color: `on-surface-variant` (default), `error` (error state).\n * Size: 24×24px icon, 48×56px touch target via flex alignment.\n *\n * @see https://m3.material.io/components/text-fields/specs#anatomy\n */\nexport const LeadingIcon = React.memo(function LeadingIcon({\n\tchildren,\n\tisError,\n\tisDisabled,\n}: LeadingIconProps) {\n\tconst color =\n\t\tisError && !isDisabled ? TF_COLORS.error : TF_COLORS.onSurfaceVariant;\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"flex items-center justify-center shrink-0 w-6 h-6 ml-3\"\n\t\t\tstyle={{ color }}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\n\nLeadingIcon.displayName = \"LeadingIcon\";\n","/**\n * @file outline-container.tsx\n * MD3-compliant outlined border with animated notch for the Outlined TextField.\n *\n * Implementation: 3-segment approach inspired by Material Web's fieldset/legend pattern.\n * The top border is split into: [left-segment] [notch-gap] [right-segment].\n * The notch-gap width animates from 0 → (labelWidth × scaleRatio + 8px) when label floats.\n *\n * This mirrors Material Web's implementation without requiring <fieldset> semantics.\n *\n * @see https://github.com/material-components/material-web/tree/main/textfield\n * @see https://m3.material.io/components/text-fields/specs#outlined-text-field\n */\n\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_INDICATOR_DURATION,\n\tMD3_LABEL_FLOAT_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS, TF_SIZE, TF_TYPOGRAPHY } from \"../text-field.tokens\";\n\nexport interface OutlineContainerProps {\n\t/** Whether the label is in the floated position. */\n\tisFloated: boolean;\n\t/** Whether the field is focused. */\n\tisFocused: boolean;\n\t/** Whether the field is in error state. */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n\t/** Whether the field is hovered. */\n\tisHovered: boolean;\n\t/**\n\t * Measured width of the label element in its full (unfloated) size.\n\t * The notch width = labelWidth × scaleRatio + 2×notchPadding.\n\t */\n\tlabelWidth: number;\n\t/** Whether to disable animations. */\n\tprefersReduced: boolean;\n}\n\n/**\n * Determines the outline border color based on current state.\n */\nfunction getOutlineColor(\n\tisFocused: boolean,\n\tisError: boolean,\n\tisHovered: boolean,\n\tisDisabled: boolean,\n): string {\n\tif (isDisabled) return TF_COLORS.onSurfaceVariant;\n\tif (isError) return TF_COLORS.error;\n\tif (isFocused) return TF_COLORS.primary;\n\tif (isHovered) return TF_COLORS.inputText;\n\treturn TF_COLORS.outline;\n}\n\n/**\n * MD3 Outlined TextField container with animated notch.\n *\n * The notch gap expands/collapses in sync with the FloatingLabel animation,\n * creating the visual effect of the label breaking through the border.\n *\n * Accessibility: `aria-hidden=\"true\"` — purely decorative border.\n */\nexport const OutlineContainer = React.memo(function OutlineContainer({\n\tisFloated,\n\tisFocused,\n\tisError,\n\tisDisabled,\n\tisHovered,\n\tlabelWidth,\n\tprefersReduced,\n}: OutlineContainerProps) {\n\tconst colorDuration = prefersReduced ? 0 : MD3_INDICATOR_DURATION;\n\tconst notchDuration = prefersReduced ? 0 : MD3_LABEL_FLOAT_DURATION;\n\tconst ease = MD3_STANDARD_EASING;\n\n\tconst borderColor = getOutlineColor(\n\t\tisFocused,\n\t\tisError,\n\t\tisHovered,\n\t\tisDisabled,\n\t);\n\tconst borderWidth =\n\t\tisFocused || isError ? TF_SIZE.outlineThick : TF_SIZE.outlineThin;\n\n\t// Calculate offset for notch (always 16px from the edge in M3 Outlined)\n\tconst leftSegmentWidth = TF_SIZE.paddingStart;\n\n\tconst isNotched = isFloated && labelWidth > 0;\n\n\t/**\n\t * Notch width calculation:\n\t * When floated with label: label is scaled to 0.75, so its displayed width = labelWidth × 0.75\n\t * Add 2 × notchPadding (4px each side) for spacing inside the notch gap.\n\t * When unfloated or no label: 0 (no gap in the border).\n\t */\n\tconst notchWidth = isNotched\n\t\t? labelWidth * TF_TYPOGRAPHY.labelScaleRatio + TF_SIZE.notchPadding * 2\n\t\t: 0;\n\n\tconst borderTransition = { duration: colorDuration, ease };\n\tconst notchTransition = { duration: notchDuration, ease };\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute inset-0 pointer-events-none flex rounded-[inherit]\"\n\t\t>\n\t\t\t{/* Left segment — left + bottom + top borders */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"rounded-tl-[inherit] rounded-bl-[inherit]\"\n\t\t\t\tstyle={{ width: leftSegmentWidth - TF_SIZE.notchPadding }}\n\t\t\t\tanimate={{\n\t\t\t\t\tborderColor,\n\t\t\t\t\tborderWidth,\n\t\t\t\t\tborderStyle: \"solid\",\n\t\t\t\t\tborderRightWidth: 0,\n\t\t\t\t}}\n\t\t\t\ttransition={borderTransition}\n\t\t\t/>\n\n\t\t\t{/* Center (notch) segment */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"flex flex-col shrink-0\"\n\t\t\t\tstyle={{ minWidth: 0 }}\n\t\t\t\tanimate={{ width: notchWidth }}\n\t\t\t\ttransition={notchTransition}\n\t\t\t>\n\t\t\t\t{/* Top border of notch: transparent when notched */}\n\t\t\t\t<m.div\n\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\tstyle={{ height: borderWidth }}\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\tborderTopColor: borderColor,\n\t\t\t\t\t\topacity: isNotched ? 0 : 1,\n\t\t\t\t\t\tborderTopWidth: borderWidth,\n\t\t\t\t\t\tborderTopStyle: \"solid\",\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={borderTransition}\n\t\t\t\t/>\n\t\t\t\t{/* Bottom border (always present) */}\n\t\t\t\t<m.div\n\t\t\t\t\tclassName=\"flex-1\"\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\tborderBottomColor: borderColor,\n\t\t\t\t\t\tborderBottomWidth: borderWidth,\n\t\t\t\t\t\tborderBottomStyle: \"solid\",\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={borderTransition}\n\t\t\t\t/>\n\t\t\t</m.div>\n\n\t\t\t{/* Right segment — full height, right + bottom + top borders */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"flex-1 rounded-tr-[inherit] rounded-br-[inherit]\"\n\t\t\t\tanimate={{\n\t\t\t\t\tborderColor,\n\t\t\t\t\tborderWidth,\n\t\t\t\t\tborderStyle: \"solid\",\n\t\t\t\t\tborderLeftWidth: 0,\n\t\t\t\t}}\n\t\t\t\ttransition={borderTransition}\n\t\t\t/>\n\t\t</div>\n\t);\n});\n\nOutlineContainer.displayName = \"OutlineContainer\";\n","/**\n * @file prefix-suffix.tsx\n * Prefix and suffix text for MD3 TextField.\n * Visible only when the label is floated (or when there is no label).\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_LABEL_FLOAT_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_CLASSES } from \"../text-field.tokens\";\n\nexport interface PrefixSuffixProps {\n\ttext: string;\n\ttype: \"prefix\" | \"suffix\";\n\t/** Whether the label is floated (controls visibility). */\n\tvisible: boolean;\n\t/** Disable animations. */\n\tprefersReduced: boolean;\n}\n\n/**\n * MD3 Prefix / Suffix Text.\n *\n * Animates in/out in sync with the floating label using AnimatePresence.\n * Hidden when label is in the inline position (would overlap the label).\n *\n * @accessibility\n * `aria-hidden=\"true\"` — decorative. Screen readers read the full value in context.\n */\nexport const PrefixSuffix = React.memo(function PrefixSuffix({\n\ttext,\n\ttype,\n\tvisible,\n\tprefersReduced,\n}: PrefixSuffixProps) {\n\tconst duration = prefersReduced ? 0 : MD3_LABEL_FLOAT_DURATION;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{visible && (\n\t\t\t\t<m.span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName={`${TF_CLASSES.prefixSuffix} ${type === \"suffix\" ? \"ml-0.5\" : \"mr-0.5\"}`}\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t\t\t>\n\t\t\t\t\t{text}\n\t\t\t\t</m.span>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n});\n\nPrefixSuffix.displayName = \"PrefixSuffix\";\n","/**\n * @file supporting-text.tsx\n * Supporting text, error text, and character counter for MD3 TextField.\n *\n * Animates in/out using AnimatePresence. Uses aria-live for accessibility.\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_STANDARD_EASING,\n\tMD3_SUPPORTING_DURATION,\n} from \"../../shared/constants\";\nimport { TF_COLORS } from \"../text-field.tokens\";\n\nexport interface SupportingTextProps {\n\t/** Helper text shown in normal state. */\n\tsupportingText?: string;\n\t/** Error message — shown instead of supportingText when isError=true. */\n\terrorText?: string;\n\t/** Whether field is in error state. */\n\tisError: boolean;\n\t/** Current character count (value.length). */\n\tcharCount?: number;\n\t/** Maximum character limit. Counter shown only when maxLength is set. */\n\tmaxLength?: number;\n\t/** ID for aria-describedby linking from the input. */\n\tid: string;\n\t/** Disable animations. */\n\tprefersReduced: boolean;\n}\n\n/**\n * AnimatePresence wrapper for text content changes.\n * Fades out old text, fades in new text.\n */\nfunction AnimatedText({\n\ttext,\n\tmotionKey,\n\tclassName,\n\tariaLive,\n\tduration,\n}: {\n\ttext: string;\n\tmotionKey: string;\n\tclassName: string;\n\tariaLive?: \"polite\" | \"off\";\n\tduration: number;\n}) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={motionKey}\n\t\t\tclassName={className}\n\t\t\tinitial={{ opacity: 0, y: -4 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t\taria-live={ariaLive}\n\t\t>\n\t\t\t{text}\n\t\t</m.span>\n\t);\n}\n\n/**\n * MD3 Supporting Text area.\n *\n * Layout: [helper/error text] [character counter]\n * - Error text replaces supporting text when isError=true.\n * - Character counter shows only when maxLength is provided.\n * - Both use aria-live=\"polite\" to announce changes to screen readers.\n * - Animates in/out with opacity + y-offset via AnimatePresence.\n *\n * @accessibility\n * - Error text: `aria-live=\"polite\"` — screen readers announce when error appears.\n * - Counter: `aria-live=\"polite\"` — announces count changes.\n */\nexport const SupportingText = React.memo(function SupportingText({\n\tsupportingText,\n\terrorText,\n\tisError,\n\tcharCount,\n\tmaxLength,\n\tid,\n\tprefersReduced,\n}: SupportingTextProps) {\n\tconst duration = prefersReduced ? 0 : MD3_SUPPORTING_DURATION;\n\n\tconst activeText = isError && errorText ? errorText : supportingText;\n\tconst isOverLimit = maxLength !== undefined && (charCount ?? 0) > maxLength;\n\n\t// Determine counter color\n\tconst counterColor = isOverLimit\n\t\t? TF_COLORS.error\n\t\t: TF_COLORS.onSurfaceVariant;\n\n\tif (!activeText && maxLength === undefined) return null;\n\n\treturn (\n\t\t<m.div\n\t\t\tclassName=\"flex items-start justify-between gap-2 mt-1 px-4\"\n\t\t\tinitial={{ opacity: 0, height: 0 }}\n\t\t\tanimate={{ opacity: 1, height: \"auto\" }}\n\t\t\texit={{ opacity: 0, height: 0 }}\n\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t>\n\t\t\t{/* Left: helper or error text */}\n\t\t\t<div id={id} className=\"flex-1 min-w-0\">\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{activeText && (\n\t\t\t\t\t\t<AnimatedText\n\t\t\t\t\t\t\tkey={isError && errorText ? \"error\" : \"helper\"}\n\t\t\t\t\t\t\tmotionKey={\n\t\t\t\t\t\t\t\tisError && errorText\n\t\t\t\t\t\t\t\t\t? `error-${errorText}`\n\t\t\t\t\t\t\t\t\t: `helper-${supportingText}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext={activeText}\n\t\t\t\t\t\t\tclassName={`text-xs leading-4 block ${\n\t\t\t\t\t\t\t\tisError ? \"text-m3-error\" : \"text-m3-on-surface-variant\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tariaLive=\"polite\"\n\t\t\t\t\t\t\tduration={duration}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\n\t\t\t{/* Right: character counter */}\n\t\t\t{maxLength !== undefined && typeof charCount === \"number\" && (\n\t\t\t\t<m.span\n\t\t\t\t\tclassName=\"text-xs leading-4 tabular-nums shrink-0\"\n\t\t\t\t\tanimate={{ color: counterColor }}\n\t\t\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\taria-atomic=\"true\"\n\t\t\t\t>\n\t\t\t\t\t{charCount} / {maxLength}\n\t\t\t\t</m.span>\n\t\t\t)}\n\t\t</m.div>\n\t);\n});\n\nSupportingText.displayName = \"SupportingText\";\n","/**\n * @file trailing-icon.tsx\n * Trailing icon slot for MD3 TextField.\n *\n * Supports three built-in modes:\n * - 'clear': ✕ button, visible when field has value\n * - 'password-toggle': eye icon, toggles password visibility\n * - 'custom': renders the `children` prop\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_ICON_SWAP_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS } from \"../text-field.tokens\";\nimport type { TextFieldTrailingIconMode } from \"../text-field.types\";\n\nexport interface TrailingIconProps {\n\tmode: TextFieldTrailingIconMode;\n\t/** Custom icon content (used when mode='custom'). */\n\tchildren?: React.ReactNode;\n\t/** Current input value — used to determine if clear button is visible. */\n\tvalue: string;\n\t/** Whether password is currently visible (for password-toggle mode). */\n\tshowPassword?: boolean;\n\t/** Fires when clear button is clicked. */\n\tonClear?: () => void;\n\t/** Fires when password visibility toggle is clicked. */\n\tonPasswordToggle?: () => void;\n\t/** Whether the field is in error state. */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n\t/** Disable animations. */\n\tprefersReduced: boolean;\n}\n\n/** Animated icon wrapper with scale + opacity transition. */\nfunction AnimatedIconSlot({\n\tchildren,\n\tmotionKey,\n\tduration,\n}: {\n\tchildren: React.ReactNode;\n\tmotionKey: string;\n\tduration: number;\n}) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={motionKey}\n\t\t\tclassName=\"flex items-center justify-center\"\n\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\texit={{ opacity: 0, scale: 0 }}\n\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t>\n\t\t\t{children}\n\t\t</m.span>\n\t);\n}\n\n/** Eye icon (password visible). */\nfunction EyeOpenIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n\t\t</svg>\n\t);\n}\n\n/** Eye-off icon (password hidden). */\nfunction EyeOffIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n\t\t</svg>\n\t);\n}\n\n/** ✕ Clear icon. */\nfunction ClearIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"20\"\n\t\t\theight=\"20\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n\t\t</svg>\n\t);\n}\n\n/**\n * MD3 Trailing Icon.\n *\n * Touch target: 48×48px (padding extends the hit area beyond the 24×24 icon).\n *\n * @accessibility\n * - Clear button: `aria-label=\"Clear input\"`\n * - Password toggle: `aria-label=\"Show password\"` / `\"Hide password\"`\n * - Custom: no aria — consumer provides accessible markup\n */\nexport const TrailingIcon = React.memo(function TrailingIcon({\n\tmode,\n\tchildren,\n\tvalue,\n\tshowPassword = false,\n\tonClear,\n\tonPasswordToggle,\n\tisError,\n\tisDisabled,\n\tprefersReduced,\n}: TrailingIconProps) {\n\tconst duration = prefersReduced ? 0 : MD3_ICON_SWAP_DURATION;\n\n\tconst iconColor =\n\t\tisError && !isDisabled ? TF_COLORS.error : TF_COLORS.onSurfaceVariant;\n\n\t// Touch target button styles: 48×48px, centered icon\n\tconst btnClass =\n\t\t\"relative flex items-center justify-center w-12 h-12 -mr-1 rounded-full cursor-pointer outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-m3-primary)] transition-colors hover:bg-[var(--color-m3-on-surface)]/8 active:bg-[var(--color-m3-on-surface)]/12 disabled:pointer-events-none\";\n\n\tif (mode === \"clear\") {\n\t\tconst hasValue = value.length > 0;\n\t\treturn (\n\t\t\t<AnimatePresence>\n\t\t\t\t{hasValue && (\n\t\t\t\t\t<AnimatedIconSlot motionKey=\"clear\" duration={duration}>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-label=\"Clear input\"\n\t\t\t\t\t\t\tonClick={onClear}\n\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\ttabIndex={isDisabled ? -1 : 0}\n\t\t\t\t\t\t\tclassName={btnClass}\n\t\t\t\t\t\t\tstyle={{ color: iconColor }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ClearIcon />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\t}\n\n\tif (mode === \"password-toggle\") {\n\t\treturn (\n\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\tmotionKey={showPassword ? \"eye-off\" : \"eye-on\"}\n\t\t\t\t\tduration={duration}\n\t\t\t\t>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={showPassword ? \"Hide password\" : \"Show password\"}\n\t\t\t\t\t\tonClick={onPasswordToggle}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\ttabIndex={isDisabled ? -1 : 0}\n\t\t\t\t\t\tclassName={btnClass}\n\t\t\t\t\t\tstyle={{ color: iconColor }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? <EyeOffIcon /> : <EyeOpenIcon />}\n\t\t\t\t\t</button>\n\t\t\t\t</AnimatedIconSlot>\n\t\t\t</AnimatePresence>\n\t\t);\n\t}\n\n\tif (mode === \"custom\" && children) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName=\"flex items-center justify-center w-6 h-6 mr-3\"\n\t\t\t\tstyle={{ color: iconColor }}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn null;\n});\n\nTrailingIcon.displayName = \"TrailingIcon\";\n","/**\n * @file text-field.tsx\n * MD3 Expressive TextField — Filled & Outlined variants.\n *\n * Features:\n * - Floating label animation (Framer Motion)\n * - Filled (active indicator) and Outlined (notch border) variants\n * - Controlled & uncontrolled value handling\n * - Built-in clear button, password toggle\n * - Prefix / suffix text\n * - Supporting text, error text, character counter\n * - Leading & trailing icon slots\n * - Textarea support\n * - Native form validation + imperative handle\n * - Full WCAG AA accessibility\n * - prefers-reduced-motion support\n *\n * @see https://m3.material.io/components/text-fields/overview\n */\n\nimport { domMax, LazyMotion, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { useToolbarContext } from \"../toolbar/toolbar-context\";\nimport { ActiveIndicator } from \"./subcomponents/active-indicator\";\nimport { FloatingLabel } from \"./subcomponents/floating-label\";\nimport { LeadingIcon } from \"./subcomponents/leading-icon\";\nimport { OutlineContainer } from \"./subcomponents/outline-container\";\nimport { PrefixSuffix } from \"./subcomponents/prefix-suffix\";\nimport { SupportingText } from \"./subcomponents/supporting-text\";\nimport { TrailingIcon } from \"./subcomponents/trailing-icon\";\nimport { TF_SIZE } from \"./text-field.tokens\";\nimport type { TextFieldHandle, TextFieldProps } from \"./text-field.types\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** Textarea line height in px — matches leading-6 (1.5rem at 16px base). */\nconst LINE_HEIGHT_PX = 24;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nconst TextFieldComponent = React.forwardRef<TextFieldHandle, TextFieldProps>(\n\t(\n\t\t{\n\t\t\t// Core\n\t\t\tvariant = \"filled\",\n\t\t\tlabel,\n\t\t\tvalue: valueProp,\n\t\t\tdefaultValue = \"\",\n\t\t\tonChange,\n\t\t\t// Input config\n\t\t\ttype = \"text\",\n\t\t\tplaceholder,\n\t\t\tname,\n\t\t\tid: idProp,\n\t\t\tautoComplete,\n\t\t\tinputMode,\n\t\t\tautoResize = false,\n\t\t\tmaxRows,\n\t\t\trows = autoResize ? 1 : 2,\n\t\t\tcols,\n\t\t\ttextDirection,\n\t\t\t// Validation\n\t\t\trequired = false,\n\t\t\tnoAsterisk = false,\n\t\t\terror: errorProp = false,\n\t\t\terrorText,\n\t\t\tminLength,\n\t\t\tmaxLength,\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t\tpattern,\n\t\t\tmultiple,\n\t\t\t// Supporting text\n\t\t\tsupportingText,\n\t\t\t// Decorators\n\t\t\tprefixText,\n\t\t\tsuffixText,\n\t\t\tleadingIcon,\n\t\t\ttrailingIcon,\n\t\t\ttrailingIconMode = \"none\",\n\t\t\t// States\n\t\t\tdisabled = false,\n\t\t\treadOnly = false,\n\t\t\tnoSpinner = false,\n\t\t\t// Form\n\t\t\tform,\n\t\t\t// Accessibility\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-describedby\": ariaDescribedby,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\t// Layout\n\t\t\tclassName,\n\t\t\tfullWidth = true,\n\t\t\tdense = false,\n\t\t\t// ScrollArea\n\t\t\tscrollAreaType = \"hover\",\n\t\t\t// Callbacks\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tonKeyDown,\n\t\t\tonKeyUp,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\t\tconst toolbarContext = useToolbarContext();\n\t\tconst isInToolbar = !!toolbarContext;\n\n\t\t// ── Props Override (Toolbar) ──────────────────────────────────────────\n\t\tconst resolvedDense = isInToolbar ? true : dense;\n\t\tconst resolvedLabel = isInToolbar ? undefined : label;\n\n\t\t// ── IDs ───────────────────────────────────────────────────────────────\n\t\tconst generatedId = React.useId();\n\t\tconst inputId = idProp ?? `tf-${generatedId}`;\n\t\tconst supportingId = `${inputId}-supporting`;\n\n\t\t// ── Value state ───────────────────────────────────────────────────────\n\t\tconst isControlled = valueProp !== undefined;\n\t\tconst [internalValue, setInternalValue] = React.useState(defaultValue);\n\t\tconst currentValue = isControlled ? (valueProp as string) : internalValue;\n\n\t\t// ── Interaction state ─────────────────────────────────────────────────\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\t// Hover color changes are handled by CSS (group-hover/tf) for a11y compliance.\n\n\t\t// ── Password toggle ───────────────────────────────────────────────────\n\t\tconst [showPassword, setShowPassword] = React.useState(false);\n\t\tconst resolvedInputType =\n\t\t\ttype === \"password\" && showPassword ? \"text\" : type;\n\n\t\t// ── Native validation error ───────────────────────────────────────────\n\t\tconst [nativeError, setNativeError] = React.useState(\"\");\n\n\t\t// ── Label width for outlined notch ────────────────────────────────────\n\t\tconst [labelWidth, setLabelWidth] = React.useState(0);\n\n\t\t// ── Derived state ─────────────────────────────────────────────────────\n\t\tconst hasValue = currentValue.length > 0;\n\t\t/** Label is floated when focused OR when there is a value. */\n\t\tconst isFloated = isFocused || hasValue;\n\t\tconst isError =\n\t\t\terrorProp ||\n\t\t\t!!nativeError ||\n\t\t\t(maxLength !== undefined && currentValue.length > maxLength);\n\t\tconst containerHeight = resolvedDense\n\t\t\t? TF_SIZE.denseHeight\n\t\t\t: TF_SIZE.height;\n\t\tconst showAsterisk = required && !noAsterisk;\n\n\t\t// ── Refs ──────────────────────────────────────────────────────────────\n\t\tconst inputRef = React.useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\t\tconst labelSpanRef = React.useRef<HTMLSpanElement>(null);\n\n\t\t// Measure label span width for outlined notch (once on mount)\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (labelSpanRef.current) {\n\t\t\t\tsetLabelWidth(labelSpanRef.current.offsetWidth);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []); // mount only — label text changes are rare in production\n\n\t\t// ── Auto-resize textarea ──────────────────────────────────────────────\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (type !== \"textarea\" || !inputRef.current) return;\n\t\t\tconst textarea = inputRef.current as HTMLTextAreaElement;\n\n\t\t\tif (autoResize) {\n\t\t\t\t// currentValue in deps triggers re-measure on each keystroke\n\t\t\t\tvoid currentValue;\n\t\t\t\ttextarea.style.height = \"auto\";\n\t\t\t\ttextarea.style.height = `${textarea.scrollHeight}px`;\n\n\t\t\t\tif (maxRows) {\n\t\t\t\t\ttextarea.style.maxHeight = `${maxRows * LINE_HEIGHT_PX}px`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hide native scrollbar — ScrollArea handles it\n\t\t\ttextarea.style.overflowY = \"hidden\";\n\t\t}, [type, autoResize, maxRows, currentValue]);\n\n\t\t// ── Handlers ──────────────────────────────────────────────────────────\n\n\t\tconst handleValueChange = React.useCallback(\n\t\t\t(newValue: string) => {\n\t\t\t\tif (!isControlled) setInternalValue(newValue);\n\t\t\t\t// Clear native validation error when user types\n\t\t\t\tsetNativeError(\"\");\n\t\t\t\t(inputRef.current as HTMLInputElement)?.setCustomValidity?.(\"\");\n\t\t\t},\n\t\t\t[isControlled],\n\t\t);\n\n\t\tconst handleChange = React.useCallback(\n\t\t\t(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n\t\t\t\tconst newVal = e.target.value;\n\t\t\t\thandleValueChange(newVal);\n\t\t\t\tonChange?.(newVal, e);\n\t\t\t},\n\t\t\t[handleValueChange, onChange],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n\t\t\t\tsetIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\t// Run native validation on blur\n\t\t\t\tconst el = inputRef.current as HTMLInputElement;\n\t\t\t\tif (el && !el.validity.valid) {\n\t\t\t\t\tsetNativeError(el.validationMessage);\n\t\t\t\t} else {\n\t\t\t\t\tsetNativeError(\"\");\n\t\t\t\t}\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst handleClear = React.useCallback(() => {\n\t\t\thandleValueChange(\"\");\n\t\t\tonChange?.(\"\", {\n\t\t\t\ttarget: { value: \"\" },\n\t\t\t} as React.ChangeEvent<HTMLInputElement>);\n\t\t\tinputRef.current?.focus();\n\t\t}, [handleValueChange, onChange]);\n\n\t\tconst handlePasswordToggle = React.useCallback(() => {\n\t\t\tsetShowPassword((prev) => !prev);\n\t\t\tinputRef.current?.focus();\n\t\t}, []);\n\n\t\t// ── Imperative Handle ─────────────────────────────────────────────────\n\t\tReact.useImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tfocus: () => inputRef.current?.focus(),\n\t\t\t\tblur: () => inputRef.current?.blur(),\n\t\t\t\tselect: () => (inputRef.current as HTMLInputElement)?.select?.(),\n\t\t\t\tclear: () => handleValueChange(\"\"),\n\t\t\t\tsetCustomValidity: (msg: string) =>\n\t\t\t\t\t(inputRef.current as HTMLInputElement)?.setCustomValidity?.(msg),\n\t\t\t\tcheckValidity: () =>\n\t\t\t\t\t(inputRef.current as HTMLInputElement)?.checkValidity?.() ?? true,\n\t\t\t\treportValidity: () => {\n\t\t\t\t\tconst el = inputRef.current as HTMLInputElement;\n\t\t\t\t\tconst valid = el?.reportValidity?.() ?? true;\n\t\t\t\t\tif (!valid) setNativeError(el?.validationMessage ?? \"\");\n\t\t\t\t\treturn valid;\n\t\t\t\t},\n\t\t\t\tgetValue: () => currentValue,\n\t\t\t\tgetInputElement: () => inputRef.current,\n\t\t\t}),\n\t\t\t[currentValue, handleValueChange],\n\t\t);\n\n\t\t// ── ARIA describedby ──────────────────────────────────────────────────\n\t\tconst hasSupporting = !!(\n\t\t\tsupportingText ||\n\t\t\terrorText ||\n\t\t\tmaxLength !== undefined\n\t\t);\n\t\tconst computedDescribedby =\n\t\t\t[hasSupporting ? supportingId : \"\", ariaDescribedby ?? \"\"]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \") || undefined;\n\n\t\t// ── Input classes ─────────────────────────────────────────────────────\n\t\tconst inputClass = cn(\n\t\t\t\"bg-transparent outline-none w-full\",\n\t\t\t!resolvedLabel || isInToolbar ? \"self-center\" : \"self-end\",\n\t\t\t\"text-base leading-6 text-m3-on-surface\",\n\t\t\t\"caret-[var(--color-m3-primary)]\",\n\t\t\t\"placeholder:text-m3-on-surface-variant/60\",\n\t\t\tnoSpinner &&\n\t\t\t\ttype === \"number\" &&\n\t\t\t\t\"[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\",\n\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t);\n\n\t\t// Shared input element props\n\t\tconst inputProps = {\n\t\t\tid: inputId,\n\t\t\tname,\n\t\t\tvalue: currentValue,\n\t\t\tplaceholder: !resolvedLabel || isFloated ? (placeholder ?? \"\") : \"\",\n\t\t\tdisabled,\n\t\t\treadOnly,\n\t\t\trequired,\n\t\t\tminLength,\n\t\t\tmaxLength,\n\t\t\tautoComplete,\n\t\t\tinputMode,\n\t\t\tform,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\t\"aria-describedby\": computedDescribedby,\n\t\t\t\"aria-invalid\": isError || undefined,\n\t\t\t\"aria-required\": required || undefined,\n\t\t\tonChange: handleChange,\n\t\t\tonFocus: handleFocus,\n\t\t\tonBlur: handleBlur,\n\t\t\tonKeyDown,\n\t\t\tonKeyUp,\n\t\t};\n\n\t\t// ── Container classes ─────────────────────────────────────────────────\n\t\tconst hasLeading = !!leadingIcon;\n\t\t// ALWAYS 16px gap between text and container/icons\n\t\tconst paddingStart = \"pl-4\";\n\t\tconst paddingEnd = \"pr-4\";\n\n\t\tconst containerClass = cn(\n\t\t\t\"relative flex items-center\",\n\t\t\tvariant === \"filled\"\n\t\t\t\t? isInToolbar\n\t\t\t\t\t? \"bg-transparent\"\n\t\t\t\t\t: \"bg-[var(--color-m3-surface-container-highest)] rounded-tl-sm rounded-tr-sm\"\n\t\t\t\t: \"bg-transparent rounded-sm\",\n\t\t\tfullWidth ? \"w-full\" : \"w-fit\",\n\t\t);\n\n\t\tconst innerClass = cn(\n\t\t\t\"relative flex flex-col flex-1 min-w-0 h-full\",\n\t\t\tpaddingStart,\n\t\t\tpaddingEnd,\n\t\t\tisInToolbar || !resolvedLabel\n\t\t\t\t? \"justify-center\"\n\t\t\t\t: variant === \"filled\"\n\t\t\t\t\t? resolvedDense\n\t\t\t\t\t\t? \"pt-5 pb-2\"\n\t\t\t\t\t\t: \"pt-6 pb-2\"\n\t\t\t\t\t: resolvedDense\n\t\t\t\t\t\t? \"py-3\"\n\t\t\t\t\t\t: \"py-4\",\n\t\t);\n\n\t\tconst wrapperClass = cn(\n\t\t\t\"group/tf inline-flex flex-col\",\n\t\t\tfullWidth ? \"w-full\" : \"w-fit\",\n\t\t\tdisabled && \"opacity-[0.38] pointer-events-none\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst containerHeightClass = resolvedDense ? \"h-12\" : \"h-14\";\n\n\t\t// ── Render ────────────────────────────────────────────────────────────\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div className={wrapperClass}>\n\t\t\t\t\t{/* Main container */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tcontainerClass,\n\t\t\t\t\t\t\ttype !== \"textarea\" && containerHeightClass,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Outlined border with animated notch */}\n\t\t\t\t\t\t{variant === \"outlined\" && !isInToolbar && (\n\t\t\t\t\t\t\t<OutlineContainer\n\t\t\t\t\t\t\t\tisFloated={isFloated}\n\t\t\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\tisHovered={false}\n\t\t\t\t\t\t\t\tlabelWidth={labelWidth}\n\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Hover state layer (filled only) */}\n\t\t\t\t\t\t{variant === \"filled\" && !isInToolbar && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"absolute inset-0 pointer-events-none rounded-[inherit] bg-m3-on-surface\",\n\t\t\t\t\t\t\t\t\t\"opacity-0 transition-opacity duration-150\",\n\t\t\t\t\t\t\t\t\t\"group-hover/tf:opacity-[0.08]\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Leading icon */}\n\t\t\t\t\t\t{leadingIcon && (\n\t\t\t\t\t\t\t<LeadingIcon isError={isError} isDisabled={disabled}>\n\t\t\t\t\t\t\t\t{leadingIcon}\n\t\t\t\t\t\t\t</LeadingIcon>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Inner column: floating label + input row */}\n\t\t\t\t\t\t<div className={innerClass}>\n\t\t\t\t\t\t\t{/* Floating label — absolutely positioned over the inner region */}\n\t\t\t\t\t\t\t{resolvedLabel && (\n\t\t\t\t\t\t\t\t<FloatingLabel\n\t\t\t\t\t\t\t\t\ttext={resolvedLabel}\n\t\t\t\t\t\t\t\t\tisFloated={isFloated}\n\t\t\t\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\t\tcontainerHeight={containerHeight}\n\t\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t\t\tshowAsterisk={showAsterisk}\n\t\t\t\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\t\t\t\tlabelRef={labelSpanRef}\n\t\t\t\t\t\t\t\t\thasLeading={hasLeading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Input row: prefix + input/textarea + suffix */}\n\t\t\t\t\t\t\t<div className=\"flex items-center w-full\">\n\t\t\t\t\t\t\t\t{prefixText && (\n\t\t\t\t\t\t\t\t\t<PrefixSuffix\n\t\t\t\t\t\t\t\t\t\ttext={prefixText}\n\t\t\t\t\t\t\t\t\t\ttype=\"prefix\"\n\t\t\t\t\t\t\t\t\t\tvisible={isFloated}\n\t\t\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{type === \"textarea\" ? (\n\t\t\t\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\t\t\t\ttype={scrollAreaType}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full flex-1\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\theight: !autoResize ? rows * LINE_HEIGHT_PX : undefined,\n\t\t\t\t\t\t\t\t\t\t\tmaxHeight:\n\t\t\t\t\t\t\t\t\t\t\t\tautoResize && maxRows\n\t\t\t\t\t\t\t\t\t\t\t\t\t? maxRows * LINE_HEIGHT_PX\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tviewportClassName=\"max-h-[inherit]\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\t\t\tref={inputRef as React.Ref<HTMLTextAreaElement>}\n\t\t\t\t\t\t\t\t\t\t\trows={rows}\n\t\t\t\t\t\t\t\t\t\t\tcols={cols}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\tinputClass,\n\t\t\t\t\t\t\t\t\t\t\t\t\"resize-none mt-2\",\n\t\t\t\t\t\t\t\t\t\t\t\tautoResize ? \"h-auto\" : \"h-full\",\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ direction: textDirection || undefined }}\n\t\t\t\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\tref={inputRef as React.Ref<HTMLInputElement>}\n\t\t\t\t\t\t\t\t\t\ttype={type === \"password\" ? resolvedInputType : type}\n\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\t\t\t\t\tpattern={pattern}\n\t\t\t\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\t\t\t\tclassName={inputClass}\n\t\t\t\t\t\t\t\t\t\tstyle={{ direction: textDirection || undefined }}\n\t\t\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{suffixText && (\n\t\t\t\t\t\t\t\t\t<PrefixSuffix\n\t\t\t\t\t\t\t\t\t\ttext={suffixText}\n\t\t\t\t\t\t\t\t\t\ttype=\"suffix\"\n\t\t\t\t\t\t\t\t\t\tvisible={isFloated}\n\t\t\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Trailing icon: clear, password-toggle, or custom */}\n\t\t\t\t\t\t{(trailingIconMode !== \"none\" || trailingIcon) && (\n\t\t\t\t\t\t\t<TrailingIcon\n\t\t\t\t\t\t\t\tmode={trailingIcon ? \"custom\" : trailingIconMode}\n\t\t\t\t\t\t\t\tvalue={currentValue}\n\t\t\t\t\t\t\t\tshowPassword={showPassword}\n\t\t\t\t\t\t\t\tonClear={handleClear}\n\t\t\t\t\t\t\t\tonPasswordToggle={handlePasswordToggle}\n\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t\t</TrailingIcon>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Active indicator: bottom border line (filled variant only) */}\n\t\t\t\t\t\t{variant === \"filled\" && !isInToolbar && (\n\t\t\t\t\t\t\t<ActiveIndicator\n\t\t\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\tisHovered={false}\n\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Supporting text area: helper text + character counter */}\n\t\t\t\t\t{hasSupporting && (\n\t\t\t\t\t\t<SupportingText\n\t\t\t\t\t\t\tsupportingText={supportingText}\n\t\t\t\t\t\t\terrorText={errorText ?? (nativeError || undefined)}\n\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\tcharCount={\n\t\t\t\t\t\t\t\tmaxLength !== undefined ? currentValue.length : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\tid={supportingId}\n\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nTextFieldComponent.displayName = \"TextField\";\n\n/**\n * MD3 Expressive TextField.\n *\n * Supports `filled` and `outlined` variants, floating label animation,\n * prefix/suffix, leading/trailing icons, supporting text, character counter,\n * textarea mode, clear button, password toggle, and native form validation.\n *\n * @example\n * ```tsx\n * // Filled (default)\n * <TextField label=\"Email\" type=\"email\" />\n *\n * // Outlined with error\n * <TextField variant=\"outlined\" label=\"Username\" error errorText=\"Already taken\" />\n *\n * // With clear button\n * <TextField label=\"Search\" trailingIconMode=\"clear\" />\n *\n * // Password with toggle\n * <TextField label=\"Password\" type=\"password\" trailingIconMode=\"password-toggle\" />\n *\n * // With character counter\n * <TextField label=\"Bio\" maxLength={140} supportingText=\"Describe yourself\" />\n * ```\n *\n * @see https://m3.material.io/components/text-fields/overview\n */\nexport const TextField = React.memo(TextFieldComponent);\n","// ─── M3 Expressive Select — Select Component (Exposed Dropdown & Autocomplete) ──\nimport * as React from \"react\";\nimport { useVirtualList } from \"../../hooks/useVirtualList\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../icon\";\nimport { Menu, MenuContent, MenuItem, MenuTrigger } from \"../menu\";\nimport { ProgressIndicator } from \"../progress-indicator\";\nimport { TextField } from \"../text-field\";\n\nimport type { TextFieldHandle } from \"../text-field/text-field.types\";\nimport type { SelectOption, SelectProps } from \"./select.types\";\n\n/**\n * M3 Expressive Select component (Exposed Dropdown Menu & Autocomplete).\n *\n * Implements Material 3 Exposed Dropdown Menu spec (Figma Node `58966:3961`).\n * Features progressive slice virtualization and server-side/async search via `onSearchChange`.\n *\n * @example\n * // Standard Exposed Dropdown Menu\n * <Select\n *   label=\"City\"\n *   options={[\n *     { label: \"Hanoi\", value: \"hn\" },\n *     { label: \"Ho Chi Minh City\", value: \"hcm\" }\n *   ]}\n *   value={city}\n *   onChange={(val) => setCity(val)}\n * />\n *\n * @example\n * // Searchable Autocomplete (Local filtering)\n * <Select\n *   searchable\n *   label=\"Search Employee\"\n *   options={userList}\n *   onChange={(val, opt) => setSelected(opt)}\n * />\n *\n * @example\n * // Searchable Autocomplete (Async / Server-side search)\n * <Select\n *   searchable\n *   loading={isLoading}\n *   label=\"Search Countries\"\n *   options={searchResults}\n *   onSearchChange={(query) => fetchCountries(query)}\n *   onChange={(val, opt) => setSelectedCountry(opt)}\n * />\n */\nexport const Select = React.forwardRef<TextFieldHandle, SelectProps>(\n\t(\n\t\t{\n\t\t\toptions,\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tonSearchChange,\n\t\t\tsearchable = false,\n\t\t\tloading = false,\n\t\t\tmaxVisible = 50,\n\t\t\tmaxHeight = \"360px\",\n\t\t\tplaceholder,\n\t\t\tlabel,\n\t\t\tsupportingText,\n\t\t\tcolorVariant = \"standard\",\n\t\t\tmenuVariant = \"expressive\",\n\t\t\tshowDividers = true,\n\t\t\tseparatorStyle,\n\t\t\temptyText = \"No options found\",\n\t\t\tmatchTriggerWidth = true,\n\t\t\tdisabled = false,\n\t\t\tclassName,\n\t\t\tvariant = \"outlined\",\n\t\t\trenderOption,\n\t\t\trenderContent,\n\t\t\tchildren,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [internalValue, setInternalValue] = React.useState(\n\t\t\t() => defaultValue ?? \"\",\n\t\t);\n\t\tconst isControlled = controlledValue !== undefined;\n\t\tconst currentValue = isControlled ? controlledValue : internalValue;\n\n\t\tconst [open, setOpen] = React.useState(false);\n\t\tconst openRef = React.useRef(open);\n\t\topenRef.current = open;\n\n\t\tconst [searchQuery, setSearchQuery] = React.useState(\"\");\n\t\tconst [scrollViewport, setScrollViewport] =\n\t\t\tReact.useState<HTMLDivElement | null>(null);\n\n\t\t// Find selected option object\n\t\tconst selectedOption = React.useMemo(\n\t\t\t() => options.find((opt) => opt.value === currentValue),\n\t\t\t[options, currentValue],\n\t\t);\n\n\t\t// Determine display text for input\n\t\tconst displayValue = searchable\n\t\t\t? open\n\t\t\t\t? searchQuery\n\t\t\t\t: (selectedOption?.label ?? \"\")\n\t\t\t: (selectedOption?.label ?? \"\");\n\n\t\t// Filter options:\n\t\t// When `onSearchChange` is provided, internal filtering is disabled (consumer passes filtered list)\n\t\tconst filteredOptions = React.useMemo(() => {\n\t\t\tif (onSearchChange) return options;\n\t\t\tif (!searchable || !searchQuery.trim()) return options;\n\t\t\tconst query = searchQuery.toLowerCase();\n\t\t\treturn options.filter((opt) => opt.label.toLowerCase().includes(query));\n\t\t}, [options, searchable, searchQuery, onSearchChange]);\n\n\t\t// Progressive virtualization using IntersectionObserver with ScrollArea viewport as root\n\t\tconst { visibleItems, hasMore, sentinelRef } = useVirtualList(\n\t\t\tfilteredOptions,\n\t\t\t{\n\t\t\t\tbatchSize: maxVisible,\n\t\t\t\troot: scrollViewport,\n\t\t\t},\n\t\t);\n\n\t\tconst handleSelect = React.useCallback(\n\t\t\t(option: SelectOption) => {\n\t\t\t\tif (option.disabled) return;\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalValue(option.value);\n\t\t\t\t}\n\t\t\t\tonChange?.(option.value, option);\n\t\t\t\tsetOpen(false);\n\t\t\t\tsetSearchQuery(\"\");\n\t\t\t},\n\t\t\t[isControlled, onChange],\n\t\t);\n\n\t\tconst handleInputChange = React.useCallback(\n\t\t\t(inputValue: string) => {\n\t\t\t\tif (searchable) {\n\t\t\t\t\tsetSearchQuery(inputValue);\n\t\t\t\t\tif (!openRef.current) setOpen(true);\n\t\t\t\t\tonSearchChange?.(inputValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[searchable, onSearchChange],\n\t\t);\n\n\t\tconst handleInputFocus = React.useCallback(() => {\n\t\t\tif (!disabled && !openRef.current) {\n\t\t\t\tsetOpen(true);\n\t\t\t\tif (searchable) {\n\t\t\t\t\tsetSearchQuery(\"\");\n\t\t\t\t\tonSearchChange?.(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}, [disabled, searchable, onSearchChange]);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\t\t\tif (e.key === \"ArrowDown\" && !openRef.current) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetOpen(true);\n\t\t\t\t} else if (e.key === \"Escape\" && openRef.current) {\n\t\t\t\t\tsetOpen(false);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst resolvedSeparatorStyle =\n\t\t\tseparatorStyle ?? (showDividers ? \"divider\" : \"none\");\n\n\t\treturn (\n\t\t\t<Menu\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={setOpen}\n\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\tvariant={menuVariant}\n\t\t\t\tmodal={false}\n\t\t\t>\n\t\t\t\t<MenuTrigger asChild>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\tonPointerDown={\n\t\t\t\t\t\t\tsearchable\n\t\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\t\t// In searchable mode, the user is interacting with an editable text input.\n\t\t\t\t\t\t\t\t\t\t// Prevent Radix DropdownMenu.Trigger from intercepting pointerdown (which toggles open/closed\n\t\t\t\t\t\t\t\t\t\t// and calls preventDefault(), blocking text selection and native input focus).\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\t\t\t\t\t\tif (!openRef.current) {\n\t\t\t\t\t\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t(e.target as HTMLElement)?.focus?.();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\tsupportingText={supportingText}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly={!searchable}\n\t\t\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\t\t\tonFocus={handleInputFocus}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tsearchable ? \"cursor-text\" : \"cursor-pointer\",\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\ttrailingIcon={\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tname=\"arrow_drop_down\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"transition-transform duration-200 cursor-pointer\",\n\t\t\t\t\t\t\t\t\t\topen && \"rotate-180\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tonClick={\n\t\t\t\t\t\t\t\t\t\tsearchable\n\t\t\t\t\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpen((prev) => !prev);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</MenuTrigger>\n\t\t\t\t<MenuContent\n\t\t\t\t\tmatchTriggerWidth={matchTriggerWidth}\n\t\t\t\t\tseparatorStyle={resolvedSeparatorStyle}\n\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\tonViewportRef={setScrollViewport}\n\t\t\t\t\tclassName=\"p-1\"\n\t\t\t\t\tonCloseAutoFocus={(e: Event) => {\n\t\t\t\t\t\tif (searchable) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tonFocusOutside={(e: Event) => {\n\t\t\t\t\t\tif (searchable) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{children ? (\n\t\t\t\t\t\tchildren\n\t\t\t\t\t) : renderContent ? (\n\t\t\t\t\t\trenderContent({\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tfilteredOptions,\n\t\t\t\t\t\t\tvisibleOptions: visibleItems,\n\t\t\t\t\t\t\thasMore,\n\t\t\t\t\t\t\tsentinelRef,\n\t\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t\tselectedOption,\n\t\t\t\t\t\t\tsearchQuery,\n\t\t\t\t\t\t\thandleSelect,\n\t\t\t\t\t\t\temptyText,\n\t\t\t\t\t\t\tloading,\n\t\t\t\t\t\t})\n\t\t\t\t\t) : loading ? (\n\t\t\t\t\t\t<SelectLoading />\n\t\t\t\t\t) : filteredOptions.length > 0 ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{visibleItems.map((option, index) => {\n\t\t\t\t\t\t\t\tif (renderOption) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<React.Fragment key={option.value}>\n\t\t\t\t\t\t\t\t\t\t\t{renderOption(option, {\n\t\t\t\t\t\t\t\t\t\t\t\tselected: option.value === currentValue,\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled: option.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\thandleSelect: () => handleSelect(option),\n\t\t\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\t\t\t\t\tselected={option.value === currentValue}\n\t\t\t\t\t\t\t\t\t\tdisabled={option.disabled}\n\t\t\t\t\t\t\t\t\t\tleadingIcon={option.leadingIcon}\n\t\t\t\t\t\t\t\t\t\tsupportingText={option.supportingText}\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleSelect(option)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t{hasMore && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tref={sentinelRef}\n\t\t\t\t\t\t\t\t\tclassName=\"h-2 w-full shrink-0 pointer-events-none\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SelectEmpty>{emptyText}</SelectEmpty>\n\t\t\t\t\t)}\n\t\t\t\t</MenuContent>\n\t\t\t</Menu>\n\t\t);\n\t},\n);\nSelect.displayName = \"Select\";\n\nfunction SelectLoading() {\n\treturn (\n\t\t<div className=\"flex items-center justify-center p-4\">\n\t\t\t<ProgressIndicator\n\t\t\t\tvariant=\"circular\"\n\t\t\t\tsize={24}\n\t\t\t\ttrackHeight={3}\n\t\t\t\taria-label=\"Loading options...\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction SelectEmpty({\n\tchildren,\n\tisGapVariant: _isGapVariant,\n\titemPosition: _itemPosition,\n\tindex: _index,\n\tcount: _count,\n\t...props\n}: {\n\tchildren?: React.ReactNode;\n\tisGapVariant?: boolean;\n\titemPosition?: string;\n\tindex?: number;\n\tcount?: number;\n} & React.HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\tclassName=\"px-4 py-3 text-body-medium text-m3-on-surface-variant text-center select-none\"\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * @file useSliderMath.ts\n * MD3 Expressive Slider — Math utility hook.\n *\n * Handles all slider math in one place:\n * - value coercion to [min, max]\n * - step snapping for discrete mode\n * - value ↔ percent conversion\n * - keyboard delta calculation\n * - tick position generation\n *\n * Exported as a pure hook for testability and reuse in both Slider and RangeSlider.\n */\n\nimport { useMemo } from \"react\";\n\n// ─── Pure math helpers (exported for unit testing) ───────────────────────────\n\n/**\n * Clamps `value` to the closed interval `[min, max]`.\n *\n * @example coerceValue(150, 0, 100) → 100\n */\nexport function coerceValue(value: number, min: number, max: number): number {\n\treturn Math.max(min, Math.min(max, value));\n}\n\n/**\n * Rounds `value` to the nearest multiple of `step` relative to `min`.\n * When `step === 0`, returns `value` unchanged (continuous mode).\n *\n * @example snapToStep(23, 0, 10) → 20\n * @example snapToStep(27, 0, 10) → 30\n */\nexport function snapToStep(value: number, min: number, step: number): number {\n\tif (step <= 0) return value;\n\tconst steps = Math.round((value - min) / step);\n\t// Use toPrecision to avoid floating-point drift (e.g., 0.1 + 0.2 issues)\n\treturn Number((min + steps * step).toPrecision(10));\n}\n\n/**\n * Converts a raw value to a 0–1 fraction of the [min, max] range.\n * Returns 0 when max === min (degenerate range).\n *\n * @example valueToPercent(50, 0, 100) → 0.5\n */\nexport function valueToPercent(\n\tvalue: number,\n\tmin: number,\n\tmax: number,\n): number {\n\tif (max === min) return 0;\n\treturn (value - min) / (max - min);\n}\n\n/**\n * Converts a 0–1 fraction to a value within [min, max], then snaps to step.\n * The result is also coerced to [min, max].\n *\n * @example percentToValue(0.5, 0, 100, 10) → 50\n * @example percentToValue(0.23, 0, 100, 10) → 20\n */\nexport function percentToValue(\n\tpercent: number,\n\tmin: number,\n\tmax: number,\n\tstep: number,\n): number {\n\tconst raw = min + percent * (max - min);\n\tconst snapped = snapToStep(raw, min, step);\n\treturn coerceValue(snapped, min, max);\n}\n\n/**\n * Computes the keyboard increment for a given key.\n *\n * Key mappings per WAI-ARIA Slider pattern:\n * - ArrowRight/Up → +step (or +1% of range if continuous)\n * - ArrowLeft/Down → -step (or -1% of range)\n * - PageUp → +10% of range (snapped to step)\n * - PageDown → -10% of range (snapped to step)\n * - Home / End → handled by the caller (jump to min/max)\n *\n * @returns the signed delta to add to current value, or `null` for Home/End.\n */\nexport function getKeyboardDelta(\n\tkey: string,\n\tstep: number,\n\tmin: number,\n\tmax: number,\n): number | null {\n\tconst range = max - min;\n\tconst discreteStep = step > 0 ? step : range / 100; // 1% of range for continuous\n\n\tswitch (key) {\n\t\tcase \"ArrowRight\":\n\t\tcase \"ArrowUp\":\n\t\t\treturn discreteStep;\n\t\tcase \"ArrowLeft\":\n\t\tcase \"ArrowDown\":\n\t\t\treturn -discreteStep;\n\t\tcase \"PageUp\":\n\t\t\treturn step > 0 ? snapToStep(range * 0.1, 0, step) : range * 0.1;\n\t\tcase \"PageDown\":\n\t\t\treturn step > 0 ? -snapToStep(range * 0.1, 0, step) : -(range * 0.1);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\n/**\n * Generates the list of value positions for tick marks.\n * Returns an empty array when `step === 0` (continuous mode).\n *\n * @example generateTicks(0, 100, 10) → [0, 10, 20, ..., 100]\n */\nexport function generateTicks(\n\tmin: number,\n\tmax: number,\n\tstep: number,\n): number[] {\n\tif (step <= 0) return [];\n\tconst ticks: number[] = [];\n\tlet current = min;\n\twhile (current <= max) {\n\t\tticks.push(Number(current.toPrecision(10)));\n\t\tcurrent += step;\n\t}\n\t// Ensure max is included even if floating-point drift skips it\n\tif (ticks[ticks.length - 1] !== max) {\n\t\tticks.push(max);\n\t}\n\treturn ticks;\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────────────\n\nexport interface UseSliderMathOptions {\n\tmin: number;\n\tmax: number;\n\tstep: number;\n}\n\nexport interface UseSliderMathReturn {\n\t/** Clamp value to [min, max]. */\n\tcoerce: (v: number) => number;\n\t/** Snap value to nearest step (no-op if step=0). */\n\tsnap: (v: number) => number;\n\t/** Value → percent [0, 1]. */\n\ttoPercent: (v: number) => number;\n\t/** Percent [0, 1] → snapped value. */\n\tfromPercent: (pct: number) => number;\n\t/**\n\t * Signed delta for a keyboard key.\n\t * Returns `null` for Home/End (jump to min/max, handled by caller).\n\t */\n\tgetKeyDelta: (key: string) => number | null;\n\t/** Tick positions. Empty array in continuous mode. */\n\tticks: number[];\n}\n\n/**\n * Math utility hook for MD3 Slider components.\n *\n * Memoizes all math functions against `min`, `max`, `step` changes.\n * Use this in both `<Slider>` and `<RangeSlider>` to share logic.\n *\n * @example\n * ```ts\n * const { coerce, snap, toPercent, fromPercent, getKeyDelta, ticks } =\n *   useSliderMath({ min: 0, max: 100, step: 10 });\n *\n * const percent = toPercent(value);          // → 0.5 for value=50\n * const newValue = fromPercent(dragPercent); // → 50\n * const delta = getKeyDelta(\"ArrowRight\");   // → 10\n * ```\n */\nexport function useSliderMath({\n\tmin,\n\tmax,\n\tstep,\n}: UseSliderMathOptions): UseSliderMathReturn {\n\treturn useMemo(\n\t\t() => ({\n\t\t\tcoerce: (v: number) => coerceValue(v, min, max),\n\t\t\tsnap: (v: number) => snapToStep(v, min, step),\n\t\t\ttoPercent: (v: number) => valueToPercent(v, min, max),\n\t\t\tfromPercent: (pct: number) => percentToValue(pct, min, max, step),\n\t\t\tgetKeyDelta: (key: string) => getKeyboardDelta(key, step, min, max),\n\t\t\tticks: generateTicks(min, max, step),\n\t\t}),\n\t\t[min, max, step],\n\t);\n}\n","/**\n * @file slider.tokens.ts\n * MD3 Expressive Slider — Design tokens ported from:\n *   - SliderTokens.kt (Jetpack Compose M3 Expressive)\n *   - M3 Expressive visual spec (handle squeeze, gaps, asymmetric radii)\n *\n * All dimensional values are in px (dp equivalents for web).\n * Colors reference CSS custom properties — do NOT hardcode hex.\n * @see docs/m3/sliders/Slider.kt\n */\n\nimport type { MD3Size } from \"../../types/md3\";\n\n// ─── Dimensional tokens ───────────────────────────────────────────────────────\n\n/**\n * Core dimensional design tokens for the MD3 Expressive Slider.\n * Maps directly from SliderTokens.kt to CSS/JS values.\n */\nexport const SliderTokens = {\n\t// ── Track sizes (height for horizontal, width for vertical) ────────────────\n\ttrackSizes: {\n\t\txs: 16,\n\t\tsm: 24,\n\t\tmd: 40,\n\t\tlg: 56,\n\t\txl: 96,\n\t} satisfies Record<MD3Size, number>,\n\n\t// ── Track shapes (border radius) ──────────────────────────────────────────\n\ttrackShapes: {\n\t\txs: 8,\n\t\tsm: 8,\n\t\tmd: 12,\n\t\tlg: 16,\n\t\txl: 28,\n\t} satisfies Record<MD3Size, number>,\n\n\t// ── Thumb (handle) ────────────────────────────────────────────────────────\n\t/** Thumb height grows with track size */\n\tthumbHeights: {\n\t\txs: 44,\n\t\tsm: 44,\n\t\tmd: 52,\n\t\tlg: 68,\n\t\txl: 108,\n\t} satisfies Record<MD3Size, number>,\n\t/**\n\t * Thumb width at rest and on hover.\n\t * MD3 Expressive handle pill: 4dp wide.\n\t */\n\tthumbWidthDefault: 4,\n\t/**\n\t * Thumb width while pressed/dragging.\n\t * \"Squeeze\" animation: 4dp → 2dp (M3 Expressive behavior).\n\t */\n\tthumbWidthPressed: 2,\n\n\t// ── Track–thumb gap ───────────────────────────────────────────────────────\n\t/**\n\t * Transparent gap between the active/inactive track segments and the thumb.\n\t * Maps to ActiveHandleLeadingSpace / ActiveHandleTrailingSpace = 6dp.\n\t *\n\t * This gap is rendered by mathematically subtracting it from the track\n\t * segment width — NOT using margin/padding.\n\t */\n\tthumbGap: 6,\n\n\t// ── Track corner radii ────────────────────────────────────────────────────\n\t/**\n\t * Corner radius on the INNER ends of each track segment (facing the thumb).\n\t * Fixed to 2px according to MD3 Expressive Slider specs (TrackInsideCornerSize).\n\t * Outer ends use `trackSize / 2` (pill cap) — computed inline per component.\n\t */\n\ttrackInnerRadius: 2,\n\n\t// ── Stop indicator / Tick ─────────────────────────────────────────────────\n\t/** Tick dot size (width and height). = 4dp. */\n\ttickSize: 4,\n\n\t// ── Touch target ─────────────────────────────────────────────────────────\n\t/**\n\t * Minimum touch target for the thumb wrapper.\n\t * MD3 requires 48dp minimum touch target for interactive elements.\n\t */\n\tthumbTouchTarget: 48,\n\n\t// ── Value indicator ───────────────────────────────────────────────────────\n\t/** Offset above the thumb center for the value indicator tooltip. */\n\tvalueIndicatorOffset: 52,\n\n\t// ── Inset icon ────────────────────────────────────────────────────────────\n\t/** Standard icon size map for inset icons inside the track. */\n\tinsetIconSizes: {\n\t\txs: 0,\n\t\tsm: 0,\n\t\tmd: 24,\n\t\tlg: 24,\n\t\txl: 32,\n\t} satisfies Record<MD3Size, number>,\n\t/**\n\t * Padding between icon and track edge (horizontal).\n\t * Keeps the icon visually centered within the pill track.\n\t */\n\tinsetIconPadding: 4,\n} as const;\n\n// ─── Color tokens ─────────────────────────────────────────────────────────────\n\n/**\n * CSS custom property references for Slider colors.\n * Maps to --md-sys-color-* tokens in the MD3 theme system.\n *\n * DO NOT hardcode hex/rgba values — these references automatically\n * adapt to light/dark theme.\n */\nexport const SliderColors = {\n\t// ── Track ─────────────────────────────────────────────────────────────────\n\t/** Active track color. Maps to ActiveTrackColor token. */\n\tactiveTrack: \"var(--md-sys-color-primary)\",\n\t/** Inactive track color. Maps to InactiveTrackColor token. */\n\tinactiveTrack: \"var(--md-sys-color-secondary-container)\",\n\t/**\n\t * Disabled track color.\n\t * Uses opacity + on-surface per MD3 disabled state spec.\n\t */\n\tdisabledActiveTrack: \"var(--md-sys-color-on-surface)\",\n\tdisabledInactiveTrack: \"var(--md-sys-color-on-surface)\",\n\n\t// ── Thumb ─────────────────────────────────────────────────────────────────\n\t/** Thumb (handle) color. Maps to HandleColor token. */\n\tthumb: \"var(--md-sys-color-primary)\",\n\t/** Disabled thumb color. */\n\tdisabledThumb: \"var(--md-sys-color-on-surface)\",\n\n\t// ── Value indicator ───────────────────────────────────────────────────────\n\t/** Value indicator (tooltip) background. Maps to InverseSurface. */\n\tvalueIndicatorBg: \"var(--md-sys-color-inverse-surface)\",\n\t/** Value indicator (tooltip) text. Maps to InverseOnSurface. */\n\tvalueIndicatorText: \"var(--md-sys-color-inverse-on-surface)\",\n\n\t// ── Ticks ────────────────────────────────────────────────────────────────\n\t/**\n\t * Tick on the INACTIVE portion of the track.\n\t * Maps to TickMarkInactiveContainerColor (in spec: primary color stands out).\n\t */\n\ttickOnInactive: \"var(--md-sys-color-primary)\",\n\t/**\n\t * Tick on the ACTIVE portion of the track.\n\t * Maps to TickMarkActiveContainerColor (in spec: on-primary contrasts with filled track).\n\t */\n\ttickOnActive: \"var(--md-sys-color-on-primary)\",\n\tdisabledTick: \"var(--md-sys-color-on-surface)\",\n} as const;\n\n// ─── Animation constants ──────────────────────────────────────────────────────\n\n/**\n * FastSpatial spring for thumb width squeeze animation.\n * Equivalent to MotionSchemeKeyTokens.FastSpatial in Compose.\n */\nexport const SLIDER_THUMB_SPRING = {\n\ttype: \"spring\",\n\tstiffness: 500,\n\tdamping: 40,\n} as const;\n\n/**\n * DefaultSpatial spring for thumb position/track updates.\n * Slightly looser feel for position changes.\n */\nexport const SLIDER_POSITION_SPRING = {\n\ttype: \"spring\",\n\tstiffness: 400,\n\tdamping: 38,\n} as const;\n\n/** Color crossfade for active/inactive track color transitions. */\nexport const SLIDER_COLOR_TRANSITION = {\n\tduration: 0.18,\n\tease: \"easeInOut\",\n} as const;\n\n/** Value indicator appear/disappear animation. */\nexport const SLIDER_INDICATOR_TRANSITION = {\n\ttype: \"spring\",\n\tstiffness: 450,\n\tdamping: 32,\n} as const;\n","/**\n * @file slider-thumb.tsx\n * MD3 Expressive Slider — Animated pill-shaped thumb (handle).\n *\n * Design decisions:\n * 1. POINTER EVENTS (not Framer Motion drag): We use React pointer events\n *    + useMotionValue for real-time position tracking without re-render lag.\n *    Framer Motion's `drag` prop adds momentum/inertia that conflicts with MD3\n *    precise positioning; direct pointer handling gives us full control.\n * 2. SQUEEZE ANIMATION: `whileTap` shrinks width from 4px → 2px via spring.\n * 3. INVERTED Y-AXIS: Vertical slider maps bottom=min, top=max by inverting\n *    the pointer delta direction.\n * 4. VALUE INDICATOR: AnimatePresence pill tooltip with teardrop origin point.\n * 5. ACCESSIBILITY: role=slider, full ARIA attributes, keyboard nav.\n * 6. prefers-reduced-motion: Disables all animations for accessibility.\n *\n * @see docs/m3/sliders/Slider.kt#SliderDefaults.Thumb\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MD3Size } from \"../../types/md3\";\nimport { getKeyboardDelta } from \"./hooks/useSliderMath\";\nimport {\n\tSLIDER_INDICATOR_TRANSITION,\n\tSLIDER_THUMB_SPRING,\n\tSliderColors,\n\tSliderTokens,\n} from \"./slider.tokens\";\nimport type { SliderThumbProps } from \"./slider.types\";\n\n// ─── Value Indicator ─────────────────────────────────────────────────────────\n\ninterface ValueIndicatorProps {\n\tvalue: number;\n\tvisible: boolean;\n\torientation: \"horizontal\" | \"vertical\";\n\tformatValue?: (v: number) => string;\n\tprefersReduced: boolean;\n\tsize: MD3Size;\n}\n\n/** Floating value label that appears above/beside thumb on hover/drag. */\nconst ValueIndicator = React.memo(function ValueIndicator({\n\tvalue,\n\tvisible,\n\torientation,\n\tformatValue,\n\tprefersReduced,\n\tsize,\n}: ValueIndicatorProps) {\n\tconst label = formatValue ? formatValue(value) : String(Math.round(value));\n\tconst isHorizontal = orientation === \"horizontal\";\n\n\t// Calculate dynamic offset so tooltip sits above the thumb regardless of size\n\tconst thumbHeight = SliderTokens.thumbHeights[size];\n\t// Container center is 50%. The thumb top is `thumbHeight / 2` from center.\n\t// Add an 8px visual gap to prevent the tooltip from overlapping the thumb.\n\tconst offsetFromCenter = thumbHeight / 2 + 8;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{visible && (\n\t\t\t\t<m.div\n\t\t\t\t\tkey=\"value-indicator\"\n\t\t\t\t\trole=\"tooltip\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tinitial={\n\t\t\t\t\t\tprefersReduced\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tscale: 0,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\ty: isHorizontal ? 6 : 0,\n\t\t\t\t\t\t\t\t\tx: !isHorizontal ? -6 : 0,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tanimate={{ scale: 1, opacity: 1, y: 0, x: 0 }}\n\t\t\t\t\texit={\n\t\t\t\t\t\tprefersReduced\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tscale: 0,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\ty: isHorizontal ? 6 : 0,\n\t\t\t\t\t\t\t\t\tx: !isHorizontal ? -6 : 0,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tprefersReduced ? { duration: 0 } : SLIDER_INDICATOR_TRANSITION\n\t\t\t\t\t}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute pointer-events-none select-none\",\n\t\t\t\t\t\t\"rounded-full px-2.5 py-1 text-xs font-medium leading-none whitespace-nowrap\",\n\t\t\t\t\t\t// Position: above for horizontal, right for vertical\n\t\t\t\t\t\tisHorizontal\n\t\t\t\t\t\t\t? \"-translate-x-1/2 left-1/2\"\n\t\t\t\t\t\t\t: \"translate-y-1/2 bottom-1/2\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: SliderColors.valueIndicatorBg,\n\t\t\t\t\t\tcolor: SliderColors.valueIndicatorText,\n\t\t\t\t\t\ttransformOrigin: isHorizontal ? \"bottom center\" : \"center left\",\n\t\t\t\t\t\t...(isHorizontal\n\t\t\t\t\t\t\t? { bottom: `calc(50% + ${offsetFromCenter}px)` }\n\t\t\t\t\t\t\t: { left: `calc(50% + ${offsetFromCenter}px)` }),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</m.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n});\n\n// ─── SliderThumb ──────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Slider Thumb (handle).\n *\n * - Pill shape: 4px wide × 44px tall by default.\n * - Squeezes to 2px wide on press/drag (Framer Motion spring).\n * - Floats above track via absolute positioning at `percent` along the track.\n * - Handles pointer drag via React PointerEvents + useMotionValue.\n * - Full keyboard navigation per WAI-ARIA Slider pattern.\n * - Value indicator tooltip with AnimatePresence.\n *\n * @internal — consumed by `<Slider>` and `<RangeSlider>`\n */\nexport const SliderThumb = React.memo(function SliderThumb({\n\tvalue,\n\tpercent,\n\tmin,\n\tmax,\n\tstep,\n\tdisabled,\n\torientation,\n\tshowValueIndicator,\n\ttrackRef,\n\tonValueChange,\n\tonValueChangeEnd,\n\tformatValue,\n\tthumbId,\n\tsize,\n\tvariant,\n\tzIndex = 1,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n}: SliderThumbProps) {\n\tconst isHorizontal = orientation === \"horizontal\";\n\n\t// Map percent to [trackInset, 100% - trackInset]\n\t// Cap trackInset to gap + half thumb to prevent ghost segments and allow dragging to edge.\n\tconst insetLimit = SliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\tconst trackInset = Math.min(SliderTokens.trackSizes[size] / 2, insetLimit);\n\tconst posTarget = isHorizontal ? \"left\" : \"bottom\";\n\tconst motionStyle = {\n\t\t[posTarget]: `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`,\n\t};\n\n\tconst prefersReduced = useReducedMotion() ?? false;\n\n\tconst [isDragging, setIsDragging] = React.useState(false);\n\tconst [isHovered, setIsHovered] = React.useState(false);\n\tconst [isFocused, setIsFocused] = React.useState(false);\n\n\t// Track pointer capture ID\n\tconst pointerIdRef = React.useRef<number | null>(null);\n\tconst thumbRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst showIndicator =\n\t\tshowValueIndicator && (isDragging || isHovered || isFocused);\n\n\t// ── Position calculation ────────────────────────────────────────────────\n\t// Position the thumb center at `percent` along the track.\n\t// Offset by half-thumb to center it on the track line.\n\n\tconst positionStyle: React.CSSProperties = isHorizontal\n\t\t? {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\t...motionStyle,\n\t\t\t\ttop: \"50%\",\n\t\t\t\ttransform: \"translate(-50%, -50%)\",\n\t\t\t\tzIndex,\n\t\t\t}\n\t\t: {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\t...motionStyle,\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translate(-50%, 50%)\",\n\t\t\t\tzIndex,\n\t\t\t};\n\n\t// ── Pointer drag handlers ───────────────────────────────────────────────\n\n\tconst getDeltaFromPointer = React.useCallback(\n\t\t(e: PointerEvent): number => {\n\t\t\tconst trackEl = trackRef.current;\n\t\t\tif (!trackEl) return percent;\n\n\t\t\tconst rect = trackEl.getBoundingClientRect();\n\t\t\tconst space = isHorizontal ? rect.width : rect.height;\n\t\t\tconst insetLimit =\n\t\t\t\tSliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\t\t\tconst trackInset = Math.min(\n\t\t\t\tSliderTokens.trackSizes[size] / 2,\n\t\t\t\tinsetLimit,\n\t\t\t);\n\t\t\tconst safeSpace = space - trackInset * 2;\n\t\t\tif (safeSpace <= 0) return percent;\n\n\t\t\tlet rawPercent: number;\n\t\t\tif (isHorizontal) {\n\t\t\t\trawPercent = (e.clientX - rect.left - trackInset) / safeSpace;\n\t\t\t} else {\n\t\t\t\t// Inverted Y: bottom = min (0%), top = max (100%)\n\t\t\t\trawPercent = (rect.bottom - e.clientY - trackInset) / safeSpace;\n\t\t\t}\n\n\t\t\tconst clamped = Math.max(0, Math.min(1, rawPercent));\n\t\t\tconst range = max - min;\n\t\t\tconst rawValue = min + clamped * range;\n\t\t\tconst snapped =\n\t\t\t\tstep > 0 ? Math.round((rawValue - min) / step) * step + min : rawValue;\n\t\t\treturn Math.max(min, Math.min(max, snapped));\n\t\t},\n\t\t[isHorizontal, max, min, percent, step, trackRef, size],\n\t);\n\n\tconst handlePointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) return;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\t(e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\t\t\tpointerIdRef.current = e.pointerId;\n\t\t\tsetIsDragging(true);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst handlePointerMove = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (!isDragging || e.pointerId !== pointerIdRef.current) return;\n\t\t\tconst newValue = getDeltaFromPointer(e.nativeEvent);\n\t\t\tonValueChange(newValue);\n\t\t},\n\t\t[isDragging, getDeltaFromPointer, onValueChange],\n\t);\n\n\tconst handlePointerUp = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (e.pointerId !== pointerIdRef.current) return;\n\t\t\t(e.currentTarget as HTMLDivElement).releasePointerCapture(e.pointerId);\n\t\t\tpointerIdRef.current = null;\n\t\t\tsetIsDragging(false);\n\t\t\tonValueChangeEnd?.(value);\n\t\t},\n\t\t[onValueChangeEnd, value],\n\t);\n\n\t// ── Keyboard navigation ──────────────────────────────────────────────────\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) return;\n\n\t\t\tif (e.key === \"Home\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonValueChange(min);\n\t\t\t\tonValueChangeEnd?.(min);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key === \"End\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonValueChange(max);\n\t\t\t\tonValueChangeEnd?.(max);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst delta = getKeyboardDelta(e.key, step, min, max);\n\t\t\tif (delta === null) return;\n\t\t\te.preventDefault();\n\n\t\t\tconst newValue = Math.max(min, Math.min(max, value + delta));\n\t\t\tonValueChange(newValue);\n\t\t\tonValueChangeEnd?.(newValue);\n\t\t},\n\t\t[disabled, max, min, onValueChange, onValueChangeEnd, step, value],\n\t);\n\n\t// ── Render ───────────────────────────────────────────────────────────────\n\tconst thumbColor = disabled\n\t\t? SliderColors.disabledThumb\n\t\t: `var(--md-sys-color-${variant})`;\n\n\tconst squeezeSize = isDragging\n\t\t? SliderTokens.thumbWidthPressed\n\t\t: SliderTokens.thumbWidthDefault;\n\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\t...positionStyle,\n\t\t\t\twidth: SliderTokens.thumbTouchTarget,\n\t\t\t\theight: SliderTokens.thumbTouchTarget,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\ttouchAction: \"none\",\n\t\t\t}}\n\t\t\tclassName={cn(\n\t\t\t\t\"cursor-grab\",\n\t\t\t\tisDragging && \"cursor-grabbing\",\n\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t)}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerUp={handlePointerUp}\n\t\t\tonPointerCancel={handlePointerUp}\n\t\t>\n\t\t\t<ValueIndicator\n\t\t\t\tvalue={value}\n\t\t\t\tvisible={showIndicator}\n\t\t\t\torientation={orientation}\n\t\t\t\tformatValue={formatValue}\n\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\tsize={size}\n\t\t\t/>\n\n\t\t\t<m.div\n\t\t\t\tref={thumbRef}\n\t\t\t\tid={thumbId}\n\t\t\t\trole=\"slider\"\n\t\t\t\taria-valuemin={min}\n\t\t\t\taria-valuemax={max}\n\t\t\t\taria-valuenow={value}\n\t\t\t\taria-orientation={orientation}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\tonMouseEnter={() => !disabled && setIsHovered(true)}\n\t\t\t\tonMouseLeave={() => setIsHovered(false)}\n\t\t\t\tanimate={{\n\t\t\t\t\t...(isHorizontal ? { width: squeezeSize } : { height: squeezeSize }),\n\t\t\t\t\tbackgroundColor: thumbColor,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t}}\n\t\t\t\ttransition={prefersReduced ? { duration: 0 } : SLIDER_THUMB_SPRING}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative shrink-0 rounded-full select-none outline-none\",\n\t\t\t\t\t\"focus-visible:outline-2 focus-visible:outline-offset-2\",\n\t\t\t\t\t\"focus-visible:outline-(--md-sys-color-secondary)\",\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\t...(isHorizontal\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\theight: SliderTokens.thumbHeights[size],\n\t\t\t\t\t\t\t\twidth: SliderTokens.thumbWidthDefault,\n\t\t\t\t\t\t\t\twillChange: \"width\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\twidth: SliderTokens.thumbHeights[size],\n\t\t\t\t\t\t\t\theight: SliderTokens.thumbWidthDefault,\n\t\t\t\t\t\t\t\twillChange: \"height\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\tbackgroundColor: thumbColor,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n});\n","/**\n * @file range-slider.tsx\n * MD3 Expressive RangeSlider — Two-thumb slider with crossover prevention.\n *\n * Extends the core Slider architecture with:\n * - Two SliderThumb instances (start + end)\n * - Crossover prevention: start cannot exceed end and vice versa\n * - Z-index management: last-dragged thumb always on top\n * - Active track spans from startPercent to endPercent\n *\n * Design decisions:\n * - The track renders a custom \"range\" segment between the two thumbs.\n * - Each thumb has independent onValueChange callbacks + crossover clamping.\n * - Last-active thumb gets zIndex=2 to appear on top when thumbs are at same position.\n *\n * @see https://m3.material.io/components/sliders/overview\n * @see docs/m3/sliders/Slider.kt#RangeSlider\n */\n\nimport { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MD3Size } from \"../../types/md3\";\nimport { useSliderMath } from \"./hooks/useSliderMath\";\nimport { SliderColors, SliderTokens } from \"./slider.tokens\";\nimport type {\n\tRangeSliderProps,\n\tSliderTrackShape,\n\tSliderVariant,\n} from \"./slider.types\";\nimport { SliderThumb } from \"./slider-thumb\";\n\n// ─── Range Track ─────────────────────────────────────────────────────────────\n\ninterface RangeTrackProps {\n\tstartPercent: number;\n\tendPercent: number;\n\tsize: MD3Size;\n\torientation: \"horizontal\" | \"vertical\";\n\tvariant: SliderVariant;\n\tdisabled: boolean;\n\tticks: number[];\n\tmin: number;\n\tmax: number;\n\ttrackShape?: SliderTrackShape;\n\ttrackRef: React.RefObject<HTMLDivElement | null>;\n\tonTrackPointerDown?: (e: React.PointerEvent<HTMLDivElement>) => void;\n}\n\n/**\n * Track for RangeSlider: renders three segments.\n * Inactive | Gap | Active (range) | Gap | Inactive\n */\nconst RangeTrack = React.memo(function RangeTrack({\n\tstartPercent,\n\tendPercent,\n\tsize,\n\torientation,\n\tvariant,\n\tdisabled,\n\tticks,\n\tmin,\n\tmax,\n\ttrackShape = \"md3\",\n\ttrackRef,\n\tonTrackPointerDown,\n}: RangeTrackProps) {\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst trackPixelSize = SliderTokens.trackSizes[size];\n\tconst thumbHeight = SliderTokens.thumbHeights[size];\n\tconst { thumbGap, thumbWidthDefault, tickSize } = SliderTokens;\n\tconst thumbHalfWidth = thumbWidthDefault / 2;\n\n\tconst activeTrack = disabled\n\t\t? SliderColors.disabledActiveTrack\n\t\t: `var(--md-sys-color-${variant})`;\n\tconst inactiveTrack = disabled\n\t\t? SliderColors.disabledInactiveTrack\n\t\t: `var(--md-sys-color-${variant}-container)`;\n\n\tconst innerR = SliderTokens.trackInnerRadius;\n\n\tlet outerR = trackPixelSize / 2;\n\tif (trackShape === \"md3\") {\n\t\touterR = Math.min(SliderTokens.trackShapes[size], trackPixelSize / 2);\n\t} else if (typeof trackShape === \"number\") {\n\t\touterR = Math.min(trackShape, trackPixelSize / 2);\n\t}\n\n\tif (isHorizontal) {\n\t\tconst insetLimit = thumbGap + thumbWidthDefault / 2;\n\t\tconst trackInset = Math.min(trackPixelSize / 2, insetLimit);\n\t\tconst cxStart = `calc(${trackInset}px + ${startPercent} * (100% - ${trackInset * 2}px))`;\n\t\tconst cxEnd = `calc(${trackInset}px + ${endPercent} * (100% - ${trackInset * 2}px))`;\n\t\tconst gapWithThumbStr = `${thumbGap + thumbHalfWidth}px`;\n\n\t\tconst leadingWidth = `max(0px, calc(${cxStart} - ${gapWithThumbStr}))`;\n\t\tconst activeLeft = `calc(${cxStart} + ${gapWithThumbStr})`;\n\t\tconst activeWidth = `max(0px, calc(${cxEnd} - ${cxStart} - ${gapWithThumbStr} * 2))`;\n\t\tconst trailingLeft = `calc(${cxEnd} + ${gapWithThumbStr})`;\n\t\tconst trailingWidth = `max(0px, calc(100% - (${cxEnd} + ${gapWithThumbStr})))`;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={trackRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-full\",\n\t\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t\t)}\n\t\t\t\tstyle={{ height: thumbHeight }}\n\t\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{/* Leading inactive */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: leadingWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\tborderTopLeftRadius: outerR,\n\t\t\t\t\t\tborderBottomLeftRadius: outerR,\n\t\t\t\t\t\tborderTopRightRadius: innerR,\n\t\t\t\t\t\tborderBottomRightRadius: innerR,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{/* Active middle segment */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: activeLeft,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: activeWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeTrack,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\tborderTopLeftRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\t\tborderBottomLeftRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\t\tborderTopRightRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t\t\tborderBottomRightRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{/* Trailing inactive */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: trailingLeft,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: trailingWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\tborderTopLeftRadius: innerR,\n\t\t\t\t\t\tborderBottomLeftRadius: innerR,\n\t\t\t\t\t\tborderTopRightRadius: outerR,\n\t\t\t\t\t\tborderBottomRightRadius: outerR,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{/* Ticks for discrete mode */}\n\t\t\t\t{ticks.map((tick) => {\n\t\t\t\t\tconst tickPct = (tick - min) / (max - min);\n\t\t\t\t\tconst isActive = tickPct > startPercent && tickPct < endPercent;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={tick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\twidth: tickSize,\n\t\t\t\t\t\t\t\theight: tickSize,\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackgroundColor: disabled\n\t\t\t\t\t\t\t\t\t? SliderColors.disabledTick\n\t\t\t\t\t\t\t\t\t: isActive\n\t\t\t\t\t\t\t\t\t\t? `var(--md-sys-color-on-${variant})`\n\t\t\t\t\t\t\t\t\t\t: `var(--md-sys-color-${variant})`,\n\t\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t\tleft: `calc(${trackInset}px + ${tickPct} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// ── Vertical range track ──────────────────────────────────────────────────\n\tconst insetLimit = thumbGap + thumbWidthDefault / 2;\n\tconst trackInset = Math.min(trackPixelSize / 2, insetLimit);\n\tconst cyStart = `calc(${trackInset}px + ${startPercent} * (100% - ${trackInset * 2}px))`;\n\tconst cyEnd = `calc(${trackInset}px + ${endPercent} * (100% - ${trackInset * 2}px))`;\n\tconst gapWithThumbStr = `${thumbGap + thumbHalfWidth}px`;\n\n\tconst leadingHeight = `max(0px, calc(${cyStart} - ${gapWithThumbStr}))`;\n\tconst activeBottom = `calc(${cyStart} + ${gapWithThumbStr})`;\n\tconst activeHeight = `max(0px, calc(${cyEnd} - ${cyStart} - ${gapWithThumbStr} * 2))`;\n\tconst trailingBottom = `calc(${cyEnd} + ${gapWithThumbStr})`;\n\tconst trailingHeight = `max(0px, calc(100% - (${cyEnd} + ${gapWithThumbStr})))`;\n\n\treturn (\n\t\t<div\n\t\t\tref={trackRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative h-full\",\n\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t)}\n\t\t\tstyle={{ width: thumbHeight }}\n\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t{/* Bottom inactive */}\n\t\t\t<div\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: leadingHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\tborderBottomLeftRadius: outerR,\n\t\t\t\t\tborderBottomRightRadius: outerR,\n\t\t\t\t\tborderTopLeftRadius: innerR,\n\t\t\t\t\tborderTopRightRadius: innerR,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{/* Active middle */}\n\t\t\t<div\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: activeBottom,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: activeHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: activeTrack,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\tborderBottomLeftRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\tborderBottomRightRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\tborderTopLeftRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t\tborderTopRightRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{/* Top inactive */}\n\t\t\t<div\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: trailingBottom,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: trailingHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\tborderTopLeftRadius: outerR,\n\t\t\t\t\tborderTopRightRadius: outerR,\n\t\t\t\t\tborderBottomLeftRadius: innerR,\n\t\t\t\t\tborderBottomRightRadius: innerR,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{/* Ticks for discrete mode */}\n\t\t\t{ticks.map((tick) => {\n\t\t\t\tconst tickPct = (tick - min) / (max - min);\n\t\t\t\tconst isActive = tickPct > startPercent && tickPct < endPercent;\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={tick}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\twidth: tickSize,\n\t\t\t\t\t\t\theight: tickSize,\n\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\tbackgroundColor: disabled\n\t\t\t\t\t\t\t\t? SliderColors.disabledTick\n\t\t\t\t\t\t\t\t: isActive\n\t\t\t\t\t\t\t\t\t? `var(--md-sys-color-on-${variant})`\n\t\t\t\t\t\t\t\t\t: `var(--md-sys-color-${variant})`,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\tbottom: `calc(${trackInset}px + ${tickPct} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n});\n\n// ─── RangeSlider ──────────────────────────────────────────────────────────────\n\nconst RangeSliderComponent = React.forwardRef<HTMLDivElement, RangeSliderProps>(\n\t(\n\t\t{\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue,\n\t\t\tonValueChange,\n\t\t\tonValueChangeEnd,\n\t\t\tmin = 0,\n\t\t\tmax = 100,\n\t\t\tstep = 0,\n\t\t\torientation = \"horizontal\",\n\t\t\tsize = \"md\",\n\t\t\ttrackShape = \"md3\",\n\t\t\tvariant = \"primary\",\n\t\t\tdisabled = false,\n\t\t\tshowValueIndicator = false,\n\t\t\tshowTicks = false,\n\t\t\tformatValue,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\n\t\t// ── Controlled / Uncontrolled ────────────────────────────────────────\n\t\tconst defaultStart = defaultValue?.[0] ?? min;\n\t\tconst defaultEnd = defaultValue?.[1] ?? max;\n\t\tconst [internalValue, setInternalValue] = React.useState<[number, number]>([\n\t\t\tdefaultStart,\n\t\t\tdefaultEnd,\n\t\t]);\n\n\t\tconst resolvedValue: [number, number] =\n\t\t\tcontrolledValue !== undefined ? controlledValue : internalValue;\n\n\t\tconst { coerce, snap, toPercent, ticks } = useSliderMath({\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t});\n\n\t\t// Safe, snapped values\n\t\tconst startValue = snap(coerce(resolvedValue[0]));\n\t\tconst endValue = snap(coerce(resolvedValue[1]));\n\t\tconst startPercent = toPercent(startValue);\n\t\tconst endPercent = toPercent(endValue);\n\n\t\t// ── Last-active thumb z-index management ────────────────────────────\n\t\t// Whichever thumb was most recently interacted with gets zIndex=2\n\t\tconst [topThumb, setTopThumb] = React.useState<\"start\" | \"end\">(\"end\");\n\n\t\t// ── Track ref ───────────────────────────────────────────────────────\n\t\tconst trackRef = React.useRef<HTMLDivElement>(null);\n\n\t\t// ── Crossover-safe setters ──────────────────────────────────────────\n\t\t// Minimum gap: 1 step (or 1 unit for continuous)\n\t\tconst minGap = step > 0 ? step : (max - min) / 1000;\n\n\t\tconst handleStartChange = React.useCallback(\n\t\t\t(newStart: number) => {\n\t\t\t\tsetTopThumb(\"start\");\n\t\t\t\t// Cannot exceed end thumb\n\t\t\t\tconst clamped = Math.min(newStart, endValue - minGap);\n\t\t\t\tconst final = snap(coerce(clamped));\n\t\t\t\tif (controlledValue === undefined) {\n\t\t\t\t\tsetInternalValue([final, endValue]);\n\t\t\t\t}\n\t\t\t\tonValueChange?.([final, endValue]);\n\t\t\t},\n\t\t\t[controlledValue, coerce, endValue, minGap, onValueChange, snap],\n\t\t);\n\n\t\tconst handleEndChange = React.useCallback(\n\t\t\t(newEnd: number) => {\n\t\t\t\tsetTopThumb(\"end\");\n\t\t\t\t// Cannot go below start thumb\n\t\t\t\tconst clamped = Math.max(newEnd, startValue + minGap);\n\t\t\t\tconst final = snap(coerce(clamped));\n\t\t\t\tif (controlledValue === undefined) {\n\t\t\t\t\tsetInternalValue([startValue, final]);\n\t\t\t\t}\n\t\t\t\tonValueChange?.([startValue, final]);\n\t\t\t},\n\t\t\t[controlledValue, coerce, minGap, onValueChange, snap, startValue],\n\t\t);\n\n\t\tconst handleStartChangeEnd = React.useCallback(\n\t\t\t(v: number) => onValueChangeEnd?.([v, endValue]),\n\t\t\t[endValue, onValueChangeEnd],\n\t\t);\n\n\t\tconst handleEndChangeEnd = React.useCallback(\n\t\t\t(v: number) => onValueChangeEnd?.([startValue, v]),\n\t\t\t[onValueChangeEnd, startValue],\n\t\t);\n\n\t\t// ── Click-to-jump on track ──────────────────────────────────────────\n\t\tconst handleTrackPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tconst trackEl = trackRef.current;\n\t\t\t\tif (!trackEl) return;\n\n\t\t\t\tconst rect = trackEl.getBoundingClientRect();\n\t\t\t\tlet clickPercent: number;\n\n\t\t\t\tconst insetLimit =\n\t\t\t\t\tSliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\t\t\t\tconst trackInset = Math.min(\n\t\t\t\t\tSliderTokens.trackSizes[size] / 2,\n\t\t\t\t\tinsetLimit,\n\t\t\t\t);\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tconst x = e.clientX - rect.left;\n\t\t\t\t\tclickPercent = (x - trackInset) / (rect.width - trackInset * 2);\n\t\t\t\t} else {\n\t\t\t\t\tconst y = rect.bottom - e.clientY;\n\t\t\t\t\tclickPercent = (y - trackInset) / (rect.height - trackInset * 2);\n\t\t\t\t}\n\n\t\t\t\tconst clamped = Math.max(0, Math.min(1, clickPercent));\n\t\t\t\tconst rawValue = min + clamped * (max - min);\n\t\t\t\tconst clickValue = snap(coerce(rawValue));\n\n\t\t\t\t// Move whichever thumb is closer to click point\n\t\t\t\tconst distStart = Math.abs(clickValue - startValue);\n\t\t\t\tconst distEnd = Math.abs(clickValue - endValue);\n\n\t\t\t\tif (distStart <= distEnd) {\n\t\t\t\t\thandleStartChange(clickValue);\n\t\t\t\t} else {\n\t\t\t\t\thandleEndChange(clickValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tcoerce,\n\t\t\t\tdisabled,\n\t\t\t\tendValue,\n\t\t\t\thandleEndChange,\n\t\t\t\thandleStartChange,\n\t\t\t\tisHorizontal,\n\t\t\t\tmax,\n\t\t\t\tmin,\n\t\t\t\tsnap,\n\t\t\t\tstartValue,\n\t\t\t\tsize,\n\t\t\t],\n\t\t);\n\n\t\t// ── IDs ─────────────────────────────────────────────────────────────\n\t\tconst id = React.useId();\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex items-center\",\n\t\t\t\t\t\tisHorizontal ? \"w-full flex-row\" : \"h-full flex-col\",\n\t\t\t\t\t\tdisabled && \"pointer-events-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={isHorizontal ? { minWidth: 0 } : { minHeight: 0 }}\n\t\t\t\t>\n\t\t\t\t\t<RangeTrack\n\t\t\t\t\t\tstartPercent={startPercent}\n\t\t\t\t\t\tendPercent={endPercent}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttrackShape={trackShape}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tticks={showTicks ? ticks : []}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonTrackPointerDown={handleTrackPointerDown}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SliderThumb\n\t\t\t\t\t\tvalue={startValue}\n\t\t\t\t\t\tpercent={startPercent}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tshowValueIndicator={showValueIndicator}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonValueChange={handleStartChange}\n\t\t\t\t\t\tonValueChangeEnd={handleStartChangeEnd}\n\t\t\t\t\t\tformatValue={formatValue}\n\t\t\t\t\t\tthumbId={`${id}-start`}\n\t\t\t\t\t\tzIndex={topThumb === \"start\" ? 2 : 1}\n\t\t\t\t\t\taria-label={ariaLabel ? `${ariaLabel} start` : \"Range start\"}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SliderThumb\n\t\t\t\t\t\tvalue={endValue}\n\t\t\t\t\t\tpercent={endPercent}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tshowValueIndicator={showValueIndicator}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonValueChange={handleEndChange}\n\t\t\t\t\t\tonValueChangeEnd={handleEndChangeEnd}\n\t\t\t\t\t\tformatValue={formatValue}\n\t\t\t\t\t\tthumbId={`${id}-end`}\n\t\t\t\t\t\tzIndex={topThumb === \"end\" ? 2 : 1}\n\t\t\t\t\t\taria-label={ariaLabel ? `${ariaLabel} end` : \"Range end\"}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nRangeSliderComponent.displayName = \"RangeSlider\";\n\n/**\n * MD3 Expressive RangeSlider component.\n *\n * Two-thumb slider where the active track spans between the two thumbs.\n * Thumbs cannot cross each other (crossover prevention built in).\n *\n * @example\n * ```tsx\n * // Controlled\n * <RangeSlider\n *   value={[20, 80]}\n *   onValueChange={([start, end]) => setRange([start, end])}\n *   aria-label=\"Price range\"\n * />\n *\n * // Discrete\n * <RangeSlider defaultValue={[0, 100]} step={10} />\n *\n * // Vertical\n * <div className=\"h-64\">\n *   <RangeSlider defaultValue={[25, 75]} orientation=\"vertical\" />\n * </div>\n * ```\n *\n * @see https://m3.material.io/components/sliders/overview\n */\nexport const RangeSlider = React.memo(RangeSliderComponent);\n","/**\n * @file slider-track.tsx\n * MD3 Expressive Slider — Track with asymmetric corner radii, 6px thumb gaps,\n * discrete tick marks, and centered-mode support.\n *\n * Design decisions:\n * 1. GAP MATH: The 6px gap between track and thumb is calculated mathematically\n *    using CSS calc() — NOT using margin/padding which would break layout.\n * 2. ASYMMETRIC RADII: Inner corners (facing thumb) = 2px; outer ends = size/2 (pill cap).\n * 3. CENTERED MODE: Active segment spans from 50% outward to thumb, not from min.\n * 4. TICKS: 4×4px dots positioned absolutely along track center axis.\n *    Color differs on active vs inactive portions of the track.\n * 5. VERTICAL: Uses height/top instead of width/left, with inverted axis\n *    (bottom=0%, top=100%) per MD3 vertical spec.\n *\n * @see docs/m3/sliders/Slider.kt#SliderDefaults.Track\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MD3Size } from \"../../types/md3\";\nimport { SliderColors, SliderTokens } from \"./slider.tokens\";\nimport type {\n\tSliderOrientation,\n\tSliderTrackProps,\n\tSliderVariant,\n} from \"./slider.types\";\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/**\n * Returns border-radius for a horizontal track segment.\n * @param isLeading - whether this segment is on the leading (left) side of the thumb\n */\nfunction getHorizontalRadius(\n\tisLeading: boolean,\n\tinnerR: number,\n\touterR: number,\n): React.CSSProperties {\n\tif (isLeading) {\n\t\treturn {\n\t\t\tborderTopLeftRadius: outerR,\n\t\t\tborderBottomLeftRadius: outerR,\n\t\t\tborderTopRightRadius: innerR,\n\t\t\tborderBottomRightRadius: innerR,\n\t\t};\n\t}\n\treturn {\n\t\tborderTopLeftRadius: innerR,\n\t\tborderBottomLeftRadius: innerR,\n\t\tborderTopRightRadius: outerR,\n\t\tborderBottomRightRadius: outerR,\n\t};\n}\n\n/** Border-radius for a vertical track segment. */\nfunction getVerticalRadius(\n\tisLeading: boolean,\n\tinnerR: number,\n\touterR: number,\n): React.CSSProperties {\n\tif (isLeading) {\n\t\treturn {\n\t\t\tborderBottomLeftRadius: outerR,\n\t\t\tborderBottomRightRadius: outerR,\n\t\t\tborderTopLeftRadius: innerR,\n\t\t\tborderTopRightRadius: innerR,\n\t\t};\n\t}\n\treturn {\n\t\tborderTopLeftRadius: outerR,\n\t\tborderTopRightRadius: outerR,\n\t\tborderBottomLeftRadius: innerR,\n\t\tborderBottomRightRadius: innerR,\n\t};\n}\n\n/** All-inner-radius shorthand for centered active segments (no pill caps). */\nconst allInnerRadius = (innerR: number): React.CSSProperties => ({\n\tborderTopLeftRadius: innerR,\n\tborderBottomLeftRadius: innerR,\n\tborderTopRightRadius: innerR,\n\tborderBottomRightRadius: innerR,\n});\n\n// ─── Inset Icon ───────────────────────────────────────────────────────────────\n\ninterface InsetIconProps {\n\t/** The icon node to render. */\n\ticon: React.ReactNode;\n\t/** Whether the icon is currently positioned on the active (filled) segment. */\n\tisOnActiveSegment: boolean;\n\t/** The computed 'left' (horizontal) or 'bottom' (vertical) CSS value. */\n\tposition: string;\n\torientation: SliderOrientation;\n\t/** Physical track height/width in px. */\n\ttrackSize: number;\n\t/** Size token for looking up tokens (e.g. 'xl') */\n\tsizeToken: MD3Size;\n\tdisabled: boolean;\n\t/** Color variant to match leading/trailing track. */\n\tvariant: SliderVariant;\n\t/** Suppresses motion when user prefers reduced motion. */\n\tprefersReduced: boolean;\n}\n\n/**\n * Icon rendered inside the slider track.\n *\n * When the key changes (active ↔ inactive swap), AnimatePresence unmounts this\n * with a fade-out, then mounts the new instance with a fade-in at its target\n * position — producing the MD3 \"hop\" effect without any position cross-over.\n * When the key stays the same (e.g. trailing-inactive tracking the thumb),\n * the spring on `left`/`bottom` keeps it smoothly glued to the thumb.\n */\nconst InsetIcon = React.memo(function InsetIcon({\n\ticon,\n\tisOnActiveSegment,\n\tposition,\n\torientation,\n\ttrackSize,\n\tsizeToken,\n\tdisabled,\n\tvariant,\n\tprefersReduced,\n}: InsetIconProps) {\n\tconst iconSize = Math.min(\n\t\tSliderTokens.insetIconSizes[sizeToken],\n\t\tMath.max(4, trackSize - SliderTokens.insetIconPadding * 2),\n\t);\n\n\tconst activeColor = `var(--md-sys-color-on-${variant})`;\n\tconst inactiveColor = `var(--md-sys-color-${variant})`;\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst fastFade = prefersReduced ? { duration: 0 } : { duration: 0.12 };\n\n\treturn (\n\t\t<m.div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"[&_svg]:w-full [&_svg]:h-full\"\n\t\t\tinitial={{\n\t\t\t\topacity: 0,\n\t\t\t\t...(isHorizontal ? { left: position } : { bottom: position }),\n\t\t\t}}\n\t\t\tanimate={{\n\t\t\t\t[isHorizontal ? \"left\" : \"bottom\"]: position,\n\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\tcolor: isOnActiveSegment ? activeColor : inactiveColor,\n\t\t\t}}\n\t\t\texit={{ opacity: 0, transition: fastFade }}\n\t\t\ttransition={\n\t\t\t\tprefersReduced\n\t\t\t\t\t? { duration: 0 }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tleft: { type: \"spring\", stiffness: 500, damping: 40 },\n\t\t\t\t\t\t\tbottom: { type: \"spring\", stiffness: 500, damping: 40 },\n\t\t\t\t\t\t\topacity: fastFade,\n\t\t\t\t\t\t\tcolor: fastFade,\n\t\t\t\t\t\t}\n\t\t\t}\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\twidth: iconSize,\n\t\t\t\theight: iconSize,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\tzIndex: 1,\n\t\t\t\twillChange: isHorizontal ? \"left\" : \"bottom\",\n\t\t\t\t...(isHorizontal\n\t\t\t\t\t? { top: \"50%\", transform: \"translateY(-50%)\" }\n\t\t\t\t\t: { left: \"50%\", transform: \"translateX(-50%)\" }),\n\t\t\t}}\n\t\t>\n\t\t\t{icon}\n\t\t</m.div>\n\t);\n});\n\n// ─── Tick Marks ───────────────────────────────────────────────────────────────\n\ninterface TicksProps {\n\tticks: number[];\n\tmin: number;\n\tmax: number;\n\tpercent: number;\n\torientation: \"horizontal\" | \"vertical\";\n\tvariant: SliderVariant;\n\tdisabled: boolean;\n\t/** Pre-computed track inset — avoids recalculating in every tick render. */\n\ttrackInset: number;\n}\n\n/** Renders tick dot markers for discrete slider mode. */\nfunction Ticks({\n\tticks,\n\tmin,\n\tmax,\n\tpercent,\n\torientation,\n\tvariant,\n\tisCentered,\n\tdisabled,\n\ttrackInset,\n}: TicksProps & { isCentered?: boolean }) {\n\tif (ticks.length === 0) return null;\n\tconst { thumbGap, thumbWidthDefault, tickSize } = SliderTokens;\n\n\treturn (\n\t\t<>\n\t\t\t{ticks.map((tick) => {\n\t\t\t\tconst tickPercent = (tick - min) / (max - min);\n\t\t\t\tconst isOnActive = isCentered\n\t\t\t\t\t? percent >= 0.5\n\t\t\t\t\t\t? tickPercent >= 0.5 && tickPercent <= percent\n\t\t\t\t\t\t: tickPercent <= 0.5 && tickPercent >= percent\n\t\t\t\t\t: tickPercent <= percent;\n\n\t\t\t\t// Skip ticks that would be visually hidden inside the thumb gap\n\t\t\t\tconst thumbStart = percent - (thumbGap + thumbWidthDefault / 2) / 100;\n\t\t\t\tconst thumbEnd = percent + (thumbGap + thumbWidthDefault / 2) / 100;\n\t\t\t\tif (tickPercent > thumbStart && tickPercent < thumbEnd) return null;\n\n\t\t\t\tconst color = disabled\n\t\t\t\t\t? SliderColors.disabledTick\n\t\t\t\t\t: isOnActive\n\t\t\t\t\t\t? `var(--md-sys-color-on-${variant})`\n\t\t\t\t\t\t: `var(--md-sys-color-${variant})`;\n\n\t\t\t\tconst style: React.CSSProperties = {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: tickSize,\n\t\t\t\t\theight: tickSize,\n\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\tbackgroundColor: color,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t...(orientation === \"horizontal\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tleft: `calc(${trackInset}px + ${tickPercent} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t// Vertical: bottom=0%, top=100% (inverted Y-axis)\n\t\t\t\t\t\t\t\tbottom: `calc(${trackInset}px + ${tickPercent} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t};\n\n\t\t\t\treturn <div key={tick} style={style} aria-hidden=\"true\" />;\n\t\t\t})}\n\t\t</>\n\t);\n}\n\n// ─── SliderTrack ──────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Slider Track.\n */\nexport const SliderTrack = React.memo(function SliderTrack({\n\tpercent,\n\tsize,\n\torientation,\n\tvariant,\n\tisCentered,\n\tmin,\n\tmax,\n\tdisabled,\n\ttrackRef,\n\tonTrackPointerDown,\n\tticks = [],\n\tinsetIcon,\n\tinsetIconAtMin,\n\tinsetIconTrailing,\n\tinsetIconAtMax,\n\tvalue,\n\ttrackShape = \"md3\",\n}: Omit<SliderTrackProps, \"step\"> & { ticks?: number[] }) {\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst trackPixelSize = SliderTokens.trackSizes[size];\n\tconst thumbHeight = SliderTokens.thumbHeights[size];\n\tconst { thumbGap, thumbWidthDefault, trackInnerRadius } = SliderTokens;\n\tconst innerR = trackInnerRadius;\n\n\tlet outerR = trackPixelSize / 2;\n\tif (trackShape === \"md3\") {\n\t\touterR = Math.min(SliderTokens.trackShapes[size], trackPixelSize / 2);\n\t} else if (typeof trackShape === \"number\") {\n\t\touterR = Math.min(trackShape, trackPixelSize / 2);\n\t}\n\n\tconst thumbHalfWidth = thumbWidthDefault / 2;\n\tconst gapWithThumbStr = `${thumbGap + thumbHalfWidth}px`;\n\n\t// ── Inset icon state ─────────────────────────────────────────────────────\n\tconst hasAnyInsetIcon = Boolean(insetIcon || insetIconTrailing);\n\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t// Measure actual track width to compute placement threshold.\n\tconst [trackWidth, setTrackWidth] = React.useState(0);\n\tReact.useLayoutEffect(() => {\n\t\tconst el = trackRef.current;\n\t\tif (!el || !hasAnyInsetIcon) return;\n\t\t// Initial measure\n\t\tsetTrackWidth(isHorizontal ? el.clientWidth : el.clientHeight);\n\t\t// Update on resize\n\t\tconst ro = new ResizeObserver(() => {\n\t\t\tsetTrackWidth(isHorizontal ? el.clientWidth : el.clientHeight);\n\t\t});\n\t\tro.observe(el);\n\t\treturn () => ro.disconnect();\n\t}, [hasAnyInsetIcon, isHorizontal, trackRef]);\n\n\t// Minimum percent required to keep icon on the active segment.\n\t// = (iconSize + 2*padding + gap + halfThumb) / trackWidth\n\tconst activeIconSize = Math.min(\n\t\tSliderTokens.insetIconSizes[size],\n\t\tMath.max(4, trackPixelSize - SliderTokens.insetIconPadding * 2),\n\t);\n\n\tconst iconTotalWidth =\n\t\tactiveIconSize +\n\t\tSliderTokens.insetIconPadding * 2 +\n\t\tthumbGap +\n\t\tthumbHalfWidth;\n\tconst iconThreshold = trackWidth > 0 ? iconTotalWidth / trackWidth : 0.15;\n\n\t// Ref-based hysteresis — avoids a setState re-render cycle (which caused a\n\t// 1-frame lag flicker). A dead-zone of 4% prevents rapid toggling when the\n\t// thumb is near the switch boundary during fast drags.\n\t// Enter active when: remaining space < threshold\n\t// Exit active when:  remaining space > threshold + 4%  (dead-zone)\n\tconst HYSTERESIS_GAP = 0.04;\n\tconst trailingActiveRef = React.useRef(1 - percent <= iconThreshold);\n\tconst leadingActiveRef = React.useRef(percent > iconThreshold);\n\n\t// Trailing icon hysteresis\n\tconst trailingPercent = 1 - percent;\n\tif (trailingActiveRef.current) {\n\t\tif (trailingPercent > iconThreshold + HYSTERESIS_GAP) {\n\t\t\ttrailingActiveRef.current = false;\n\t\t}\n\t} else {\n\t\tif (trailingPercent <= iconThreshold) {\n\t\t\ttrailingActiveRef.current = true;\n\t\t}\n\t}\n\tconst trailingOnActive = trailingActiveRef.current;\n\n\t// Leading icon hysteresis\n\tif (leadingActiveRef.current) {\n\t\tif (percent <= iconThreshold - HYSTERESIS_GAP) {\n\t\t\tleadingActiveRef.current = false;\n\t\t}\n\t} else {\n\t\tif (percent > iconThreshold) {\n\t\t\tleadingActiveRef.current = true;\n\t\t}\n\t}\n\tconst leadingOnActive = leadingActiveRef.current;\n\n\t// Resolve which icon to show (swap at min)\n\tconst isAtMin = value !== undefined && value <= min;\n\tconst resolvedLeadingIcon =\n\t\tisAtMin && insetIconAtMin ? insetIconAtMin : insetIcon;\n\n\tconst isAtMax = value !== undefined && value >= max;\n\tconst resolvedTrailingIcon =\n\t\tisAtMax && insetIconAtMax ? insetIconAtMax : insetIconTrailing;\n\n\t// ── Colors ───────────────────────────────────────────────────────────────\n\tconst activeColor = disabled\n\t\t? SliderColors.disabledActiveTrack\n\t\t: `var(--md-sys-color-${variant})`;\n\tconst inactiveColor = disabled\n\t\t? SliderColors.disabledInactiveTrack\n\t\t: `var(--md-sys-color-${variant}-container)`;\n\tconst insetLimit = SliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\tconst trackInset = Math.min(trackPixelSize / 2, insetLimit);\n\n\t// Icon positions in CSS (computed after trackInset is available)\n\tconst gapTotal = thumbGap + thumbHalfWidth;\n\tconst thumbCenter = `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`;\n\n\t// Leading Icon positions\n\tconst leadingActiveLeft = `${trackInset + SliderTokens.insetIconPadding}px`;\n\tconst leadingInactiveLeft = `calc(${thumbCenter} + ${gapTotal}px + ${SliderTokens.insetIconPadding}px)`;\n\n\t// Trailing Icon positions\n\tconst trailingInactiveLeft = `calc(100% - ${trackInset}px - ${activeIconSize}px - ${SliderTokens.insetIconPadding}px)`;\n\tconst trailingActiveLeft = `calc(${thumbCenter} - ${gapTotal}px - ${activeIconSize}px - ${SliderTokens.insetIconPadding}px)`;\n\n\t// ── Horizontal layout ────────────────────────────────────────────────────\n\tif (isHorizontal) {\n\t\tconst cxStr = `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`;\n\n\t\tconst segments: React.ReactNode[] = [];\n\n\t\tif (!isCentered) {\n\t\t\tconst leftSegmentWidth = `max(0px, calc(${cxStr} - ${gapWithThumbStr}))`;\n\t\t\tconst rightSegmentLeft = `calc(${cxStr} + ${gapWithThumbStr})`;\n\t\t\tconst rightSegmentWidth = `max(0px, calc(100% - (${cxStr} + ${gapWithThumbStr})))`;\n\n\t\t\t// Leading Segment\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"left\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: leftSegmentWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getHorizontalRadius(true, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Trailing Segment\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"right\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: rightSegmentLeft,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: rightSegmentWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getHorizontalRadius(false, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\t\t} else {\n\t\t\t// Centered mode\n\t\t\tconst halfCenterGap = SliderTokens.thumbGap / 2;\n\n\t\t\tif (percent >= 0.5) {\n\t\t\t\t// Left base segment (Inactive)\n\t\t\t\tconst leftBaseWidth = `max(0px, min(calc(50% - ${halfCenterGap}px), calc(${cxStr} - ${gapWithThumbStr})))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"left-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: leftBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(true, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Center active segment\n\t\t\t\tconst centerActiveLeft = `calc(50% + ${halfCenterGap}px)`;\n\t\t\t\tconst centerActiveWidth = `max(0px, calc(${cxStr} - ${gapWithThumbStr} - (50% + ${halfCenterGap}px)))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: centerActiveLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: centerActiveWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Right base segment (Inactive)\n\t\t\t\tconst rightBaseLeft = `calc(${cxStr} + ${gapWithThumbStr})`;\n\t\t\t\tconst rightBaseWidth = `max(0px, calc(100% - (${cxStr} + ${gapWithThumbStr})))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"right-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: rightBaseLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: rightBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(false, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Left base segment (Inactive)\n\t\t\t\tconst leftBaseWidth = `max(0px, calc(${cxStr} - ${gapWithThumbStr}))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"left-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: leftBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(true, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Center active segment\n\t\t\t\tconst centerActiveLeft = `calc(${cxStr} + ${gapWithThumbStr})`;\n\t\t\t\tconst centerActiveWidth = `max(0px, calc(50% - ${halfCenterGap}px - (${cxStr} + ${gapWithThumbStr})))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: centerActiveLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: centerActiveWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Right base segment (Inactive)\n\t\t\t\tconst rightBaseLeft = `max(calc(50% + ${halfCenterGap}px), calc(${cxStr} + ${gapWithThumbStr}))`;\n\t\t\t\tconst rightBaseWidth = `max(0px, calc(100% - max(calc(50% + ${halfCenterGap}px), calc(${cxStr} + ${gapWithThumbStr}))))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"right-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: rightBaseLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: rightBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(false, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={trackRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-full\",\n\t\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t\t)}\n\t\t\t\tstyle={{ height: thumbHeight }}\n\t\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{segments}\n\t\t\t\t{ticks.length > 0 && (\n\t\t\t\t\t<Ticks\n\t\t\t\t\t\tticks={ticks}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tpercent={percent}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tisCentered={isCentered}\n\t\t\t\t\t\ttrackInset={trackInset}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{/* Inset Icons (Leading & Trailing) */}\n\t\t\t\t{/* Leading icon: key changes on min-swap OR active↔inactive swap → fade transition */}\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{resolvedLeadingIcon && (\n\t\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\t\tisAtMin\n\t\t\t\t\t\t\t\t\t? \"lead-min\"\n\t\t\t\t\t\t\t\t\t: leadingOnActive\n\t\t\t\t\t\t\t\t\t\t? \"lead-active\"\n\t\t\t\t\t\t\t\t\t\t: \"lead-inactive\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ticon={resolvedLeadingIcon}\n\t\t\t\t\t\t\tisOnActiveSegment={leadingOnActive}\n\t\t\t\t\t\t\tposition={\n\t\t\t\t\t\t\t\tleadingOnActive ? leadingActiveLeft : leadingInactiveLeft\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{/* Trailing icon: key changes on max-swap OR active↔inactive swap → fade transition */}\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{resolvedTrailingIcon && (\n\t\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\t\tisAtMax\n\t\t\t\t\t\t\t\t\t? \"trail-max\"\n\t\t\t\t\t\t\t\t\t: trailingOnActive\n\t\t\t\t\t\t\t\t\t\t? \"trail-active\"\n\t\t\t\t\t\t\t\t\t\t: \"trail-inactive\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ticon={resolvedTrailingIcon}\n\t\t\t\t\t\t\tisOnActiveSegment={trailingOnActive}\n\t\t\t\t\t\t\tposition={\n\t\t\t\t\t\t\t\ttrailingOnActive ? trailingActiveLeft : trailingInactiveLeft\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// ── Vertical layout ───────────────────────────────────────────────────────\n\tconst cyStr = `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`;\n\n\tconst segments: React.ReactNode[] = [];\n\n\tif (!isCentered) {\n\t\tconst bottomSegmentHeight = `max(0px, calc(${cyStr} - ${gapWithThumbStr}))`;\n\t\tconst topSegmentBottom = `calc(${cyStr} + ${gapWithThumbStr})`;\n\t\tconst topSegmentHeight = `max(0px, calc(100% - (${cyStr} + ${gapWithThumbStr})))`;\n\n\t\t// Bottom segment\n\t\tsegments.push(\n\t\t\t<div\n\t\t\t\tkey=\"bottom\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: bottomSegmentHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t...getVerticalRadius(true, innerR, outerR),\n\t\t\t\t}}\n\t\t\t/>,\n\t\t);\n\n\t\t// Top segment\n\t\tsegments.push(\n\t\t\t<div\n\t\t\t\tkey=\"top\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: topSegmentBottom,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: topSegmentHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t...getVerticalRadius(false, innerR, outerR),\n\t\t\t\t}}\n\t\t\t/>,\n\t\t);\n\t} else {\n\t\t// Centered mode (Vertical is inverted: bottom=0%, top=100%)\n\t\tconst halfCenterGap = SliderTokens.thumbGap / 2;\n\n\t\tif (percent >= 0.5) {\n\t\t\t// Bottom base segment (Inactive)\n\t\t\tconst bottomBaseHeight = `max(0px, min(calc(50% - ${halfCenterGap}px), calc(${cyStr} - ${gapWithThumbStr})))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"bottom-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: bottomBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(true, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Center active segment\n\t\t\tconst centerActiveBottom = `calc(50% + ${halfCenterGap}px)`;\n\t\t\tconst centerActiveHeight = `max(0px, calc(${cyStr} - ${gapWithThumbStr} - (50% + ${halfCenterGap}px)))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: centerActiveBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: centerActiveHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Top base segment (Inactive)\n\t\t\tconst topBaseBottom = `calc(${cyStr} + ${gapWithThumbStr})`;\n\t\t\tconst topBaseHeight = `max(0px, calc(100% - (${cyStr} + ${gapWithThumbStr})))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"top-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: topBaseBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: topBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(false, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\t\t} else {\n\t\t\t// Bottom base segment (Inactive)\n\t\t\tconst bottomBaseHeight = `max(0px, calc(${cyStr} - ${gapWithThumbStr}))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"bottom-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: bottomBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(true, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Center active segment\n\t\t\tconst centerActiveBottom = `calc(${cyStr} + ${gapWithThumbStr})`;\n\t\t\tconst centerActiveHeight = `max(0px, calc(50% - ${halfCenterGap}px - (${cyStr} + ${gapWithThumbStr})))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: centerActiveBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: centerActiveHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Top base segment (Inactive)\n\t\t\tconst topBaseBottom = `max(calc(50% + ${halfCenterGap}px), calc(${cyStr} + ${gapWithThumbStr}))`;\n\t\t\tconst topBaseHeight = `max(0px, calc(100% - max(calc(50% + ${halfCenterGap}px), calc(${cyStr} + ${gapWithThumbStr}))))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"top-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: topBaseBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: topBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(false, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={trackRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative h-full\",\n\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t)}\n\t\t\tstyle={{ width: thumbHeight }}\n\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t{segments}\n\t\t\t{ticks.length > 0 && (\n\t\t\t\t<Ticks\n\t\t\t\t\tticks={ticks}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tpercent={percent}\n\t\t\t\t\torientation={orientation}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tisCentered={isCentered}\n\t\t\t\t\ttrackInset={trackInset}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{/* Inset Icons (Leading & Trailing) */}\n\t\t\t{/* Leading icon: key changes on min-swap OR active↔inactive swap → fade transition */}\n\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t{resolvedLeadingIcon && (\n\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\tisAtMin\n\t\t\t\t\t\t\t\t? \"lead-min\"\n\t\t\t\t\t\t\t\t: leadingOnActive\n\t\t\t\t\t\t\t\t\t? \"lead-active\"\n\t\t\t\t\t\t\t\t\t: \"lead-inactive\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={resolvedLeadingIcon}\n\t\t\t\t\t\tisOnActiveSegment={leadingOnActive}\n\t\t\t\t\t\tposition={leadingOnActive ? leadingActiveLeft : leadingInactiveLeft}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\n\t\t\t{/* Trailing icon: key changes on max-swap OR active↔inactive swap → fade transition */}\n\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t{resolvedTrailingIcon && (\n\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\tisAtMax\n\t\t\t\t\t\t\t\t? \"trail-max\"\n\t\t\t\t\t\t\t\t: trailingOnActive\n\t\t\t\t\t\t\t\t\t? \"trail-active\"\n\t\t\t\t\t\t\t\t\t: \"trail-inactive\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={resolvedTrailingIcon}\n\t\t\t\t\t\tisOnActiveSegment={trailingOnActive}\n\t\t\t\t\t\tposition={\n\t\t\t\t\t\t\ttrailingOnActive ? trailingActiveLeft : trailingInactiveLeft\n\t\t\t\t\t\t}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n});\n","/**\n * @file slider.tsx\n * MD3 Expressive Slider — Main composition component.\n *\n * Supports:\n * - Controlled and uncontrolled usage patterns\n * - Horizontal and vertical orientations\n * - Discrete mode (step snapping + tick marks)\n * - Centered active track (isCentered)\n * - Value indicator tooltip\n * - Full keyboard navigation (ARIA Slider pattern)\n * - Click-to-jump on track\n *\n * Architecture: Flat (no Context needed for single thumb variant).\n * Track + Thumb are internal sub-components composed here.\n *\n * @see https://m3.material.io/components/sliders/overview\n * @see docs/m3/sliders/Slider.kt\n */\n\nimport { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useSliderMath } from \"./hooks/useSliderMath\";\nimport { SliderTokens } from \"./slider.tokens\";\nimport type { SliderProps } from \"./slider.types\";\nimport { SliderThumb } from \"./slider-thumb\";\nimport { SliderTrack } from \"./slider-track\";\n\n// ─── Slider ───────────────────────────────────────────────────────────────────\n\nconst SliderComponent = React.forwardRef<HTMLDivElement, SliderProps>(\n\t(\n\t\t{\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue,\n\t\t\tonValueChange,\n\t\t\tonValueChangeEnd,\n\t\t\tmin = 0,\n\t\t\tmax = 100,\n\t\t\tstep = 0,\n\t\t\torientation = \"horizontal\",\n\t\t\tsize = \"md\",\n\t\t\ttrackShape = \"md3\",\n\t\t\tvariant = \"primary\",\n\t\t\tisCentered = false,\n\t\t\tdisabled = false,\n\t\t\tshowValueIndicator = false,\n\t\t\tshowTicks = false,\n\t\t\tinsetIcon,\n\t\t\tinsetIconAtMin,\n\t\t\tinsetIconTrailing,\n\t\t\tinsetIconAtMax,\n\t\t\tformatValue,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\n\t\t// ── Controlled / Uncontrolled state ────────────────────────────────────\n\t\tconst midpoint = min + (max - min) / 2;\n\t\tconst initialValue = defaultValue ?? midpoint;\n\t\tconst [internalValue, setInternalValue] = React.useState(initialValue);\n\t\tconst resolvedValue =\n\t\t\tcontrolledValue !== undefined ? controlledValue : internalValue;\n\n\t\tconst { coerce, snap, toPercent, ticks } = useSliderMath({\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t});\n\n\t\tconst safeValue = snap(coerce(resolvedValue));\n\t\tconst percent = toPercent(safeValue);\n\n\t\t// ── Track ref (for click-to-jump + thumb drag constraint) ──────────────\n\t\tconst trackRef = React.useRef<HTMLDivElement>(null);\n\n\t\t// ── onChange handler ───────────────────────────────────────────────────\n\t\tconst handleValueChange = React.useCallback(\n\t\t\t(newValue: number) => {\n\t\t\t\tconst clamped = snap(coerce(newValue));\n\t\t\t\tif (controlledValue === undefined) {\n\t\t\t\t\tsetInternalValue(clamped);\n\t\t\t\t}\n\t\t\t\tonValueChange?.(clamped);\n\t\t\t},\n\t\t\t[coerce, controlledValue, onValueChange, snap],\n\t\t);\n\n\t\tconst handleValueChangeEnd = React.useCallback(\n\t\t\t(newValue: number) => {\n\t\t\t\tonValueChangeEnd?.(snap(coerce(newValue)));\n\t\t\t},\n\t\t\t[coerce, onValueChangeEnd, snap],\n\t\t);\n\n\t\t// ── Click-to-jump on track ─────────────────────────────────────────────\n\t\tconst handleTrackPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tconst trackEl = trackRef.current;\n\t\t\t\tif (!trackEl) return;\n\n\t\t\t\tconst rect = trackEl.getBoundingClientRect();\n\t\t\t\tlet clickPercent: number;\n\n\t\t\t\tconst insetLimit =\n\t\t\t\t\tSliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\t\t\t\tconst trackInset = Math.min(\n\t\t\t\t\tSliderTokens.trackSizes[size] / 2,\n\t\t\t\t\tinsetLimit,\n\t\t\t\t);\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tconst x = e.clientX - rect.left;\n\t\t\t\t\tclickPercent = (x - trackInset) / (rect.width - trackInset * 2);\n\t\t\t\t} else {\n\t\t\t\t\tconst y = rect.bottom - e.clientY;\n\t\t\t\t\tclickPercent = (y - trackInset) / (rect.height - trackInset * 2);\n\t\t\t\t}\n\n\t\t\t\tconst clamped = Math.max(0, Math.min(1, clickPercent));\n\t\t\t\tconst rawValue = min + clamped * (max - min);\n\t\t\t\tconst newValue = snap(coerce(rawValue));\n\t\t\t\thandleValueChange(newValue);\n\t\t\t},\n\t\t\t[coerce, disabled, handleValueChange, isHorizontal, max, min, snap, size],\n\t\t);\n\n\t\t// ── Generate unique IDs for ARIA ───────────────────────────────────────\n\t\tconst id = React.useId();\n\t\tconst thumbId = `slider-thumb-${id}`;\n\n\t\t// ── Inset icon guard (MD3 spec) ───────────────────────────────────────────\n\t\t// Only track sizes >= 40dp support inset icon. Not valid with isCentered.\n\t\tconst supportsInsetIcon =\n\t\t\t!isCentered && SliderTokens.trackSizes[size] >= 40;\n\t\tconst hasAnyInsetIcon = !!(insetIcon || insetIconTrailing);\n\t\tif (hasAnyInsetIcon && !supportsInsetIcon) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[Slider] insetIcon is only supported on track sizes >= 40dp (e.g. xl track sizes). \" +\n\t\t\t\t\t\"See MD3 spec: https://m3.material.io/components/sliders/specs\",\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex items-center\",\n\t\t\t\t\t\tisHorizontal ? \"w-full flex-row\" : \"h-full flex-col\",\n\t\t\t\t\t\tdisabled && \"pointer-events-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={isHorizontal ? { minWidth: 0 } : { minHeight: 0 }}\n\t\t\t\t>\n\t\t\t\t\t<SliderTrack\n\t\t\t\t\t\tpercent={percent}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttrackShape={trackShape}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tisCentered={isCentered}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonTrackPointerDown={handleTrackPointerDown}\n\t\t\t\t\t\tticks={showTicks ? ticks : []}\n\t\t\t\t\t\tinsetIcon={supportsInsetIcon ? insetIcon : undefined}\n\t\t\t\t\t\tinsetIconAtMin={supportsInsetIcon ? insetIconAtMin : undefined}\n\t\t\t\t\t\tinsetIconTrailing={\n\t\t\t\t\t\t\tsupportsInsetIcon ? insetIconTrailing : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinsetIconAtMax={supportsInsetIcon ? insetIconAtMax : undefined}\n\t\t\t\t\t\tvalue={safeValue}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SliderThumb\n\t\t\t\t\t\tvalue={safeValue}\n\t\t\t\t\t\tpercent={percent}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tshowValueIndicator={showValueIndicator}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\tonValueChangeEnd={handleValueChangeEnd}\n\t\t\t\t\t\tformatValue={formatValue}\n\t\t\t\t\t\tthumbId={thumbId}\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSliderComponent.displayName = \"Slider\";\n\n/**\n * MD3 Expressive Slider component.\n *\n * A pill-shaped vertical handle that slides along a rounded track.\n * Supports continuous and discrete (step) modes, horizontal/vertical\n * orientations, and centered active track.\n *\n * Features:\n * - M3 Expressive handle: 4px pill that squeezes to 2px on press\n * - 6px transparent gap between track and thumb\n * - Asymmetric corner radii: outer ends=9999px, inner ends=2px\n * - Tick marks for discrete mode\n * - Optional floating value indicator tooltip\n * - Full keyboard navigation per WAI-ARIA Slider pattern\n *\n * @example\n * ```tsx\n * // Basic controlled\n * <Slider value={volume} onValueChange={setVolume} aria-label=\"Volume\" />\n *\n * // Discrete with ticks\n * <Slider defaultValue={0} step={10} min={0} max={100} />\n *\n * // Vertical orientation\n * <div className=\"h-64\">\n *   <Slider defaultValue={50} orientation=\"vertical\" aria-label=\"Brightness\" />\n * </div>\n *\n * // Centered active track\n * <Slider defaultValue={0} isCentered showValueIndicator />\n *\n * // Large track with value tooltip\n * <Slider defaultValue={50} trackSize=\"l\" showValueIndicator\n *   formatValue={(v) => `${v}%`} />\n * ```\n *\n * @see https://m3.material.io/components/sliders/overview\n */\nexport const Slider = React.memo(SliderComponent);\n","/**\n * @file switch.tokens.ts\n * MD3 Expressive Switch — Design tokens ported from SwitchTokens.kt.\n * All dimensional values are in px (dp equivalent for web).\n * @see docs/m3/switch/SwitchTokens.kt\n */\n\n/**\n * Design tokens for the MD3 Expressive Switch component.\n *\n * Maps directly from `SwitchTokens.kt` (v0_210) to CSS/JS values.\n * Use these as the single source of truth for sizing and opacity.\n *\n * Color tokens are NOT included here — they reference CSS custom properties\n * from the project's MD3 theme system (`--md-sys-color-*`).\n */\nexport const SwitchTokens = {\n\t// ── Track ─────────────────────────────────────────────────────────────────\n\t/** SwitchTokens.TrackWidth = 52dp */\n\ttrackWidth: 52,\n\t/** SwitchTokens.TrackHeight = 32dp */\n\ttrackHeight: 32,\n\t/** SwitchTokens.TrackOutlineWidth = 2dp */\n\ttrackOutlineWidth: 2,\n\n\t// ── Handle (Thumb) ────────────────────────────────────────────────────────\n\t/** SwitchTokens.SelectedHandleWidth/Height = 24dp */\n\tselectedHandleSize: 24,\n\t/** SwitchTokens.UnselectedHandleWidth/Height = 16dp */\n\tunselectedHandleSize: 16,\n\t/** SwitchTokens.IconHandleWidth/Height = 24dp (when thumb has icon content) */\n\ticonHandleSize: 24,\n\t/** SwitchTokens.PressedHandleWidth/Height = 28dp */\n\tpressedHandleSize: 28,\n\n\t// ── State Layer ───────────────────────────────────────────────────────────\n\t/** SwitchTokens.StateLayerSize = 40dp */\n\tstateLayerSize: 40,\n\n\t// ── Icon ──────────────────────────────────────────────────────────────────\n\t/** SwitchTokens.SelectedIconSize / UnselectedIconSize = 16dp */\n\ticonSize: 16,\n\n\t// ── Opacity (disabled states) ─────────────────────────────────────────────\n\t/** SwitchTokens.DisabledTrackOpacity = 0.12 */\n\tdisabledTrackOpacity: 0.12,\n\t/** SwitchTokens.DisabledSelectedHandleOpacity = 1.0 */\n\tdisabledSelectedHandleOpacity: 1.0,\n\t/** SwitchTokens.DisabledUnselectedHandleOpacity = 0.38 */\n\tdisabledUnselectedHandleOpacity: 0.38,\n\t/** SwitchTokens.DisabledSelectedIconOpacity = 0.38 */\n\tdisabledSelectedIconOpacity: 0.38,\n\t/** SwitchTokens.DisabledUnselectedIconOpacity = 0.38 */\n\tdisabledUnselectedIconOpacity: 0.38,\n} as const;\n\n// ── MD3 Color token references (CSS custom properties) ────────────────────────\n\n/**\n * CSS custom property references for Switch colors.\n * These map to the project's `--md-sys-color-*` tokens in `colors.css`.\n *\n * DO NOT hardcode hex values — always use these references so the\n * component automatically adapts to light/dark theme switching.\n */\nexport const SwitchColors = {\n\t// Track\n\tcheckedTrack: \"var(--md-sys-color-primary)\",\n\tuncheckedTrack: \"var(--md-sys-color-surface-container-highest)\",\n\tuncheckedTrackOutline: \"var(--md-sys-color-outline)\",\n\n\t// Thumb\n\tcheckedThumb: \"var(--md-sys-color-on-primary)\",\n\tuncheckedThumb: \"var(--md-sys-color-outline)\",\n\thoverCheckedThumb: \"var(--md-sys-color-primary-container)\",\n\thoverUncheckedThumb: \"var(--md-sys-color-on-surface-variant)\",\n\tdisabledCheckedThumb: \"var(--md-sys-color-surface)\",\n\n\t// Icon\n\tcheckedIcon: \"var(--md-sys-color-on-primary-container)\",\n\tuncheckedIcon: \"var(--md-sys-color-surface-container-highest)\",\n\n\t// State layer\n\tcheckedStateLayer: \"var(--md-sys-color-primary)\",\n\tuncheckedStateLayer: \"var(--md-sys-color-on-surface)\",\n\n\t// Focus indicator\n\tfocusIndicator: \"var(--md-sys-color-secondary)\",\n} as const;\n","/**\n * @file switch.tsx\n * MD3 Expressive Switch — ARIA switch pattern with Framer Motion animations.\n * Spec: https://m3.material.io/components/switch/overview\n *\n * Key decisions:\n * - Uses `<button role=\"switch\">` (no <input>) per MD3 accessibility spec\n * - Framer Motion for ALL animations (thumb x, size morph, state layer, icons)\n * - Hover state via useState (required for Framer Motion color animate)\n * - Disabled colors via rgba() literals (color-mix() not animatable by FM)\n */\n\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseReducedMotion,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Ripple, type RippleOrigin } from \"../ripple\";\nimport {\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../shared/motion-tokens\";\nimport { SwitchColors, SwitchTokens } from \"./switch.tokens\";\nimport type { SwitchProps } from \"./switch.types\";\n\n// ─── Animation constants ───────────────────────────────────────────────────────\n\n// FAST_SPATIAL_SPRING and FAST_EFFECTS_SPRING imported from motion-tokens:\n//   fast.spatial: stiffness=800, dampingRatio=0.6 → Framer damping≈33.94 (thumb movement/size)\n//   fast.effects: stiffness=3800, dampingRatio=1.0 → Framer damping≈123.29 (state layer)\n\n/** Instant transition (SnapSpec equivalent) — used when thumb is pressed. */\nconst SNAP_TRANSITION = { duration: 0 } as const;\n\n/** Color transition for track/thumb color changes. Uses fast.effects CSS curve. */\nconst COLOR_TRANSITION = {\n\tduration: 0.15,\n\tease: [0.31, 0.94, 0.34, 1.0] as [number, number, number, number],\n} as const;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/**\n * Computes thumb size in px based on current interaction state.\n * @internal\n */\nfunction resolveThumbSize(\n\tisPressed: boolean,\n\tchecked: boolean,\n\thasIcon: boolean,\n): number {\n\tif (isPressed) return SwitchTokens.pressedHandleSize;\n\tif (checked || hasIcon) return SwitchTokens.selectedHandleSize;\n\treturn SwitchTokens.unselectedHandleSize;\n}\n\n/**\n * Computes thumb X offset. Mirrors ThumbNode.measure() from Switch.kt.\n * @internal\n */\nfunction resolveThumbX(\n\tchecked: boolean,\n\tisPressed: boolean,\n\tthumbSize: number,\n): number {\n\tconst { trackHeight, trackWidth, trackOutlineWidth, selectedHandleSize } =\n\t\tSwitchTokens;\n\tconst thumbPaddingStart = (trackHeight - thumbSize) / 2;\n\tconst thumbPadding = (trackHeight - selectedHandleSize) / 2;\n\tconst maxBound = trackWidth - selectedHandleSize - thumbPadding;\n\n\tif (isPressed && checked) return maxBound - trackOutlineWidth;\n\tif (isPressed) return thumbPaddingStart + trackOutlineWidth;\n\tif (checked) return maxBound;\n\treturn thumbPaddingStart;\n}\n\n/**\n * Resolves the thumb background color based on interaction state.\n * @internal\n */\nfunction resolveThumbColor(\n\tchecked: boolean,\n\tdisabled: boolean,\n\tisInteracting: boolean,\n\tcheckedThumbColor?: string,\n\tuncheckedThumbColor?: string,\n): string {\n\tif (disabled) {\n\t\treturn checked\n\t\t\t? SwitchColors.disabledCheckedThumb\n\t\t\t: \"rgba(28, 27, 31, 0.38)\";\n\t}\n\tif (checked) {\n\t\treturn isInteracting\n\t\t\t? (checkedThumbColor ?? SwitchColors.hoverCheckedThumb)\n\t\t\t: (checkedThumbColor ?? SwitchColors.checkedThumb);\n\t}\n\treturn isInteracting\n\t\t? (uncheckedThumbColor ?? SwitchColors.hoverUncheckedThumb)\n\t\t: (uncheckedThumbColor ?? SwitchColors.uncheckedThumb);\n}\n\n/**\n * Determines if the thumb icon should be visible.\n * @internal\n */\nfunction isIconVisible(\n\tthumbContent: React.ReactNode | undefined,\n\ticons: boolean,\n\tshowOnlySelectedIcon: boolean,\n\tchecked: boolean,\n): boolean {\n\tif (thumbContent == null) return false;\n\tif (icons) return true;\n\treturn showOnlySelectedIcon && checked;\n}\n\n// ─── SwitchVisual ──────────────────────────────────────────────────────────────\n\ninterface ColorOverrides {\n\tcheckedTrackColor?: string;\n\tuncheckedTrackColor?: string;\n\tcheckedThumbColor?: string;\n\tuncheckedThumbColor?: string;\n}\n\ninterface SwitchVisualProps extends ColorOverrides {\n\tchecked: boolean;\n\tdisabled: boolean;\n\tisPressed: boolean;\n\tisHovered: boolean;\n\tisFocused: boolean;\n\tthumbContent: React.ReactNode | undefined;\n\ticons: boolean;\n\tshowOnlySelectedIcon: boolean;\n\tprefersReduced: boolean;\n}\n\n/** Animated switch visual (track + state layer + thumb + icon). @internal */\nconst SwitchVisual = React.memo(function SwitchVisual({\n\tchecked,\n\tdisabled,\n\tisPressed,\n\tisHovered,\n\tisFocused,\n\tthumbContent,\n\ticons,\n\tshowOnlySelectedIcon,\n\tprefersReduced,\n\tcheckedTrackColor,\n\tuncheckedTrackColor,\n\tcheckedThumbColor,\n\tuncheckedThumbColor,\n}: SwitchVisualProps) {\n\tconst hasIcon = icons && thumbContent != null;\n\tconst thumbSize = resolveThumbSize(isPressed, checked, hasIcon);\n\tconst thumbX = resolveThumbX(checked, isPressed, thumbSize);\n\n\t// ── Track colors ──────────────────────────────────────────────────────────\n\tconst trackBg = checked\n\t\t? (checkedTrackColor ?? SwitchColors.checkedTrack)\n\t\t: (uncheckedTrackColor ?? SwitchColors.uncheckedTrack);\n\n\tconst trackBorderColor = checked\n\t\t? \"rgba(0, 0, 0, 0)\"\n\t\t: SwitchColors.uncheckedTrackOutline;\n\n\tconst trackBorderWidth = checked ? 0 : SwitchTokens.trackOutlineWidth;\n\n\t// Disabled track: use rgba literals (color-mix not animatable)\n\t// Light: on-surface = #1c1b1f → rgba(28,27,31,0.12)\n\t// We use CSS custom property approach with opacity wrapper instead\n\tconst trackOpacity = disabled ? SwitchTokens.disabledTrackOpacity : 1;\n\n\t// ── Thumb colors ──────────────────────────────────────────────────────────\n\tconst isInteracting = isHovered || isFocused || isPressed;\n\tconst thumbBg = resolveThumbColor(\n\t\tchecked,\n\t\tdisabled,\n\t\tisInteracting,\n\t\tcheckedThumbColor,\n\t\tuncheckedThumbColor,\n\t);\n\n\t// ── Icon color ────────────────────────────────────────────────────────────\n\tconst iconColor = disabled\n\t\t? checked\n\t\t\t? \"rgba(28, 27, 31, 0.38)\"\n\t\t\t: \"rgba(230, 225, 229, 0.38)\"\n\t\t: checked\n\t\t\t? SwitchColors.checkedIcon\n\t\t\t: SwitchColors.uncheckedIcon;\n\n\t// ── State layer ───────────────────────────────────────────────────────────\n\tconst stateLayerColor = checked\n\t\t? SwitchColors.checkedStateLayer\n\t\t: SwitchColors.uncheckedStateLayer;\n\tconst stateLayerOpacity =\n\t\tisPressed || isFocused ? 0.12 : isHovered ? 0.08 : 0;\n\tconst stateLayerX = thumbX + thumbSize / 2 - SwitchTokens.stateLayerSize / 2;\n\n\t// ── Icon visibility ───────────────────────────────────────────────────────\n\tconst showIcon = isIconVisible(\n\t\tthumbContent,\n\t\ticons,\n\t\tshowOnlySelectedIcon,\n\t\tchecked,\n\t);\n\n\t// ── Motion: no animation when reduced ─────────────────────────────────────\n\tconst colorTransition = prefersReduced ? { duration: 0 } : COLOR_TRANSITION;\n\n\tconst stateLayerTransition = prefersReduced\n\t\t? { duration: 0 }\n\t\t: FAST_EFFECTS_SPRING;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative\"\n\t\t\tstyle={{\n\t\t\t\twidth: SwitchTokens.trackWidth,\n\t\t\t\theight: SwitchTokens.trackHeight,\n\t\t\t}}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t{/* Track */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"absolute inset-0 rounded-full\"\n\t\t\t\tstyle={{ borderStyle: \"solid\", opacity: trackOpacity }}\n\t\t\t\tanimate={{\n\t\t\t\t\tbackgroundColor: trackBg,\n\t\t\t\t\tborderColor: trackBorderColor,\n\t\t\t\t\tborderWidth: trackBorderWidth,\n\t\t\t\t}}\n\t\t\t\ttransition={colorTransition}\n\t\t\t/>\n\n\t\t\t{/* State layer — 40dp circle centered on thumb */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"absolute rounded-full pointer-events-none\"\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: SwitchTokens.stateLayerSize,\n\t\t\t\t\theight: SwitchTokens.stateLayerSize,\n\t\t\t\t\ttop: (SwitchTokens.trackHeight - SwitchTokens.stateLayerSize) / 2,\n\t\t\t\t\tbackgroundColor: stateLayerColor,\n\t\t\t\t}}\n\t\t\t\tanimate={{ x: stateLayerX, opacity: stateLayerOpacity }}\n\t\t\t\ttransition={stateLayerTransition}\n\t\t\t/>\n\n\t\t\t{/* Thumb */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"absolute rounded-full flex items-center justify-center overflow-hidden\"\n\t\t\t\tstyle={{ top: \"50%\", left: 0, y: \"-50%\" }}\n\t\t\t\tanimate={{\n\t\t\t\t\tx: thumbX,\n\t\t\t\t\twidth: thumbSize,\n\t\t\t\t\theight: thumbSize,\n\t\t\t\t\tbackgroundColor: thumbBg,\n\t\t\t\t}}\n\t\t\t\ttransition={\n\t\t\t\t\tprefersReduced\n\t\t\t\t\t\t? { duration: 0 }\n\t\t\t\t\t\t: isPressed\n\t\t\t\t\t\t\t? SNAP_TRANSITION\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tx: FAST_SPATIAL_SPRING,\n\t\t\t\t\t\t\t\t\twidth: FAST_SPATIAL_SPRING,\n\t\t\t\t\t\t\t\t\theight: FAST_SPATIAL_SPRING,\n\t\t\t\t\t\t\t\t\tbackgroundColor: colorTransition,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{/* Icon cross-fade */}\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{showIcon && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey={checked ? \"icon-on\" : \"icon-off\"}\n\t\t\t\t\t\t\tclassName=\"flex items-center justify-center\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: SwitchTokens.iconSize,\n\t\t\t\t\t\t\t\theight: SwitchTokens.iconSize,\n\t\t\t\t\t\t\t\tcolor: iconColor,\n\t\t\t\t\t\t\t\tfontSize: SwitchTokens.iconSize,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tinitial={prefersReduced ? false : { opacity: 0, scale: 0.5 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={prefersReduced ? {} : { opacity: 0, scale: 0.5 }}\n\t\t\t\t\t\t\ttransition={prefersReduced ? { duration: 0 } : { duration: 0.15 }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{thumbContent}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</m.div>\n\t\t</div>\n\t);\n});\n\n// ─── Switch ────────────────────────────────────────────────────────────────────\n\nconst SwitchComponent = React.forwardRef<HTMLButtonElement, SwitchProps>(\n\t(\n\t\t{\n\t\t\tchecked,\n\t\t\tonCheckedChange,\n\t\t\tdisabled = false,\n\t\t\tthumbContent,\n\t\t\ticons = false,\n\t\t\tshowOnlySelectedIcon = false,\n\t\t\tlabel,\n\t\t\tariaLabel,\n\t\t\tclassName,\n\t\t\tcheckedTrackColor,\n\t\t\tuncheckedTrackColor,\n\t\t\tcheckedThumbColor,\n\t\t\tuncheckedThumbColor,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\n\t\tconst generatedId = React.useId();\n\t\tconst switchId = label ? `switch-${generatedId}` : undefined;\n\n\t\t// ── Event handlers ────────────────────────────────────────────────────\n\t\tconst handleClick = React.useCallback(() => {\n\t\t\tif (!disabled) onCheckedChange(!checked);\n\t\t}, [disabled, checked, onCheckedChange]);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tif (e.key === \" \" || e.key === \"Enter\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonCheckedChange(!checked);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[disabled, checked, onCheckedChange],\n\t\t);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tsetIsPressed(true);\n\t\t\t\t// Ripple\n\t\t\t\tconst rect = e.currentTarget.getBoundingClientRect();\n\t\t\t\tconst x = e.clientX - rect.left;\n\t\t\t\tconst y = e.clientY - rect.top;\n\t\t\t\tconst rippleSize = Math.hypot(rect.width, rect.height) * 2;\n\t\t\t\tsetRipples((prev) => [\n\t\t\t\t\t...prev,\n\t\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t\t]);\n\t\t\t},\n\t\t\t[disabled],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(() => {\n\t\t\tsetIsPressed(false);\n\t\t}, []);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) setIsHovered(true);\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(() => {\n\t\t\tsetIsHovered(false);\n\t\t\tsetIsPressed(false);\n\t\t}, []);\n\n\t\tconst handleFocus = React.useCallback(() => setIsFocused(true), []);\n\t\tconst handleBlur = React.useCallback(() => setIsFocused(false), []);\n\n\t\tconst removeRipple = React.useCallback(\n\t\t\t(id: number) => setRipples((prev) => prev.filter((r) => r.id !== id)),\n\t\t\t[],\n\t\t);\n\n\t\t// ── Shared accessible label ───────────────────────────────────────────\n\t\t// When visible label wraps, aria-label is redundant (label text is\n\t\t// announced via htmlFor linkage). Apply aria-label only when no label.\n\t\tconst buttonAriaLabel = label ? undefined : ariaLabel;\n\n\t\t// ── Switch button ─────────────────────────────────────────────────────\n\t\tconst switchButton = (\n\t\t\t<button\n\t\t\t\tref={ref}\n\t\t\t\tid={switchId}\n\t\t\t\ttype=\"button\"\n\t\t\t\trole=\"switch\"\n\t\t\t\taria-checked={checked}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\taria-label={buttonAriaLabel}\n\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\tonFocus={handleFocus}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center cursor-pointer select-none shrink-0\",\n\t\t\t\t\t// Touch target: 48×48 minimum (pad around 32px track)\n\t\t\t\t\t\"min-w-12 min-h-12\",\n\t\t\t\t\t// Focus ring — MD3 FocusIndicatorColor = secondary\n\t\t\t\t\t\"focus-visible:outline-2 focus-visible:outline-offset-2 rounded-full\",\n\t\t\t\t\t\"focus-visible:outline-(--md-sys-color-secondary)\",\n\t\t\t\t\t// Disabled\n\t\t\t\t\tdisabled && \"pointer-events-none cursor-not-allowed\",\n\t\t\t\t\t!label && className,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Overflow clip wrapper for ripple */}\n\t\t\t\t<div className=\"relative overflow-hidden rounded-full shrink-0\">\n\t\t\t\t\t<SwitchVisual\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisPressed={isPressed}\n\t\t\t\t\t\tisHovered={isHovered}\n\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\tthumbContent={thumbContent}\n\t\t\t\t\t\ticons={icons}\n\t\t\t\t\t\tshowOnlySelectedIcon={showOnlySelectedIcon}\n\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\tcheckedTrackColor={checkedTrackColor}\n\t\t\t\t\t\tuncheckedTrackColor={uncheckedTrackColor}\n\t\t\t\t\t\tcheckedThumbColor={checkedThumbColor}\n\t\t\t\t\t\tuncheckedThumbColor={uncheckedThumbColor}\n\t\t\t\t\t/>\n\t\t\t\t\t<Ripple\n\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</button>\n\t\t);\n\n\t\t// ── With label ────────────────────────────────────────────────────────\n\t\tconst content = label ? (\n\t\t\t<label\n\t\t\t\thtmlFor={switchId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex items-center gap-3 cursor-pointer select-none\",\n\t\t\t\t\tdisabled && \"cursor-not-allowed pointer-events-none opacity-[0.38]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{switchButton}\n\t\t\t\t<span className=\"text-sm leading-none text-(--md-sys-color-on-surface)\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t) : (\n\t\t\tswitchButton\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{content}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSwitchComponent.displayName = \"Switch\";\n\n/**\n * MD3 Expressive Switch component.\n *\n * Toggles a single item on or off. Implements the ARIA switch pattern\n * (`role=\"switch\"`) without `<input>`. Fully animated per MD3 spec:\n * thumb translation, size morph (16→24→28px), state layer, and icon cross-fade.\n *\n * @example\n * ```tsx\n * <Switch checked={isOn} onCheckedChange={setIsOn} label=\"Wi-Fi\" />\n * <Switch checked={isOn} onCheckedChange={setIsOn} icons thumbContent={<CheckIcon />} />\n * <Switch checked={isOn} onCheckedChange={setIsOn} disabled />\n * ```\n *\n * @see https://m3.material.io/components/switch/overview\n */\nexport const Switch = React.memo(SwitchComponent);\n"]}