@bug-on/m3-expressive 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +110 -0
- package/README.md +110 -0
- package/dist/assets/fonts/GoogleSansFlex-VariableFont.woff2 +0 -0
- package/dist/assets/fonts/MaterialSymbolsOutlined-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
- package/dist/assets/fonts/MaterialSymbolsRounded-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
- package/dist/assets/fonts/MaterialSymbolsSharp-VariableFont_FILL,GRAD,opsz,wght.ttf +0 -0
- package/dist/assets/loading-indicator.svg +19 -0
- package/dist/assets/material-symbols-cdn.css +65 -0
- package/dist/assets/material-symbols-self-hosted.css +94 -0
- package/dist/buttons.d.mts +180 -0
- package/dist/buttons.d.ts +180 -0
- package/dist/buttons.js +4282 -0
- package/dist/buttons.js.map +1 -0
- package/dist/buttons.mjs +4227 -0
- package/dist/buttons.mjs.map +1 -0
- package/dist/core.d.mts +422 -0
- package/dist/core.d.ts +422 -0
- package/dist/core.js +2581 -0
- package/dist/core.js.map +1 -0
- package/dist/core.mjs +2547 -0
- package/dist/core.mjs.map +1 -0
- package/dist/feedback.d.mts +600 -0
- package/dist/feedback.d.ts +600 -0
- package/dist/feedback.js +2357 -0
- package/dist/feedback.js.map +1 -0
- package/dist/feedback.mjs +2321 -0
- package/dist/feedback.mjs.map +1 -0
- package/dist/forms.d.mts +40 -0
- package/dist/forms.d.ts +40 -0
- package/dist/forms.js +4263 -0
- package/dist/forms.js.map +1 -0
- package/dist/forms.mjs +4228 -0
- package/dist/forms.mjs.map +1 -0
- package/dist/icon-button-D-gs0gfj.d.mts +136 -0
- package/dist/icon-button-D-gs0gfj.d.ts +136 -0
- package/dist/index.css +309 -0
- package/dist/index.css.d.ts +2 -0
- package/dist/index.d.mts +24 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +23972 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +23668 -0
- package/dist/index.mjs.map +1 -0
- package/dist/layout.d.mts +610 -0
- package/dist/layout.d.ts +610 -0
- package/dist/layout.js +5091 -0
- package/dist/layout.js.map +1 -0
- package/dist/layout.mjs +5042 -0
- package/dist/layout.mjs.map +1 -0
- package/dist/material-symbols-cdn.css +65 -0
- package/dist/material-symbols-cdn.css.d.ts +2 -0
- package/dist/material-symbols-self-hosted.css +94 -0
- package/dist/material-symbols-self-hosted.css.d.ts +2 -0
- package/dist/md3-DFhj-NZj.d.mts +17 -0
- package/dist/md3-DFhj-NZj.d.ts +17 -0
- package/dist/navigation.d.mts +2766 -0
- package/dist/navigation.d.ts +2766 -0
- package/dist/navigation.js +6684 -0
- package/dist/navigation.js.map +1 -0
- package/dist/navigation.mjs +6573 -0
- package/dist/navigation.mjs.map +1 -0
- package/dist/overlays.d.mts +161 -0
- package/dist/overlays.d.ts +161 -0
- package/dist/overlays.js +3298 -0
- package/dist/overlays.js.map +1 -0
- package/dist/overlays.mjs +3244 -0
- package/dist/overlays.mjs.map +1 -0
- package/dist/pickers.d.mts +1074 -0
- package/dist/pickers.d.ts +1074 -0
- package/dist/pickers.js +4240 -0
- package/dist/pickers.js.map +1 -0
- package/dist/pickers.mjs +4200 -0
- package/dist/pickers.mjs.map +1 -0
- package/dist/plugin.d.mts +1 -0
- package/dist/plugin.d.ts +1 -0
- package/dist/plugin.js +13 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugin.mjs +3 -0
- package/dist/plugin.mjs.map +1 -0
- package/dist/scroll-area-CVS6HyLl.d.mts +33 -0
- package/dist/scroll-area-CVS6HyLl.d.ts +33 -0
- package/dist/shapes.d.mts +1119 -0
- package/dist/shapes.d.ts +1119 -0
- package/dist/shapes.js +2941 -0
- package/dist/shapes.js.map +1 -0
- package/dist/shapes.mjs +2889 -0
- package/dist/shapes.mjs.map +1 -0
- package/dist/side-sheet-modal-BY6VCC8p.d.mts +553 -0
- package/dist/side-sheet-modal-CglP6KYA.d.ts +553 -0
- package/dist/split-button-trailing-uncheckable-C5CLCIKP.d.ts +731 -0
- package/dist/split-button-trailing-uncheckable-MXj_kyNt.d.mts +731 -0
- package/dist/text-field-eAIpz9z1.d.mts +1038 -0
- package/dist/text-field-eAIpz9z1.d.ts +1038 -0
- package/dist/typography-339RV6v7.d.mts +486 -0
- package/dist/typography-339RV6v7.d.ts +486 -0
- package/dist/typography.css +22 -0
- package/dist/typography.css.d.ts +2 -0
- package/package.json +207 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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/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/shared/motion-tokens.ts","../src/ui/switch/switch.tokens.ts","../src/ui/switch/switch.tsx","../src/ui/scroll-area.tsx","../src/ui/toolbar/toolbar-context.tsx","../src/ui/shared/constants.ts","../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"],"names":["twMerge","clsx","React","RippleItem","jsx","m","useReducedMotion","AnimatePresence","React2","CheckboxVisual","LazyMotion","domMax","jsxs","cva","React3","Root","Fragment","MD3_FAST_EFFECTS","React4","useMergedRef","RadioVisual","useMemo","React5","ValueIndicator","SliderThumb","insetLimit","trackInset","React6","RangeTrack","gapWithThumbStr","React7","InsetIcon","SliderTrack","segments","React8","React9","SwitchVisual","React10","RadixScrollArea","React11","React12","ActiveIndicator","React13","FloatingLabel","React14","LeadingIcon","React15","OutlineContainer","React16","PrefixSuffix","React17","SupportingText","React18","TrailingIcon","React19","_a"],"mappings":"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","file":"forms.js","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.hypot(rect.width, rect.height) * 2;\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 { 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\",\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// Expressive scale feedback (MD3 \"bouncy\" press)\n\t\t\"active:scale-[0.98]\",\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 * Used for `role=\"checkbox\"` (filter) / `aria-pressed` (input).\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 * - `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 * 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\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\t...props\n\t\t},\n\t\tref,\n\t) => {\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\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 always have a potential leading slot\n\t\t * (checkmark or leadingIcon). Otherwise depends on resolvedLeadingIcon.\n\t\t */\n\t\tconst hasLeadingContent = 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\t(isFilter || isInput) &&\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 && \"opacity-[0.38] pointer-events-none cursor-not-allowed\",\n\t\t\t\t\tdisabled && !selected && \"border-m3-outline-variant/[.12]\",\n\t\t\t\t\tdisabled &&\n\t\t\t\t\t\tselected &&\n\t\t\t\t\t\t\"bg-m3-on-surface/[.12] text-m3-on-surface border-none\",\n\t\t\t\t),\n\t\t\t[isFilter, isInput, 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 but not the main interaction\n\t\t\t// We disable the root's state layer (hover/focus) to avoid the 1px gap issue\n\t\t\tisCompound &&\n\t\t\t\t\"items-stretch cursor-default active:scale-100 before:opacity-0 gap-0\",\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\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\"flex items-center h-full grow 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\t// Move padding here; keep horizontal padding but remove trailing to fit next to X\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-0\",\n\t\t\t\t\t\t\t\t// Re-apply focus ring to internal button instead of root div\n\t\t\t\t\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-m3-secondary focus-visible:ring-inset\",\n\t\t\t\t\t\t\t\t\"rounded-l-[7px] rounded-r-none\",\n\t\t\t\t\t\t\t\t// State layer for main area\n\t\t\t\t\t\t\t\t\"relative overflow-hidden\",\n\t\t\t\t\t\t\t\t\"before:absolute before:-inset-px before:pointer-events-none before:bg-current\",\n\t\t\t\t\t\t\t\t\"before:transition-opacity before:duration-200 before:opacity-0 before:rounded-l-[7px]\",\n\t\t\t\t\t\t\t\t\"hover:before:opacity-[0.08] focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\",\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 className=\"flex items-center justify-center shrink-0\">\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\"flex items-center justify-center w-8.5 h-full\", // 18px icon + 8px left + 8px right padding\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\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\t\t\"relative overflow-hidden rounded-r-[7px] rounded-l-none\",\n\t\t\t\t\t\t\t\t\t\t\"before:absolute before:-inset-px before:pointer-events-none before:bg-current\",\n\t\t\t\t\t\t\t\t\t\t\"before:transition-opacity before:duration-200 before:opacity-0 before:rounded-r-[7px]\",\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","/**\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 { SliderTrackSize } from \"./slider.types\";\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\ts: 24,\n\t\tm: 40,\n\t\tl: 56,\n\t\txl: 96,\n\t} satisfies Record<SliderTrackSize, number>,\n\n\t// ── Track shapes (border radius) ──────────────────────────────────────────\n\ttrackShapes: {\n\t\txs: 8,\n\t\ts: 8,\n\t\tm: 12,\n\t\tl: 16,\n\t\txl: 28,\n\t} satisfies Record<SliderTrackSize, number>,\n\n\t// ── Thumb (handle) ────────────────────────────────────────────────────────\n\t/** Thumb height grows with track size */\n\tthumbHeights: {\n\t\txs: 44,\n\t\ts: 44,\n\t\tm: 52,\n\t\tl: 68,\n\t\txl: 108,\n\t} satisfies Record<SliderTrackSize, 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\ts: 0,\n\t\tm: 24,\n\t\tl: 24,\n\t\txl: 32,\n\t} satisfies Record<SliderTrackSize, 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 TickMarkActiveContainerColor (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 TickMarkInactiveContainerColor (secondary-container blends in).\n\t */\n\ttickOnActive: \"var(--md-sys-color-secondary-container)\",\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 { getKeyboardDelta } from \"./hooks/useSliderMath\";\nimport {\n\tSLIDER_INDICATOR_TRANSITION,\n\tSLIDER_THUMB_SPRING,\n\tSliderColors,\n\tSliderTokens,\n} from \"./slider.tokens\";\nimport type { SliderThumbProps, SliderTrackSize } 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\ttrackSize: SliderTrackSize;\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\ttrackSize,\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 trackSize\n\tconst thumbHeight = SliderTokens.thumbHeights[trackSize];\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\ttrackSize,\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(\n\t\tSliderTokens.trackSizes[trackSize] / 2,\n\t\tinsetLimit,\n\t);\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[trackSize] / 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, trackSize],\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\ttrackSize={trackSize}\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[trackSize],\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[trackSize],\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 { useSliderMath } from \"./hooks/useSliderMath\";\nimport { SliderColors, SliderTokens } from \"./slider.tokens\";\nimport type {\n\tRangeSliderProps,\n\tSliderTrackShape,\n\tSliderTrackSize,\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\ttrackSize: SliderTrackSize;\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\ttrackSize,\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 size = SliderTokens.trackSizes[trackSize];\n\tconst thumbHeight = SliderTokens.thumbHeights[trackSize];\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 = size / 2;\n\tif (trackShape === \"md3\") {\n\t\touterR = Math.min(SliderTokens.trackShapes[trackSize], size / 2);\n\t} else if (typeof trackShape === \"number\") {\n\t\touterR = Math.min(trackShape, size / 2);\n\t}\n\n\tif (isHorizontal) {\n\t\tconst insetLimit = thumbGap + thumbWidthDefault / 2;\n\t\tconst trackInset = Math.min(size / 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: size,\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: size,\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: size,\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-${variant}-container)`\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(size / 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: size,\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: size,\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: size,\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-${variant}-container)`\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\ttrackSize = \"m\",\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[trackSize] / 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\ttrackSize,\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\ttrackSize={trackSize}\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\ttrackSize={trackSize}\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\ttrackSize={trackSize}\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 { SliderColors, SliderTokens } from \"./slider.tokens\";\nimport type {\n\tSliderOrientation,\n\tSliderTrackProps,\n\tSliderTrackSize,\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\ttrackSizeToken: SliderTrackSize;\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\ttrackSizeToken,\n\tdisabled,\n\tvariant,\n\tprefersReduced,\n}: InsetIconProps) {\n\tconst iconSize = Math.min(\n\t\tSliderTokens.insetIconSizes[trackSizeToken],\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-${variant}-container)`\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\ttrackSize,\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 size = SliderTokens.trackSizes[trackSize];\n\tconst thumbHeight = SliderTokens.thumbHeights[trackSize];\n\tconst { thumbGap, thumbWidthDefault, trackInnerRadius } = SliderTokens;\n\tconst innerR = trackInnerRadius;\n\n\tlet outerR = size / 2;\n\tif (trackShape === \"md3\") {\n\t\touterR = Math.min(SliderTokens.trackShapes[trackSize], size / 2);\n\t} else if (typeof trackShape === \"number\") {\n\t\touterR = Math.min(trackShape, size / 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[trackSize],\n\t\tMath.max(4, size - 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(size / 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: size,\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: size,\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: size,\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: size,\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: size,\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: size,\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: size,\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: size,\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={size}\n\t\t\t\t\t\t\ttrackSizeToken={trackSize}\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={size}\n\t\t\t\t\t\t\ttrackSizeToken={trackSize}\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: size,\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: size,\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: size,\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: size,\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: size,\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: size,\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: size,\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: size,\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={size}\n\t\t\t\t\t\ttrackSizeToken={trackSize}\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={size}\n\t\t\t\t\t\ttrackSizeToken={trackSize}\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\ttrackSize = \"m\",\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[trackSize] / 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[\n\t\t\t\tcoerce,\n\t\t\t\tdisabled,\n\t\t\t\thandleValueChange,\n\t\t\t\tisHorizontal,\n\t\t\t\tmax,\n\t\t\t\tmin,\n\t\t\t\tsnap,\n\t\t\t\ttrackSize,\n\t\t\t],\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[trackSize] >= 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\ttrackSize={trackSize}\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\ttrackSize={trackSize}\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 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 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\",\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\">\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","\"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","import * as React from \"react\";\n\nexport interface ToolbarContextValue {\n\torientation: \"horizontal\" | \"vertical\";\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 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","/**\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\tvariant === \"outlined\" && isFloated && \"bg-m3-surface\",\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\t/**\n\t * Notch width calculation:\n\t * When floated: 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: 0 (no gap in the border).\n\t */\n\tconst notchWidth = isFloated\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: isFloated ? 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\tisInToolbar ? \"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: 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\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"]}
|