@bug-on/m3-expressive 1.2.1 → 1.2.2
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 +6 -0
- package/dist/buttons.d.mts +26 -5
- package/dist/buttons.d.ts +26 -5
- package/dist/buttons.js +581 -345
- package/dist/buttons.js.map +1 -1
- package/dist/buttons.mjs +573 -345
- package/dist/buttons.mjs.map +1 -1
- package/dist/core.js +52 -13
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +52 -13
- package/dist/core.mjs.map +1 -1
- package/dist/feedback.js +52 -13
- package/dist/feedback.js.map +1 -1
- package/dist/feedback.mjs +52 -13
- package/dist/feedback.mjs.map +1 -1
- package/dist/forms.js +4 -1
- package/dist/forms.js.map +1 -1
- package/dist/forms.mjs +4 -1
- package/dist/forms.mjs.map +1 -1
- package/dist/{icon-button-sSt6PPLg.d.mts → icon-button-CSsDmuQC.d.mts} +13 -0
- package/dist/{icon-button-sSt6PPLg.d.ts → icon-button-CSsDmuQC.d.ts} +13 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1268 -1005
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1127 -865
- package/dist/index.mjs.map +1 -1
- package/dist/layout.js +15 -7
- package/dist/layout.js.map +1 -1
- package/dist/layout.mjs +15 -7
- package/dist/layout.mjs.map +1 -1
- package/dist/navigation.d.mts +1 -1
- package/dist/navigation.d.ts +1 -1
- package/dist/navigation.js +66 -16
- package/dist/navigation.js.map +1 -1
- package/dist/navigation.mjs +66 -16
- package/dist/navigation.mjs.map +1 -1
- package/dist/overlays.js +52 -13
- package/dist/overlays.js.map +1 -1
- package/dist/overlays.mjs +52 -13
- package/dist/overlays.mjs.map +1 -1
- package/dist/pickers.js +177 -111
- package/dist/pickers.js.map +1 -1
- package/dist/pickers.mjs +177 -111
- package/dist/pickers.mjs.map +1 -1
- package/dist/{split-button-trailing-uncheckable-BcPD_7uK.d.ts → split-button-trailing-uncheckable-C-qQlyZx.d.ts} +74 -19
- package/dist/{split-button-trailing-uncheckable-DtFJkTFr.d.mts → split-button-trailing-uncheckable-DHJqNeq_.d.mts} +74 -19
- package/package.json +3 -3
package/dist/layout.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils.ts","../src/ui/ripple.tsx","../src/ui/card.tsx","../src/ui/loading-indicator.tsx","../src/ui/progress-indicator/utils.ts","../src/ui/progress-indicator/circular.tsx","../src/ui/progress-indicator/hooks.ts","../src/ui/progress-indicator/linear-flat.tsx","../src/ui/progress-indicator/linear-wavy.tsx","../src/ui/progress-indicator/linear.tsx","../src/ui/progress-indicator/index.tsx","../src/ui/shared/motion-tokens.ts","../src/ui/shared/constants.ts","../src/ui/shared/touch-target.tsx","../src/ui/buttons/button/button-tokens.ts","../src/ui/buttons/button/button.tsx","../src/ui/icon.tsx","../src/ui/scroll-area.tsx","../src/ui/code-block.tsx","../src/ui/divider.tsx","../src/ui/lists/list-context.ts","../src/ui/lists/list-tokens.ts","../src/ui/lists/list.tsx","../src/ui/lists/list-divider.tsx","../src/ui/checkbox.tsx","../src/ui/radio-button.tsx","../src/ui/switch/switch.tokens.ts","../src/ui/switch/switch.tsx","../src/ui/lists/list-utils.ts","../src/ui/lists/list-item.tsx","../src/ui/text.tsx","../src/ui/toc.tsx","../src/ui/typography/type-scale-tokens.ts","../src/ui/typography/typography-key-tokens.ts","../src/ui/typography/typography-tokens.ts","../src/ui/typography/typography.tsx"],"names":["React","RippleItem","React2","jsx","m","React3","IndeterminateSvg","jsxs","Fragment","DeterminateSvg","React4","LazyMotion","domMax","React5","React6","FlatLinearTrack","React7","WavyLinearTrack","React8","React9","animate","React10","_a","_b","useMotionValue","AnimatePresence","Slot","React11","React12","useState","useEffect","useCallback","React13","useReducedMotion","React14","cornerRadius","React15","React16","React17","CheckboxVisual","useMergedRef","MD3_FAST_EFFECTS","RadioVisual","React19","SwitchVisual","React20","cva","React21","useMemo","TypographyKeyTokens","createContext","useContext"],"mappings":"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","file":"layout.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Ripple\n//\n// - Origin: pointer-down coordinates (x, y) relative to container\n// - Shape: perfectly round circle, expands from origin to diagonally fill btn\n// - Color: currentColor at 12% opacity (matches MD3 state layer spec)\n// - A11y: disabled when `prefers-reduced-motion` is active (configurable)\n// - Clipping: caller wraps in overflow-hidden; border-radius handled on parent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Represents a single ripple wave instance with position and size metadata.\n *\n * @example\n * ```tsx\n * const ripple: RippleOrigin = { id: Date.now(), x: 50, y: 30, size: 200 };\n * ```\n */\nexport interface RippleOrigin {\n\t/** Unique identifier used as React key and for removal. */\n\tid: number;\n\t/** X coordinate of the pointer event relative to the container's left edge (px). */\n\tx: number;\n\t/** Y coordinate of the pointer event relative to the container's top edge (px). */\n\ty: number;\n\t/**\n\t * Diameter of the ripple circle (px).\n\t * Typically `Math.hypot(width, height) * 2` to ensure it fills the container.\n\t */\n\tsize: number;\n}\n\n/** @internal Props for a single animated ripple element. */\ninterface RippleItemProps {\n\tripple: RippleOrigin;\n\tonDone: (id: number) => void;\n}\n\n/** @internal Memoized single ripple wave — minimises re-renders. */\nconst RippleItem = React.memo(function RippleItem({\n\tripple,\n\tonDone,\n}: RippleItemProps) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={ripple.id}\n\t\t\taria-hidden=\"true\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: ripple.x - ripple.size / 2,\n\t\t\t\ttop: ripple.y - ripple.size / 2,\n\t\t\t\twidth: ripple.size,\n\t\t\t\theight: ripple.size,\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tbackgroundColor: \"currentColor\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\ttransformOrigin: \"center\",\n\t\t\t}}\n\t\t\tinitial={{ scale: 0, opacity: 0.12 }}\n\t\t\tanimate={{ scale: 1, opacity: 0 }}\n\t\t\texit={{ opacity: 0 }}\n\t\t\ttransition={{\n\t\t\t\tscale: { duration: 0.5, ease: [0.2, 0, 0, 1] },\n\t\t\t\topacity: { duration: 0.4, ease: \"easeOut\", delay: 0.1 },\n\t\t\t}}\n\t\t\tonAnimationComplete={() => onDone(ripple.id)}\n\t\t/>\n\t);\n});\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Ripple Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the `Ripple` presentation component.\n */\nexport interface RippleProps {\n\t/** Active ripple instances to render. Managed by the parent via `useRipple`. */\n\tripples: RippleOrigin[];\n\t/** Called when a ripple's exit animation completes — remove it from state. */\n\tonRippleDone: (id: number) => void;\n\t/**\n\t * Completely disables the ripple effect.\n\t * Use this when the parent element is disabled or interaction is not desired.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * When `true`, the ripple respects the user's OS-level\n\t * `prefers-reduced-motion` accessibility setting and renders nothing if active.\n\t *\n\t * Set to `false` to always show ripples regardless of system preference.\n\t * @default true\n\t */\n\trespectSystemMotion?: boolean;\n}\n\n/**\n * MD3 Expressive Ripple — animated touch-feedback wave layer.\n *\n * Renders absolutely-positioned ripple circles inside an `overflow-hidden`\n * container. Must be placed as a direct child of the interactive element.\n *\n * @remarks\n * - The parent element **must** have `overflow: hidden` and `position: relative`\n * (or equivalent) for clipping to work correctly.\n * - Set `disabled` to `true` on parent's disabled state to avoid stale ripples.\n * - The ripple color is `currentColor` at 12% opacity — matching MD3 state layer spec.\n *\n * @example\n * ```tsx\n * const { ripples, onPointerDown, removeRipple } = useRippleState();\n *\n * <button onPointerDown={onPointerDown} className=\"relative overflow-hidden\">\n * <Ripple ripples={ripples} onRippleDone={removeRipple} />\n * Click me\n * </button>\n * ```\n *\n * @see {@link useRippleState} for the state management hook\n * @see https://m3.material.io/foundations/interaction/states/overview\n */\nexport function Ripple({\n\tripples,\n\tonRippleDone,\n\tdisabled = false,\n\trespectSystemMotion = true,\n}: RippleProps) {\n\tconst prefersReduced = useReducedMotion();\n\n\t// Disabled prop: explicitly turned off by consumer\n\tif (disabled) return null;\n\n\t// Respect system prefers-reduced-motion when opted-in\n\tif (respectSystemMotion && prefersReduced) return null;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{ripples.map((r) => (\n\t\t\t\t<RippleItem key={r.id} ripple={r} onDone={onRippleDone} />\n\t\t\t))}\n\t\t</AnimatePresence>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useRippleState Hook\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Options for configuring `useRippleState` behaviour.\n */\nexport interface UseRippleStateOptions {\n\t/**\n\t * When `true`, the ripple is suppressed — `onPointerDown` becomes a no-op.\n\t * Use this to sync the ripple with the parent element's `disabled` state.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * `useRippleState` — state manager for MD3 Expressive ripple waves.\n *\n * Tracks active ripple instances and provides pointer event handlers.\n * Pair with the `<Ripple>` component for rendering.\n *\n * @remarks\n * This hook only manages ripple *state* (coordinates, size, lifecycle).\n * The actual animation is handled by `<Ripple>` via Framer Motion.\n * Respecting `prefers-reduced-motion` is handled by `<Ripple>` itself.\n *\n * @param options - Configuration options. See {@link UseRippleStateOptions}.\n * @returns `{ ripples, onPointerDown, removeRipple }` — bind to the interactive element.\n *\n * @example\n * ```tsx\n * function MyButton({ disabled, children }) {\n * const { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n *\n * return (\n * <button\n * disabled={disabled}\n * onPointerDown={onPointerDown}\n * className=\"relative overflow-hidden\"\n * >\n * <Ripple ripples={ripples} onRippleDone={removeRipple} disabled={disabled} />\n * {children}\n * </button>\n * );\n * }\n * ```\n *\n * @see {@link Ripple} for the rendering component\n */\nexport function useRippleState(options: UseRippleStateOptions = {}) {\n\tconst { disabled = false } = options;\n\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\n\tconst onPointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst y = e.clientY - rect.top;\n\t\t\tconst rippleSize = Math.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 card.tsx\n *\n * Card component for MD3 Expressive.\n *\n * Divided into two functional aspects (structure modeled after Android Card.kt):\n * - **Static** → Renders a plain `<div>`, purely informational with no interaction.\n * - **Interactive** → Powered by `<motion.button>` or `<motion.a>`, featuring Ripple effect and elevation animation on hover/press.\n *\n * Elevation levels (translated from ElevatedCardTokens / FilledCardTokens / OutlinedCardTokens / Elevation.kt):\n * - Level 0 = \"none\" (Flat)\n * - Level 1 = box-shadow ~1dp (Slight elevation)\n * - Level 2 = box-shadow ~2dp (Higher elevation)\n *\n * @example\n * ```tsx\n * // Static card\n * <Card variant=\"elevated\">\n * <div className=\"p-4\">Card content</div>\n * </Card>\n *\n * // Interactive button card\n * <Card variant=\"filled\" onClick={() => alert('Clicked!')}>\n * <div className=\"p-4\">Clickable card</div>\n * </Card>\n *\n * // Interactive link card\n * <Card variant=\"outlined\" href=\"/home\">\n * <div className=\"p-4\">Link card</div>\n * </Card>\n * ```\n *\n * @see https://m3.material.io/components/cards/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Ripple, useRippleState } from \"./ripple\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Elevation Shadows (from packages/tailwind/src/index.ts)\n// ─────────────────────────────────────────────────────────────────────────────\nconst SHADOW = {\n\tlevel0: \"none\",\n\tlevel1: \"0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)\",\n\tlevel2: \"0px 1px 2px 0px rgba(0,0,0,.3), 0px 2px 6px 2px rgba(0,0,0,.15)\",\n} as const;\n\n// Maps each variant to its elevation levels per interaction state.\n// Source: ElevatedCardTokens.kt, FilledCardTokens.kt, OutlinedCardTokens.kt\nconst VARIANT_ELEVATION = {\n\televated: {\n\t\trest: SHADOW.level1,\n\t\thover: SHADOW.level2,\n\t\tpressed: SHADOW.level1,\n\t\tdisabled: SHADOW.level1, // ElevatedCardTokens.DisabledContainerElevation = Level1\n\t},\n\tfilled: {\n\t\trest: SHADOW.level0,\n\t\thover: SHADOW.level1,\n\t\tpressed: SHADOW.level0,\n\t\tdisabled: SHADOW.level0,\n\t},\n\toutlined: {\n\t\trest: SHADOW.level0,\n\t\thover: SHADOW.level1,\n\t\tpressed: SHADOW.level0,\n\t\tdisabled: SHADOW.level0,\n\t},\n} as const;\n\ntype CardVariant = keyof typeof VARIANT_ELEVATION;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CVA – Variant base classes (token-aligned with MD3)\n// ─────────────────────────────────────────────────────────────────────────────\nconst cardVariants = cva(\n\t\"rounded-m3-lg flex flex-col relative overflow-hidden transition-colors duration-200\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\t// ElevatedCardTokens.ContainerColor = SurfaceContainerLow\n\t\t\t\televated: \"bg-m3-surface-container-low\",\n\t\t\t\t// FilledCardTokens.ContainerColor = SurfaceContainerHighest\n\t\t\t\tfilled: \"bg-m3-surface-container-highest\",\n\t\t\t\t// OutlinedCardTokens.ContainerColor = Surface, OutlineColor = OutlineVariant\n\t\t\t\toutlined: \"bg-m3-surface border border-m3-outline-variant\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { variant: \"elevated\" },\n\t},\n);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hook: Card Elevation Animation\n// Mirrors animateElevation() from Elevation.kt.\n// Returns motion animation props for interactive boxShadow transitions.\n// ─────────────────────────────────────────────────────────────────────────────\nfunction useCardElevation(variant: CardVariant, disabled: boolean) {\n\tconst levels = VARIANT_ELEVATION[variant];\n\treturn {\n\t\tanimate: { boxShadow: disabled ? levels.disabled : levels.rest },\n\t\twhileHover: disabled ? undefined : { boxShadow: levels.hover },\n\t\twhileTap: disabled ? undefined : { boxShadow: levels.pressed },\n\t\twhileFocus: disabled ? undefined : { boxShadow: levels.hover },\n\t\ttransition: {\n\t\t\tboxShadow: {\n\t\t\t\t// Incoming: 120ms (from Elevation.kt DefaultIncomingSpec)\n\t\t\t\tduration: 0.12,\n\t\t\t\tease: [0.4, 0, 0.2, 1] as [number, number, number, number],\n\t\t\t},\n\t\t},\n\t};\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// Use HTMLMotionProps<\"button\"> as the base to avoid onDrag / event handler\n// conflicts between native React HTMLAttributes and Motion's extended prop types.\n// ─────────────────────────────────────────────────────────────────────────────\ntype MotionDivProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\nexport interface CardProps\n\textends MotionDivProps,\n\t\tVariantProps<typeof cardVariants> {\n\t/** Disables interaction and reduces opacity (MD3 disabled state). */\n\tdisabled?: boolean;\n\t/**\n\t * Forces card to be interactive even without `onClick`.\n\t * Useful when card contains child interactive elements.\n\t */\n\tinteractive?: boolean;\n\t/**\n\t * If provided, renders card as `<a>` element. Automatically enables interactive mode.\n\t * Prefer `href` over `onClick` for page navigation.\n\t */\n\thref?: string;\n\t/** Target for `<a>` element (effective only when `href` is provided). */\n\ttarget?: React.AnchorHTMLAttributes<HTMLAnchorElement>[\"target\"];\n\t/** rel for `<a>` element (automatically adds `noreferrer` when `target=\"_blank\"`). */\n\trel?: string;\n\tchildren?: React.ReactNode;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\nconst CardImpl = React.forwardRef<HTMLElement, CardProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant = \"elevated\",\n\t\t\tdisabled = false,\n\t\t\tinteractive = false,\n\t\t\thref,\n\t\t\ttarget,\n\t\t\trel: relProp,\n\t\t\tonClick,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst safeVariant = variant as CardVariant;\n\t\tconst isInteractive = !!onClick || !!href || interactive || asChild;\n\t\tconst elevationProps = useCardElevation(safeVariant, disabled);\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState();\n\n\t\tconst baseClass = cn(\n\t\t\tcardVariants({ variant }),\n\t\t\t// Disabled state:\n\t\t\t// - pointer-events-none → disable interactions completely\n\t\t\t// - opacity-[0.38] → MD3 DisabledContainerOpacity\n\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\tclassName,\n\t\t);\n\n\t\t// MD3 State Layer (Hover: 8%, Focus: 10%, Pressed: 10%)\n\t\t// Applied to interactive elements via absolute inset ::before pseudo-element\n\t\tconst interactiveClass = cn(\n\t\t\t// Remove default outline, use MD3 state overlay & elevation for focus\n\t\t\t\"focus-visible:outline-none focus:outline-none group\",\n\t\t\t// Base pseudo-element overlay layer\n\t\t\t\"before:absolute before:inset-0 before:pointer-events-none before:bg-m3-on-surface before:opacity-0 before:transition-opacity before:duration-200\",\n\t\t\t// Interactive state opacities\n\t\t\t\"hover:before:opacity-[0.08] focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\",\n\t\t\t// Outlined interactive card: change border color to m3-outline on focus/press/hover\n\t\t\tvariant === \"outlined\" &&\n\t\t\t\t\"hover:border-m3-outline focus-visible:border-m3-outline active:border-m3-outline\",\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\t\t\tconst innerContent = (\n\t\t\t\t<>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t{child.props.children}\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref as React.Ref<HTMLElement>}\n\t\t\t\t\t\tclassName={cn(baseClass, interactiveClass)}\n\t\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t{...(props as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\t// ── Static Card – no interaction ─────────────────────────────────\n\t\tif (!isInteractive) {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tref={ref as React.Ref<HTMLDivElement>}\n\t\t\t\t\tclassName={baseClass}\n\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// ── Safe rel: automatically add \"noreferrer\" when target=\"_blank\" ────────────\n\t\tconst safeRel = href\n\t\t\t? (relProp ?? (target === \"_blank\" ? \"noreferrer\" : undefined))\n\t\t\t: undefined;\n\n\t\t// ── Link Card ────────────────────────────────────────────────────────────\n\t\tif (href) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.a\n\t\t\t\t\t\tref={ref as React.Ref<HTMLAnchorElement>}\n\t\t\t\t\t\thref={disabled ? undefined : href}\n\t\t\t\t\t\ttarget={target}\n\t\t\t\t\t\trel={safeRel}\n\t\t\t\t\t\tclassName={cn(baseClass, interactiveClass)}\n\t\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t{...elevationProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</m.a>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\t// ── Interactive Button Card ──────────────────────────────────────────────\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref as React.Ref<HTMLButtonElement>}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tclassName={cn(baseClass, interactiveClass)}\n\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t{...elevationProps}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t{children}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\nCardImpl.displayName = \"Card\";\n\nexport const Card = React.memo(CardImpl);\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Loading Indicator\n//\n// Spec references:\n// • Loading Indicator Overview (190326 PDF)\n// • Loading Indicator Specs (190326 PDF)\n// • Loading Indicator Accessibility (190326 PDF)\n// • LoadingIndicator.kt (Android reference)\n//\n// Two operational modes:\n// 1. Indeterminate — no `progress` prop → 7-shape morph + SMIL rotation loop\n// 2. Determinate — `progress` (0-1) → Circle→SoftBurst morph + counterclockwise rotation\n//\n// Responsive sizing: strictly [24dp, 240dp]. Container/indicator ratio is preserved.\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─── Indeterminate: Shape & Rotation Keyframe Data (from official MD3 SVG) ──\nconst SHAPE_KEY_TIMES =\n\t\"0; 0.14; 0.14; 0.29; 0.29; 0.43; 0.43; 0.57; 0.57; 0.71; 0.71; 0.86; 0.86; 1\";\n\nconst SHAPE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\n\n// 7 MD3 morphing shapes, each repeated twice for a smooth hold-and-morph\nconst SHAPE_VALUES = [\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\",\n\t\"M20.3 8.6 21.1 8 22 7.6 23 7.3 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.2 15.5 37.6 16.5 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8 17.6 9.8 18.6 9.6 19.5 9.2Z\",\n\t\"M18.6 9.6 19.5 9.2 20.3 8.6 21.1 8 22 7.6 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.6 16.4 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8Z\",\n\t\"M18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.2 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 33.7 13.1 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.5 30.5 39.5 30 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7.1 21.7 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8 15.4 12.3 16.2 11.7 17 11.1 17.8 10.5Z\",\n\t\"M15.4 12.3 16.2 11.7 17 11.1 17.8 10.5 18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.3 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.4 30.5 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8Z\",\n\t\"M17 12.8 17.7 12.1 18.5 11.5 19.3 10.9 20.1 10.5 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 25 9 26 9 27 9 27.6 9.1 28 9.1 28.9 9.3 29.9 9.6 30.9 9.9 31.8 10.3 32.6 10.8 33.5 11.3 34.3 11.9 34.6 12.2 35 12.6 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.6 18.5 38.6 18.7 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.3 38.2 26.4 37.8 27.3 37.4 28.2 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.8 32.5 33.5 32.8 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.2 37.3 27.9 37.5 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 22.5 39 21.5 39 20.5 38.9 20.4 38.9 19.5 38.8 18.6 38.6 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.4 35.8 13.3 35.8 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.6 30 9.4 29.3 9.3 29 9.1 28 9 27 9 26 9 25 9.2 24 9.4 23 9.6 22.1 9.8 21.7 10 21.1 10.4 20.2 10.9 19.4 11.4 18.5 12.1 17.8 12.7 17 13.4 16.3 14.2 15.6 14.2 15.5 14.9 14.9 15.6 14.2 16.3 13.5Z\",\n\t\"M33.5 11.3 34.3 11.9 35 12.6 35.3 12.8 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.3 17.7 38.6 18.5 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.4 37.8 27.3 37.4 28.2 36.9 28.9 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.5 32.8 33.1 33.2 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.7 37 28.2 37.3 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 23.3 38.9 22.5 39 21.5 39 20.5 38.9 19.5 38.8 18.6 38.6 17.6 38.3 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.3 35.8 12.7 35.2 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.7 30.3 9.6 29.9 9.3 29 9.1 28 9 27 9 26 9 25 9.1 24.5 9.2 24 9.4 23 9.6 22.1 10 21.1 10.4 20.2 10.9 19.4 11.1 19.1 11.5 18.5 12.1 17.7 12.7 17 13.5 16.3 14.2 15.6 14.9 14.9 14.9 14.8 15.6 14.2 16.3 13.5 17 12.8 17.7 12.1 18.5 11.5 19.3 11 19.3 10.9 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 24.7 9.1 25 9 26 9 27 9 28 9.1 28.9 9.3 29.9 9.6 30.4 9.7 30.9 9.9 31.8 10.3 32.6 10.8Z\",\n\t\"M33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.8 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.6 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7 27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1Z\",\n\t\"M27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1 33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.9 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.5 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7Z\",\n\t\"M27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 34.8 11.3 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.9 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.4 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35 36 35.7 35.3 36.4 34.4 37 34.1 37.2 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.6 10 30.1 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10 16.6 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 20.9 11 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11Z\",\n\t\"M36 35.7 35.3 36.4 34.4 37 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.2 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11 27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.8 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35Z\",\n\t\"M32.1 32.1 31.4 32.8 30.7 33.5 29.9 34.1 29.1 34.7 28.3 35.3 27.6 35.8 27.5 35.8 26.6 36.4 25.8 36.8 24.9 37.3 24 37.7 23.1 38 22.1 38.3 21.2 38.6 20.2 38.8 19.2 38.9 18.2 39 17.2 39 16.6 38.9 16.3 38.9 15.3 38.7 14.3 38.4 13.4 38 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10 34.6 9.6 33.7 9.3 32.7 9.1 31.7 9.1 31.4 9 30.8 9 29.8 9.1 28.8 9.2 27.8 9.4 26.8 9.7 25.9 10 24.9 10.3 24 10.7 23.1 11.2 22.2 11.6 21.4 12.2 20.5 12.2 20.4 12.7 19.7 13.3 18.9 13.9 18.1 14.5 17.3 15.2 16.6 15.9 15.9 16.6 15.2 17.3 14.5 18.1 13.9 18.9 13.3 19.7 12.7 20.4 12.2 20.5 12.2 21.4 11.6 22.2 11.2 23.1 10.7 24 10.3 24.9 10 25.9 9.7 26.8 9.4 27.8 9.2 28.8 9.1 29.8 9 30.8 9 31.4 9.1 31.7 9.1 32.7 9.3 33.7 9.6 34.6 10 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 38 13.4 38.4 14.3 38.7 15.3 38.9 16.3 38.9 16.6 39 17.2 39 18.2 38.9 19.2 38.8 20.2 38.6 21.2 38.3 22.1 38 23.1 37.7 24 37.3 24.9 36.8 25.8 36.4 26.6 35.8 27.5 35.8 27.6 35.3 28.3 34.7 29.1 34.1 29.9 33.5 30.7 32.8 31.4Z\",\n\t\"M24.3 10.2 24.9 10 25.9 9.7 26.8 9.4 27.1 9.4 27.8 9.2 28.8 9.1 29.8 9 29.9 9 30.8 9 31.7 9.1 32.7 9.3 32.8 9.3 33.7 9.6 34.6 10 35.5 10.5 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 37.5 12.5 38 13.4 38.4 14.3 38.7 15.2 38.7 15.3 38.9 16.3 39 17.2 39 18.1 39 18.2 38.9 19.2 38.8 20.2 38.6 20.9 38.6 21.2 38.3 22.1 38 23.1 37.8 23.7 37.7 24 37.3 24.9 36.8 25.8 36.5 26.4 36.4 26.6 35.8 27.5 35.3 28.3 35 28.8 34.7 29.1 34.1 29.9 33.5 30.7 33.1 31.1 32.8 31.4 32.1 32.1 31.4 32.8 31.1 33.1 30.7 33.5 29.9 34.1 29.1 34.7 28.8 35 28.3 35.3 27.5 35.8 26.6 36.4 26.4 36.5 25.8 36.8 24.9 37.3 24 37.7 23.7 37.8 23.1 38 22.1 38.3 21.2 38.6 20.9 38.6 20.2 38.8 19.2 38.9 18.2 39 18.1 39 17.2 39 16.3 38.9 15.3 38.7 15.2 38.7 14.3 38.4 13.4 38 12.5 37.5 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10.5 35.5 10 34.6 9.6 33.7 9.3 32.8 9.3 32.7 9.1 31.7 9 30.8 9 29.9 9 29.8 9.1 28.8 9.2 27.8 9.4 27.1 9.4 26.8 9.7 25.9 10 24.9 10.2 24.3 10.3 24 10.7 23.1 11.2 22.2 11.5 21.6 11.6 21.4 12.2 20.5 12.7 19.7 13 19.2 13.3 18.9 13.9 18.1 14.5 17.3 14.9 16.9 15.2 16.6 15.9 15.9 16.6 15.2 16.9 14.9 17.3 14.5 18.1 13.9 18.9 13.3 19.2 13 19.7 12.7 20.5 12.2 21.4 11.6 21.6 11.5 22.2 11.2 23.1 10.7 24 10.3Z\",\n\t\"M22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.3 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.4 38.9 26.2 39.6 27 40.2 27.7 40.5 28.6 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.8 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.6 9.1 21.8 8.4 21 7.8 20.3 7.5 19.4 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.2 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1 20.9 10.4 21.4 9.5 21.9 8.7Z\",\n].join(\";\");\n\nconst ROTATE_KEY_TIMES = \"0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1\";\nconst ROTATE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\nconst ROTATE_VALUES =\n\t\"0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24\";\n\n// ─── Determinate: Circle → SoftBurst path data (viewBox 4 4 40 40, cx=24, cy=24) ─\n// Circle: perfect circle, r≈17 → matches the contained indicator's visual weight\nconst DETERMINATE_CIRCLE =\n\t\"M24 7 C34.49 7 41 13.51 41 24 C41 34.49 34.49 41 24 41 C13.51 41 7 34.49 7 24 C7 13.51 13.51 7 24 7 Z\";\n\n// SoftBurst: shape 1 from the indeterminate sequence (same visual as the spec)\nconst DETERMINATE_SOFT_BURST =\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\nexport interface LoadingIndicatorProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n\t/**\n\t * Visual style variant.\n\t * - `uncontained` (default): bare indicator, no container background\n\t * - `contained`: indicator inside a circular container\n\t * (MD3 spec: 38dp container / 24dp active indicator)\n\t */\n\tvariant?: \"uncontained\" | \"contained\";\n\n\t/**\n\t * Indicator size in dp (pixels). Clamped to the MD3 spec range [24dp, 240dp].\n\t * Defaults to 48dp.\n\t *\n\t * Size guidelines:\n\t * - Small displays: 24–48dp\n\t * - Medium displays: 48–80dp\n\t * - Large/XL displays (desktop): up to 240dp\n\t *\n\t * @default 48\n\t */\n\tsize?: number;\n\n\t/**\n\t * Determinate progress value between 0 and 1.\n\t * - **Omit** (default) for indeterminate mode: continuous morphing loop.\n\t * - **Provide** for determinate mode: Circle→SoftBurst morph + counterclockwise rotation.\n\t *\n\t * @example `progress={0.7}` shows 70% progress\n\t */\n\tprogress?: number;\n\n\t/**\n\t * Active indicator color override. Falls back to MD3 system color tokens.\n\t * Supports any valid CSS color value or CSS variable.\n\t * @example \"#ff5722\" | \"var(--brand-color)\"\n\t */\n\tcolor?: string;\n\n\t/**\n\t * Required accessible label describing what is loading.\n\t * @example \"Loading news article\"\n\t */\n\t\"aria-label\": string;\n}\n\n// ─── Indeterminate SVG (pure SMIL, zero JS overhead) ─────────────────────────\nconst IndeterminateSvg = React.memo(function IndeterminateSvg({\n\tsize,\n}: {\n\tsize: number;\n}) {\n\t// Delays <animate> tag insertion by 1 frame via requestAnimationFrame\n\t// to bypass Chromium SMIL freezing bugs when parent container executes CSS transforms/animations.\n\n\tconst [ready, setReady] = React.useState(false);\n\tReact.useEffect(() => {\n\t\tconst raf = requestAnimationFrame(() => setReady(true));\n\t\treturn () => cancelAnimationFrame(raf);\n\t}, []);\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t>\n\t\t\t<path d={SHAPE_VALUES.split(\";\")[0]}>\n\t\t\t\t{ready && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={SHAPE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={SHAPE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={SHAPE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tattributeType=\"XML\"\n\t\t\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={ROTATE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={ROTATE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={ROTATE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</path>\n\t\t</svg>\n\t);\n});\n\n// ─── Determinate SVG (React-controlled morph + counterclockwise rotation) ────\n// Uses CSS transition for smooth d attribute changes where supported (Chromium),\n// with a style-based transform fallback for rotation.\nconst DeterminateSvg = React.memo(function DeterminateSvg({\n\tsize,\n\tprogress,\n}: {\n\tsize: number;\n\tprogress: number;\n}) {\n\t// Clamp and interpolate progress between 0 (circle) and 1 (soft burst)\n\tconst p = Math.min(1, Math.max(0, progress));\n\n\t// Counterclockwise rotation: 0° at 0% → -180° at 100% (per Android spec)\n\tconst rotation = -180 * p;\n\n\t// The path morphs from circle (p=0) to soft-burst (p=1).\n\t// We use a SMIL animate with begin=\"indefinite\" that we snap to progress.\n\t// For maximum compatibility, render the correct endpoint shape based on progress,\n\t// relying on the CSS `d` property transition for smooth animation.\n\tconst pathD = p < 0.5 ? DETERMINATE_CIRCLE : DETERMINATE_SOFT_BURST;\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tstyle={{\n\t\t\t\ttransform: `rotate(${rotation}deg)`,\n\t\t\t\ttransition: \"transform 0.3s ease\",\n\t\t\t}}\n\t\t>\n\t\t\t<path d={pathD} style={{ transition: \"d 0.3s ease\" }} />\n\t\t</svg>\n\t);\n});\n\n// ─── Main Component ───────────────────────────────────────────────────────────\nexport const LoadingIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tLoadingIndicatorProps\n>(\n\t(\n\t\t{\n\t\t\tvariant = \"uncontained\",\n\t\t\tsize = 48,\n\t\t\tprogress,\n\t\t\tcolor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isContained = variant === \"contained\";\n\t\tconst isDeterminate = progress !== undefined;\n\n\t\t// MD3 spec: strict size range [24dp, 240dp]\n\t\tconst clampedSize = Math.min(240, Math.max(24, size));\n\n\t\t// Proportional scaling based on the default 48dp spec size\n\t\tconst scaleFactor = clampedSize / 48;\n\n\t\t// MD3 spec: contained → 38dp container, 24dp active indicator\n\t\t// Ratio: 38/24 = 1.583 — preserved at all sizes\n\t\tconst containerSize = isContained ? 38 * scaleFactor : undefined;\n\t\tconst indicatorSize = isContained ? 24 * scaleFactor : clampedSize;\n\n\t\t// MD3 color tokens (with per-variant defaults)\n\t\tconst activeColor = isContained\n\t\t\t? (color ?? \"var(--md-sys-color-indicator-contained-active)\")\n\t\t\t: (color ?? \"var(--md-sys-color-indicator-active)\");\n\n\t\t// aria-valuenow is only set in determinate mode (per ARIA spec)\n\t\tconst ariaNow = isDeterminate\n\t\t\t? Math.round(Math.min(1, Math.max(0, progress)) * 100)\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\taria-valuenow={ariaNow}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: clampedSize,\n\t\t\t\t\theight: clampedSize,\n\t\t\t\t\tcolor: activeColor,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{isContained ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex items-center justify-center rounded-full\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: containerSize,\n\t\t\t\t\t\t\theight: containerSize,\n\t\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\t\t\"var(--md-sys-color-indicator-contained-container)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : isDeterminate ? (\n\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t) : (\n\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nLoadingIndicator.displayName = \"LoadingIndicator\";\n","export function easeInOutCubic(x: number): number {\n\treturn x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\nexport function generateWavyCircularPath(\n\tcenter: number,\n\tradius: number,\n\tamplitude: number,\n\twavelength: number,\n): string {\n\tconst circumference = 2 * Math.PI * radius;\n\tconst numWaves = Math.max(\n\t\t3,\n\t\tMath.round(circumference / Math.max(1, wavelength)),\n\t);\n\tconst steps = numWaves * 4;\n\tconst dt = (2 * Math.PI) / steps;\n\n\tconst rAt = (t: number) => radius + amplitude * Math.sin(numWaves * t);\n\tconst drAt = (t: number) => amplitude * numWaves * Math.cos(numWaves * t);\n\tconst xAt = (t: number) => center + rAt(t) * Math.cos(t);\n\tconst yAt = (t: number) => center + rAt(t) * Math.sin(t);\n\tconst dxAt = (t: number) => drAt(t) * Math.cos(t) - rAt(t) * Math.sin(t);\n\tconst dyAt = (t: number) => drAt(t) * Math.sin(t) + rAt(t) * Math.cos(t);\n\n\tlet d = \"\";\n\tconst tStart = 0;\n\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst t0 = tStart + i * dt;\n\t\tconst t1 = tStart + (i + 1) * dt;\n\n\t\tconst scale = dt / 3;\n\t\tconst cp1x = xAt(t0) + scale * dxAt(t0);\n\t\tconst cp1y = yAt(t0) + scale * dyAt(t0);\n\t\tconst cp2x = xAt(t1) - scale * dxAt(t1);\n\t\tconst cp2y = yAt(t1) - scale * dyAt(t1);\n\n\t\tif (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;\n\t}\n\td += \" Z\";\n\treturn d;\n}\n\nexport function getSinePath(\n\tstartX: number,\n\tendX: number,\n\tphase: number,\n\twl: number,\n\tamp: number,\n) {\n\tif (startX >= endX) return \"\";\n\tlet d = \"\";\n\tconst step = amp === 0 ? Math.max(10, endX - startX) : 1;\n\n\tconst yStart = Math.sin(((startX + phase) / wl) * 2 * Math.PI) * amp;\n\td += `M ${startX.toFixed(2)} ${yStart.toFixed(2)}`;\n\n\tlet nextX = Math.ceil(startX / step) * step;\n\tif (nextX === startX) nextX += step;\n\n\twhile (nextX < endX) {\n\t\tconst y = Math.sin(((nextX + phase) / wl) * 2 * Math.PI) * amp;\n\t\td += ` L ${nextX.toFixed(2)} ${y.toFixed(2)}`;\n\t\tnextX += step;\n\t}\n\n\tconst yEnd = Math.sin(((endX + phase) / wl) * 2 * Math.PI) * amp;\n\td += ` L ${endX.toFixed(2)} ${yEnd.toFixed(2)}`;\n\n\treturn d;\n}\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CircularProgressProps } from \"./types\";\nimport { generateWavyCircularPath } from \"./utils\";\n\nexport const CircularProgress = React.forwardRef<\n\tHTMLDivElement,\n\tCircularProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tsize = 48,\n\t\t\ttrackHeight = 4,\n\t\t\tshape = \"flat\",\n\t\t\tamplitude,\n\t\t\twavelength,\n\t\t\tgapSize = 4,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst radius = (size - trackHeight) / 2;\n\t\tconst center = size / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst isWavy = shape === \"wavy\";\n\n\t\tconst BASELINE_SIZE = 48;\n\t\tconst scaleFactor = size / BASELINE_SIZE;\n\t\tconst effectiveAmplitude = React.useMemo(\n\t\t\t() => amplitude ?? 1.6 * scaleFactor,\n\t\t\t[amplitude, scaleFactor],\n\t\t);\n\t\tconst effectiveWavelength = React.useMemo(\n\t\t\t() => wavelength ?? 15 * scaleFactor,\n\t\t\t[wavelength, scaleFactor],\n\t\t);\n\n\t\tconst wavyActivePath = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisWavy\n\t\t\t\t\t? generateWavyCircularPath(\n\t\t\t\t\t\t\tcenter,\n\t\t\t\t\t\t\tradius,\n\t\t\t\t\t\t\teffectiveAmplitude,\n\t\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t[isWavy, center, radius, effectiveAmplitude, effectiveWavelength],\n\t\t);\n\n\t\tconst circumference = React.useMemo(() => 2 * Math.PI * radius, [radius]);\n\t\tconst gapForTrack = React.useMemo(\n\t\t\t() => (gapSize + trackHeight) / circumference,\n\t\t\t[gapSize, trackHeight, circumference],\n\t\t);\n\t\tconst activeAngularFraction = isDeterminate ? clampedValue / 100 : 0;\n\n\t\tconst trackOffset = isDeterminate ? activeAngularFraction + gapForTrack : 0;\n\t\tconst trackLength = isDeterminate\n\t\t\t? Math.max(0.001, 1 - activeAngularFraction - 2 * gapForTrack)\n\t\t\t: 1;\n\n\t\tconst ActiveCircleElem = m.circle;\n\t\tconst ActivePathElem = m.path;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{ transform: \"rotate(-90deg)\", overflow: \"visible\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tinitial={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\tanimate={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isDeterminate &&\n\t\t\t\t\t\t\t(isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</svg>\n\n\t\t\t\t\t{!isDeterminate && (\n\t\t\t\t\t\t<m.svg\n\t\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\t\theight={size}\n\t\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\t\t\trotate: \"-90deg\",\n\t\t\t\t\t\t\t\ttransformOrigin: \"center\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tanimate={{ rotate: [\"-90deg\", \"270deg\"] }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\trotate: {\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: \"linear\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tpathLength: [\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.75 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\trotate: [\n\t\t\t\t\t\t\t\t\t\t`${(0.1 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.0 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.1 + gapForTrack) * 360}deg`,\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\ttransition={{\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\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{isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.svg>\n\t\t\t\t\t)}\n\t\t\t\t</LazyMotion>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCircularProgress.displayName = \"CircularProgress\";\n","import * as React from \"react\";\n\nexport function useContainerWidth() {\n\tconst [width, setWidth] = React.useState(0);\n\tconst observerRef = React.useRef<ResizeObserver | null>(null);\n\n\tconst ref = React.useCallback((node: HTMLDivElement | null) => {\n\t\tif (observerRef.current) {\n\t\t\tobserverRef.current.disconnect();\n\t\t\tobserverRef.current = null;\n\t\t}\n\n\t\tif (node) {\n\t\t\tconst obs = new ResizeObserver((entries) => {\n\t\t\t\tconst contentRect = entries[0].contentRect;\n\t\t\t\tsetWidth(contentRect.width);\n\t\t\t});\n\t\t\tobs.observe(node);\n\t\t\tobserverRef.current = obs;\n\t\t}\n\t}, []);\n\n\t// Cleanup on unmount\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (observerRef.current) {\n\t\t\t\tobserverRef.current.disconnect();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn [ref, width] as const;\n}\n\nexport function useMergedRef<T>(\n\t...refs: (React.Ref<T> | undefined | null)[]\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t\t(ref as React.MutableRefObject<T | null>).current = node;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[refs],\n\t);\n}\n","import { m } from \"motion/react\";\nimport * as React from \"react\";\n\nexport const FlatLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\tcrawlerSpeed: number;\n}>(function FlatLinearTrack({\n\ttrackHeight,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\tcrawlerSpeed,\n}) {\n\tconst isDeterminate = value !== undefined;\n\tconst radius = trackHeight / 2;\n\tconst minActiveWidth = trackHeight;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: trackHeight, borderRadius: radius }}\n\t\t>\n\t\t\t{isDeterminate ? (\n\t\t\t\t<>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: trackColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, 0%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, ${value}%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\tminWidth: minActiveWidth,\n\t\t\t\t\t\t\t...(isRtl ? { right: 0 } : { left: 0 }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{ width: `${minActiveWidth}px` }}\n\t\t\t\t\t\tanimate={{ width: `${value}%` }}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: trackColor, borderRadius: radius }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: activeColor, borderRadius: radius }}\n\t\t\t\t\t\tinitial={{ left: \"-40%\", width: \"40%\" }}\n\t\t\t\t\t\tanimate={{ left: [\"-40%\", \"100%\"], width: [\"40%\", \"20%\", \"40%\"] }}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { animate, useAnimationFrame, useMotionValue } from \"motion/react\";\nimport * as React from \"react\";\nimport { useContainerWidth } from \"./hooks\";\nimport { easeInOutCubic, getSinePath } from \"./utils\";\n\nexport const WavyLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tsvgHeight: number;\n\tamplitude: number;\n\twavelength: number;\n\tindeterminateWavelength: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\twaveSpeed: number;\n\tcrawlerSpeed: number;\n\tdeterminateAnimation: \"md3\" | \"continuous\";\n\tindeterminateAnimation: \"md3\" | \"continuous\";\n\ttrackShape: \"flat\" | \"wavy\";\n}>(function WavyLinearTrack({\n\ttrackHeight,\n\tsvgHeight,\n\tamplitude,\n\twavelength,\n\tindeterminateWavelength,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\twaveSpeed,\n\tcrawlerSpeed,\n\tdeterminateAnimation,\n\tindeterminateAnimation,\n\ttrackShape,\n}) {\n\tconst isDeterminate = typeof value === \"number\";\n\tconst clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 100;\n\tconst titleId = React.useId();\n\n\tconst [containerRef, width] = useContainerWidth();\n\n\tconst activePathRef = React.useRef<SVGPathElement>(null);\n\tconst trackPathRef = React.useRef<SVGPathElement>(null);\n\n\tconst amplitudeMV = useMotionValue(amplitude);\n\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 1);\n\n\tReact.useEffect(() => {\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = clampedValue / 100;\n\n\t\t\t// Handle Flattening Logic based on determinateAnimation prop\n\t\t\tlet targetAmp = amplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp = fraction <= 0.1 || fraction >= 0.95 ? 0 : amplitude;\n\t\t\t}\n\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t\tanimate(fractionMV, fraction, { duration: 0.4, ease: [0.2, 0, 0, 1] });\n\t\t}\n\t}, [\n\t\tclampedValue,\n\t\tisDeterminate,\n\t\tamplitude,\n\t\tamplitudeMV,\n\t\tfractionMV,\n\t\tdeterminateAnimation,\n\t]);\n\n\tconst activeWavelength = Math.max(\n\t\t1,\n\t\tisDeterminate ? wavelength : indeterminateWavelength,\n\t);\n\tconst trackAmp = trackShape === \"wavy\" ? amplitude : 0;\n\n\tuseAnimationFrame((time) => {\n\t\tif (width === 0) return;\n\n\t\tconst currentAmp = amplitudeMV.get();\n\t\tconst phase = (time / 1000) * waveSpeed * activeWavelength;\n\t\tconst capWidth = trackHeight / 2;\n\n\t\tlet activePathD = \"\";\n\t\tlet trackD = \"\";\n\t\tconst totalGap = gapSize + trackHeight;\n\n\t\t// 1. DETERMINATE MODE\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = fractionMV.get();\n\t\t\tconst barHead = fraction * width;\n\n\t\t\tconst adjHead = Math.max(capWidth, Math.min(width - capWidth, barHead));\n\t\t\tconst adjTail = capWidth;\n\n\t\t\tif (fraction > 0 && adjHead - adjTail > 0.1) {\n\t\t\t\tactivePathD = getSinePath(\n\t\t\t\t\tadjTail,\n\t\t\t\t\tadjHead,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\tcurrentAmp,\n\t\t\t\t);\n\t\t\t} else if (fraction === 0) {\n\t\t\t\tactivePathD = `M ${capWidth} 0 L ${capWidth + 0.01} 0`;\n\t\t\t}\n\n\t\t\tconst trackStart = adjHead + totalGap;\n\t\t\tif (trackStart < width - capWidth) {\n\t\t\t\ttrackD = getSinePath(\n\t\t\t\t\ttrackStart,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// 2. INDETERMINATE MODE\n\t\telse {\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst activeLines: { tail: number; head: number }[] = [];\n\n\t\t\tif (indeterminateAnimation === \"continuous\") {\n\t\t\t\tconst cycle = 2000 / safeCrawlerSpeed;\n\t\t\t\tconst fraction = (time % cycle) / cycle;\n\t\t\t\tactiveLines.push({\n\t\t\t\t\ttail: easeInOutCubic(Math.max(0, fraction * 1.5 - 0.5)),\n\t\t\t\t\thead: easeInOutCubic(Math.min(1, fraction * 1.5)),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst cycle = 1750 / safeCrawlerSpeed;\n\t\t\t\tconst t = (time % cycle) * safeCrawlerSpeed;\n\n\t\t\t\tconst l1H = easeInOutCubic(Math.max(0, Math.min(1, t / 1000)));\n\t\t\t\tconst l1T = easeInOutCubic(Math.max(0, Math.min(1, (t - 250) / 1000)));\n\t\t\t\tconst l2H = easeInOutCubic(Math.max(0, Math.min(1, (t - 650) / 850)));\n\t\t\t\tconst l2T = easeInOutCubic(Math.max(0, Math.min(1, (t - 900) / 850)));\n\n\t\t\t\tactiveLines.push({ tail: l1T, head: l1H });\n\t\t\t\tactiveLines.push({ tail: l2T, head: l2H });\n\t\t\t}\n\n\t\t\tconst segments = activeLines\n\t\t\t\t.map((line) => {\n\t\t\t\t\tconst barTail = line.tail * width;\n\t\t\t\t\tconst barHead = line.head * width;\n\t\t\t\t\tconst adjTail = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barTail),\n\t\t\t\t\t);\n\t\t\t\t\tconst adjHead = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barHead),\n\t\t\t\t\t);\n\t\t\t\t\treturn { adjTail, adjHead };\n\t\t\t\t})\n\t\t\t\t.filter((seg) => seg.adjHead - seg.adjTail > 0.1);\n\n\t\t\tactivePathD = segments\n\t\t\t\t.map((seg) =>\n\t\t\t\t\tgetSinePath(\n\t\t\t\t\t\tseg.adjTail,\n\t\t\t\t\t\tseg.adjHead,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\" \");\n\n\t\t\tlet currentTrackX = capWidth;\n\t\t\tfor (const seg of segments) {\n\t\t\t\tconst trackEnd = seg.adjTail - totalGap;\n\t\t\t\tif (trackEnd > currentTrackX) {\n\t\t\t\t\ttrackD += `${getSinePath(currentTrackX, trackEnd, phase, activeWavelength, trackAmp)} `;\n\t\t\t\t}\n\t\t\t\tcurrentTrackX = Math.max(currentTrackX, seg.adjHead + totalGap);\n\t\t\t}\n\t\t\tif (currentTrackX < width - capWidth) {\n\t\t\t\ttrackD += getSinePath(\n\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (activePathRef.current)\n\t\t\tactivePathRef.current.setAttribute(\"d\", activePathD);\n\t\tif (trackPathRef.current)\n\t\t\ttrackPathRef.current.setAttribute(\"d\", trackD.trim());\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: svgHeight }}\n\t\t>\n\t\t\t{width > 0 && (\n\t\t\t\t<svg\n\t\t\t\t\tclassName=\"absolute inset-0 w-full h-full\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\ttransform: isRtl ? \"scaleX(-1)\" : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t>\n\t\t\t\t\t<title id={titleId}>\n\t\t\t\t\t\t{isDeterminate\n\t\t\t\t\t\t\t? `Progress: ${clampedValue}%`\n\t\t\t\t\t\t\t: \"Indeterminate loading progress\"}\n\t\t\t\t\t</title>\n\t\t\t\t\t<g transform={`translate(0, ${svgHeight / 2})`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={trackPathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={trackColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={activePathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useMergedRef } from \"./hooks\";\nimport { FlatLinearTrack } from \"./linear-flat\";\nimport { WavyLinearTrack } from \"./linear-wavy\";\nimport type { LinearProgressProps } from \"./types\";\n\nexport const LinearProgress = React.forwardRef<\n\tHTMLDivElement,\n\tLinearProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape,\n\t\t\ttrackHeight = 4,\n\t\t\tamplitude,\n\t\t\twavelength = 40,\n\t\t\tindeterminateWavelength = 20,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tindeterminateAnimation = \"continuous\",\n\t\t\tgapSize = 4,\n\t\t\tshowStopIndicator = \"auto\",\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, containerRef);\n\t\tconst [isRtl, setIsRtl] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (containerRef.current) {\n\t\t\t\tconst dir = getComputedStyle(containerRef.current).direction;\n\t\t\t\tsetIsRtl(dir === \"rtl\");\n\t\t\t}\n\t\t}, []);\n\n\t\tconst isWavy = shape === \"wavy\";\n\t\tconst resolvedTrackShape = trackShape ?? shape;\n\n\t\tconst effectiveAmplitude = React.useMemo(() => amplitude ?? 3, [amplitude]);\n\t\tconst svgHeight = React.useMemo(\n\t\t\t() => (isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight),\n\t\t\t[isWavy, trackHeight, effectiveAmplitude],\n\t\t);\n\n\t\tconst shouldShowStop = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisDeterminate &&\n\t\t\t\tresolvedTrackShape === \"flat\" &&\n\t\t\t\t(showStopIndicator === true ||\n\t\t\t\t\t(showStopIndicator === \"auto\" && isDeterminate)),\n\t\t\t[isDeterminate, resolvedTrackShape, showStopIndicator],\n\t\t);\n\n\t\tconst stopSize = React.useMemo(\n\t\t\t() => Math.max(2, trackHeight > 4 ? 4 : trackHeight / 2),\n\t\t\t[trackHeight],\n\t\t);\n\n\t\tconst stopOffset = (trackHeight - stopSize) / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex w-full flex-col justify-center\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: svgHeight }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t<WavyLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tsvgHeight={svgHeight}\n\t\t\t\t\t\t\tamplitude={effectiveAmplitude}\n\t\t\t\t\t\t\twavelength={wavelength}\n\t\t\t\t\t\t\tindeterminateWavelength={indeterminateWavelength}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\twaveSpeed={waveSpeed}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t\tdeterminateAnimation={determinateAnimation}\n\t\t\t\t\t\t\tindeterminateAnimation={indeterminateAnimation}\n\t\t\t\t\t\t\ttrackShape={resolvedTrackShape}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<FlatLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{shouldShowStop && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute rounded-full\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: stopSize,\n\t\t\t\t\t\t\t\theight: stopSize,\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--md-sys-color-indicator-stop)\",\n\t\t\t\t\t\t\t\ttop: svgHeight / 2 - stopSize / 2,\n\t\t\t\t\t\t\t\t...(isRtl ? { left: stopOffset } : { right: stopOffset }),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nLinearProgress.displayName = \"LinearProgress\";\n","import * as React from \"react\";\nimport { CircularProgress } from \"./circular\";\nimport { LinearProgress } from \"./linear\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\n/**\n * Progress Indicator component based on Material Design 3 Expressive guidelines.\n * Flexible support for 2 presentation variants: Linear and Circular,\n * with smooth dynamic Wavy shape profiles.\n *\n * @example\n * ```tsx\n * // Determinate Flat Linear\n * <ProgressIndicator variant=\"linear\" value={60} aria-label=\"Loading profile...\" />\n *\n * // Indeterminate Wavy Linear\n * <ProgressIndicator variant=\"linear\" shape=\"wavy\" aria-label=\"Connecting to server...\" />\n *\n * // Determinate Flat Circular\n * <ProgressIndicator variant=\"circular\" value={45} size={48} aria-label=\"Syncing...\" />\n * ```\n */\n\nexport const ProgressIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tProgressIndicatorProps\n>((props, ref) => {\n\tif (props.variant === \"circular\") {\n\t\treturn <CircularProgress ref={ref} {...props} />;\n\t}\n\treturn <LinearProgress ref={ref} {...props} />;\n});\n\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport type {\n\tCircularProgressProps,\n\tLinearProgressProps,\n\tProgressIndicatorProps,\n} from \"./types\";\n","/**\n * @file ui/shared/motion-tokens.ts\n *\n * Framer Motion spring presets derived from the official MD3 Expressive\n * motion physics system (May 2025).\n *\n * Usage hierarchy:\n * 1. Import a named preset (e.g. `FAST_SPATIAL_SPRING`) for convenience.\n * 2. Call `getMotionSpring(speed, type)` when you need to pick dynamically.\n * 3. Call `getMotionTransitionCSS(speed, type, scheme?)` for pure-CSS contexts.\n *\n * @see https://m3.material.io/styles/motion/overview/how-it-works\n * @see https://m3.material.io/styles/motion/overview/specs\n */\n\nimport type { Transition } from \"motion/react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Spring Token Structure\n//\n// MD3 defines springs as dampingRatio (0–1) + stiffness.\n// Framer Motion uses absolute `damping` coefficient.\n//\n// Conversion (with Framer's default mass = 1):\n// damping = 2 × dampingRatio × √stiffness\n//\n// Computed values (rounded to 2 decimal places):\n//\n// fast spatial: 2 × 0.6 × √800 = 2 × 0.6 × 28.28 ≈ 33.94\n// fast effects: 2 × 1.0 × √3800 = 2 × 61.64 ≈ 123.29\n// default spatial: 2 × 0.8 × √380 = 2 × 0.8 × 19.49 ≈ 31.19\n// default effects: 2 × 1.0 × √1600 = 2 × 40 = 80\n// slow spatial: 2 × 0.8 × √200 = 2 × 0.8 × 14.14 ≈ 22.63\n// slow effects: 2 × 1.0 × √800 = 2 × 28.28 ≈ 56.57\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Spatial springs — use for position, size, border-radius, rotation, scale ─\n\n/**\n * MD3 Expressive — Fast Spatial Spring\n * `md.sys.motion.spring.fast.spatial` (dampingRatio: 0.6, stiffness: 800)\n *\n * Use for: small components (buttons, switches, chips).\n * Has notable bounce/overshoot — feels snappy and expressive.\n */\nexport const FAST_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 33.94,\n} as const;\n\n/**\n * MD3 Expressive — Default Spatial Spring\n * `md.sys.motion.spring.default.spatial` (dampingRatio: 0.8, stiffness: 380)\n *\n * Use for: medium elements (bottom sheets, menus, navigation rail).\n * Gentle overshoot — the go-to spring for most UI animations.\n */\nexport const DEFAULT_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 380,\n\tdamping: 31.19,\n} as const;\n\n/**\n * MD3 Expressive — Slow Spatial Spring\n * `md.sys.motion.spring.slow.spatial` (dampingRatio: 0.8, stiffness: 200)\n *\n * Use for: full-screen transitions and large layout shifts.\n * Subtle, slow overshoot.\n */\nexport const SLOW_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 22.63,\n} as const;\n\n// ── Effects springs — use for color, opacity (critically damped, no bounce) ──\n\n/**\n * MD3 Expressive — Fast Effects Spring\n * `md.sys.motion.spring.fast.effects` (dampingRatio: 1.0, stiffness: 3800)\n *\n * Use for: color changes on switches, icon swaps, badge counts.\n * Critically damped — very fast, no overshoot.\n */\nexport const FAST_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 3800,\n\tdamping: 123.29,\n} as const;\n\n/**\n * MD3 Expressive — Default Effects Spring\n * `md.sys.motion.spring.default.effects` (dampingRatio: 1.0, stiffness: 1600)\n *\n * Use for: opacity fades, color transitions for medium-sized elements.\n * Critically damped — smooth with no overshoot.\n */\nexport const DEFAULT_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 1600,\n\tdamping: 80,\n} as const;\n\n/**\n * MD3 Expressive — Slow Effects Spring\n * `md.sys.motion.spring.slow.effects` (dampingRatio: 1.0, stiffness: 800)\n *\n * Use for: full-screen opacity/color transitions.\n * Critically damped — slow and smooth.\n */\nexport const SLOW_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 56.57,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dynamic helper\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SpringSpeed = \"fast\" | \"default\" | \"slow\";\nexport type SpringAnimationType = \"spatial\" | \"effects\";\n\nconst springMap = {\n\tfast: { spatial: FAST_SPATIAL_SPRING, effects: FAST_EFFECTS_SPRING },\n\tdefault: { spatial: DEFAULT_SPATIAL_SPRING, effects: DEFAULT_EFFECTS_SPRING },\n\tslow: { spatial: SLOW_SPATIAL_SPRING, effects: SLOW_EFFECTS_SPRING },\n} as const;\n\n/**\n * Pick a Framer Motion spring by speed and type.\n *\n * @example\n * ```tsx\n * transition={getMotionSpring(\"fast\", \"spatial\")}\n * ```\n */\nexport function getMotionSpring(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n): Transition {\n\treturn springMap[speed][type];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CSS transition strings\n// For contexts where Framer Motion is not used (plain CSS / Tailwind).\n// Uses official Web spring → CSS cubic-bezier conversion table.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst CSS_CURVES = {\n\texpressive: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.42, 1.67, 0.21, 0.90)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.38, 1.21, 0.22, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.39, 1.29, 0.35, 0.98)\",\n\t\t\t\tdurationMs: 650,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n\tstandard: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 750,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n} as const;\n\nexport type MotionScheme = \"expressive\" | \"standard\";\n\n/**\n * Returns a CSS `transition` value string using the official MD3 web curve\n * conversion, e.g. `\"500ms cubic-bezier(0.38, 1.21, 0.22, 1.00)\"`.\n *\n * @example\n * ```ts\n * element.style.transition = `border-radius ${getMotionTransitionCSS(\"default\", \"spatial\")}`;\n * ```\n */\nexport function getMotionTransitionCSS(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n\tscheme: MotionScheme = \"expressive\",\n): string {\n\tconst { curve, durationMs } = CSS_CURVES[scheme][speed][type];\n\treturn `${durationMs}ms ${curve}`;\n}\n","/**\n * @file shared/constants.ts\n *\n * Shared animation constants for MD3 Expressive UI components.\n * Centralises spring transition configs and motion variant objects to avoid\n * duplication across button, icon-button, FAB, and other interactive components.\n *\n * @see https://m3.material.io/foundations/animation/overview\n */\n\nimport type { Target, TargetAndTransition, Transition } from \"motion/react\";\nimport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n} from \"./motion-tokens\";\n\nexport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n\tgetMotionSpring,\n\tgetMotionTransitionCSS,\n\tSLOW_EFFECTS_SPRING,\n\tSLOW_SPATIAL_SPRING,\n} from \"./motion-tokens\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Spring Transitions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fast spring — used for border-radius morphing, icon swaps.\n * Maps to MD3 `fast.effects` (critically damped, stiffness 3800).\n *\n * @example\n * ```tsx\n * <m.button transition={{ borderRadius: SPRING_TRANSITION_FAST }}>...</m.button>\n * ```\n */\nexport const SPRING_TRANSITION_FAST: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Standard spring — used for icon/content scale animations.\n * Maps to MD3 `default.effects` (critically damped, stiffness 1600).\n *\n * @example\n * ```tsx\n * <m.span transition={SPRING_TRANSITION}>...</m.span>\n * ```\n */\nexport const SPRING_TRANSITION: Transition = DEFAULT_EFFECTS_SPRING;\n\n/**\n * MD3 Expressive spring — active indicator expand/collapse.\n * Maps to MD3 `default.spatial` (dampingRatio: 0.8, stiffness: 380).\n * Gentle bounce for the \"pop\" effect per MD3 Expressive spec.\n */\nexport const SPRING_TRANSITION_EXPRESSIVE: Transition = DEFAULT_SPATIAL_SPRING;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Icon Span Motion Variants\n// Used for icon/loading indicator swap animation inside FAB and IconButton.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Framer Motion variants for animating icon spans in/out.\n *\n * Scale from near-zero → 1 on enter; back to near-zero on exit.\n * The near-zero value (0.01) avoids the SMIL freeze bug on Chromium\n * that occurs when an element starts at exactly `scale(0)`.\n *\n * @example\n * ```tsx\n * <AnimatePresence mode=\"wait\">\n * {loading ? (\n * <m.span key=\"loading\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * <LoadingIndicator />\n * </m.span>\n * ) : (\n * <m.span key=\"icon\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * {icon}\n * </m.span>\n * )}\n * </AnimatePresence>\n * ```\n */\nexport const ICON_SPAN_VARIANTS: {\n\tinitial: Target;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { scale: 0.01 },\n\tanimate: { scale: 1 },\n\texit: { scale: 0.01 },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 TextField Animation Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Standard easing curve — used for label float, active indicator expand.\n * cubic-bezier(0.2, 0, 0, 1)\n *\n * @see https://m3.material.io/foundations/animation/easing-and-duration\n */\nexport const MD3_STANDARD_EASING: [number, number, number, number] = [\n\t0.2, 0, 0, 1,\n];\n\n/**\n * Duration for floating label transition: 150ms.\n * Used when label moves between inline position ↔ floated position.\n */\nexport const MD3_LABEL_FLOAT_DURATION = 0.15;\n\n/**\n * Duration for active indicator expand/collapse: 200ms.\n * Used for the bottom border (filled) and outline (outlined) on focus.\n */\nexport const MD3_INDICATOR_DURATION = 0.2;\n\n/**\n * Duration for supporting text / error text appear/disappear: 120ms.\n */\nexport const MD3_SUPPORTING_DURATION = 0.12;\n\n/**\n * Duration for trailing icon appear/disappear (clear button, password toggle): 100ms.\n */\nexport const MD3_ICON_SWAP_DURATION = 0.1;\n","/**\n * @file shared/touch-target.tsx\n *\n * Invisible 48×48dp touch-target expander for small interactive elements.\n *\n * WCAG 2.5.5 (Level AA) requires interactive targets to be at least 44×44 CSS pixels.\n * MD3 specifies a minimum 48dp touch target for all interactive components.\n * For button sizes XS (32dp) and SM (40dp) that are smaller than this minimum,\n * an invisible absolutely-positioned `<span>` is overlaid to extend the\n * effective tap area without affecting visual layout.\n *\n * @see https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html\n * @see https://m3.material.io/foundations/accessible-design/accessibility-basics\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TouchTarget Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Invisible 48×48dp touch area expander — satisfies WCAG 2.5.5 + MD3 spec.\n *\n * Place as a direct child of any interactive element whose visual size is\n * smaller than 48dp (e.g. `xs`/`sm` buttons and icon buttons).\n * The parent element **must** have `position: relative`.\n *\n * @remarks\n * - Hidden from assistive technologies via `aria-hidden=\"true\"`.\n * - `pointer-events: none` ensures it does not intercept click events.\n * - Centred with `left: 50% / top: 50%` + negative translate for symmetry.\n *\n * @example\n * ```tsx\n * // Used inside a 32dp XS button:\n * <button className=\"relative h-8 w-auto ...\">\n * <TouchTarget />\n * Label\n * </button>\n * ```\n *\n * @see https://m3.material.io/components/buttons/specs (Touch target section)\n */\nexport function TouchTarget() {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 min-w-12 min-h-12 cursor-pointer pointer-events-none\"\n\t\t/>\n\t);\n}\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\nimport type { Transition } from \"motion\";\nimport {\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../../shared/motion-tokens\";\n\n/**\n * Shape morphing spring animation for layout/width morphing.\n * MD3: `fast.spatial` — stiffness 800, dampingRatio 0.6 (has bounce).\n */\nexport const BUTTON_SHAPE_MORPH_SPRING: Transition = FAST_SPATIAL_SPRING;\n\n/**\n * Spring for border-radius changes on press/release and shape toggle.\n * MD3: `fast.effects` — stiffness 3800, critically damped (dampingRatio 1.0).\n * No overshoot; border-radius never goes negative.\n */\nexport const BUTTON_RADIUS_SPRING: Transition = FAST_EFFECTS_SPRING;\n\nexport const ROUND_SHAPE_RADIUS = 9999;\n\nexport const BUTTON_SIZE_TOKENS = {\n\txs: {\n\t\theight: \"2rem\", // 32dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 16,\n\t},\n\tsm: {\n\t\theight: \"2.5rem\", // 40dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 20,\n\t},\n\tmd: {\n\t\theight: \"3.5rem\", // 56dp\n\t\tleadingSpace: \"1.5rem\", // 24dp\n\t\ttrailingSpace: \"1.5rem\", // 24dp\n\t\ticonSize: \"1.5rem\", // 24dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.large, // 16dp\n\t\tpressedShapeRadius: cornerRadius.medium, // 12dp\n\t\troundShapeRadius: 28,\n\t},\n\tlg: {\n\t\theight: \"6rem\", // 96dp\n\t\tleadingSpace: \"3rem\", // 48dp\n\t\ttrailingSpace: \"3rem\", // 48dp\n\t\ticonSize: \"2rem\", // 32dp\n\t\ticonLabelSpace: \"0.75rem\", // 12dp\n\t\toutlineWidth: 2, // 2dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 48,\n\t},\n\txl: {\n\t\theight: \"8.5rem\", // 136dp\n\t\tleadingSpace: \"4rem\", // 64dp\n\t\ttrailingSpace: \"4rem\", // 64dp\n\t\ticonSize: \"2.5rem\", // 40dp\n\t\ticonLabelSpace: \"1rem\", // 16dp\n\t\toutlineWidth: 3, // 3dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 68,\n\t},\n} as const;\n\nexport const BUTTON_TYPOGRAPHY_TOKENS = {\n\txs: \"text-sm font-medium tracking-wide\", // labelLarge\n\tsm: \"text-sm font-medium tracking-wide\", // labelLarge\n\tmd: \"text-base font-medium\", // titleMedium\n\tlg: \"text-xl font-normal\", // headlineSmall\n\txl: \"text-[2rem] font-normal leading-none\", // headlineLarge\n} as const;\n\nexport const BUTTON_COLOR_TOKENS = {\n\televated: {\n\t\tdefault: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary shadow-md\",\n\t\tunselected: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t},\n\tfilled: {\n\t\tdefault: \"bg-m3-primary text-m3-on-primary\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary\",\n\t\tunselected: \"bg-m3-surface-container text-m3-on-surface-variant\",\n\t},\n\ttonal: {\n\t\tdefault: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\tselected: \"bg-m3-secondary text-m3-on-secondary\",\n\t\tunselected: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t},\n\toutlined: {\n\t\tdefault:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t\tselected:\n\t\t\t\"bg-m3-inverse-surface text-m3-inverse-on-surface border-transparent\",\n\t\tunselected:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t},\n\ttext: {\n\t\tdefault: \"bg-transparent text-m3-primary\",\n\t\tselected: \"bg-transparent text-m3-primary\",\n\t\tunselected: \"bg-transparent text-m3-primary\",\n\t},\n\n\t// ── MD3 Expressive accent variants ──────────────────────────────────────\n\t/**\n\t * High-chroma tertiary tone. Use for hero CTAs and expressive moments where\n\t * a distinct accent beyond primary is needed (e.g., hero chip, highlight fab).\n\t */\n\ttertiary: {\n\t\tdefault: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tselected: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tunselected: \"bg-m3-tertiary-container text-m3-on-tertiary-container\",\n\t},\n\n\t/**\n\t * Brand-stable primary fixed. Hue stays consistent across light and dark modes.\n\t * Ideal for badges, pill chips, and elements that must carry the brand color\n\t * regardless of the active theme.\n\t */\n\t\"primary-fixed\": {\n\t\tdefault: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tunselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed-variant\",\n\t},\n\n\t/**\n\t * Brand-stable tertiary fixed. Use for special-state indicators, achievement\n\t * badges, or accent pills that need a fixed tertiary hue across themes.\n\t */\n\t\"tertiary-fixed\": {\n\t\tdefault: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tunselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed-variant\",\n\t},\n} as const;\n","/**\n * @file button.tsx\n *\n * MD3 Expressive Button component.\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tAnimatePresence,\n\tanimate,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseMotionValue,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { LoadingIndicator } from \"../../loading-indicator\";\nimport { ProgressIndicator } from \"../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { SPRING_TRANSITION } from \"../../shared/constants\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport {\n\tBUTTON_COLOR_TOKENS,\n\tBUTTON_RADIUS_SPRING,\n\tBUTTON_SHAPE_MORPH_SPRING,\n\tBUTTON_SIZE_TOKENS,\n\tBUTTON_TYPOGRAPHY_TOKENS,\n} from \"./button-tokens\";\nimport type { ButtonProps } from \"./types\";\n\nconst MOTION_PROP_KEYS = [\n\t\"animate\",\n\t\"exit\",\n\t\"initial\",\n\t\"transition\",\n\t\"variants\",\n\t\"whileHover\",\n\t\"whileTap\",\n\t\"whileFocus\",\n\t\"whileDrag\",\n\t\"whileInView\",\n\t\"onAnimationStart\",\n\t\"onAnimationComplete\",\n\t\"onUpdate\",\n\t\"onDragStart\",\n\t\"onDragEnd\",\n\t\"onDrag\",\n\t\"onDirectionLock\",\n\t\"onDragTransitionEnd\",\n\t\"layout\",\n\t\"layoutId\",\n\t\"onLayoutAnimationComplete\",\n] as const;\n\nfunction springAnimate(\n\tvalue: ReturnType<typeof useMotionValue<number>>,\n\tto: number,\n) {\n\treturn animate(value, to, { ...BUTTON_RADIUS_SPRING, type: \"spring\" });\n}\n\ninterface AnimatedIconSlotProps {\n\ticonSize: string;\n\tchildren: React.ReactNode;\n\tariaHidden?: boolean;\n\ttransition?: Transition;\n}\n\nfunction AnimatedIconSlot({\n\ticonSize,\n\tchildren,\n\tariaHidden,\n\ttransition,\n}: AnimatedIconSlotProps) {\n\treturn (\n\t\t<m.span\n\t\t\tlayout=\"position\"\n\t\t\tinitial={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\tanimate={{ width: iconSize, opacity: 1, scale: 1 }}\n\t\t\texit={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\ttransition={transition}\n\t\t\taria-hidden={ariaHidden ? \"true\" : undefined}\n\t\t\tstyle={{ height: iconSize }}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden\",\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</m.span>\n\t);\n}\n\nconst ButtonComponent = React.forwardRef<HTMLButtonElement, ButtonProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"default\",\n\t\t\tcolorStyle = \"filled\",\n\t\t\tselectedColorStyle: _selectedColorStyle, // Deprecated — destructured to strip from restProps\n\t\t\tsize = \"sm\",\n\t\t\tshape = \"round\",\n\t\t\tselected,\n\t\t\ticon,\n\t\t\ticonPosition = \"leading\",\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tasChild = false,\n\t\t\toutlineWidth,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabelProp,\n\t\t\ttransition: customTransition,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isToggle = variant === \"toggle\";\n\t\tconst isSelected = isToggle ? !!selected : false;\n\n\t\tconst effectiveShape = isSelected\n\t\t\t? shape === \"round\"\n\t\t\t\t? \"square\"\n\t\t\t\t: \"round\"\n\t\t\t: shape;\n\n\t\tconst sizeTokens = BUTTON_SIZE_TOKENS[size] ?? BUTTON_SIZE_TOKENS.sm;\n\t\tconst animateRadius =\n\t\t\teffectiveShape === \"round\"\n\t\t\t\t? sizeTokens.roundShapeRadius\n\t\t\t\t: sizeTokens.squareShapeRadius;\n\t\tconst pressedRadius = sizeTokens.pressedShapeRadius;\n\n\t\tconst colorState = isToggle\n\t\t\t? isSelected\n\t\t\t\t? \"selected\"\n\t\t\t\t: \"unselected\"\n\t\t\t: \"default\";\n\t\tconst colorClass = BUTTON_COLOR_TOKENS[colorStyle][colorState];\n\t\tconst typographyClass =\n\t\t\tBUTTON_TYPOGRAPHY_TOKENS[size] ?? BUTTON_TYPOGRAPHY_TOKENS.sm;\n\n\t\tconst mergedStyle = {\n\t\t\theight: sizeTokens.height,\n\t\t\tpaddingInlineStart: sizeTokens.leadingSpace,\n\t\t\tpaddingInlineEnd: sizeTokens.trailingSpace,\n\t\t\tgap: sizeTokens.iconLabelSpace,\n\t\t\tborderWidth:\n\t\t\t\toutlineWidth ??\n\t\t\t\t(colorStyle === \"outlined\" ? sizeTokens.outlineWidth : 0),\n\t\t\tborderStyle: colorStyle === \"outlined\" ? \"solid\" : undefined,\n\t\t\t...style,\n\t\t};\n\n\t\tconst labelText = React.useMemo(() => {\n\t\t\tif (asChild) {\n\t\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t}>;\n\t\t\t\treturn child.props.children;\n\t\t\t}\n\t\t\treturn children;\n\t\t}, [children, asChild]);\n\t\tconst computedAriaLabel =\n\t\t\tariaLabelProp || (typeof children === \"string\" ? children : undefined);\n\t\tconst needsTouchTarget = size === \"xs\" || size === \"sm\";\n\n\t\tconst motionRadius = useMotionValue<number>(animateRadius);\n\t\tconst asChildRef = React.useRef<HTMLElement | null>(null);\n\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\tasChildRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") ref(node as HTMLButtonElement);\n\t\t\t\telse if (ref)\n\t\t\t\t\t(ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n\t\t\t\t\t\tnode as HTMLButtonElement;\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\treturn motionRadius.on(\"change\", (v) => {\n\t\t\t\tif (asChildRef.current)\n\t\t\t\t\tasChildRef.current.style.borderRadius = `${v}px`;\n\t\t\t});\n\t\t}, [motionRadius, asChild]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\tconst controls = springAnimate(motionRadius, animateRadius);\n\t\t\treturn () => controls.stop();\n\t\t}, [animateRadius, motionRadius, asChild]);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return e.preventDefault();\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif (onClick && (e.key === \"Enter\" || e.key === \" \")) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst buttonClassName = cn(\n\t\t\t\"relative w-fit shrink-0 inline-flex flex-row items-center justify-center\",\n\t\t\t\"whitespace-nowrap select-none cursor-pointer\",\n\t\t\t\"transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolorClass,\n\t\t\t\"overflow-hidden\",\n\t\t\ttypographyClass,\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst sharedTransition = customTransition ?? {\n\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\tlayout: BUTTON_SHAPE_MORPH_SPRING,\n\t\t\tdefault: SPRING_TRANSITION,\n\t\t};\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"popLayout\">\n\t\t\t\t\t{(loading || (icon && iconPosition === \"leading\")) && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden={!loading}\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\tloadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\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<ProgressIndicator\n\t\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\ticon\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{labelText && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\tclassName=\"inline-flex items-center h-full gap-[inherit]\"\n\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labelText}\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"popLayout\">\n\t\t\t\t\t{icon && iconPosition === \"trailing\" && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst handleAsChildPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tspringAnimate(motionRadius, pressedRadius);\n\t\t\t\t(onPointerDown as React.PointerEventHandler<HTMLElement>)?.(e);\n\t\t\t},\n\t\t\t[motionRadius, pressedRadius, onPointerDown],\n\t\t);\n\n\t\tconst handleAsChildPointerUp = React.useCallback(() => {\n\t\t\tspringAnimate(motionRadius, animateRadius);\n\t\t}, [motionRadius, animateRadius]);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonPointerDown(e);\n\t\t\t},\n\t\t\t[onPointerDown],\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst strippedProps = { ...restProps } as Record<string, unknown>;\n\t\t\tfor (const key of MOTION_PROP_KEYS) delete strippedProps[key];\n\t\t\tconst htmlProps =\n\t\t\t\tstrippedProps as React.ButtonHTMLAttributes<HTMLButtonElement>;\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={mergedRef as React.Ref<HTMLButtonElement>}\n\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLElement>}\n\t\t\t\t\t\tonPointerDown={handleAsChildPointerDown}\n\t\t\t\t\t\tonPointerUp={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerLeave={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerCancel={handleAsChildPointerUp}\n\t\t\t\t\t\tonKeyDown={handleKeyDown as React.KeyboardEventHandler<HTMLElement>}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...(mergedStyle as React.CSSProperties),\n\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t\t{...htmlProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\tlayout\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\taria-busy={loading ? true : undefined}\n\t\t\t\t\taria-disabled={loading ? true : restProps.disabled}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\tanimate={{ borderRadius: animateRadius }}\n\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{innerContent}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nButtonComponent.displayName = \"Button\";\n\nexport const Button = React.memo(ButtonComponent);\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SPRING_TRANSITION_FAST } from \"./shared/constants\";\n\n// @internal — font must be loaded via '@bug-on/m3-expressive/material-symbols.css'\nconst VARIANT_FONT: Record<NonNullable<IconProps[\"variant\"]>, string> = {\n\toutlined: \"'Material Symbols Outlined'\",\n\trounded: \"'Material Symbols Rounded'\",\n\tsharp: \"'Material Symbols Sharp'\",\n};\n\n/**\n * Props cho component {@link Icon}.\n *\n * All variable font axes are mapped directly to `font-variation-settings`.\n */\nexport interface IconProps extends React.HTMLAttributes<HTMLSpanElement> {\n\t/**\n\t * Name of the Material Symbol in snake_case format.\n\t * @example \"home\", \"arrow_forward\", \"settings\"\n\t * @see https://fonts.google.com/icons\n\t */\n\tname: string;\n\n\t/**\n\t * Geometric style variant — maps to font family.\n\t * @default \"outlined\"\n\t */\n\tvariant?: \"outlined\" | \"rounded\" | \"sharp\";\n\n\t/**\n\t * `FILL` axis. `0` = outlined, `1` = filled.\n\t * Features spring animation when `animateFill` is true.\n\t * @default 0\n\t */\n\tfill?: 0 | 1;\n\n\t/**\n\t * `wght` axis — stroke weight. Should match surrounding text weight.\n\t * @default 400\n\t */\n\tweight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n\n\t/**\n\t * `GRAD` axis — fine-tunes visual weight without affecting layout dimensions.\n\t * Use `-25` on dark backgrounds to offset light halation effects.\n\t * @default 0\n\t */\n\tgrade?: -50 | -25 | 0 | 100 | 200;\n\n\t/**\n\t * `opsz` axis — optical size in dp. Used to set `font-size` if `size` is not specified.\n\t * Match rendered pixel size for best quality.\n\t * @default 24\n\t */\n\topticalSize?: 20 | 24 | 40 | 48;\n\n\t/**\n\t * Direct `font-size` override in px. `opsz` axis still respects `opticalSize`.\n\t * @example size={18} opticalSize={20}\n\t */\n\tsize?: number | \"inherit\";\n\n\t/**\n\t * Enables smooth spring animation when toggling FILL axis (uses `SPRING_TRANSITION_FAST`).\n\t * Requires `motion` dependency.\n\t * @default false\n\t * @example <Icon name=\"favorite\" fill={isLiked ? 1 : 0} animateFill />\n\t */\n\tanimateFill?: boolean;\n}\n\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tvariant = \"outlined\",\n\t\t\tfill = 0,\n\t\t\tweight = 400,\n\t\t\tgrade = 0,\n\t\t\topticalSize = 24,\n\t\t\tsize,\n\t\t\tanimateFill = false,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst fontVariationSettings = `'FILL' ${fill}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opticalSize}`;\n\n\t\tconst computedStyle: React.CSSProperties = {\n\t\t\tfontFamily: VARIANT_FONT[variant],\n\t\t\tfontSize:\n\t\t\t\tsize === \"inherit\"\n\t\t\t\t\t? \"inherit\"\n\t\t\t\t\t: size != null\n\t\t\t\t\t\t? `${size}px`\n\t\t\t\t\t\t: `${opticalSize}px`,\n\t\t\tfontVariationSettings,\n\t\t\t...style,\n\t\t};\n\n\t\tif (animateFill) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tanimate={{ fontVariationSettings }}\n\t\t\t\t\t\ttransition={SPRING_TRANSITION_FAST}\n\t\t\t\t\t\tstyle={computedStyle}\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: motion v12 HTMLMotionProps conflicts with React's event types\n\t\t\t\t\t\t{...(restProps as any)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</m.span>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={computedStyle}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</span>\n\t\t);\n\t},\n);\n\nIconComponent.displayName = \"Icon\";\n\n/**\n * Material Symbols (variable font) Icon component.\n *\n * Make sure to import the icon font CSS before usage:\n * ```ts\n * import '@bug-on/m3-expressive/material-symbols-cdn.css';\n * ```\n *\n * @remarks\n * - Use snake_case for icon names: `\"arrow_forward\"`, NOT `\"ArrowForward\"`.\n * - `aria-hidden=\"true\"` is attached automatically — provide screen reader labels on parent elements.\n *\n * @example\n * ```tsx\n * // Basic Icon\n * <Icon name=\"home\" />\n *\n * // Visual customization (filled, heavy weight)\n * <Icon name=\"favorite\" variant=\"rounded\" fill={1} weight={300} />\n *\n * // Animated transition on state change\n * <Icon name=\"bookmark\" fill={saved ? 1 : 0} animateFill />\n *\n * // Custom size override\n * <Icon name=\"close\" size={18} opticalSize={20} />\n *\n * // Combination with other components\n * <Button icon={<Icon name=\"add\" />}>Add to cart</Button>\n * ```\n *\n * @see https://fonts.google.com/icons\n * @see https://m3.material.io/styles/icons/overview\n */\nexport const Icon = React.memo(IconComponent);\n","\"use client\";\n\nimport * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n/** Radix accepts hover/scroll/always/auto. We add 'none' as a UI-only hide. */\nexport type ScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"none\";\ntype RadixScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"auto\";\nexport type ScrollAreaOrientation = \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface ScrollAreaProps\n\textends Omit<\n\t\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Root>,\n\t\t\"type\"\n\t> {\n\t/**\n\t * Controls when the scrollbars are visible.\n\t * - `hover`: Show on hover (default, recommended for desktop)\n\t * - `scroll`: Show only while scrolling (recommended for mobile)\n\t * - `always`: Always visible\n\t * - `none`: Never visible\n\t */\n\ttype?: ScrollAreaType;\n\t/**\n\t * The scrollbar orientation to render.\n\t * @default \"vertical\"\n\t */\n\torientation?: ScrollAreaOrientation;\n\t/** Delay in ms before scrollbars hide when `type` is `hover` or `scroll`. */\n\tscrollHideDelay?: number;\n\t/** Extra classes applied to the inner viewport element. */\n\tviewportClassName?: string;\n\t/** Ref to the scrolling viewport element. */\n\tviewportRef?: React.Ref<HTMLDivElement>;\n\t/** Extra props applied to the viewport element. */\n\tviewportProps?: React.ComponentPropsWithoutRef<\n\t\ttypeof RadixScrollArea.Viewport\n\t>;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\nconst ScrollArea = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Root>,\n\tScrollAreaProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tviewportClassName,\n\t\t\tchildren,\n\t\t\ttype = \"hover\",\n\t\t\torientation = \"vertical\",\n\t\t\tscrollHideDelay = 600,\n\t\t\tviewportRef,\n\t\t\tviewportProps,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [isTouchDevice, setIsTouchDevice] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tsetIsTouchDevice(\n\t\t\t\t\t\"ontouchstart\" in window || navigator.maxTouchPoints > 0,\n\t\t\t\t);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst resolvedType = React.useMemo(() => {\n\t\t\tif (type === \"hover\" && isTouchDevice) {\n\t\t\t\treturn \"scroll\";\n\t\t\t}\n\t\t\treturn type;\n\t\t}, [type, isTouchDevice]);\n\n\t\tconst radixType: RadixScrollAreaType =\n\t\t\tresolvedType === \"none\" ? \"always\" : resolvedType;\n\n\t\treturn (\n\t\t\t<RadixScrollArea.Root\n\t\t\t\tref={ref}\n\t\t\t\ttype={radixType}\n\t\t\t\tscrollHideDelay={scrollHideDelay}\n\t\t\t\tclassName={cn(\"relative overflow-hidden flex flex-col\", className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<RadixScrollArea.Viewport\n\t\t\t\t\tref={viewportRef}\n\t\t\t\t\t{...viewportProps}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"h-full w-full flex-1 min-h-0 min-w-0 rounded-[inherit]\",\n\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1\",\n\t\t\t\t\t\tviewportClassName,\n\t\t\t\t\t\tviewportProps?.className,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RadixScrollArea.Viewport>\n\n\t\t\t\t{(orientation === \"vertical\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{(orientation === \"horizontal\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"horizontal\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<RadixScrollArea.Corner className=\"bg-m3-surface-container\" />\n\t\t\t</RadixScrollArea.Root>\n\t\t);\n\t},\n);\nScrollArea.displayName = \"ScrollArea\";\n\n// ─── Scrollbar ────────────────────────────────────────────────────────────────\nconst ScrollAreaScrollbar = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Scrollbar>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Scrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n\t<RadixScrollArea.Scrollbar\n\t\tref={ref}\n\t\torientation={orientation}\n\t\tclassName={cn(\n\t\t\t\"flex touch-none select-none transition-all duration-300 ease-in-out\",\n\t\t\t\"absolute z-50\",\n\t\t\torientation === \"vertical\" &&\n\t\t\t\t\"right-0 top-0 bottom-0 w-2.5 border-l border-l-transparent p-px\",\n\t\t\torientation === \"horizontal\" &&\n\t\t\t\t\"bottom-0 left-0 right-0 h-2.5 flex-col border-t border-t-transparent p-px\",\n\t\t\t\"data-[state=hidden]:opacity-0 data-[state=visible]:opacity-100\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t<RadixScrollArea.Thumb\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex-1 rounded-full bg-m3-on-surface/25 transition-colors duration-200\",\n\t\t\t\t\"hover:bg-m3-on-surface/40 active:bg-m3-on-surface/55\",\n\t\t\t\t\"before:absolute before:left-1/2 before:top-1/2 before:min-h-11 before:min-w-11 before:-translate-x-1/2 before:-translate-y-1/2\",\n\t\t\t)}\n\t\t/>\n\t</RadixScrollArea.Scrollbar>\n));\nScrollAreaScrollbar.displayName = RadixScrollArea.Scrollbar.displayName;\n\n// ─── Corner ───────────────────────────────────────────────────────────────────\nconst ScrollAreaCorner = React.forwardRef<\n\tReact.ComponentRef<typeof RadixScrollArea.Corner>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Corner>\n>(({ className, ...props }, ref) => (\n\t<RadixScrollArea.Corner\n\t\tref={ref}\n\t\tclassName={cn(\"bg-m3-surface-container\", className)}\n\t\t{...props}\n\t/>\n));\nScrollAreaCorner.displayName = \"ScrollAreaCorner\";\n\nexport { ScrollArea, ScrollAreaScrollbar };\n","\"use client\";\n\nimport { createElement, useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./buttons/button\";\nimport { Icon } from \"./icon\";\nimport { ScrollArea } from \"./scroll-area\";\n\nconst COPY_RESET_DELAY = 2000;\n\nexport interface CodeBlockProps {\n\t/** Raw code string to display and copy. */\n\tcode: string;\n\t/** Language label in the header (presentational only). @default \"React\" */\n\tlanguage?: string;\n\t/** Additional CSS classes for the outer wrapper. */\n\tclassName?: string;\n\t/**\n\t * Pre-highlighted HTML from Shiki SSR.\n\t * Use `codeToHtml` with `themes: { light, dark }` for dual-theme support.\n\t */\n\thtml?: string;\n}\n\n// ─── Sub-components ───────────────────────────────────────────────────────────\n\nfunction CopyButton({\n\tcopied,\n\tonCopy,\n}: {\n\tcopied: boolean;\n\tonCopy: () => void;\n}) {\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onCopy}\n\t\t\ttitle=\"Copy code\"\n\t\t\taria-label={copied ? \"Code copied\" : \"Copy code\"}\n\t\t\tcolorStyle=\"text\"\n\t\t\tclassName=\"h-8 px-2 gap-1.5\"\n\t\t>\n\t\t\t{copied ? (\n\t\t\t\t<>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"check\"\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tclassName=\"text-m3-primary\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"text-[10px] font-bold uppercase tracking-wider text-m3-primary\">\n\t\t\t\t\t\tCopied!\n\t\t\t\t\t</span>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"content_copy\"\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tclassName=\"text-m3-on-surface-variant\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"text-[10px] font-bold uppercase tracking-wider text-m3-on-surface-variant\">\n\t\t\t\t\t\tCopy\n\t\t\t\t\t</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Button>\n\t);\n}\n\n/** Mappings for HTML attributes to React props */\nconst ATTR_MAP: Record<string, string> = {\n\tclass: \"className\",\n\ttabindex: \"tabIndex\",\n\treadonly: \"readOnly\",\n\tmaxlength: \"maxLength\",\n\tautocomplete: \"autoComplete\",\n\tautofocus: \"autoFocus\",\n\tcontenteditable: \"contentEditable\",\n\tspellcheck: \"spellCheck\",\n};\n\nfunction parseStyle(styleStr: string): React.CSSProperties {\n\tconst styleObj: Record<string, string> = {};\n\tfor (const s of styleStr.split(\";\")) {\n\t\tconst part = s.trim();\n\t\tif (!part) continue;\n\t\tconst colonIndex = part.indexOf(\":\");\n\t\tif (colonIndex === -1) continue;\n\n\t\tconst k = part.slice(0, colonIndex).trim();\n\t\tconst v = part.slice(colonIndex + 1).trim();\n\n\t\tif (k.startsWith(\"--\")) {\n\t\t\t// CSS variables must be passed as-is\n\t\t\tstyleObj[k] = v;\n\t\t} else {\n\t\t\t// Standard properties should be camelCased for React\n\t\t\tconst key = k.replace(/-./g, (x) => x[1].toUpperCase());\n\t\t\tstyleObj[key] = v;\n\t\t}\n\t}\n\treturn styleObj as React.CSSProperties;\n}\n\nfunction mapDomToReact(node: Node, key: string | number): React.ReactNode {\n\tif (node.nodeType === Node.TEXT_NODE) {\n\t\treturn node.textContent;\n\t}\n\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\tconst el = node as Element;\n\t\tconst tagName = el.tagName.toLowerCase();\n\t\tconst props: Record<string, unknown> = { key };\n\n\t\tfor (const attr of Array.from(el.attributes)) {\n\t\t\tconst propName = ATTR_MAP[attr.name] || attr.name;\n\t\t\tif (propName === \"style\") {\n\t\t\t\tprops.style = parseStyle(attr.value);\n\t\t\t} else {\n\t\t\t\tprops[propName] = attr.value;\n\t\t\t}\n\t\t}\n\n\t\treturn createElement(\n\t\t\ttagName,\n\t\t\tprops,\n\t\t\tArray.from(el.childNodes).map((child, i) => mapDomToReact(child, i)),\n\t\t);\n\t}\n\treturn null;\n}\n\nfunction CodeContent({ html, code }: { html?: string; code: string }) {\n\tconst [parsedContent, setParsedContent] = useState<React.ReactNode>(null);\n\n\tuseEffect(() => {\n\t\tif (html) {\n\t\t\tconst parser = new DOMParser();\n\t\t\tconst doc = parser.parseFromString(html, \"text/html\");\n\t\t\tconst content = Array.from(doc.body.childNodes).map((node, i) =>\n\t\t\t\tmapDomToReact(node, i),\n\t\t\t);\n\t\t\tsetParsedContent(content);\n\t\t}\n\t}, [html]);\n\n\tif (html) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"text-sm font-mono\",\n\t\t\t\t\t\"[&>pre]:bg-transparent! [&>pre]:p-0! [&>pre]:m-0!\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{parsedContent}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<pre className=\"text-sm font-mono text-m3-on-surface whitespace-pre\">\n\t\t\t{code}\n\t\t</pre>\n\t);\n}\n\n// ─── CodeBlock ────────────────────────────────────────────────────────────────\n\nexport function CodeBlock({\n\tcode,\n\tlanguage = \"React\",\n\tclassName,\n\thtml,\n}: CodeBlockProps) {\n\tconst [copied, setCopied] = useState(false);\n\n\tconst handleCopy = useCallback(async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(code);\n\t\t\tsetCopied(true);\n\t\t\tsetTimeout(() => setCopied(false), COPY_RESET_DELAY);\n\t\t} catch {\n\t\t\t// Clipboard API unavailable — fail silently\n\t\t}\n\t}, [code]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-m3-lg overflow-hidden max-w-full\",\n\t\t\t\t\"bg-m3-surface-container-lowest border border-m3-outline-variant/60\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"px-4 py-2 flex justify-between items-center\",\n\t\t\t\t\t\"bg-m3-surface-container-low border-b border-m3-outline-variant/60\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className=\"text-xs font-mono text-m3-on-surface-variant\">\n\t\t\t\t\t{language}\n\t\t\t\t</span>\n\t\t\t\t<CopyButton copied={copied} onCopy={handleCopy} />\n\t\t\t</div>\n\n\t\t\t<ScrollArea\n\t\t\t\ttype=\"hover\"\n\t\t\t\torientation=\"both\"\n\t\t\t\tclassName=\"max-h-120 flex-col w-full min-w-0\"\n\t\t\t>\n\t\t\t\t<div className=\"p-4 min-w-0 w-full\">\n\t\t\t\t\t<CodeContent html={html} code={code} />\n\t\t\t\t</div>\n\t\t\t</ScrollArea>\n\t\t</div>\n\t);\n}\n","/**\n * @file divider.tsx\n *\n * MD3 Expressive Divider component.\n *\n * - `Divider` → A thin line that groups content in lists and layouts.\n *\n * @remarks\n * Token references (Kotlin source — DividerTokens.kt v0_117):\n * Color = ColorSchemeKeyTokens.OutlineVariant → bg-m3-outline-variant / text-m3-outline-variant\n * Thickness = 1.0.dp → h-px (flat horizontal) | w-px (flat vertical) | strokeWidth={1} (wavy SVG)\n *\n * Variants:\n * - \"full-bleed\" → spans full width, no indent\n * - \"inset\" → leading indent (16dp standard / 72dp after-icon via insetStart)\n * - \"middle-inset\" → 16dp indent both sides\n * - \"subheader\" → same as full-bleed (label provided externally)\n *\n * Shapes:\n * - \"flat\" → straight 1px line rendered as <m.div> (default)\n * - \"wavy\" → sinusoidal SVG wave via <m.svg> + buildWavePath helper (horizontal only)\n *\n * Architecture:\n * - Styling: `cn` (clsx/tailwind-merge) + static Tailwind classes only\n * - Animation: Framer Motion LazyMotion/domMax, scaleX/scaleY spring entrance\n * - Wavy: SVG path generated by pure-JS `buildWavePath()` (cubic Bézier sine approx)\n * Uses ResizeObserver (via useContainerWidth) to measure container width so\n * the path has precise bounds and leading/trailing ends are properly rounded.\n * - A11y: role=\"separator\", aria-orientation, aria-hidden when decorative\n *\n * @see https://m3.material.io/components/divider/overview\n */\n\nimport { domMax, LazyMotion, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useContainerWidth, useMergedRef } from \"./progress-indicator/hooks\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n// Exclude onDrag-family event handlers that conflict between React's HTMLAttributes\n// and Framer Motion's MotionProps (different DragEvent signatures).\ntype SafeHTMLDivAttrs = Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t| \"onDrag\"\n\t| \"onDragStart\"\n\t| \"onDragEnd\"\n\t| \"onDragEnter\"\n\t| \"onDragLeave\"\n\t| \"onDragOver\"\n\t| \"onDrop\"\n>;\n\nexport interface DividerProps extends SafeHTMLDivAttrs {\n\t/**\n\t * Visual variant controlling indentation.\n\t * - \"full-bleed\" → no indent, spans full container width/height (default)\n\t * - \"inset\" → leading indent only (use `insetStart` to control amount)\n\t * - \"middle-inset\" → 16px indent on both sides\n\t * - \"subheader\" → alias for full-bleed, used before section labels\n\t * @default \"full-bleed\"\n\t */\n\tvariant?: \"full-bleed\" | \"inset\" | \"middle-inset\" | \"subheader\";\n\n\t/**\n\t * Orientation of the divider line.\n\t * - \"horizontal\" → renders as `h-px w-full` bar (default)\n\t * - \"vertical\" → renders as `w-px h-full` column\n\t * Note: `shape=\"wavy\"` is not supported with orientation=\"vertical\".\n\t * @default \"horizontal\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\";\n\n\t/**\n\t * Shape of the divider line.\n\t * - \"flat\" → straight 1px line rendered as `<div>` (default)\n\t * - \"wavy\" → sinusoidal SVG wave (horizontal orientation only)\n\t *\n\t * When `shape=\"wavy\"` and `orientation=\"vertical\"`, silently falls back to\n\t * `shape=\"flat\"` and emits a `console.warn`.\n\t * @default \"flat\"\n\t */\n\tshape?: \"flat\" | \"wavy\";\n\n\t/**\n\t * Leading inset size for the \"inset\" variant.\n\t * - \"standard\" → 16px (`ml-4`)\n\t * - \"icon\" → 72px (`ml-[72px]`) — use when list items have leading icons/avatars\n\t * Only applies when `variant=\"inset\"`.\n\t * @default \"standard\"\n\t */\n\tinsetStart?: \"standard\" | \"icon\";\n\n\t/**\n\t * Wavy shape visual parameters. Only applies when `shape=\"wavy\"`.\n\t * All values are in pixels.\n\t */\n\twaveConfig?: {\n\t\t/**\n\t\t * Peak displacement from the center line.\n\t\t * @default 2\n\t\t */\n\t\tamplitude?: number;\n\t\t/**\n\t\t * Pixels per full sine cycle.\n\t\t * @default 32\n\t\t */\n\t\twavelength?: number;\n\t\t/**\n\t\t * Thickness of the wave stroke in pixels.\n\t\t * @default 1\n\t\t */\n\t\tstrokeWidth?: number;\n\t};\n\n\t/**\n\t * When true, marks the divider as decorative (`aria-hidden=\"true\"`).\n\t * Use when the divider is purely visual with no semantic meaning.\n\t * @default false\n\t */\n\tdecorative?: boolean;\n\n\t/**\n\t * When true, plays an entrance animation (scaleX/scaleY from 0→1).\n\t * Automatically disabled when user prefers reduced motion.\n\t * @default true\n\t */\n\tanimate?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Generates an SVG path `d` string for a sinusoidal wave between two X bounds.\n * Uses cubic Bézier approximation of a sine curve for smooth rendering.\n * The error vs. a true sine is < 0.2%.\n *\n * Each half-cycle alternates between crest (+amplitude) and trough (-amplitude).\n * Control points are placed at 1/3 and 2/3 of each half-cycle for accuracy.\n *\n * @param startX - X coordinate where the path begins (e.g. capWidth = strokeWidth/2)\n * @param endX - X coordinate where the path ends (e.g. containerWidth - capWidth)\n * @param amplitude - Peak displacement from center line (px). Default: 2\n * @param wavelength - Pixels per full sine cycle. Default: 32\n * @param yCenter - Y coordinate of the wave center line. Default: 4\n * @returns SVG path `d` attribute string, or \"\" when startX >= endX\n *\n * @example\n * buildWavePath(0.5, 499.5, 2, 32, 4)\n * // → \"M 0.5,4 C 11.17,... 500,4 ...\"\n */\nexport function buildWavePath(\n\tstartX: number,\n\tendX: number,\n\tamplitude = 2,\n\twavelength = 32,\n\tyCenter = 4,\n): string {\n\tif (startX >= endX) return \"\";\n\n\tconst halfCycle = wavelength / 2;\n\tconst numHalfCycles = Math.ceil((endX - startX) / halfCycle);\n\n\t// MD3 precise bezier approximation: offset multiplier (4/3) lets control points\n\t// visually reach exactly the given amplitude.\n\tconst cpDistanceY = amplitude * (4 / 3);\n\n\tlet d = `M ${startX},${yCenter}`;\n\n\tfor (let i = 0; i < numHalfCycles; i++) {\n\t\tconst x0 = startX + i * halfCycle;\n\t\tconst x1 = Math.min(startX + (i + 1) * halfCycle, endX);\n\t\t// Alternate crest and trough\n\t\tconst peak = i % 2 === 0 ? yCenter - cpDistanceY : yCenter + cpDistanceY;\n\t\t// 1/3 and 2/3 ratio for smoother sine approximation (Google MD3 style)\n\t\tconst segLen = x1 - x0;\n\t\tconst cp1x = x0 + segLen / 3;\n\t\tconst cp2x = x1 - segLen / 3;\n\t\td += ` C ${cp1x},${peak} ${cp2x},${peak} ${x1},${yCenter}`;\n\t}\n\n\treturn d;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal implementation\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst DividerImpl = React.forwardRef<HTMLDivElement, DividerProps>(\n\t(\n\t\t{\n\t\t\tvariant = \"full-bleed\",\n\t\t\torientation = \"horizontal\",\n\t\t\tshape = \"flat\",\n\t\t\tinsetStart = \"standard\",\n\t\t\twaveConfig,\n\t\t\tdecorative = false,\n\t\t\tanimate = true,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst reducedMotion = useReducedMotion();\n\t\tconst shouldAnimate = animate && !reducedMotion;\n\n\t\t// Wavy is only supported for horizontal orientation\n\t\tconst effectiveShape =\n\t\t\tshape === \"wavy\" && orientation === \"vertical\" ? \"flat\" : shape;\n\n\t\tif (shape === \"wavy\" && orientation === \"vertical\") {\n\t\t\tconsole.warn(\n\t\t\t\t\"[Divider] shape='wavy' is not supported with orientation='vertical'. Falling back to shape='flat'.\",\n\t\t\t);\n\t\t}\n\n\t\t// Container width measurement — needed for direct SVG path rendering so\n\t\t// leading/trailing ends land at exact bounds (enabling rounded caps).\n\t\tconst [containerRef, containerWidth] = useContainerWidth();\n\n\t\t// ── A11y attrs ──────────────────────────────────────────────────────────\n\t\tconst a11yProps = decorative\n\t\t\t? { \"aria-hidden\": \"true\" as const }\n\t\t\t: {\n\t\t\t\t\trole: \"separator\" as const,\n\t\t\t\t\t\"aria-orientation\": orientation,\n\t\t\t\t};\n\n\t\t// ── Ref Merging ────────────────────────────────────────────────────────\n\t\t// We need to merge the internal containerRef (for ResizeObserver) with\n\t\t// the user-provided external ref.\n\t\tconst mergedRef = useMergedRef(containerRef, ref);\n\n\t\t// ── Inset class mapping (all static) ────────────────────────────────────\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\t\tconst insetClass = cn(\n\t\t\tvariant === \"inset\" &&\n\t\t\t\tisHorizontal &&\n\t\t\t\tinsetStart === \"standard\" &&\n\t\t\t\t\"ml-4\",\n\t\t\tvariant === \"inset\" &&\n\t\t\t\tisHorizontal &&\n\t\t\t\tinsetStart === \"icon\" &&\n\t\t\t\t\"ml-[72px]\",\n\t\t\tvariant === \"inset\" && !isHorizontal && \"mt-4\",\n\t\t\tvariant === \"middle-inset\" && isHorizontal && \"mx-4\",\n\t\t\tvariant === \"middle-inset\" && !isHorizontal && \"my-4\",\n\t\t);\n\n\t\t// ── Spring transition ────────────────────────────────────────────────────\n\t\tconst springTransition = shouldAnimate\n\t\t\t? ({ type: \"spring\", stiffness: 300, damping: 30, mass: 0.6 } as const)\n\t\t\t: ({ duration: 0 } as const);\n\n\t\t// ── Wavy amplitude / wavelength / thickness ───────────────────────────\n\t\tconst amplitude = waveConfig?.amplitude ?? 2;\n\t\tconst wavelength = waveConfig?.wavelength ?? 32;\n\t\tconst strokeWidth = waveConfig?.strokeWidth ?? 1;\n\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\t// RENDER: Wavy\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\tif (effectiveShape === \"wavy\") {\n\t\t\t// Canvas explicitly accommodates the curve's exact bounding box.\n\t\t\tconst canvasHeight = Math.ceil(amplitude * 2 + strokeWidth);\n\t\t\tconst yCenter = canvasHeight / 2;\n\n\t\t\t// Half stroke-width inset so rounded caps are not clipped by the SVG edge.\n\t\t\tconst capWidth = strokeWidth / 2;\n\t\t\tconst pathStartX = capWidth;\n\t\t\tconst pathEndX = Math.max(capWidth, containerWidth - capWidth);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block shrink-0 overflow-hidden\",\n\t\t\t\t\t\tisHorizontal ? \"w-full\" : \"h-full self-stretch\",\n\t\t\t\t\t\tinsetClass,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: `${canvasHeight}px`, ...style }}\n\t\t\t\t\t{...a11yProps}\n\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: spread safe HTMLDiv attrs\n\t\t\t\t\t{...(props as any)}\n\t\t\t\t>\n\t\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t\t<m.svg\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t\tclassName=\"text-m3-outline-variant block\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{ overflow: \"visible\", transformOrigin: \"left center\" }}\n\t\t\t\t\t\t\tinitial={shouldAnimate ? { scaleX: 0, opacity: 0 } : undefined}\n\t\t\t\t\t\t\tanimate={shouldAnimate ? { scaleX: 1, opacity: 1 } : undefined}\n\t\t\t\t\t\t\ttransition={springTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{containerWidth > 0 && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={buildWavePath(\n\t\t\t\t\t\t\t\t\t\tpathStartX,\n\t\t\t\t\t\t\t\t\t\tpathEndX,\n\t\t\t\t\t\t\t\t\t\tamplitude,\n\t\t\t\t\t\t\t\t\t\twavelength,\n\t\t\t\t\t\t\t\t\t\tyCenter,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.svg>\n\t\t\t\t\t</LazyMotion>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\t// RENDER: Flat\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block shrink-0 bg-m3-outline-variant\",\n\t\t\t\t\t\tisHorizontal ? \"h-px w-full\" : \"w-px h-full self-stretch\",\n\t\t\t\t\t\tinsetClass,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...(isHorizontal\n\t\t\t\t\t\t\t? { transformOrigin: \"left\" }\n\t\t\t\t\t\t\t: { transformOrigin: \"top\" }),\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t\tinitial={\n\t\t\t\t\t\tshouldAnimate\n\t\t\t\t\t\t\t? isHorizontal\n\t\t\t\t\t\t\t\t? { scaleX: 0 }\n\t\t\t\t\t\t\t\t: { scaleY: 0 }\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tanimate={\n\t\t\t\t\t\tshouldAnimate\n\t\t\t\t\t\t\t? isHorizontal\n\t\t\t\t\t\t\t\t? { scaleX: 1 }\n\t\t\t\t\t\t\t\t: { scaleY: 1 }\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\ttransition={springTransition}\n\t\t\t\t\t{...a11yProps}\n\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: spread safe HTMLDiv attrs\n\t\t\t\t\t{...(props as any)}\n\t\t\t\t/>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nDividerImpl.displayName = \"Divider\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Public export\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Divider — a thin line that groups content in lists and layouts.\n *\n * Supports four layout variants (full-bleed, inset, middle-inset, subheader),\n * two orientations (horizontal, vertical), and two shape modes (flat, wavy).\n *\n * The wavy shape renders a sinusoidal SVG wave and is only supported with\n * `orientation=\"horizontal\"`.\n *\n * @example\n * ```tsx\n * // Default flat full-bleed horizontal divider\n * <Divider />\n *\n * // Inset after icon list items\n * <Divider variant=\"inset\" insetStart=\"icon\" />\n *\n * // Vertical separator between panes\n * <Divider orientation=\"vertical\" />\n *\n * // Wavy expressive divider\n * <Divider shape=\"wavy\" />\n *\n * // Wavy with custom wave config\n * <Divider shape=\"wavy\" waveConfig={{ amplitude: 5, wavelength: 24 }} />\n *\n * // Decorative (no a11y semantics)\n * <Divider decorative />\n *\n * // No entrance animation\n * <Divider animate={false} />\n *\n * // Middle-inset wavy divider\n * <Divider variant=\"middle-inset\" shape=\"wavy\" />\n * ```\n *\n * @see https://m3.material.io/components/divider/overview\n */\nexport const Divider = React.memo(DividerImpl);\n","import * as React from \"react\";\nimport type { ListSelectionMode, ListStyle, ListVariant } from \"./list-types\";\n\nexport interface ListContextValue {\n\tselectionMode: ListSelectionMode;\n\tvariant: ListVariant;\n\tlistStyle: ListStyle;\n\tselectedValues: Set<string>;\n\tonItemChange: (value: string, selected: boolean) => void;\n\treorderable: boolean;\n\titemCount: number;\n\touterRadius: number;\n\tinnerRadius: number;\n}\n\nexport const ListContext = React.createContext<ListContextValue | null>(null);\n\nexport const useListContext = () => React.useContext(ListContext);\nexport type { ListSelectionMode, ListStyle, ListVariant };\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\n\nexport const LIST_TOKENS = {\n\toneLineHeight: 56,\n\ttwoLineHeight: 72,\n\tthreeLineHeight: 88,\n\n\tleadingSpace: 16,\n\ttrailingSpace: 16,\n\ttopSpace: 8,\n\tbottomSpace: 8,\n\tbetweenSpace: 16,\n\tsegmentedGap: 2,\n\n\tshape: {\n\t\tcontainerShape: cornerRadius.large,\n\t\titemOuterRadius: cornerRadius.large,\n\t\titemInnerRadius: cornerRadius.extraSmall,\n\t\tresting: cornerRadius.extraSmall,\n\t\thovered: cornerRadius.medium,\n\t\tfocused: cornerRadius.large,\n\t\tpressed: cornerRadius.large,\n\t\tselected: cornerRadius.large,\n\t\tdragged: cornerRadius.large,\n\t\tdisabled: cornerRadius.extraSmall,\n\t},\n\n\tstateLayer: {\n\t\thover: 0.08,\n\t\tfocus: 0.1,\n\t\tpressed: 0.1,\n\t\tdragged: 0.16,\n\t\tdisabled: 0.1,\n\t},\n\n\tleadingIconSize: 24,\n\tleadingIconExpressiveSize: 20,\n\tleadingAvatarSize: 40,\n\tleadingImageWidth: 56,\n\tleadingImageHeight: 56,\n\tleadingVideoSmallWidth: 100,\n\tleadingVideoSmallHeight: 56,\n\tleadingVideoLargeWidth: 114,\n\tleadingVideoLargeHeight: 64,\n\n\ttrailingIconSize: 24,\n\ttrailingIconExpressiveSize: 20,\n\n\tfocusIndicatorThickness: 3,\n\tfocusIndicatorOffset: -3,\n\n\tcssVars: {\n\t\tcontainerBg: \"var(--md-sys-color-surface)\",\n\t\tselectedContainerBg: \"var(--md-sys-color-secondary-container)\",\n\t\tlabelText: \"var(--md-sys-color-on-surface)\",\n\t\tselectedLabelText: \"var(--md-sys-color-on-secondary-container)\",\n\t\tsupportingText: \"var(--md-sys-color-on-surface-variant)\",\n\t\toverlineText: \"var(--md-sys-color-on-surface-variant)\",\n\t\ttrailingText: \"var(--md-sys-color-on-surface-variant)\",\n\t\tleadingIcon: \"var(--md-sys-color-on-surface-variant)\",\n\t\tfocusIndicator: \"var(--md-sys-color-secondary)\",\n\t},\n} as const;\n","import {\n\tclosestCenter,\n\tDndContext,\n\ttype DragEndEvent,\n\ttype DragOverEvent,\n\ttype DragStartEvent,\n\tKeyboardSensor,\n\tPointerSensor,\n\tuseSensor,\n\tuseSensors,\n} from \"@dnd-kit/core\";\nimport {\n\tarrayMove,\n\tSortableContext,\n\tsortableKeyboardCoordinates,\n\tverticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ListContext } from \"./list-context\";\nimport { LIST_TOKENS } from \"./list-tokens\";\nimport type { ListProps } from \"./list-types\";\n\nconst DND_ACTIVATION_DISTANCE = 8;\n\nfunction resolveItemId(item: unknown): string {\n\tif (item && typeof item === \"object\") {\n\t\tconst obj = item as Record<string, unknown>;\n\t\treturn String(obj.id ?? obj.value ?? item);\n\t}\n\treturn String(item);\n}\n\nfunction isListItem(child: React.ReactNode): child is React.ReactElement {\n\treturn (\n\t\tReact.isValidElement(child) &&\n\t\tchild.props != null &&\n\t\ttypeof child.props === \"object\" &&\n\t\t\"value\" in (child.props as Record<string, unknown>)\n\t);\n}\n\nconst ListImpl = React.forwardRef<HTMLUListElement, ListProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant = \"baseline\",\n\t\t\tlistStyle = \"standard\",\n\t\t\tselectionMode = \"none\",\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\treorderable = false,\n\t\t\titems,\n\t\t\tonReorder,\n\t\t\touterRadius = LIST_TOKENS.shape.itemOuterRadius,\n\t\t\tinnerRadius = LIST_TOKENS.shape.itemInnerRadius,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst listRef = React.useRef<HTMLUListElement | null>(null);\n\t\tconst [draggedOrder, setDraggedOrder] = React.useState<string[] | null>(\n\t\t\tnull,\n\t\t);\n\n\t\tReact.useImperativeHandle(ref, () => listRef.current as HTMLUListElement);\n\n\t\tconst [selectedState, setSelectedState] = React.useState<Set<string>>(\n\t\t\t() => {\n\t\t\t\tconst initialValue = value ?? defaultValue ?? [];\n\t\t\t\treturn new Set(\n\t\t\t\t\tArray.isArray(initialValue)\n\t\t\t\t\t\t? initialValue\n\t\t\t\t\t\t: initialValue\n\t\t\t\t\t\t\t? [initialValue]\n\t\t\t\t\t\t\t: [],\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\tconst isControlled = value !== undefined;\n\t\tconst selectedValues = React.useMemo(() => {\n\t\t\tif (isControlled) {\n\t\t\t\treturn new Set(Array.isArray(value) ? value : value ? [value] : []);\n\t\t\t}\n\t\t\treturn selectedState;\n\t\t}, [isControlled, value, selectedState]);\n\n\t\tconst onItemChange = React.useCallback(\n\t\t\t(itemValue: string, selected: boolean) => {\n\t\t\t\tconst nextSet = new Set(selectedValues);\n\n\t\t\t\tif (selectionMode === \"single-select\") {\n\t\t\t\t\tnextSet.clear();\n\t\t\t\t\tif (selected) nextSet.add(itemValue);\n\t\t\t\t} else if (selectionMode === \"multi-select\") {\n\t\t\t\t\tif (selected) {\n\t\t\t\t\t\tnextSet.add(itemValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnextSet.delete(itemValue);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!isControlled) setSelectedState(nextSet);\n\n\t\t\t\tif (onChange) {\n\t\t\t\t\tonChange(\n\t\t\t\t\t\tselectionMode === \"single-select\"\n\t\t\t\t\t\t\t? Array.from(nextSet)[0] || \"\"\n\t\t\t\t\t\t\t: Array.from(nextSet),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[selectedValues, selectionMode, isControlled, onChange],\n\t\t);\n\n\t\tconst sensors = useSensors(\n\t\t\tuseSensor(PointerSensor, {\n\t\t\t\tactivationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n\t\t\t}),\n\t\t\tuseSensor(KeyboardSensor, {\n\t\t\t\tcoordinateGetter: sortableKeyboardCoordinates,\n\t\t\t}),\n\t\t);\n\n\t\tconst itemIds = React.useMemo(\n\t\t\t() => (items ? items.map(resolveItemId) : []),\n\t\t\t[items],\n\t\t);\n\n\t\tconst currentOrder = React.useMemo(\n\t\t\t() => draggedOrder || itemIds,\n\t\t\t[draggedOrder, itemIds],\n\t\t);\n\n\t\tconst handleDragStart = (_event: DragStartEvent) => {\n\t\t\t// Snapshot from currentOrder (not itemIds) to stay consistent if drag starts\n\t\t\t// while a previous draggedOrder is still pending flush.\n\t\t\tsetDraggedOrder(\n\t\t\t\tcurrentOrder.length > 0 ? [...currentOrder] : [...itemIds],\n\t\t\t);\n\t\t};\n\n\t\tconst handleDragOver = (event: DragOverEvent) => {\n\t\t\tconst { active, over } = event;\n\t\t\tif (!over || active.id === over.id || !draggedOrder) return;\n\n\t\t\tconst activeIndex = draggedOrder.indexOf(String(active.id));\n\t\t\tconst overIndex = draggedOrder.indexOf(String(over.id));\n\n\t\t\t// Guard: skip setState when order hasn't changed to avoid unnecessary re-renders\n\t\t\tif (activeIndex !== -1 && overIndex !== -1 && activeIndex !== overIndex) {\n\t\t\t\tsetDraggedOrder((prev) =>\n\t\t\t\t\tprev ? arrayMove(prev, activeIndex, overIndex) : prev,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst handleDragEnd = (event: DragEndEvent) => {\n\t\t\tconst { active, over } = event;\n\n\t\t\t// Commit reorder BEFORE resetting draggedOrder so both state updates are\n\t\t\t// batched by React 18 automatic batching. Without this, resetting first\n\t\t\t// causes a flash render where currentOrder snaps back to the old itemIds\n\t\t\t// for one frame before the parent's new `items` prop arrives.\n\t\t\tif (over && active.id !== over.id && items && onReorder) {\n\t\t\t\tconst activeIndex = items.findIndex(\n\t\t\t\t\t(item) => resolveItemId(item) === active.id,\n\t\t\t\t);\n\t\t\t\tconst overIndex = items.findIndex(\n\t\t\t\t\t(item) => resolveItemId(item) === over.id,\n\t\t\t\t);\n\n\t\t\t\tif (activeIndex !== -1 && overIndex !== -1) {\n\t\t\t\t\tonReorder(arrayMove(items, activeIndex, overIndex));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetDraggedOrder(null);\n\t\t};\n\n\t\tconst handleDragCancel = () => {\n\t\t\tsetDraggedOrder(null);\n\t\t};\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n\t\t\tif (e.key !== \"ArrowDown\" && e.key !== \"ArrowUp\") return;\n\n\t\t\tconst listEl = listRef.current;\n\t\t\tif (!listEl) return;\n\n\t\t\tconst focusableItems = Array.from(\n\t\t\t\tlistEl.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'.md3-list-item-focusable:not([aria-disabled=\"true\"])',\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tif (focusableItems.length === 0) return;\n\n\t\t\te.preventDefault();\n\n\t\t\tconst activeEl = document.activeElement as HTMLElement;\n\t\t\tconst activeIndex = focusableItems.indexOf(activeEl);\n\n\t\t\tlet nextIndex: number;\n\t\t\tif (activeIndex === -1) {\n\t\t\t\tnextIndex = e.key === \"ArrowDown\" ? 0 : focusableItems.length - 1;\n\t\t\t} else {\n\t\t\t\tnextIndex =\n\t\t\t\t\te.key === \"ArrowDown\"\n\t\t\t\t\t\t? (activeIndex + 1) % focusableItems.length\n\t\t\t\t\t\t: (activeIndex - 1 + focusableItems.length) % focusableItems.length;\n\t\t\t}\n\n\t\t\tfocusableItems[nextIndex]?.focus();\n\t\t};\n\n\t\tconst childrenArray = React.Children.toArray(children);\n\t\tconst listItemCount = childrenArray.filter(isListItem).length;\n\n\t\tlet currentListItemIndex = 0;\n\t\tconst processedChildren = React.Children.map(children, (child) => {\n\t\t\tif (!isListItem(child)) return child;\n\n\t\t\tconst childValue = (child.props as Record<string, unknown>).value;\n\t\t\tconst index =\n\t\t\t\treorderable && currentOrder.length > 0\n\t\t\t\t\t? currentOrder.indexOf(String(childValue))\n\t\t\t\t\t: currentListItemIndex;\n\n\t\t\tcurrentListItemIndex++;\n\t\t\treturn React.cloneElement(\n\t\t\t\tchild as React.ReactElement<{ _listIndex?: number }>,\n\t\t\t\t{ _listIndex: index },\n\t\t\t);\n\t\t});\n\n\t\tconst contextValue = React.useMemo(\n\t\t\t() => ({\n\t\t\t\tselectionMode,\n\t\t\t\tvariant,\n\t\t\t\tlistStyle,\n\t\t\t\tselectedValues,\n\t\t\t\tonItemChange,\n\t\t\t\treorderable,\n\t\t\t\titemCount: listItemCount,\n\t\t\t\touterRadius,\n\t\t\t\tinnerRadius,\n\t\t\t}),\n\t\t\t[\n\t\t\t\tselectionMode,\n\t\t\t\tvariant,\n\t\t\t\tlistStyle,\n\t\t\t\tselectedValues,\n\t\t\t\tonItemChange,\n\t\t\t\treorderable,\n\t\t\t\tlistItemCount,\n\t\t\t\touterRadius,\n\t\t\t\tinnerRadius,\n\t\t\t],\n\t\t);\n\n\t\tconst dndId = React.useId();\n\n\t\tconst isListbox =\n\t\t\tselectionMode === \"single-select\" || selectionMode === \"multi-select\";\n\t\tconst role = isListbox ? \"listbox\" : \"list\";\n\t\tconst ariaMultiselectable =\n\t\t\tselectionMode === \"multi-select\" ? true : undefined;\n\n\t\tconst baseClasses = cn(\n\t\t\t\"flex flex-col w-full m-0 p-0 list-none bg-transparent focus:outline-none\",\n\t\t\tlistStyle === \"segmented\" && \"gap-[2px]\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst renderedList = (\n\t\t\t// biome-ignore lint/a11y/useAriaPropsSupportedByRole: role is dynamically set to listbox when selectionMode is active\n\t\t\t<ul\n\t\t\t\tref={listRef}\n\t\t\t\trole={role}\n\t\t\t\taria-multiselectable={ariaMultiselectable}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tclassName={baseClasses}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{processedChildren}\n\t\t\t</ul>\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<ListContext.Provider value={contextValue}>\n\t\t\t\t\t{reorderable && items ? (\n\t\t\t\t\t\t<DndContext\n\t\t\t\t\t\t\tid={dndId}\n\t\t\t\t\t\t\tsensors={sensors}\n\t\t\t\t\t\t\tcollisionDetection={closestCenter}\n\t\t\t\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\t\t\t\tonDragOver={handleDragOver}\n\t\t\t\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\t\t\t\tonDragCancel={handleDragCancel}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SortableContext\n\t\t\t\t\t\t\t\titems={currentOrder}\n\t\t\t\t\t\t\t\tstrategy={verticalListSortingStrategy}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{renderedList}\n\t\t\t\t\t\t\t</SortableContext>\n\t\t\t\t\t\t</DndContext>\n\t\t\t\t\t) : (\n\t\t\t\t\t\trenderedList\n\t\t\t\t\t)}\n\t\t\t\t</ListContext.Provider>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nListImpl.displayName = \"List\";\n\nexport const List = React.memo(ListImpl);\nexport type { ListProps };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Divider } from \"../divider\";\nimport type { ListDividerProps } from \"./list-types\";\n\nconst INSET_CLASSES = {\n\ticon: \"pl-[56px]\",\n\tavatar: \"pl-[72px]\",\n\tcustom: \"pl-4\",\n} as const;\n\nconst ListDividerImpl = React.forwardRef<HTMLLIElement, ListDividerProps>(\n\t({ className, inset = false, insetType = \"avatar\", ...props }, ref) => {\n\t\tconst insetClass = inset ? INSET_CLASSES[insetType] : \"\";\n\n\t\treturn (\n\t\t\t<li\n\t\t\t\tref={ref}\n\t\t\t\trole=\"presentation\"\n\t\t\t\tclassName={cn(\"w-full bg-transparent list-none\", insetClass, className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Divider\n\t\t\t\t\tvariant=\"full-bleed\"\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\tanimate={false}\n\t\t\t\t\tdecorative\n\t\t\t\t/>\n\t\t\t</li>\n\t\t);\n\t},\n);\n\nListDividerImpl.displayName = \"ListDivider\";\n\nexport const ListDivider = React.memo(ListDividerImpl);\nexport type { ListDividerProps };\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 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 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","import { LIST_TOKENS } from \"./list-tokens\";\nimport type { ListItemPosition, ListSelectionMode } from \"./list-types\";\n\nexport function getListItemHeight(\n\thasOverline: boolean,\n\tsupportingTextLines: 0 | 1 | 2,\n): 56 | 72 | 88 {\n\tif (hasOverline && supportingTextLines > 0)\n\t\treturn LIST_TOKENS.threeLineHeight;\n\tif (supportingTextLines === 2) return LIST_TOKENS.threeLineHeight;\n\tif (hasOverline || supportingTextLines === 1)\n\t\treturn LIST_TOKENS.twoLineHeight;\n\treturn LIST_TOKENS.oneLineHeight;\n}\n\nexport function shouldTopAlign(height: number): boolean {\n\treturn height >= LIST_TOKENS.threeLineHeight;\n}\n\nexport function getExpressiveShape(\n\tstate:\n\t\t| \"resting\"\n\t\t| \"hovered\"\n\t\t| \"focused\"\n\t\t| \"pressed\"\n\t\t| \"selected\"\n\t\t| \"dragged\"\n\t\t| \"disabled\",\n): number {\n\treturn LIST_TOKENS.shape[state] ?? LIST_TOKENS.shape.resting;\n}\n\nexport function getListItemAriaProps(\n\tmode: ListSelectionMode,\n\tselected: boolean,\n\tdisabled: boolean,\n): Record<string, string | boolean | undefined> {\n\tconst props: Record<string, string | boolean | undefined> = {};\n\n\tif (disabled) props[\"aria-disabled\"] = true;\n\n\tif (mode === \"single-select\" || mode === \"multi-select\") {\n\t\tprops.role = \"option\";\n\t\tprops[\"aria-selected\"] = selected;\n\t} else if (mode === \"single-action\" || mode === \"multi-action\") {\n\t\tprops.role = \"button\";\n\t} else {\n\t\tprops.role = \"listitem\";\n\t}\n\n\treturn props;\n}\n\nexport function getListItemPosition(\n\tindex: number | undefined,\n\ttotal: number,\n): ListItemPosition {\n\tif (index === undefined || total <= 1) return \"solo\";\n\tif (index === 0) return \"leading\";\n\tif (index === total - 1) return \"trailing\";\n\treturn \"middle\";\n}\n\ntype RadiusCorners = { tl: number; tr: number; br: number; bl: number };\n\nexport function getAsymmetricRadius(\n\tposition: ListItemPosition,\n\touterRadius: number,\n\tinnerRadius: number,\n\tstateRadius: number,\n\tactive = false,\n): RadiusCorners {\n\tconst outer = Math.max(outerRadius, stateRadius);\n\tconst inner = active ? stateRadius : Math.min(innerRadius, stateRadius);\n\n\tif (active) {\n\t\tconst target = Math.max(outerRadius, stateRadius);\n\t\tswitch (position) {\n\t\t\tcase \"solo\":\n\t\t\t\treturn { tl: target, tr: target, br: target, bl: target };\n\t\t\tcase \"leading\":\n\t\t\t\treturn { tl: target, tr: target, br: stateRadius, bl: stateRadius };\n\t\t\tcase \"trailing\":\n\t\t\t\treturn { tl: stateRadius, tr: stateRadius, br: target, bl: target };\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\ttl: stateRadius,\n\t\t\t\t\ttr: stateRadius,\n\t\t\t\t\tbr: stateRadius,\n\t\t\t\t\tbl: stateRadius,\n\t\t\t\t};\n\t\t}\n\t}\n\n\tswitch (position) {\n\t\tcase \"solo\":\n\t\t\treturn { tl: outer, tr: outer, br: outer, bl: outer };\n\t\tcase \"leading\":\n\t\t\treturn { tl: outer, tr: outer, br: inner, bl: inner };\n\t\tcase \"trailing\":\n\t\t\treturn { tl: inner, tr: inner, br: outer, bl: outer };\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttl: stateRadius,\n\t\t\t\ttr: stateRadius,\n\t\t\t\tbr: stateRadius,\n\t\t\t\tbl: stateRadius,\n\t\t\t};\n\t}\n}\n","import { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Checkbox } from \"../checkbox\";\nimport { RadioButton } from \"../radio-button\";\nimport { Ripple, useRippleState } from \"../ripple\";\nimport { FAST_SPATIAL_SPRING } from \"../shared/motion-tokens\";\nimport { Switch } from \"../switch\";\nimport { useListContext } from \"./list-context\";\nimport { LIST_TOKENS } from \"./list-tokens\";\nimport type { ListItemProps } from \"./list-types\";\nimport {\n\tgetAsymmetricRadius,\n\tgetExpressiveShape,\n\tgetListItemAriaProps,\n\tgetListItemHeight,\n\tgetListItemPosition,\n\tshouldTopAlign,\n} from \"./list-utils\";\n\n// ── Sub-components ────────────────────────────────────────────────────────────\n\ninterface LeadingCheckboxProps {\n\tisSelected: boolean;\n\tdisabled: boolean;\n\tvalue: string;\n\ttopAlign: boolean;\n\tonItemChange: (value: string, selected: boolean) => void;\n}\n\nconst LeadingCheckbox = ({\n\tisSelected,\n\tdisabled,\n\tvalue,\n\ttopAlign,\n\tonItemChange,\n}: LeadingCheckboxProps) => (\n\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner checkbox handles key events\n\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center shrink-0 select-none md3-list-sub-focusable\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t)}\n\t\tonClick={(e) => e.stopPropagation()}\n\t>\n\t\t<Checkbox\n\t\t\tchecked={isSelected}\n\t\t\tdisabled={disabled}\n\t\t\tonCheckedChange={(checked) => onItemChange(value, checked)}\n\t\t/>\n\t</div>\n);\n\ninterface LeadingRadioProps {\n\tisSelected: boolean;\n\tdisabled: boolean;\n\tvalue: string;\n\ttopAlign: boolean;\n\tonItemChange: (value: string, selected: boolean) => void;\n}\n\nconst LeadingRadio = ({\n\tisSelected,\n\tdisabled,\n\tvalue,\n\ttopAlign,\n\tonItemChange,\n}: LeadingRadioProps) => (\n\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner radio handles key events\n\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center shrink-0 select-none md3-list-sub-focusable\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t)}\n\t\tonClick={(e) => e.stopPropagation()}\n\t>\n\t\t<RadioButton\n\t\t\tselected={isSelected}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={() => onItemChange(value, true)}\n\t\t/>\n\t</div>\n);\n\n// ── Switch trailing helpers ───────────────────────────────────────────────────\n\ninterface SwitchTrailingProps {\n\ttrailingContent: React.ReactNode;\n\tisSelected: boolean;\n\tdisabled: boolean;\n\tselectionMode: string;\n\tvalue: string;\n\tonItemChange: (value: string, selected: boolean) => void;\n\ttrailingClass: string;\n}\n\nfunction renderSwitchTrailing({\n\ttrailingContent,\n\tisSelected,\n\tdisabled,\n\tselectionMode,\n\tvalue,\n\tonItemChange,\n\ttrailingClass,\n}: SwitchTrailingProps) {\n\tconst isSelectingMode =\n\t\tselectionMode === \"single-select\" || selectionMode === \"multi-select\";\n\n\tconst switchElement = React.isValidElement(trailingContent) ? (\n\t\t(() => {\n\t\t\tconst trailingProps = trailingContent.props as {\n\t\t\t\tchecked?: boolean;\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tonCheckedChange?: (checked: boolean) => void;\n\t\t\t};\n\n\t\t\tconst checkedValue =\n\t\t\t\t!isSelectingMode && trailingProps.checked !== undefined\n\t\t\t\t\t? trailingProps.checked\n\t\t\t\t\t: isSelected;\n\n\t\t\tconst disabledValue =\n\t\t\t\ttrailingProps.disabled !== undefined\n\t\t\t\t\t? disabled || trailingProps.disabled\n\t\t\t\t\t: disabled;\n\n\t\t\tconst onCheckedChange = (checked: boolean) => {\n\t\t\t\tif (!isSelectingMode && trailingProps.onCheckedChange !== undefined) {\n\t\t\t\t\ttrailingProps.onCheckedChange(checked);\n\t\t\t\t} else {\n\t\t\t\t\tonItemChange(value, checked);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn React.cloneElement(\n\t\t\t\ttrailingContent as React.ReactElement<{\n\t\t\t\t\tchecked?: boolean;\n\t\t\t\t\tdisabled?: boolean;\n\t\t\t\t\tonCheckedChange?: (checked: boolean) => void;\n\t\t\t\t}>,\n\t\t\t\t{ checked: checkedValue, disabled: disabledValue, onCheckedChange },\n\t\t\t);\n\t\t})()\n\t) : (\n\t\t<Switch\n\t\t\tchecked={isSelected}\n\t\t\tdisabled={disabled}\n\t\t\tonCheckedChange={(checked) => onItemChange(value, checked)}\n\t\t/>\n\t);\n\n\treturn (\n\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner switch handles key events\n\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t<div\n\t\t\tclassName={cn(trailingClass, \"md3-list-sub-focusable\")}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t>\n\t\t\t{switchElement}\n\t\t</div>\n\t);\n}\n\n// ── Main Component ────────────────────────────────────────────────────────────\n\nconst ListItemImpl = React.forwardRef<HTMLLIElement, ListItemProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvalue,\n\t\t\theadline,\n\t\t\tsupportingText,\n\t\t\tsupportingTextLines = 1,\n\t\t\toverline,\n\t\t\tleadingType = \"none\",\n\t\t\tleadingSrc,\n\t\t\tleadingAlt,\n\t\t\tleadingContent,\n\t\t\ttrailingType = \"none\",\n\t\t\ttrailingText,\n\t\t\ttrailingContent,\n\t\t\tdisabled = false,\n\t\t\tselected,\n\t\t\thref,\n\t\t\tonClick,\n\t\t\tinteractive = false,\n\t\t\tdragHandle = false,\n\t\t\tposition,\n\t\t\t_listIndex,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useListContext();\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\tconst selectionMode = context?.selectionMode ?? \"none\";\n\t\tconst variant = context?.variant ?? \"baseline\";\n\t\tconst onItemChange = context?.onItemChange ?? (() => {});\n\t\tconst reorderable = context?.reorderable ?? false;\n\n\t\tconst isSelected =\n\t\t\tselected !== undefined\n\t\t\t\t? selected\n\t\t\t\t: (context?.selectedValues.has(value) ?? false);\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled,\n\t\t});\n\n\t\tconst {\n\t\t\tattributes,\n\t\t\tlisteners,\n\t\t\tsetNodeRef,\n\t\t\ttransform,\n\t\t\ttransition,\n\t\t\tisDragging,\n\t\t} = useSortable({ id: value, disabled: !reorderable });\n\n\t\tconst itemRef = React.useRef<HTMLLIElement | null>(null);\n\t\tconst setRefs = React.useCallback(\n\t\t\t(node: HTMLLIElement | null) => {\n\t\t\t\titemRef.current = node;\n\t\t\t\tsetNodeRef(node);\n\t\t\t\tif (typeof ref === \"function\") ref(node);\n\t\t\t\telse if (ref) ref.current = node;\n\t\t\t},\n\t\t\t[ref, setNodeRef],\n\t\t);\n\n\t\tconst height = getListItemHeight(\n\t\t\t!!overline,\n\t\t\tsupportingText ? supportingTextLines : 0,\n\t\t);\n\t\tconst topAlign = shouldTopAlign(height);\n\n\t\tconst currentState = disabled\n\t\t\t? \"disabled\"\n\t\t\t: isDragging\n\t\t\t\t? \"dragged\"\n\t\t\t\t: isPressed\n\t\t\t\t\t? \"pressed\"\n\t\t\t\t\t: isFocused\n\t\t\t\t\t\t? \"focused\"\n\t\t\t\t\t\t: isHovered\n\t\t\t\t\t\t\t? \"hovered\"\n\t\t\t\t\t\t\t: isSelected\n\t\t\t\t\t\t\t\t? \"selected\"\n\t\t\t\t\t\t\t\t: \"resting\";\n\n\t\tconst itemCount = context?.itemCount ?? 0;\n\t\tconst outerRadius =\n\t\t\tcontext?.outerRadius ?? LIST_TOKENS.shape.itemOuterRadius;\n\t\tconst innerRadius =\n\t\t\tcontext?.innerRadius ?? LIST_TOKENS.shape.itemInnerRadius;\n\n\t\tconst resolvedPosition = isDragging\n\t\t\t? \"solo\"\n\t\t\t: (position ?? getListItemPosition(_listIndex, itemCount));\n\n\t\tconst currentRadius =\n\t\t\tvariant === \"expressive\" ? getExpressiveShape(currentState) : 0;\n\t\tconst isActive = isSelected || isHovered || isPressed || isDragging;\n\n\t\tconst corners = getAsymmetricRadius(\n\t\t\tresolvedPosition,\n\t\t\touterRadius,\n\t\t\tinnerRadius,\n\t\t\tcurrentRadius,\n\t\t\tisActive,\n\t\t);\n\t\tconst staticCorners = getAsymmetricRadius(\n\t\t\tresolvedPosition,\n\t\t\touterRadius,\n\t\t\tinnerRadius,\n\t\t\tLIST_TOKENS.shape.resting,\n\t\t);\n\n\t\tconst _motionTransition = prefersReduced\n\t\t\t? { duration: 0 }\n\t\t\t: FAST_SPATIAL_SPRING;\n\n\t\tconst dndStyle = {\n\t\t\ttransform: CSS.Transform.toString(transform),\n\t\t\ttransition,\n\t\t\tzIndex: isDragging ? 10 : undefined,\n\t\t};\n\n\t\tconst isEntirelyInteractive =\n\t\t\tselectionMode !== \"multi-action\" &&\n\t\t\t(!!onClick || !!href || interactive || selectionMode !== \"none\");\n\n\t\tconst handleHorizontalKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tif (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\") return;\n\n\t\t\tconst itemEl = itemRef.current;\n\t\t\tif (!itemEl) return;\n\n\t\t\tconst subFocusable = Array.from(\n\t\t\t\titemEl.querySelectorAll<HTMLElement>(\n\t\t\t\t\t\"button.md3-list-sub-focusable, input.md3-list-sub-focusable, a.md3-list-sub-focusable, [tabindex].md3-list-sub-focusable, .md3-list-sub-focusable button, .md3-list-sub-focusable input, .md3-list-sub-focusable a, .md3-list-sub-focusable [tabindex]\",\n\t\t\t\t),\n\t\t\t).filter(\n\t\t\t\t(el) =>\n\t\t\t\t\t!el.hasAttribute(\"disabled\") &&\n\t\t\t\t\tel.getAttribute(\"aria-disabled\") !== \"true\" &&\n\t\t\t\t\tel.getAttribute(\"tabindex\") !== \"-1\",\n\t\t\t);\n\n\t\t\tconst allFocusable: HTMLElement[] = [];\n\t\t\tconst mainFocusable = itemEl.querySelector(\".md3-list-item-focusable\");\n\t\t\tif (mainFocusable) {\n\t\t\t\tallFocusable.push(mainFocusable as HTMLElement);\n\t\t\t} else if (itemEl.classList.contains(\"md3-list-item-focusable\")) {\n\t\t\t\tallFocusable.push(itemEl);\n\t\t\t}\n\t\t\tallFocusable.push(...subFocusable);\n\n\t\t\tif (allFocusable.length <= 1) return;\n\n\t\t\tconst activeEl = document.activeElement as HTMLElement;\n\t\t\tconst activeIndex = allFocusable.indexOf(activeEl);\n\n\t\t\tif (activeIndex === -1) return;\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tconst nextIndex =\n\t\t\t\te.key === \"ArrowRight\"\n\t\t\t\t\t? (activeIndex + 1) % allFocusable.length\n\t\t\t\t\t: (activeIndex - 1 + allFocusable.length) % allFocusable.length;\n\n\t\t\tallFocusable[nextIndex]?.focus();\n\t\t};\n\n\t\tconst interactionHandlers = {\n\t\t\tonMouseEnter: () => !disabled && setIsHovered(true),\n\t\t\tonMouseLeave: () => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t},\n\t\t\tonFocus: () => !disabled && setIsFocused(true),\n\t\t\tonBlur: () => setIsFocused(false),\n\t\t\tonPointerDown: (e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tif (!disabled) {\n\t\t\t\t\tsetIsPressed(true);\n\t\t\t\t\tonPointerDown(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonPointerUp: () => setIsPressed(false),\n\t\t};\n\n\t\t// ── Render slots ──────────────────────────────────────────────────────────\n\n\t\tconst leadingBaseClass = cn(\n\t\t\t\"flex items-center justify-center shrink-0 select-none\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t);\n\n\t\tconst renderLeading = () => {\n\t\t\tswitch (leadingType) {\n\t\t\t\tcase \"icon\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\tvariant === \"expressive\"\n\t\t\t\t\t\t\t\t\t? \"size-5 text-[20px]\"\n\t\t\t\t\t\t\t\t\t: \"size-6 text-[24px]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"avatar\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"size-10 rounded-full overflow-hidden bg-m3-surface-container-highest\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"image\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"w-14 h-14 overflow-hidden bg-m3-surface-container-highest\",\n\t\t\t\t\t\t\t\tvariant === \"expressive\" ? \"rounded-m3-sm\" : \"rounded-none\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingSrc ? (\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={leadingSrc}\n\t\t\t\t\t\t\t\t\talt={leadingAlt || \"\"}\n\t\t\t\t\t\t\t\t\tclassName=\"size-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tleadingContent\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"video\": {\n\t\t\t\t\tconst isThreeLine = height === LIST_TOKENS.threeLineHeight;\n\t\t\t\t\tconst vWidth = isThreeLine\n\t\t\t\t\t\t? LIST_TOKENS.leadingVideoLargeWidth\n\t\t\t\t\t\t: LIST_TOKENS.leadingVideoSmallWidth;\n\t\t\t\t\tconst vHeight = isThreeLine\n\t\t\t\t\t\t? LIST_TOKENS.leadingVideoLargeHeight\n\t\t\t\t\t\t: LIST_TOKENS.leadingVideoSmallHeight;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"overflow-hidden bg-black rounded-m3-sm\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{ width: vWidth, height: vHeight }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingSrc ? (\n\t\t\t\t\t\t\t\t<video\n\t\t\t\t\t\t\t\t\tsrc={leadingSrc}\n\t\t\t\t\t\t\t\t\tclassName=\"size-full object-cover\"\n\t\t\t\t\t\t\t\t\tmuted\n\t\t\t\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tleadingContent\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase \"checkbox\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LeadingCheckbox\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\ttopAlign={topAlign}\n\t\t\t\t\t\t\tonItemChange={onItemChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\tcase \"radio\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LeadingRadio\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\ttopAlign={topAlign}\n\t\t\t\t\t\t\tonItemChange={onItemChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn <div className={leadingBaseClass}>{leadingContent}</div>;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tconst renderContent = () => (\n\t\t\t<div className=\"flex-1 min-w-0 flex flex-col justify-center select-none text-left\">\n\t\t\t\t{overline && (\n\t\t\t\t\t<span className=\"text-[11px] font-medium tracking-wider uppercase text-m3-on-surface-variant/80 mb-0.5 truncate\">\n\t\t\t\t\t\t{overline}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"text-sm font-medium transition-colors duration-200\",\n\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t: \"text-m3-on-surface\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{headline}\n\t\t\t\t</span>\n\t\t\t\t{supportingText && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"text-xs text-m3-on-surface-variant mt-0.5\",\n\t\t\t\t\t\t\tsupportingTextLines === 1 ? \"truncate\" : \"line-clamp-2\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{supportingText}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\n\t\tconst trailingBaseClass = cn(\n\t\t\t\"flex items-center justify-center shrink-0 ml-auto select-none\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t);\n\n\t\tconst renderTrailing = () => {\n\t\t\tif (reorderable && dragHandle) {\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\ttrailingBaseClass,\n\t\t\t\t\t\t\t\"cursor-grab active:cursor-grabbing text-m3-on-surface-variant p-2 -mr-2\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{...attributes}\n\t\t\t\t\t\t{...listeners}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"material-symbols-outlined text-[24px]\">\n\t\t\t\t\t\t\tdrag_handle\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tswitch (trailingType) {\n\t\t\t\tcase \"icon\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\ttrailingBaseClass,\n\t\t\t\t\t\t\t\t\"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\tvariant === \"expressive\"\n\t\t\t\t\t\t\t\t\t? \"size-5 text-[20px]\"\n\t\t\t\t\t\t\t\t\t: \"size-6 text-[24px]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"icon-button\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner button handles key events\n\t\t\t\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(trailingBaseClass, \"md3-list-sub-focusable\")}\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"text\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\ttrailingBaseClass,\n\t\t\t\t\t\t\t\t\"text-xs text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingText}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t);\n\t\t\t\tcase \"checkbox\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner checkbox handles key events\n\t\t\t\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(trailingBaseClass, \"md3-list-sub-focusable\")}\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tonCheckedChange={(checked) => onItemChange(value, checked)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"radio\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner radio handles key events\n\t\t\t\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(trailingBaseClass, \"md3-list-sub-focusable\")}\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RadioButton\n\t\t\t\t\t\t\t\tselected={isSelected}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tonClick={() => onItemChange(value, true)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"switch\":\n\t\t\t\t\treturn renderSwitchTrailing({\n\t\t\t\t\t\ttrailingContent,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\tselectionMode,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tonItemChange,\n\t\t\t\t\t\ttrailingClass: trailingBaseClass,\n\t\t\t\t\t});\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn <div className={trailingBaseClass}>{trailingContent}</div>;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\t// ── Render container layouts ──────────────────────────────────────────────\n\n\t\tconst ariaProps = getListItemAriaProps(selectionMode, isSelected, disabled);\n\n\t\tconst heightClass =\n\t\t\theight === LIST_TOKENS.oneLineHeight\n\t\t\t\t? \"min-h-[56px]\"\n\t\t\t\t: height === LIST_TOKENS.twoLineHeight\n\t\t\t\t\t? \"min-h-[72px]\"\n\t\t\t\t\t: \"min-h-[88px]\";\n\n\t\tconst paddingClass = topAlign ? \"py-3\" : \"py-2\";\n\n\t\tconst baseLiClasses = cn(\n\t\t\t\"flex w-full relative transition-colors duration-200 focus:outline-none\",\n\t\t\theightClass,\n\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst dndAttributes = reorderable && !dragHandle ? attributes : {};\n\t\tconst dndListeners = reorderable && !dragHandle ? listeners : {};\n\n\t\tconst cornerStyle = {\n\t\t\t...dndStyle,\n\t\t\tborderTopLeftRadius: corners.tl,\n\t\t\tborderTopRightRadius: corners.tr,\n\t\t\tborderBottomRightRadius: corners.br,\n\t\t\tborderBottomLeftRadius: corners.bl,\n\t\t};\n\n\t\tconst selectedBg =\n\t\t\tisSelected || isDragging\n\t\t\t\t? \"var(--md-sys-color-secondary-container)\"\n\t\t\t\t: \"var(--md-sys-color-surface)\";\n\n\t\tconst stateLayerClasses =\n\t\t\t\"relative overflow-hidden before:absolute before:inset-0 before:bg-current before:opacity-0 before:transition-opacity before:duration-200\";\n\n\t\tconst activeStateLayerClasses =\n\t\t\t\"hover:before:opacity-[0.08] focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\";\n\n\t\tif (selectionMode === \"multi-action\") {\n\t\t\tconst PrimaryWrapper = href ? m.a : m.button;\n\t\t\tconst primaryWrapperProps = href\n\t\t\t\t? { href: disabled ? undefined : href }\n\t\t\t\t: { type: \"button\" as const };\n\n\t\t\treturn (\n\t\t\t\t<m.li\n\t\t\t\t\tref={setRefs}\n\t\t\t\t\tstyle={{ ...cornerStyle, backgroundColor: selectedBg }}\n\t\t\t\t\tclassName={cn(baseLiClasses, \"overflow-hidden\")}\n\t\t\t\t\tonKeyDown={handleHorizontalKeyDown}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<PrimaryWrapper\n\t\t\t\t\t\t{...primaryWrapperProps}\n\t\t\t\t\t\tdisabled={href ? undefined : disabled}\n\t\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tif (disabled) return;\n\t\t\t\t\t\t\tonClick?.(e);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-1 items-center gap-3 text-left w-full focus:outline-none md3-list-item-focusable\",\n\t\t\t\t\t\t\tpaddingClass,\n\t\t\t\t\t\t\t\"pl-4 pr-2\",\n\t\t\t\t\t\t\tstateLayerClasses,\n\t\t\t\t\t\t\t!disabled && activeStateLayerClasses,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{...interactionHandlers}\n\t\t\t\t\t\t{...dndAttributes}\n\t\t\t\t\t\t{...dndListeners}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t{renderLeading()}\n\t\t\t\t\t\t{renderContent()}\n\t\t\t\t\t</PrimaryWrapper>\n\t\t\t\t\t<div className=\"pr-4 flex items-center\">{renderTrailing()}</div>\n\t\t\t\t</m.li>\n\t\t\t);\n\t\t}\n\n\t\tif (isEntirelyInteractive) {\n\t\t\tconst InteractiveWrapper = href ? m.a : m.button;\n\t\t\tconst wrapperProps = href\n\t\t\t\t? { href: disabled ? undefined : href }\n\t\t\t\t: { type: \"button\" as const };\n\n\t\t\treturn (\n\t\t\t\t<m.li\n\t\t\t\t\tref={setRefs}\n\t\t\t\t\tstyle={{ ...cornerStyle, backgroundColor: selectedBg }}\n\t\t\t\t\tclassName={cn(baseLiClasses, \"overflow-hidden\")}\n\t\t\t\t\tonKeyDown={handleHorizontalKeyDown}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<InteractiveWrapper\n\t\t\t\t\t\t{...wrapperProps}\n\t\t\t\t\t\tdisabled={href ? undefined : disabled}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tif (disabled) return;\n\t\t\t\t\t\t\tonClick?.(e);\n\t\t\t\t\t\t\tif (selectionMode === \"single-select\") {\n\t\t\t\t\t\t\t\tonItemChange(value, true);\n\t\t\t\t\t\t\t} else if (selectionMode === \"multi-select\") {\n\t\t\t\t\t\t\t\tonItemChange(value, !isSelected);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-1 items-center gap-3 text-left w-full focus:outline-none md3-list-item-focusable\",\n\t\t\t\t\t\t\tpaddingClass,\n\t\t\t\t\t\t\t\"px-4\",\n\t\t\t\t\t\t\tstateLayerClasses,\n\t\t\t\t\t\t\t!disabled && activeStateLayerClasses,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{...ariaProps}\n\t\t\t\t\t\t{...interactionHandlers}\n\t\t\t\t\t\t{...dndAttributes}\n\t\t\t\t\t\t{...dndListeners}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t{renderLeading()}\n\t\t\t\t\t\t{renderContent()}\n\t\t\t\t\t\t{renderTrailing()}\n\t\t\t\t\t</InteractiveWrapper>\n\t\t\t\t</m.li>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<m.li\n\t\t\t\tref={setRefs}\n\t\t\t\tstyle={{\n\t\t\t\t\t...dndStyle,\n\t\t\t\t\tborderTopLeftRadius: staticCorners.tl,\n\t\t\t\t\tborderTopRightRadius: staticCorners.tr,\n\t\t\t\t\tborderBottomRightRadius: staticCorners.br,\n\t\t\t\t\tborderBottomLeftRadius: staticCorners.bl,\n\t\t\t\t\tbackgroundColor: selectedBg,\n\t\t\t\t}}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tbaseLiClasses,\n\t\t\t\t\t\"px-4 overflow-hidden items-center gap-3\",\n\t\t\t\t\tpaddingClass,\n\t\t\t\t)}\n\t\t\t\tonKeyDown={handleHorizontalKeyDown}\n\t\t\t\t{...ariaProps}\n\t\t\t\t{...dndAttributes}\n\t\t\t\t{...dndListeners}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{renderLeading()}\n\t\t\t\t{renderContent()}\n\t\t\t\t{renderTrailing()}\n\t\t\t</m.li>\n\t\t);\n\t},\n);\n\nListItemImpl.displayName = \"ListItem\";\n\nexport const ListItem = React.memo(ListItemImpl);\nexport type { ListItemProps };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst typographyVariants = cva(\"m-0 p-0 text-m3-on-surface\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\t// Short hyphenated\n\t\t\t\"display-lg\": \"text-[57px] leading-[64px] font-normal tracking-[-0.25px]\",\n\t\t\t\"display-md\": \"text-[45px] leading-[52px] font-normal tracking-[0px]\",\n\t\t\t\"display-sm\": \"text-[36px] leading-[44px] font-normal tracking-[0px]\",\n\t\t\t\"headline-lg\": \"text-[32px] leading-[40px] font-normal tracking-[0px]\",\n\t\t\t\"headline-md\": \"text-[28px] leading-[36px] font-normal tracking-[0px]\",\n\t\t\t\"headline-sm\": \"text-[24px] leading-[32px] font-normal tracking-[0px]\",\n\t\t\t\"title-lg\": \"text-[22px] leading-[28px] font-normal tracking-[0px]\",\n\t\t\t\"title-md\": \"text-[16px] leading-[24px] font-medium tracking-[0.15px]\",\n\t\t\t\"title-sm\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-lg\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-md\": \"text-[12px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"label-sm\": \"text-[11px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"body-lg\": \"text-[16px] leading-[24px] font-normal tracking-[0.5px]\",\n\t\t\t\"body-md\": \"text-[14px] leading-[20px] font-normal tracking-[0.25px]\",\n\t\t\t\"body-sm\": \"text-[12px] leading-[16px] font-normal tracking-[0.4px]\",\n\n\t\t\t// Full hyphenated aliases\n\t\t\t\"display-large\": \"text-[57px] leading-[64px] font-normal tracking-[-0.25px]\",\n\t\t\t\"display-medium\": \"text-[45px] leading-[52px] font-normal tracking-[0px]\",\n\t\t\t\"display-small\": \"text-[36px] leading-[44px] font-normal tracking-[0px]\",\n\t\t\t\"headline-large\": \"text-[32px] leading-[40px] font-normal tracking-[0px]\",\n\t\t\t\"headline-medium\": \"text-[28px] leading-[36px] font-normal tracking-[0px]\",\n\t\t\t\"headline-small\": \"text-[24px] leading-[32px] font-normal tracking-[0px]\",\n\t\t\t\"title-large\": \"text-[22px] leading-[28px] font-normal tracking-[0px]\",\n\t\t\t\"title-medium\": \"text-[16px] leading-[24px] font-medium tracking-[0.15px]\",\n\t\t\t\"title-small\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-large\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-medium\": \"text-[12px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"label-small\": \"text-[11px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"body-large\": \"text-[16px] leading-[24px] font-normal tracking-[0.5px]\",\n\t\t\t\"body-medium\": \"text-[14px] leading-[20px] font-normal tracking-[0.25px]\",\n\t\t\t\"body-small\": \"text-[12px] leading-[16px] font-normal tracking-[0.4px]\",\n\n\t\t\t// CamelCase aliases\n\t\t\tdisplayLarge: \"text-[57px] leading-[64px] font-normal tracking-[-0.25px]\",\n\t\t\tdisplayMedium: \"text-[45px] leading-[52px] font-normal tracking-[0px]\",\n\t\t\tdisplaySmall: \"text-[36px] leading-[44px] font-normal tracking-[0px]\",\n\t\t\theadlineLarge: \"text-[32px] leading-[40px] font-normal tracking-[0px]\",\n\t\t\theadlineMedium: \"text-[28px] leading-[36px] font-normal tracking-[0px]\",\n\t\t\theadlineSmall: \"text-[24px] leading-[32px] font-normal tracking-[0px]\",\n\t\t\ttitleLarge: \"text-[22px] leading-[28px] font-normal tracking-[0px]\",\n\t\t\ttitleMedium: \"text-[16px] leading-[24px] font-medium tracking-[0.15px]\",\n\t\t\ttitleSmall: \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\tlabelLarge: \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\tlabelMedium: \"text-[12px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\tlabelSmall: \"text-[11px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\tbodyLarge: \"text-[16px] leading-[24px] font-normal tracking-[0.5px]\",\n\t\t\tbodyMedium: \"text-[14px] leading-[20px] font-normal tracking-[0.25px]\",\n\t\t\tbodySmall: \"text-[12px] leading-[16px] font-normal tracking-[0.4px]\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"body-md\",\n\t},\n});\n\nexport interface TextProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof typographyVariants> {\n\t/**\n\t * Custom HTML element tag override.\n\t */\n\tas?: React.ElementType;\n\t/**\n\t * Text color override (CSS color value or Tailwind color class).\n\t */\n\tcolor?: string;\n\t/**\n\t * Font weight override.\n\t */\n\tweight?: string | number;\n}\n\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n\t({ className, variant, as: Component, color, weight, style, ...props }, ref) => {\n\t\t// Default component based on variant if not provided\n\t\tconst defaultComponent = React.useMemo(() => {\n\t\t\tconst v = variant ? String(variant).toLowerCase() : \"\";\n\t\t\tif (v.startsWith(\"display\") || v.startsWith(\"headline\")) return \"h1\";\n\t\t\tif (v.startsWith(\"title\")) return \"h2\";\n\t\t\treturn \"p\";\n\t\t}, [variant]);\n\n\t\tconst Tag = Component || defaultComponent;\n\n\t\tconst customStyle: React.CSSProperties = {\n\t\t\t...style,\n\t\t\t...(color ? { color } : {}),\n\t\t\t...(weight ? { fontWeight: weight } : {}),\n\t\t};\n\n\t\treturn (\n\t\t\t<Tag\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(typographyVariants({ variant, className }))}\n\t\t\t\tstyle={customStyle}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nText.displayName = \"Text\";\n\nexport { Text, typographyVariants };\n","/**\n * @file toc.tsx\n *\n * Table of Contents component for long-form documentation pages.\n *\n * Uses `IntersectionObserver` to track which section heading is currently in the\n * viewport and highlights the corresponding link. Smooth-scrolls to the target\n * when a link is clicked (respecting the browser's `prefers-reduced-motion`\n * media query via the native `scrollIntoView` API).\n *\n * @remarks\n * - SSR-safe: `IntersectionObserver` usage is guarded by a `typeof` check.\n * - The observer `rootMargin` is tuned for documentation layout with a fixed header\n * (~100px) and early deactivation (~80% from bottom) so the active item changes\n * before the section scrolls off-screen.\n */\n\nimport type React from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { ScrollArea, type ScrollAreaProps } from \"./scroll-area\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A single entry in the Table of Contents.\n *\n * @example\n * ```ts\n * const items: ToCItem[] = [\n * { id: \"installation\", label: \"Installation\" },\n * { id: \"usage\", label: \"Usage\" },\n * ];\n * ```\n */\nexport interface ToCItem {\n\t/** The DOM `id` attribute of the corresponding section heading. */\n\tid: string;\n\t/** Human-readable label shown in the ToC. */\n\tlabel: string;\n}\n\n/**\n * Props for the `TableOfContents` component.\n */\nexport interface TableOfContentsProps {\n\t/**\n\t * Ordered list of section items to display.\n\t * Each item must have a matching DOM element with the same `id`.\n\t */\n\titems: ToCItem[];\n\t/**\n\t * Additional CSS classes applied to the root `<nav>` element.\n\t * Use this to control positioning (e.g. sticky, fixed) from the consumer.\n\t */\n\tclassName?: string;\n\t/**\n\t * Configuration for the internal ScrollArea.\n\t * @default { type: \"hover\" }\n\t */\n\tscrollAreaProps?: Omit<ScrollAreaProps, \"children\">;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Table of Contents sidebar component.\n *\n * Renders a `<nav>` sidebar with links to page sections. Tracks the active\n * section using `IntersectionObserver` and applies active styles to the\n * current link.\n *\n * @remarks\n * - Visible only on `xl` screens (`hidden xl:block` — sticky sidebar).\n * - The `aria-current` attribute is set on the active link for screen readers.\n * - Click scroll is smooth: `scrollIntoView({ behavior: \"smooth\" })`.\n *\n * @example\n * ```tsx\n * const toc: ToCItem[] = [\n * { id: \"overview\", label: \"Overview\" },\n * { id: \"props\", label: \"Props\" },\n * { id: \"examples\", label: \"Examples\" },\n * ];\n *\n * <TableOfContents items={toc} />\n * ```\n *\n * @see https://m3.material.io/foundations/content-design/navigation\n */\nexport function TableOfContents({\n\titems,\n\tclassName,\n\tscrollAreaProps,\n}: TableOfContentsProps) {\n\tconst [activeId, setActiveId] = useState(\"\");\n\n\t// Stabilize dependency — re-subscribe only when the item IDs actually change.\n\tconst itemIds = useMemo(() => items.map((i) => i.id), [items]);\n\n\tuseEffect(() => {\n\t\t// SSR guard: IntersectionObserver is not available in Node.js.\n\t\tif (typeof IntersectionObserver === \"undefined\") return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tif (entry.isIntersecting) setActiveId(entry.target.id);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// rootMargin: top offset ~100px (fixed header), bottom -80% (early switch)\n\t\t\t{ rootMargin: \"-100px 0% -80% 0%\" },\n\t\t);\n\n\t\tfor (const id of itemIds) {\n\t\t\tconst el = document.getElementById(id);\n\t\t\tif (el) observer.observe(el);\n\t\t}\n\n\t\treturn () => observer.disconnect();\n\t}, [itemIds]);\n\n\tconst handleClick = useCallback(\n\t\t(e: React.MouseEvent<HTMLAnchorElement>, id: string) => {\n\t\t\te.preventDefault();\n\t\t\tdocument\n\t\t\t\t.getElementById(id)\n\t\t\t\t?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\t\t},\n\t\t[],\n\t);\n\n\treturn (\n\t\t<nav\n\t\t\taria-label=\"On this page\"\n\t\t\tclassName={cn(\"pl-6 flex flex-col h-full\", className)}\n\t\t>\n\t\t\t<h4 className=\"text-xs font-bold text-m3-on-surface-variant uppercase tracking-widest mb-4 hidden lg:block\">\n\t\t\t\tOn this page\n\t\t\t</h4>\n\t\t\t<ScrollArea\n\t\t\t\ttype=\"hover\"\n\t\t\t\t{...scrollAreaProps}\n\t\t\t\tclassName={cn(\"flex-1 min-h-0\", scrollAreaProps?.className)}\n\t\t\t>\n\t\t\t\t<ul className=\"space-y-4 pr-4\">\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<li key={item.id}>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={`#${item.id}`}\n\t\t\t\t\t\t\t\tonClick={(e) => handleClick(e, item.id)}\n\t\t\t\t\t\t\t\taria-current={activeId === item.id ? \"true\" : undefined}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-sm transition-colors hover:text-m3-primary block\",\n\t\t\t\t\t\t\t\t\tactiveId === item.id\n\t\t\t\t\t\t\t\t\t\t? \"text-m3-primary font-bold\"\n\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant font-medium\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</ScrollArea>\n\t\t</nav>\n\t);\n}\n","/**\n * TypeScaleTokens - MD3 Expressive Typography Physical Tokens\n *\n * Port of androidx.compose.material3.tokens.TypeScaleTokens\n * Adapted for Web with Google Sans Flex Variable Font (ROND axis = 100).\n *\n * All font sizes use rem units based on 14px root (project default).\n * Reference: Material Design 3 Type Scale Tokens spec.\n */\n\nconst font = \"'Google Sans Flex', system-ui, sans-serif\";\n\nexport const TypeScaleTokens = {\n\t// ─── DISPLAY ────────────────────────────────────────────────────────────────\n\tDisplayLargeFont: font,\n\tDisplayLargeWeight: 400,\n\tDisplayLargeSize: \"3.571rem\", // 57sp → ~57px / 14 = 4.071, MD3 uses 57px on 16px base → 3.5625rem\n\tDisplayLargeLineHeight: \"4rem\", // 64px\n\tDisplayLargeTracking: \"-0.25px\",\n\n\tDisplayMediumFont: font,\n\tDisplayMediumWeight: 400,\n\tDisplayMediumSize: \"2.857rem\", // 45px\n\tDisplayMediumLineHeight: \"3.286rem\", // 52px\n\tDisplayMediumTracking: \"0px\",\n\n\tDisplaySmallFont: font,\n\tDisplaySmallWeight: 400,\n\tDisplaySmallSize: \"2.571rem\", // 36px\n\tDisplaySmallLineHeight: \"3.143rem\", // 44px\n\tDisplaySmallTracking: \"0px\",\n\n\t// ─── HEADLINE ───────────────────────────────────────────────────────────────\n\tHeadlineLargeFont: font,\n\tHeadlineLargeWeight: 400,\n\tHeadlineLargeSize: \"2.286rem\", // 32px\n\tHeadlineLargeLineHeight: \"2.857rem\", // 40px\n\tHeadlineLargeTracking: \"0px\",\n\n\tHeadlineMediumFont: font,\n\tHeadlineMediumWeight: 400,\n\tHeadlineMediumSize: \"2rem\", // 28px\n\tHeadlineMediumLineHeight: \"2.571rem\", // 36px\n\tHeadlineMediumTracking: \"0px\",\n\n\tHeadlineSmallFont: font,\n\tHeadlineSmallWeight: 400,\n\tHeadlineSmallSize: \"1.714rem\", // 24px\n\tHeadlineSmallLineHeight: \"2.286rem\", // 32px\n\tHeadlineSmallTracking: \"0px\",\n\n\t// ─── TITLE ──────────────────────────────────────────────────────────────────\n\tTitleLargeFont: font,\n\tTitleLargeWeight: 400,\n\tTitleLargeSize: \"1.571rem\", // 22px\n\tTitleLargeLineHeight: \"2rem\", // 28px\n\tTitleLargeTracking: \"0px\",\n\n\tTitleMediumFont: font,\n\tTitleMediumWeight: 500,\n\tTitleMediumSize: \"1.143rem\", // 16px\n\tTitleMediumLineHeight: \"1.714rem\", // 24px\n\tTitleMediumTracking: \"0.15px\",\n\n\tTitleSmallFont: font,\n\tTitleSmallWeight: 500,\n\tTitleSmallSize: \"1rem\", // 14px\n\tTitleSmallLineHeight: \"1.429rem\", // 20px\n\tTitleSmallTracking: \"0.1px\",\n\n\t// ─── BODY ───────────────────────────────────────────────────────────────────\n\tBodyLargeFont: font,\n\tBodyLargeWeight: 400,\n\tBodyLargeSize: \"1.143rem\", // 16px\n\tBodyLargeLineHeight: \"1.714rem\", // 24px\n\tBodyLargeTracking: \"0.5px\",\n\n\tBodyMediumFont: font,\n\tBodyMediumWeight: 400,\n\tBodyMediumSize: \"1rem\", // 14px\n\tBodyMediumLineHeight: \"1.429rem\", // 20px\n\tBodyMediumTracking: \"0.25px\",\n\n\tBodySmallFont: font,\n\tBodySmallWeight: 400,\n\tBodySmallSize: \"0.857rem\", // 12px\n\tBodySmallLineHeight: \"1.143rem\", // 16px\n\tBodySmallTracking: \"0.4px\",\n\n\t// ─── LABEL ──────────────────────────────────────────────────────────────────\n\tLabelLargeFont: font,\n\tLabelLargeWeight: 500,\n\tLabelLargeSize: \"1rem\", // 14px\n\tLabelLargeLineHeight: \"1.429rem\", // 20px\n\tLabelLargeTracking: \"0.1px\",\n\n\tLabelMediumFont: font,\n\tLabelMediumWeight: 500,\n\tLabelMediumSize: \"0.857rem\", // 12px\n\tLabelMediumLineHeight: \"1.143rem\", // 16px\n\tLabelMediumTracking: \"0.5px\",\n\n\tLabelSmallFont: font,\n\tLabelSmallWeight: 500,\n\tLabelSmallSize: \"0.786rem\", // 11px\n\tLabelSmallLineHeight: \"1.143rem\", // 16px\n\tLabelSmallTracking: \"0.5px\",\n\n\t// ─── EMPHASIZED (MD3 Expressive) ────────────────────────────────────────────\n\t// Emphasized styles share Font/Size/LineHeight/Tracking with baseline.\n\t// Only fontWeight is elevated to create visual emphasis.\n\t// Source: TypographyTokens.kt (Emphasized entries reference same scale)\n\n\tDisplayLargeEmphasizedFont: font,\n\tDisplayLargeEmphasizedWeight: 800,\n\tDisplayLargeEmphasizedSize: \"3.571rem\",\n\tDisplayLargeEmphasizedLineHeight: \"4rem\",\n\tDisplayLargeEmphasizedTracking: \"-0.25px\",\n\n\tDisplayMediumEmphasizedFont: font,\n\tDisplayMediumEmphasizedWeight: 800,\n\tDisplayMediumEmphasizedSize: \"2.857rem\",\n\tDisplayMediumEmphasizedLineHeight: \"3.286rem\",\n\tDisplayMediumEmphasizedTracking: \"0px\",\n\n\tDisplaySmallEmphasizedFont: font,\n\tDisplaySmallEmphasizedWeight: 800,\n\tDisplaySmallEmphasizedSize: \"2.571rem\",\n\tDisplaySmallEmphasizedLineHeight: \"3.143rem\",\n\tDisplaySmallEmphasizedTracking: \"0px\",\n\n\tHeadlineLargeEmphasizedFont: font,\n\tHeadlineLargeEmphasizedWeight: 800,\n\tHeadlineLargeEmphasizedSize: \"2.286rem\",\n\tHeadlineLargeEmphasizedLineHeight: \"2.857rem\",\n\tHeadlineLargeEmphasizedTracking: \"0px\",\n\n\tHeadlineMediumEmphasizedFont: font,\n\tHeadlineMediumEmphasizedWeight: 800,\n\tHeadlineMediumEmphasizedSize: \"2rem\",\n\tHeadlineMediumEmphasizedLineHeight: \"2.571rem\",\n\tHeadlineMediumEmphasizedTracking: \"0px\",\n\n\tHeadlineSmallEmphasizedFont: font,\n\tHeadlineSmallEmphasizedWeight: 800,\n\tHeadlineSmallEmphasizedSize: \"1.714rem\",\n\tHeadlineSmallEmphasizedLineHeight: \"2.286rem\",\n\tHeadlineSmallEmphasizedTracking: \"0px\",\n\n\tTitleLargeEmphasizedFont: font,\n\tTitleLargeEmphasizedWeight: 700,\n\tTitleLargeEmphasizedSize: \"1.571rem\",\n\tTitleLargeEmphasizedLineHeight: \"2rem\",\n\tTitleLargeEmphasizedTracking: \"0px\",\n\n\tTitleMediumEmphasizedFont: font,\n\tTitleMediumEmphasizedWeight: 700,\n\tTitleMediumEmphasizedSize: \"1.143rem\",\n\tTitleMediumEmphasizedLineHeight: \"1.714rem\",\n\tTitleMediumEmphasizedTracking: \"0.15px\",\n\n\tTitleSmallEmphasizedFont: font,\n\tTitleSmallEmphasizedWeight: 700,\n\tTitleSmallEmphasizedSize: \"1rem\",\n\tTitleSmallEmphasizedLineHeight: \"1.429rem\",\n\tTitleSmallEmphasizedTracking: \"0.1px\",\n\n\tBodyLargeEmphasizedFont: font,\n\tBodyLargeEmphasizedWeight: 700,\n\tBodyLargeEmphasizedSize: \"1.143rem\",\n\tBodyLargeEmphasizedLineHeight: \"1.714rem\",\n\tBodyLargeEmphasizedTracking: \"0.5px\",\n\n\tBodyMediumEmphasizedFont: font,\n\tBodyMediumEmphasizedWeight: 700,\n\tBodyMediumEmphasizedSize: \"1rem\",\n\tBodyMediumEmphasizedLineHeight: \"1.429rem\",\n\tBodyMediumEmphasizedTracking: \"0.25px\",\n\n\tBodySmallEmphasizedFont: font,\n\tBodySmallEmphasizedWeight: 700,\n\tBodySmallEmphasizedSize: \"0.857rem\",\n\tBodySmallEmphasizedLineHeight: \"1.143rem\",\n\tBodySmallEmphasizedTracking: \"0.4px\",\n\n\tLabelLargeEmphasizedFont: font,\n\tLabelLargeEmphasizedWeight: 800,\n\tLabelLargeEmphasizedSize: \"1rem\",\n\tLabelLargeEmphasizedLineHeight: \"1.429rem\",\n\tLabelLargeEmphasizedTracking: \"0.1px\",\n\n\tLabelMediumEmphasizedFont: font,\n\tLabelMediumEmphasizedWeight: 800,\n\tLabelMediumEmphasizedSize: \"0.857rem\",\n\tLabelMediumEmphasizedLineHeight: \"1.143rem\",\n\tLabelMediumEmphasizedTracking: \"0.5px\",\n\n\tLabelSmallEmphasizedFont: font,\n\tLabelSmallEmphasizedWeight: 800,\n\tLabelSmallEmphasizedSize: \"0.786rem\",\n\tLabelSmallEmphasizedLineHeight: \"1.143rem\",\n\tLabelSmallEmphasizedTracking: \"0.5px\",\n} as const;\n\nexport type TypeScaleTokensType = typeof TypeScaleTokens;\n","/**\n * TypographyKeyTokens - MD3 Expressive Typography Key Tokens Enum\n *\n * Port of androidx.compose.material3.tokens.TypographyKeyTokens (Kotlin enum class).\n * Used to reference a specific TextStyle via Typography.fromToken().\n *\n * Contains 30 keys: 15 baseline + 15 emphasized (MD3 Expressive).\n */\nexport enum TypographyKeyTokens {\n\t// ─── Baseline (15) ──────────────────────────────────────────────────────\n\tBodyLarge = \"BodyLarge\",\n\tBodyMedium = \"BodyMedium\",\n\tBodySmall = \"BodySmall\",\n\tDisplayLarge = \"DisplayLarge\",\n\tDisplayMedium = \"DisplayMedium\",\n\tDisplaySmall = \"DisplaySmall\",\n\tHeadlineLarge = \"HeadlineLarge\",\n\tHeadlineMedium = \"HeadlineMedium\",\n\tHeadlineSmall = \"HeadlineSmall\",\n\tLabelLarge = \"LabelLarge\",\n\tLabelMedium = \"LabelMedium\",\n\tLabelSmall = \"LabelSmall\",\n\tTitleLarge = \"TitleLarge\",\n\tTitleMedium = \"TitleMedium\",\n\tTitleSmall = \"TitleSmall\",\n\n\t// ─── Emphasized (15) - MD3 Expressive ───────────────────────────────────\n\tBodyLargeEmphasized = \"BodyLargeEmphasized\",\n\tBodyMediumEmphasized = \"BodyMediumEmphasized\",\n\tBodySmallEmphasized = \"BodySmallEmphasized\",\n\tDisplayLargeEmphasized = \"DisplayLargeEmphasized\",\n\tDisplayMediumEmphasized = \"DisplayMediumEmphasized\",\n\tDisplaySmallEmphasized = \"DisplaySmallEmphasized\",\n\tHeadlineLargeEmphasized = \"HeadlineLargeEmphasized\",\n\tHeadlineMediumEmphasized = \"HeadlineMediumEmphasized\",\n\tHeadlineSmallEmphasized = \"HeadlineSmallEmphasized\",\n\tLabelLargeEmphasized = \"LabelLargeEmphasized\",\n\tLabelMediumEmphasized = \"LabelMediumEmphasized\",\n\tLabelSmallEmphasized = \"LabelSmallEmphasized\",\n\tTitleLargeEmphasized = \"TitleLargeEmphasized\",\n\tTitleMediumEmphasized = \"TitleMediumEmphasized\",\n\tTitleSmallEmphasized = \"TitleSmallEmphasized\",\n}\n","/**\n * @file typography-tokens.ts\n * @description MD3 Expressive Typography Token Definitions.\n *\n * Port of `androidx.compose.material3.tokens.TypographyTokens` (Kotlin class).\n *\n * ### Memory Optimization\n * All 30 `TextStyle` properties are implemented as **lazy getters** — they are\n * computed on first access and cached, rather than being computed eagerly at\n * construction time. This reduces the instantiation cost of `TypographyTokens`.\n *\n * ### Variable Font Axes\n * Supports customizable CSS `font-variation-settings` via {@link FontVariationAxes}.\n * - Default `ROND` value is `100` (maximum roundness of Google Sans Flex).\n * - Other axes remain at font defaults unless explicitly overridden.\n *\n * @example Basic usage (default tokens)\n * ```ts\n * const tokens = new TypographyTokens();\n * const style = tokens.BodyLarge; // { fontSize, fontWeight, ... }\n * ```\n *\n * @example Custom font family\n * ```ts\n * const tokens = new TypographyTokens({ fontFamily: \"'Inter', sans-serif\" });\n * ```\n *\n * @example Custom ROND axis (partial roundness)\n * ```ts\n * const tokens = new TypographyTokens({ fontVariationAxes: { ROND: 50 } });\n * ```\n */\n\nimport { TypeScaleTokens } from \"./type-scale-tokens\";\n\n// ─── Font Variation ───────────────────────────────────────────────────────────\n\n/**\n * Configurable axes for CSS `font-variation-settings`.\n *\n * Each key maps to a named variable font axis. Any axis not specified falls\n * back to the font's own default value.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-variation-settings\n *\n * @example\n * ```ts\n * const axes: FontVariationAxes = { ROND: 100, wght: 600 };\n * ```\n */\nexport interface FontVariationAxes {\n\t/**\n\t * Roundness axis of Google Sans Flex Variable Font.\n\t * Range: `0` (sharp corners) – `100` (fully rounded).\n\t * @default 100\n\t */\n\tROND?: number;\n\t/**\n\t * Weight axis. Overrides `font-weight` via variation settings.\n\t * @default font default\n\t */\n\twght?: number;\n\t/**\n\t * Width axis. Controls glyph condensation/expansion.\n\t * @default font default\n\t */\n\twdth?: number;\n\t/** Any additional named variation axis supported by the font. */\n\t[axis: string]: number | undefined;\n}\n\n/**\n * Default font variation axes for MD3 Expressive.\n * Sets `ROND` to `100` for maximum roundness; all other axes use font defaults.\n */\nexport const DEFAULT_FONT_VARIATION_AXES: Readonly<FontVariationAxes> =\n\tObject.freeze({ ROND: 100 });\n\n/**\n * Serializes a {@link FontVariationAxes} map into a CSS `font-variation-settings` string.\n *\n * @example\n * ```ts\n * serializeFontVariationAxes({ ROND: 100, wght: 700 });\n * // → '\"ROND\" 100, \"wght\" 700'\n * ```\n */\nexport function serializeFontVariationAxes(axes: FontVariationAxes): string {\n\treturn Object.entries(axes)\n\t\t.filter(([, v]) => v !== undefined)\n\t\t.map(([k, v]) => `\"${k}\" ${v}`)\n\t\t.join(\", \");\n}\n\n/**\n * Pre-computed default `font-variation-settings` string.\n * Equivalent to `'\"ROND\" 100'`.\n */\nexport const MD3_EXPRESSIVE_FONT_VARIATION: string = serializeFontVariationAxes(\n\tDEFAULT_FONT_VARIATION_AXES,\n);\n\n// ─── TextStyle ────────────────────────────────────────────────────────────────\n\n/**\n * Web equivalent of Compose's `TextStyle`.\n *\n * All properties are readonly and map directly to CSS font properties.\n * The `fontVariationSettings` field carries the serialized variable-font axes.\n */\nexport interface TextStyle {\n\t/** CSS `font-family` value. */\n\treadonly fontFamily: string;\n\t/** CSS `font-weight` numeric value (e.g. `400`, `700`). */\n\treadonly fontWeight: number;\n\t/** CSS `font-size` in `rem` units. */\n\treadonly fontSize: string;\n\t/** CSS `line-height` in `rem` units. */\n\treadonly lineHeight: string;\n\t/** CSS `letter-spacing` in `px` units. */\n\treadonly letterSpacing: string;\n\t/**\n\t * CSS `font-variation-settings` string.\n\t * @example '\"ROND\" 100'\n\t * @example '\"ROND\" 50, \"wght\" 600'\n\t */\n\treadonly fontVariationSettings: string;\n}\n\n// ─── TypographyTokens Options ─────────────────────────────────────────────────\n\n/**\n * Constructor options for {@link TypographyTokens}.\n */\nexport interface TypographyTokensOptions {\n\t/**\n\t * Custom CSS `font-family` string. When provided, overrides the default\n\t * Google Sans Flex font for all token styles.\n\t *\n\t * @example \"'Roboto', sans-serif\"\n\t */\n\tfontFamily?: string;\n\t/**\n\t * Variable font axes to apply via `font-variation-settings`.\n\t * Merged on top of {@link DEFAULT_FONT_VARIATION_AXES}.\n\t * Provide only the axes you want to override.\n\t *\n\t * @example { ROND: 0 } // sharp corners\n\t */\n\tfontVariationAxes?: FontVariationAxes;\n}\n\n// ─── Internal factory ─────────────────────────────────────────────────────────\n\ntype TokenRecord = Record<string, string | number>;\n\n/**\n * Creates a frozen {@link TextStyle} from the {@link TypeScaleTokens} lookup\n * using the given token prefix (e.g. `\"BodyLarge\"`).\n *\n * @internal\n */\nfunction buildStyle(\n\tprefix: string,\n\tfontFamily: string | undefined,\n\tfontVariationSettings: string,\n): TextStyle {\n\tconst t = TypeScaleTokens as TokenRecord;\n\treturn Object.freeze({\n\t\tfontFamily: fontFamily ?? (t[`${prefix}Font`] as string),\n\t\tfontWeight: t[`${prefix}Weight`] as number,\n\t\tfontSize: t[`${prefix}Size`] as string,\n\t\tlineHeight: t[`${prefix}LineHeight`] as string,\n\t\tletterSpacing: t[`${prefix}Tracking`] as string,\n\t\tfontVariationSettings,\n\t});\n}\n\n// ─── TypographyTokens ─────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Typography Token class.\n *\n * Port of `internal class TypographyTokens(val fontFamily: FontFamily? = null)`\n * from `androidx.compose.material3.tokens.TypographyTokens`.\n *\n * Provides 30 pre-defined {@link TextStyle} properties (15 baseline + 15 emphasized),\n * each implemented as a **lazy getter** — computed once on first access, then cached.\n *\n * ### Customization\n * Pass {@link TypographyTokensOptions} to the constructor to override:\n * - `fontFamily` — swap the typeface\n * - `fontVariationAxes` — control variable font axes (e.g., `ROND`)\n *\n * @example Default\n * ```ts\n * const tokens = new TypographyTokens();\n * ```\n *\n * @example Custom font + half-rounded\n * ```ts\n * const tokens = new TypographyTokens({\n * fontFamily: \"'Inter', sans-serif\",\n * fontVariationAxes: { ROND: 50 },\n * });\n * ```\n */\nexport class TypographyTokens {\n\treadonly #fontFamily: string | undefined;\n\treadonly #fontVariationSettings: string;\n\n\tconstructor(options: TypographyTokensOptions | string = {}) {\n\t\t// Support legacy string signature: new TypographyTokens(\"'Inter', sans-serif\")\n\t\tif (typeof options === \"string\") {\n\t\t\tthis.#fontFamily = options;\n\t\t\tthis.#fontVariationSettings = MD3_EXPRESSIVE_FONT_VARIATION;\n\t\t} else {\n\t\t\tthis.#fontFamily = options.fontFamily;\n\t\t\tconst axes: FontVariationAxes = options.fontVariationAxes\n\t\t\t\t? { ...DEFAULT_FONT_VARIATION_AXES, ...options.fontVariationAxes }\n\t\t\t\t: DEFAULT_FONT_VARIATION_AXES;\n\t\t\tthis.#fontVariationSettings = serializeFontVariationAxes(axes);\n\t\t}\n\t}\n\n\t// Helper to lazily build + cache a style on first access\n\t#cache: Map<string, TextStyle> = new Map();\n\t#get(prefix: string): TextStyle {\n\t\tlet style = this.#cache.get(prefix);\n\t\tif (!style) {\n\t\t\tstyle = buildStyle(prefix, this.#fontFamily, this.#fontVariationSettings);\n\t\t\tthis.#cache.set(prefix, style);\n\t\t}\n\t\treturn style;\n\t}\n\n\t// ─── Baseline Styles (15) ──────────────────────────────────────────────────\n\t/** Display Large – `57px`, weight 400 */\n\tget DisplayLarge(): TextStyle {\n\t\treturn this.#get(\"DisplayLarge\");\n\t}\n\t/** Display Medium – `45px`, weight 400 */\n\tget DisplayMedium(): TextStyle {\n\t\treturn this.#get(\"DisplayMedium\");\n\t}\n\t/** Display Small – `36px`, weight 400 */\n\tget DisplaySmall(): TextStyle {\n\t\treturn this.#get(\"DisplaySmall\");\n\t}\n\t/** Headline Large – `32px`, weight 400 */\n\tget HeadlineLarge(): TextStyle {\n\t\treturn this.#get(\"HeadlineLarge\");\n\t}\n\t/** Headline Medium – `28px`, weight 400 */\n\tget HeadlineMedium(): TextStyle {\n\t\treturn this.#get(\"HeadlineMedium\");\n\t}\n\t/** Headline Small – `24px`, weight 400 */\n\tget HeadlineSmall(): TextStyle {\n\t\treturn this.#get(\"HeadlineSmall\");\n\t}\n\t/** Title Large – `22px`, weight 400 */\n\tget TitleLarge(): TextStyle {\n\t\treturn this.#get(\"TitleLarge\");\n\t}\n\t/** Title Medium – `16px`, weight 500 */\n\tget TitleMedium(): TextStyle {\n\t\treturn this.#get(\"TitleMedium\");\n\t}\n\t/** Title Small – `14px`, weight 500 */\n\tget TitleSmall(): TextStyle {\n\t\treturn this.#get(\"TitleSmall\");\n\t}\n\t/** Body Large – `16px`, weight 400 */\n\tget BodyLarge(): TextStyle {\n\t\treturn this.#get(\"BodyLarge\");\n\t}\n\t/** Body Medium – `14px`, weight 400 */\n\tget BodyMedium(): TextStyle {\n\t\treturn this.#get(\"BodyMedium\");\n\t}\n\t/** Body Small – `12px`, weight 400 */\n\tget BodySmall(): TextStyle {\n\t\treturn this.#get(\"BodySmall\");\n\t}\n\t/** Label Large – `14px`, weight 500 */\n\tget LabelLarge(): TextStyle {\n\t\treturn this.#get(\"LabelLarge\");\n\t}\n\t/** Label Medium – `12px`, weight 500 */\n\tget LabelMedium(): TextStyle {\n\t\treturn this.#get(\"LabelMedium\");\n\t}\n\t/** Label Small – `11px`, weight 500 */\n\tget LabelSmall(): TextStyle {\n\t\treturn this.#get(\"LabelSmall\");\n\t}\n\n\t// ─── Emphasized Styles (15) – MD3 Expressive ──────────────────────────────\n\t/** Display Large Emphasized – `57px`, weight 800 */\n\tget DisplayLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"DisplayLargeEmphasized\");\n\t}\n\t/** Display Medium Emphasized – `45px`, weight 800 */\n\tget DisplayMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"DisplayMediumEmphasized\");\n\t}\n\t/** Display Small Emphasized – `36px`, weight 800 */\n\tget DisplaySmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"DisplaySmallEmphasized\");\n\t}\n\t/** Headline Large Emphasized – `32px`, weight 800 */\n\tget HeadlineLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"HeadlineLargeEmphasized\");\n\t}\n\t/** Headline Medium Emphasized – `28px`, weight 800 */\n\tget HeadlineMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"HeadlineMediumEmphasized\");\n\t}\n\t/** Headline Small Emphasized – `24px`, weight 800 */\n\tget HeadlineSmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"HeadlineSmallEmphasized\");\n\t}\n\t/** Title Large Emphasized – `22px`, weight 700 */\n\tget TitleLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"TitleLargeEmphasized\");\n\t}\n\t/** Title Medium Emphasized – `16px`, weight 700 */\n\tget TitleMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"TitleMediumEmphasized\");\n\t}\n\t/** Title Small Emphasized – `14px`, weight 700 */\n\tget TitleSmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"TitleSmallEmphasized\");\n\t}\n\t/** Body Large Emphasized – `16px`, weight 700 */\n\tget BodyLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"BodyLargeEmphasized\");\n\t}\n\t/** Body Medium Emphasized – `14px`, weight 700 */\n\tget BodyMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"BodyMediumEmphasized\");\n\t}\n\t/** Body Small Emphasized – `12px`, weight 700 */\n\tget BodySmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"BodySmallEmphasized\");\n\t}\n\t/** Label Large Emphasized – `14px`, weight 800 */\n\tget LabelLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"LabelLargeEmphasized\");\n\t}\n\t/** Label Medium Emphasized – `12px`, weight 800 */\n\tget LabelMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"LabelMediumEmphasized\");\n\t}\n\t/** Label Small Emphasized – `11px`, weight 800 */\n\tget LabelSmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"LabelSmallEmphasized\");\n\t}\n}\n","/**\n * @file typography.tsx\n * @description MD3 Expressive Typography System for React.\n *\n * Port of `androidx.compose.material3.Typography` (Kotlin `@Immutable` class).\n *\n * Provides 30 {@link TextStyle} definitions via the React Context API, mirroring\n * the Compose `LocalTypography` / `MaterialTheme.typography` pattern.\n *\n * ### Memory & Performance Optimizations\n * - The `Typography` class delegates all property access to a `TypographyTokens`\n * instance that uses **lazy getters**, so styles are computed only on first use.\n * - `TypographyProvider` memoizes the context value via `useMemo` to prevent\n * unnecessary re-renders downstream.\n *\n * @example Wrap your application\n * ```tsx\n * <TypographyProvider>\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Consume in a component\n * ```tsx\n * const typography = useTypography();\n * <p style={typography.bodyLarge}>Hello</p>\n * ```\n *\n * @example Via token key\n * ```tsx\n * const style = typography.fromToken(TypographyKeyTokens.BodyLarge);\n * ```\n *\n * @example Custom font + half-rounded corners\n * ```tsx\n * <TypographyProvider\n * fontFamily=\"'Roboto', sans-serif\"\n * fontVariationAxes={{ ROND: 50 }}\n * >\n * <App />\n * </TypographyProvider>\n * ```\n */\n\nimport { createContext, type ReactNode, useContext, useMemo } from \"react\";\nimport { TypographyKeyTokens } from \"./typography-key-tokens\";\nimport {\n\ttype FontVariationAxes,\n\ttype TextStyle,\n\tTypographyTokens,\n} from \"./typography-tokens\";\n\n// ─── Typography Class ─────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Typography — port of Compose's `@Immutable class Typography(...)`.\n *\n * All 30 style properties are **readonly** and lazily resolved from the\n * underlying {@link TypographyTokens} instance. Use {@link Typography.copy}\n * to create a customized variant without mutating the original.\n *\n * @example Default\n * ```ts\n * const typography = new Typography();\n * const style = typography.displayLarge; // lazy — computed on first access\n * ```\n *\n * @example Custom tokens\n * ```ts\n * const typography = new Typography(\n * new TypographyTokens({ fontFamily: \"'Inter', sans-serif\", fontVariationAxes: { ROND: 0 } })\n * );\n * ```\n */\nexport class Typography {\n\treadonly #tokens: TypographyTokens;\n\n\tconstructor(tokens: TypographyTokens = defaultTokens) {\n\t\tthis.#tokens = tokens;\n\t}\n\n\t// ─── Baseline Styles ────────────────────────────────────────────────────────\n\n\t/** Display Large text style (`57px`, weight `400`). */\n\tget displayLarge(): TextStyle {\n\t\treturn this.#tokens.DisplayLarge;\n\t}\n\t/** Display Medium text style (`45px`, weight `400`). */\n\tget displayMedium(): TextStyle {\n\t\treturn this.#tokens.DisplayMedium;\n\t}\n\t/** Display Small text style (`36px`, weight `400`). */\n\tget displaySmall(): TextStyle {\n\t\treturn this.#tokens.DisplaySmall;\n\t}\n\t/** Headline Large text style (`32px`, weight `400`). */\n\tget headlineLarge(): TextStyle {\n\t\treturn this.#tokens.HeadlineLarge;\n\t}\n\t/** Headline Medium text style (`28px`, weight `400`). */\n\tget headlineMedium(): TextStyle {\n\t\treturn this.#tokens.HeadlineMedium;\n\t}\n\t/** Headline Small text style (`24px`, weight `400`). */\n\tget headlineSmall(): TextStyle {\n\t\treturn this.#tokens.HeadlineSmall;\n\t}\n\t/** Title Large text style (`22px`, weight `400`). */\n\tget titleLarge(): TextStyle {\n\t\treturn this.#tokens.TitleLarge;\n\t}\n\t/** Title Medium text style (`16px`, weight `500`). */\n\tget titleMedium(): TextStyle {\n\t\treturn this.#tokens.TitleMedium;\n\t}\n\t/** Title Small text style (`14px`, weight `500`). */\n\tget titleSmall(): TextStyle {\n\t\treturn this.#tokens.TitleSmall;\n\t}\n\t/** Body Large text style (`16px`, weight `400`). */\n\tget bodyLarge(): TextStyle {\n\t\treturn this.#tokens.BodyLarge;\n\t}\n\t/** Body Medium text style (`14px`, weight `400`). */\n\tget bodyMedium(): TextStyle {\n\t\treturn this.#tokens.BodyMedium;\n\t}\n\t/** Body Small text style (`12px`, weight `400`). */\n\tget bodySmall(): TextStyle {\n\t\treturn this.#tokens.BodySmall;\n\t}\n\t/** Label Large text style (`14px`, weight `500`). */\n\tget labelLarge(): TextStyle {\n\t\treturn this.#tokens.LabelLarge;\n\t}\n\t/** Label Medium text style (`12px`, weight `500`). */\n\tget labelMedium(): TextStyle {\n\t\treturn this.#tokens.LabelMedium;\n\t}\n\t/** Label Small text style (`11px`, weight `500`). */\n\tget labelSmall(): TextStyle {\n\t\treturn this.#tokens.LabelSmall;\n\t}\n\n\t// ─── Emphasized Styles (MD3 Expressive) ─────────────────────────────────────\n\n\t/** Display Large Emphasized text style (`57px`, weight `800`). */\n\tget displayLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.DisplayLargeEmphasized;\n\t}\n\t/** Display Medium Emphasized text style (`45px`, weight `800`). */\n\tget displayMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.DisplayMediumEmphasized;\n\t}\n\t/** Display Small Emphasized text style (`36px`, weight `800`). */\n\tget displaySmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.DisplaySmallEmphasized;\n\t}\n\t/** Headline Large Emphasized text style (`32px`, weight `800`). */\n\tget headlineLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.HeadlineLargeEmphasized;\n\t}\n\t/** Headline Medium Emphasized text style (`28px`, weight `800`). */\n\tget headlineMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.HeadlineMediumEmphasized;\n\t}\n\t/** Headline Small Emphasized text style (`24px`, weight `800`). */\n\tget headlineSmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.HeadlineSmallEmphasized;\n\t}\n\t/** Title Large Emphasized text style (`22px`, weight `700`). */\n\tget titleLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.TitleLargeEmphasized;\n\t}\n\t/** Title Medium Emphasized text style (`16px`, weight `700`). */\n\tget titleMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.TitleMediumEmphasized;\n\t}\n\t/** Title Small Emphasized text style (`14px`, weight `700`). */\n\tget titleSmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.TitleSmallEmphasized;\n\t}\n\t/** Body Large Emphasized text style (`16px`, weight `700`). */\n\tget bodyLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.BodyLargeEmphasized;\n\t}\n\t/** Body Medium Emphasized text style (`14px`, weight `700`). */\n\tget bodyMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.BodyMediumEmphasized;\n\t}\n\t/** Body Small Emphasized text style (`12px`, weight `700`). */\n\tget bodySmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.BodySmallEmphasized;\n\t}\n\t/** Label Large Emphasized text style (`14px`, weight `800`). */\n\tget labelLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.LabelLargeEmphasized;\n\t}\n\t/** Label Medium Emphasized text style (`12px`, weight `800`). */\n\tget labelMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.LabelMediumEmphasized;\n\t}\n\t/** Label Small Emphasized text style (`11px`, weight `800`). */\n\tget labelSmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.LabelSmallEmphasized;\n\t}\n\n\t// ─── Methods ─────────────────────────────────────────────────────────────────\n\n\t/**\n\t * Returns the `TextStyle` corresponding to the given {@link TypographyKeyTokens}.\n\t *\n\t * Port of `internal fun Typography.fromToken(value: TypographyKeyTokens): TextStyle`.\n\t *\n\t * @example\n\t * ```ts\n\t * const style = typography.fromToken(TypographyKeyTokens.BodyLarge);\n\t * ```\n\t */\n\tfromToken(value: TypographyKeyTokens): TextStyle {\n\t\treturn this[TOKEN_TO_PROP[value]];\n\t}\n\n\t/**\n\t * Creates a new `Typography` instance with the specified property overrides\n\t * merged on top of the current instance's styles.\n\t *\n\t * Port of Compose's `fun Typography.copy(...)`.\n\t *\n\t * Unlike a shallow `Object.assign`, this method preserves the lazy-getter\n\t * architecture — overridden styles are stored separately and looked up first\n\t * on each property access, while non-overridden styles continue to be\n\t * resolved from the underlying {@link TypographyTokens}.\n\t *\n\t * @param overrides - Map of camelCase property names to partial `TextStyle` overrides.\n\t * @returns A new `Typography` instance. The original is never mutated.\n\t *\n\t * @example\n\t * ```ts\n\t * const custom = typography.copy({ bodyLarge: { fontSize: \"2rem\" } });\n\t * custom.bodyLarge.fontSize; // \"2rem\"\n\t * custom.bodySmall.fontSize; // original token value — untouched\n\t * ```\n\t */\n\tcopy(\n\t\toverrides: Partial<Record<TypographyStyleKey, Partial<TextStyle>>>,\n\t): Typography {\n\t\treturn new OverriddenTypography(this.#tokens, this, overrides);\n\t}\n}\n\n// ─── TypographyStyleKey ───────────────────────────────────────────────────────\n\n/**\n * Union of all camelCase property names on {@link Typography} that return a\n * {@link TextStyle}. Used as the key type for `copy()` overrides and the\n * `OverriddenTypography` resolver.\n */\ntype TypographyStyleKey = {\n\t[K in keyof Typography]: Typography[K] extends TextStyle ? K : never;\n}[keyof Typography];\n\n// ─── OverriddenTypography ─────────────────────────────────────────────────────\n\n/**\n * Internal subclass used by {@link Typography.copy}.\n *\n * Holds a map of explicit style overrides. Each getter checks for an override\n * first; if none exists, it falls through to the parent {@link Typography}.\n *\n * @internal\n */\nclass OverriddenTypography extends Typography {\n\treadonly #base: Typography;\n\treadonly #overrides: Partial<Record<TypographyStyleKey, Partial<TextStyle>>>;\n\n\tconstructor(\n\t\ttokens: TypographyTokens,\n\t\tbase: Typography,\n\t\toverrides: Partial<Record<TypographyStyleKey, Partial<TextStyle>>>,\n\t) {\n\t\tsuper(tokens);\n\t\tthis.#base = base;\n\t\tthis.#overrides = overrides;\n\t}\n\n\t#resolve(key: TypographyStyleKey): TextStyle {\n\t\tconst override = this.#overrides[key];\n\t\tconst base = (this.#base as unknown as Record<string, TextStyle>)[key];\n\t\treturn override ? { ...base, ...override } : base;\n\t}\n\n\t// ─── Baseline\n\toverride get displayLarge() {\n\t\treturn this.#resolve(\"displayLarge\");\n\t}\n\toverride get displayMedium() {\n\t\treturn this.#resolve(\"displayMedium\");\n\t}\n\toverride get displaySmall() {\n\t\treturn this.#resolve(\"displaySmall\");\n\t}\n\toverride get headlineLarge() {\n\t\treturn this.#resolve(\"headlineLarge\");\n\t}\n\toverride get headlineMedium() {\n\t\treturn this.#resolve(\"headlineMedium\");\n\t}\n\toverride get headlineSmall() {\n\t\treturn this.#resolve(\"headlineSmall\");\n\t}\n\toverride get titleLarge() {\n\t\treturn this.#resolve(\"titleLarge\");\n\t}\n\toverride get titleMedium() {\n\t\treturn this.#resolve(\"titleMedium\");\n\t}\n\toverride get titleSmall() {\n\t\treturn this.#resolve(\"titleSmall\");\n\t}\n\toverride get bodyLarge() {\n\t\treturn this.#resolve(\"bodyLarge\");\n\t}\n\toverride get bodyMedium() {\n\t\treturn this.#resolve(\"bodyMedium\");\n\t}\n\toverride get bodySmall() {\n\t\treturn this.#resolve(\"bodySmall\");\n\t}\n\toverride get labelLarge() {\n\t\treturn this.#resolve(\"labelLarge\");\n\t}\n\toverride get labelMedium() {\n\t\treturn this.#resolve(\"labelMedium\");\n\t}\n\toverride get labelSmall() {\n\t\treturn this.#resolve(\"labelSmall\");\n\t}\n\t// ─── Emphasized\n\toverride get displayLargeEmphasized() {\n\t\treturn this.#resolve(\"displayLargeEmphasized\");\n\t}\n\toverride get displayMediumEmphasized() {\n\t\treturn this.#resolve(\"displayMediumEmphasized\");\n\t}\n\toverride get displaySmallEmphasized() {\n\t\treturn this.#resolve(\"displaySmallEmphasized\");\n\t}\n\toverride get headlineLargeEmphasized() {\n\t\treturn this.#resolve(\"headlineLargeEmphasized\");\n\t}\n\toverride get headlineMediumEmphasized() {\n\t\treturn this.#resolve(\"headlineMediumEmphasized\");\n\t}\n\toverride get headlineSmallEmphasized() {\n\t\treturn this.#resolve(\"headlineSmallEmphasized\");\n\t}\n\toverride get titleLargeEmphasized() {\n\t\treturn this.#resolve(\"titleLargeEmphasized\");\n\t}\n\toverride get titleMediumEmphasized() {\n\t\treturn this.#resolve(\"titleMediumEmphasized\");\n\t}\n\toverride get titleSmallEmphasized() {\n\t\treturn this.#resolve(\"titleSmallEmphasized\");\n\t}\n\toverride get bodyLargeEmphasized() {\n\t\treturn this.#resolve(\"bodyLargeEmphasized\");\n\t}\n\toverride get bodyMediumEmphasized() {\n\t\treturn this.#resolve(\"bodyMediumEmphasized\");\n\t}\n\toverride get bodySmallEmphasized() {\n\t\treturn this.#resolve(\"bodySmallEmphasized\");\n\t}\n\toverride get labelLargeEmphasized() {\n\t\treturn this.#resolve(\"labelLargeEmphasized\");\n\t}\n\toverride get labelMediumEmphasized() {\n\t\treturn this.#resolve(\"labelMediumEmphasized\");\n\t}\n\toverride get labelSmallEmphasized() {\n\t\treturn this.#resolve(\"labelSmallEmphasized\");\n\t}\n}\n\n// ─── Token → Property lookup (avoids recreating the map on every fromToken call) ──\n\ntype TypographyProp = {\n\t[K in keyof Typography]: Typography[K] extends TextStyle ? K : never;\n}[keyof Typography];\n\nconst TOKEN_TO_PROP: Record<TypographyKeyTokens, TypographyProp> = {\n\t[TypographyKeyTokens.DisplayLarge]: \"displayLarge\",\n\t[TypographyKeyTokens.DisplayMedium]: \"displayMedium\",\n\t[TypographyKeyTokens.DisplaySmall]: \"displaySmall\",\n\t[TypographyKeyTokens.HeadlineLarge]: \"headlineLarge\",\n\t[TypographyKeyTokens.HeadlineMedium]: \"headlineMedium\",\n\t[TypographyKeyTokens.HeadlineSmall]: \"headlineSmall\",\n\t[TypographyKeyTokens.TitleLarge]: \"titleLarge\",\n\t[TypographyKeyTokens.TitleMedium]: \"titleMedium\",\n\t[TypographyKeyTokens.TitleSmall]: \"titleSmall\",\n\t[TypographyKeyTokens.BodyLarge]: \"bodyLarge\",\n\t[TypographyKeyTokens.BodyMedium]: \"bodyMedium\",\n\t[TypographyKeyTokens.BodySmall]: \"bodySmall\",\n\t[TypographyKeyTokens.LabelLarge]: \"labelLarge\",\n\t[TypographyKeyTokens.LabelMedium]: \"labelMedium\",\n\t[TypographyKeyTokens.LabelSmall]: \"labelSmall\",\n\t[TypographyKeyTokens.DisplayLargeEmphasized]: \"displayLargeEmphasized\",\n\t[TypographyKeyTokens.DisplayMediumEmphasized]: \"displayMediumEmphasized\",\n\t[TypographyKeyTokens.DisplaySmallEmphasized]: \"displaySmallEmphasized\",\n\t[TypographyKeyTokens.HeadlineLargeEmphasized]: \"headlineLargeEmphasized\",\n\t[TypographyKeyTokens.HeadlineMediumEmphasized]: \"headlineMediumEmphasized\",\n\t[TypographyKeyTokens.HeadlineSmallEmphasized]: \"headlineSmallEmphasized\",\n\t[TypographyKeyTokens.TitleLargeEmphasized]: \"titleLargeEmphasized\",\n\t[TypographyKeyTokens.TitleMediumEmphasized]: \"titleMediumEmphasized\",\n\t[TypographyKeyTokens.TitleSmallEmphasized]: \"titleSmallEmphasized\",\n\t[TypographyKeyTokens.BodyLargeEmphasized]: \"bodyLargeEmphasized\",\n\t[TypographyKeyTokens.BodyMediumEmphasized]: \"bodyMediumEmphasized\",\n\t[TypographyKeyTokens.BodySmallEmphasized]: \"bodySmallEmphasized\",\n\t[TypographyKeyTokens.LabelLargeEmphasized]: \"labelLargeEmphasized\",\n\t[TypographyKeyTokens.LabelMediumEmphasized]: \"labelMediumEmphasized\",\n\t[TypographyKeyTokens.LabelSmallEmphasized]: \"labelSmallEmphasized\",\n};\n\n// ─── React Context API ────────────────────────────────────────────────────────\n\n/** Singleton default token instance (shared; never mutated). */\nconst defaultTokens = new TypographyTokens();\n\n/**\n * Default {@link Typography} instance used as the context fallback when no\n * `TypographyProvider` is present in the tree.\n *\n * Mirrors `private val LocalTypography = staticCompositionLocalOf { Typography() }`.\n */\nconst defaultTypography = new Typography();\n\n/**\n * React context that holds the current {@link Typography} instance.\n *\n * Port of `internal val LocalTypography = staticCompositionLocalOf { Typography() }`.\n *\n * @internal — Prefer {@link useTypography} and {@link TypographyProvider}.\n */\nexport const TypographyContext = createContext<Typography>(defaultTypography);\n\n/**\n * React hook to access the current {@link Typography} from the nearest\n * {@link TypographyProvider} in the tree. Falls back to the default\n * googleapis Typography when no provider is present.\n *\n * @returns The current `Typography` instance.\n *\n * @example\n * ```tsx\n * const typography = useTypography();\n * <p style={typography.bodyLarge}>Hello</p>\n * ```\n */\nexport function useTypography(): Typography {\n\treturn useContext(TypographyContext);\n}\n\n// ─── TypographyProvider ───────────────────────────────────────────────────────\n\n/**\n * Props for {@link TypographyProvider}.\n */\nexport interface TypographyProviderProps {\n\t/** The child tree that will have access to the provided typography. */\n\tchildren: ReactNode;\n\t/**\n\t * A fully custom {@link Typography} instance.\n\t * When provided, `fontFamily` and `fontVariationAxes` are ignored.\n\t */\n\ttypography?: Typography;\n\t/**\n\t * Shorthand to override the CSS `font-family` for all typography styles.\n\t * Ignored when `typography` is provided.\n\t *\n\t * @example \"'Roboto', sans-serif\"\n\t */\n\tfontFamily?: string;\n\t/**\n\t * Variable font axes to apply globally via `font-variation-settings`.\n\t * Merged on top of the defaults (`ROND: 100`). Only the axes you specify\n\t * will be overridden; unspecified axes retain font defaults.\n\t * Ignored when `typography` is provided.\n\t *\n\t * @example { ROND: 50 } // half-rounded\n\t * @example { ROND: 0 } // sharp corners\n\t */\n\tfontVariationAxes?: FontVariationAxes;\n}\n\n/**\n * Typography Provider component.\n *\n * Port of `CompositionLocalProvider(LocalTypography provides typography)`.\n * Wrap your application (or a subtree) to provide MD3 Expressive typography\n * to all descendant components that call {@link useTypography}.\n *\n * The context value is **memoized** — it is only re-computed when `typography`,\n * `fontFamily`, or `fontVariationAxes` change, preventing unnecessary re-renders.\n *\n * @example Default (Google Sans Flex, ROND = 100)\n * ```tsx\n * <TypographyProvider>\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Custom font\n * ```tsx\n * <TypographyProvider fontFamily=\"'Inter', sans-serif\">\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Partially rounded corners (ROND = 50)\n * ```tsx\n * <TypographyProvider fontVariationAxes={{ ROND: 50 }}>\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Fully sharp (ROND = 0) with a custom font\n * ```tsx\n * <TypographyProvider\n * fontFamily=\"'Outfit', sans-serif\"\n * fontVariationAxes={{ ROND: 0 }}\n * >\n * <App />\n * </TypographyProvider>\n * ```\n */\nexport function TypographyProvider({\n\tchildren,\n\ttypography,\n\tfontFamily,\n\tfontVariationAxes,\n}: TypographyProviderProps) {\n\tconst value = useMemo<Typography>(() => {\n\t\tif (typography) return typography;\n\t\tif (fontFamily || fontVariationAxes) {\n\t\t\treturn new Typography(\n\t\t\t\tnew TypographyTokens({ fontFamily, fontVariationAxes }),\n\t\t\t);\n\t\t}\n\t\treturn defaultTypography;\n\t}, [typography, fontFamily, fontVariationAxes]);\n\n\treturn (\n\t\t<TypographyContext.Provider value={value}>\n\t\t\t{children}\n\t\t</TypographyContext.Provider>\n\t);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/utils.ts","../src/ui/ripple.tsx","../src/ui/card.tsx","../src/ui/loading-indicator.tsx","../src/ui/progress-indicator/utils.ts","../src/ui/progress-indicator/circular.tsx","../src/ui/progress-indicator/hooks.ts","../src/ui/progress-indicator/linear-flat.tsx","../src/ui/progress-indicator/linear-wavy.tsx","../src/ui/progress-indicator/linear.tsx","../src/ui/progress-indicator/index.tsx","../src/ui/shared/motion-tokens.ts","../src/ui/shared/constants.ts","../src/ui/shared/touch-target.tsx","../src/ui/buttons/button/button-tokens.ts","../src/ui/buttons/button/button.tsx","../src/ui/icon.tsx","../src/ui/scroll-area.tsx","../src/ui/code-block.tsx","../src/ui/divider.tsx","../src/ui/lists/list-context.ts","../src/ui/lists/list-tokens.ts","../src/ui/lists/list.tsx","../src/ui/lists/list-divider.tsx","../src/ui/checkbox.tsx","../src/ui/radio-button.tsx","../src/ui/switch/switch.tokens.ts","../src/ui/switch/switch.tsx","../src/ui/lists/list-utils.ts","../src/ui/lists/list-item.tsx","../src/ui/text.tsx","../src/ui/toc.tsx","../src/ui/typography/type-scale-tokens.ts","../src/ui/typography/typography-key-tokens.ts","../src/ui/typography/typography-tokens.ts","../src/ui/typography/typography.tsx"],"names":["React","RippleItem","React2","jsx","m","React3","IndeterminateSvg","jsxs","Fragment","DeterminateSvg","React4","LazyMotion","domMax","React5","React6","FlatLinearTrack","React7","WavyLinearTrack","React8","React9","animate","React10","_a","_b","useMotionValue","AnimatePresence","Slot","React11","React12","useState","useEffect","useCallback","React13","useReducedMotion","React14","cornerRadius","React15","React16","React17","CheckboxVisual","useMergedRef","MD3_FAST_EFFECTS","RadioVisual","React19","SwitchVisual","React20","cva","React21","useMemo","TypographyKeyTokens","createContext","useContext"],"mappings":"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","file":"layout.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Ripple\n//\n// - Origin: pointer-down coordinates (x, y) relative to container\n// - Shape: perfectly round circle, expands from origin to diagonally fill btn\n// - Color: currentColor at 12% opacity (matches MD3 state layer spec)\n// - A11y: disabled when `prefers-reduced-motion` is active (configurable)\n// - Clipping: caller wraps in overflow-hidden; border-radius handled on parent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Represents a single ripple wave instance with position and size metadata.\n *\n * @example\n * ```tsx\n * const ripple: RippleOrigin = { id: Date.now(), x: 50, y: 30, size: 200 };\n * ```\n */\nexport interface RippleOrigin {\n\t/** Unique identifier used as React key and for removal. */\n\tid: number;\n\t/** X coordinate of the pointer event relative to the container's left edge (px). */\n\tx: number;\n\t/** Y coordinate of the pointer event relative to the container's top edge (px). */\n\ty: number;\n\t/**\n\t * Diameter of the ripple circle (px).\n\t * Typically `Math.hypot(width, height) * 2` to ensure it fills the container.\n\t */\n\tsize: number;\n}\n\n/** @internal Props for a single animated ripple element. */\ninterface RippleItemProps {\n\tripple: RippleOrigin;\n\tonDone: (id: number) => void;\n}\n\n/** @internal Memoized single ripple wave — minimises re-renders. */\nconst RippleItem = React.memo(function RippleItem({\n\tripple,\n\tonDone,\n}: RippleItemProps) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={ripple.id}\n\t\t\taria-hidden=\"true\"\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: ripple.x - ripple.size / 2,\n\t\t\t\ttop: ripple.y - ripple.size / 2,\n\t\t\t\twidth: ripple.size,\n\t\t\t\theight: ripple.size,\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tbackgroundColor: \"currentColor\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\ttransformOrigin: \"center\",\n\t\t\t}}\n\t\t\tinitial={{ scale: 0, opacity: 0.12 }}\n\t\t\tanimate={{ scale: 1, opacity: 0 }}\n\t\t\texit={{ opacity: 0 }}\n\t\t\ttransition={{\n\t\t\t\tscale: { duration: 0.5, ease: [0.2, 0, 0, 1] },\n\t\t\t\topacity: { duration: 0.4, ease: \"easeOut\", delay: 0.1 },\n\t\t\t}}\n\t\t\tonAnimationComplete={() => onDone(ripple.id)}\n\t\t/>\n\t);\n});\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Ripple Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the `Ripple` presentation component.\n */\nexport interface RippleProps {\n\t/** Active ripple instances to render. Managed by the parent via `useRipple`. */\n\tripples: RippleOrigin[];\n\t/** Called when a ripple's exit animation completes — remove it from state. */\n\tonRippleDone: (id: number) => void;\n\t/**\n\t * Completely disables the ripple effect.\n\t * Use this when the parent element is disabled or interaction is not desired.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * When `true`, the ripple respects the user's OS-level\n\t * `prefers-reduced-motion` accessibility setting and renders nothing if active.\n\t *\n\t * Set to `false` to always show ripples regardless of system preference.\n\t * @default true\n\t */\n\trespectSystemMotion?: boolean;\n}\n\n/**\n * MD3 Expressive Ripple — animated touch-feedback wave layer.\n *\n * Renders absolutely-positioned ripple circles inside an `overflow-hidden`\n * container. Must be placed as a direct child of the interactive element.\n *\n * @remarks\n * - The parent element **must** have `overflow: hidden` and `position: relative`\n * (or equivalent) for clipping to work correctly.\n * - Set `disabled` to `true` on parent's disabled state to avoid stale ripples.\n * - The ripple color is `currentColor` at 12% opacity — matching MD3 state layer spec.\n *\n * @example\n * ```tsx\n * const { ripples, onPointerDown, removeRipple } = useRippleState();\n *\n * <button onPointerDown={onPointerDown} className=\"relative overflow-hidden\">\n * <Ripple ripples={ripples} onRippleDone={removeRipple} />\n * Click me\n * </button>\n * ```\n *\n * @see {@link useRippleState} for the state management hook\n * @see https://m3.material.io/foundations/interaction/states/overview\n */\nexport function Ripple({\n\tripples,\n\tonRippleDone,\n\tdisabled = false,\n\trespectSystemMotion = true,\n}: RippleProps) {\n\tconst prefersReduced = useReducedMotion();\n\n\t// Disabled prop: explicitly turned off by consumer\n\tif (disabled) return null;\n\n\t// Respect system prefers-reduced-motion when opted-in\n\tif (respectSystemMotion && prefersReduced) return null;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{ripples.map((r) => (\n\t\t\t\t<RippleItem key={r.id} ripple={r} onDone={onRippleDone} />\n\t\t\t))}\n\t\t</AnimatePresence>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// useRippleState Hook\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Options for configuring `useRippleState` behaviour.\n */\nexport interface UseRippleStateOptions {\n\t/**\n\t * When `true`, the ripple is suppressed — `onPointerDown` becomes a no-op.\n\t * Use this to sync the ripple with the parent element's `disabled` state.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n}\n\n/**\n * `useRippleState` — state manager for MD3 Expressive ripple waves.\n *\n * Tracks active ripple instances and provides pointer event handlers.\n * Pair with the `<Ripple>` component for rendering.\n *\n * @remarks\n * This hook only manages ripple *state* (coordinates, size, lifecycle).\n * The actual animation is handled by `<Ripple>` via Framer Motion.\n * Respecting `prefers-reduced-motion` is handled by `<Ripple>` itself.\n *\n * @param options - Configuration options. See {@link UseRippleStateOptions}.\n * @returns `{ ripples, onPointerDown, removeRipple }` — bind to the interactive element.\n *\n * @example\n * ```tsx\n * function MyButton({ disabled, children }) {\n * const { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n *\n * return (\n * <button\n * disabled={disabled}\n * onPointerDown={onPointerDown}\n * className=\"relative overflow-hidden\"\n * >\n * <Ripple ripples={ripples} onRippleDone={removeRipple} disabled={disabled} />\n * {children}\n * </button>\n * );\n * }\n * ```\n *\n * @see {@link Ripple} for the rendering component\n */\nexport function useRippleState(options: UseRippleStateOptions = {}) {\n\tconst { disabled = false } = options;\n\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\n\tconst onPointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\tconst x = e.clientX - rect.left;\n\t\t\tconst y = e.clientY - rect.top;\n\t\t\tconst rippleSize = Math.max(\n\t\t\t\tMath.hypot(rect.width, rect.height) * 2.5,\n\t\t\t\t320,\n\t\t\t);\n\t\t\tsetRipples((prev) => [\n\t\t\t\t...prev,\n\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t]);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst removeRipple = React.useCallback((id: number) => {\n\t\tsetRipples((prev) => prev.filter((r) => r.id !== id));\n\t}, []);\n\n\treturn { ripples, onPointerDown, removeRipple };\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Legacy alias — preserved for backward-compatibility\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * @deprecated Use `useRippleState` instead. This alias will be removed in a future version.\n * @see {@link useRippleState}\n */\nexport const useRipple = useRippleState;\n","/**\n * @file card.tsx\n *\n * Card component for MD3 Expressive.\n *\n * Divided into two functional aspects (structure modeled after Android Card.kt):\n * - **Static** → Renders a plain `<div>`, purely informational with no interaction.\n * - **Interactive** → Powered by `<motion.button>` or `<motion.a>`, featuring Ripple effect and elevation animation on hover/press.\n *\n * Elevation levels (translated from ElevatedCardTokens / FilledCardTokens / OutlinedCardTokens / Elevation.kt):\n * - Level 0 = \"none\" (Flat)\n * - Level 1 = box-shadow ~1dp (Slight elevation)\n * - Level 2 = box-shadow ~2dp (Higher elevation)\n *\n * @example\n * ```tsx\n * // Static card\n * <Card variant=\"elevated\">\n * <div className=\"p-4\">Card content</div>\n * </Card>\n *\n * // Interactive button card\n * <Card variant=\"filled\" onClick={() => alert('Clicked!')}>\n * <div className=\"p-4\">Clickable card</div>\n * </Card>\n *\n * // Interactive link card\n * <Card variant=\"outlined\" href=\"/home\">\n * <div className=\"p-4\">Link card</div>\n * </Card>\n * ```\n *\n * @see https://m3.material.io/components/cards/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Ripple, useRippleState } from \"./ripple\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Elevation Shadows (from packages/tailwind/src/index.ts)\n// ─────────────────────────────────────────────────────────────────────────────\nconst SHADOW = {\n\tlevel0: \"none\",\n\tlevel1: \"0px 1px 2px 0px rgba(0,0,0,.3), 0px 1px 3px 1px rgba(0,0,0,.15)\",\n\tlevel2: \"0px 1px 2px 0px rgba(0,0,0,.3), 0px 2px 6px 2px rgba(0,0,0,.15)\",\n} as const;\n\n// Maps each variant to its elevation levels per interaction state.\n// Source: ElevatedCardTokens.kt, FilledCardTokens.kt, OutlinedCardTokens.kt\nconst VARIANT_ELEVATION = {\n\televated: {\n\t\trest: SHADOW.level1,\n\t\thover: SHADOW.level2,\n\t\tpressed: SHADOW.level1,\n\t\tdisabled: SHADOW.level1, // ElevatedCardTokens.DisabledContainerElevation = Level1\n\t},\n\tfilled: {\n\t\trest: SHADOW.level0,\n\t\thover: SHADOW.level1,\n\t\tpressed: SHADOW.level0,\n\t\tdisabled: SHADOW.level0,\n\t},\n\toutlined: {\n\t\trest: SHADOW.level0,\n\t\thover: SHADOW.level1,\n\t\tpressed: SHADOW.level0,\n\t\tdisabled: SHADOW.level0,\n\t},\n} as const;\n\ntype CardVariant = keyof typeof VARIANT_ELEVATION;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CVA – Variant base classes (token-aligned with MD3)\n// ─────────────────────────────────────────────────────────────────────────────\nconst cardVariants = cva(\n\t\"rounded-m3-lg flex flex-col relative overflow-hidden transition-colors duration-200\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\t// ElevatedCardTokens.ContainerColor = SurfaceContainerLow\n\t\t\t\televated: \"bg-m3-surface-container-low\",\n\t\t\t\t// FilledCardTokens.ContainerColor = SurfaceContainerHighest\n\t\t\t\tfilled: \"bg-m3-surface-container-highest\",\n\t\t\t\t// OutlinedCardTokens.ContainerColor = Surface, OutlineColor = OutlineVariant\n\t\t\t\toutlined: \"bg-m3-surface border border-m3-outline-variant\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { variant: \"elevated\" },\n\t},\n);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hook: Card Elevation Animation\n// Mirrors animateElevation() from Elevation.kt.\n// Returns motion animation props for interactive boxShadow transitions.\n// ─────────────────────────────────────────────────────────────────────────────\nfunction useCardElevation(variant: CardVariant, disabled: boolean) {\n\tconst levels = VARIANT_ELEVATION[variant];\n\treturn {\n\t\tanimate: { boxShadow: disabled ? levels.disabled : levels.rest },\n\t\twhileHover: disabled ? undefined : { boxShadow: levels.hover },\n\t\twhileTap: disabled ? undefined : { boxShadow: levels.pressed },\n\t\twhileFocus: disabled ? undefined : { boxShadow: levels.hover },\n\t\ttransition: {\n\t\t\tboxShadow: {\n\t\t\t\t// Incoming: 120ms (from Elevation.kt DefaultIncomingSpec)\n\t\t\t\tduration: 0.12,\n\t\t\t\tease: [0.4, 0, 0.2, 1] as [number, number, number, number],\n\t\t\t},\n\t\t},\n\t};\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// Use HTMLMotionProps<\"button\"> as the base to avoid onDrag / event handler\n// conflicts between native React HTMLAttributes and Motion's extended prop types.\n// ─────────────────────────────────────────────────────────────────────────────\ntype MotionDivProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\nexport interface CardProps\n\textends MotionDivProps,\n\t\tVariantProps<typeof cardVariants> {\n\t/** Disables interaction and reduces opacity (MD3 disabled state). */\n\tdisabled?: boolean;\n\t/**\n\t * Forces card to be interactive even without `onClick`.\n\t * Useful when card contains child interactive elements.\n\t */\n\tinteractive?: boolean;\n\t/**\n\t * If provided, renders card as `<a>` element. Automatically enables interactive mode.\n\t * Prefer `href` over `onClick` for page navigation.\n\t */\n\thref?: string;\n\t/** Target for `<a>` element (effective only when `href` is provided). */\n\ttarget?: React.AnchorHTMLAttributes<HTMLAnchorElement>[\"target\"];\n\t/** rel for `<a>` element (automatically adds `noreferrer` when `target=\"_blank\"`). */\n\trel?: string;\n\tchildren?: React.ReactNode;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\nconst CardImpl = React.forwardRef<HTMLElement, CardProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant = \"elevated\",\n\t\t\tdisabled = false,\n\t\t\tinteractive = false,\n\t\t\thref,\n\t\t\ttarget,\n\t\t\trel: relProp,\n\t\t\tonClick,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst safeVariant = variant as CardVariant;\n\t\tconst isInteractive = !!onClick || !!href || interactive || asChild;\n\t\tconst elevationProps = useCardElevation(safeVariant, disabled);\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState();\n\n\t\tconst baseClass = cn(\n\t\t\tcardVariants({ variant }),\n\t\t\t// Disabled state:\n\t\t\t// - pointer-events-none → disable interactions completely\n\t\t\t// - opacity-[0.38] → MD3 DisabledContainerOpacity\n\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\tclassName,\n\t\t);\n\n\t\t// MD3 State Layer (Hover: 8%, Focus: 10%, Pressed: 10%)\n\t\t// Applied to interactive elements via absolute inset ::before pseudo-element\n\t\tconst interactiveClass = cn(\n\t\t\t// Remove default outline, use MD3 state overlay & elevation for focus\n\t\t\t\"focus-visible:outline-none focus:outline-none group\",\n\t\t\t// Base pseudo-element overlay layer\n\t\t\t\"before:absolute before:inset-0 before:pointer-events-none before:bg-m3-on-surface before:opacity-0 before:transition-opacity before:duration-200\",\n\t\t\t// Interactive state opacities\n\t\t\t\"hover:before:opacity-[0.08] focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\",\n\t\t\t// Outlined interactive card: change border color to m3-outline on focus/press/hover\n\t\t\tvariant === \"outlined\" &&\n\t\t\t\t\"hover:border-m3-outline focus-visible:border-m3-outline active:border-m3-outline\",\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\t\t\tconst innerContent = (\n\t\t\t\t<>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t{child.props.children}\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref as React.Ref<HTMLElement>}\n\t\t\t\t\t\tclassName={cn(baseClass, interactiveClass)}\n\t\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t{...(props as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\t// ── Static Card – no interaction ─────────────────────────────────\n\t\tif (!isInteractive) {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tref={ref as React.Ref<HTMLDivElement>}\n\t\t\t\t\tclassName={baseClass}\n\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// ── Safe rel: automatically add \"noreferrer\" when target=\"_blank\" ────────────\n\t\tconst safeRel = href\n\t\t\t? (relProp ?? (target === \"_blank\" ? \"noreferrer\" : undefined))\n\t\t\t: undefined;\n\n\t\t// ── Link Card ────────────────────────────────────────────────────────────\n\t\tif (href) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.a\n\t\t\t\t\t\tref={ref as React.Ref<HTMLAnchorElement>}\n\t\t\t\t\t\thref={disabled ? undefined : href}\n\t\t\t\t\t\ttarget={target}\n\t\t\t\t\t\trel={safeRel}\n\t\t\t\t\t\tclassName={cn(baseClass, interactiveClass)}\n\t\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t{...elevationProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</m.a>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\t// ── Interactive Button Card ──────────────────────────────────────────────\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref as React.Ref<HTMLButtonElement>}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tclassName={cn(baseClass, interactiveClass)}\n\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t{...elevationProps}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t{children}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\nCardImpl.displayName = \"Card\";\n\nexport const Card = React.memo(CardImpl);\n","\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Expressive Loading Indicator\n//\n// Spec references:\n// • Loading Indicator Overview (190326 PDF)\n// • Loading Indicator Specs (190326 PDF)\n// • Loading Indicator Accessibility (190326 PDF)\n// • LoadingIndicator.kt (Android reference)\n//\n// Two operational modes:\n// 1. Indeterminate — no `progress` prop → 7-shape morph + SMIL rotation loop\n// 2. Determinate — `progress` (0-1) → Circle→SoftBurst morph + counterclockwise rotation\n//\n// Responsive sizing: strictly [24dp, 240dp]. Container/indicator ratio is preserved.\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ─── Indeterminate: Shape & Rotation Keyframe Data (from official MD3 SVG) ──\nconst SHAPE_KEY_TIMES =\n\t\"0; 0.14; 0.14; 0.29; 0.29; 0.43; 0.43; 0.57; 0.57; 0.71; 0.71; 0.86; 0.86; 1\";\n\nconst SHAPE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\n\n// 7 MD3 morphing shapes, each repeated twice for a smooth hold-and-morph\nconst SHAPE_VALUES = [\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\",\n\t\"M20.3 8.6 21.1 8 22 7.6 23 7.3 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.2 15.5 37.6 16.5 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8 17.6 9.8 18.6 9.6 19.5 9.2Z\",\n\t\"M18.6 9.6 19.5 9.2 20.3 8.6 21.1 8 22 7.6 23 7.3 24 7.2 25 7.3 25.9 7.5 26.8 8 27.6 8.6 28.4 9.1 29.3 9.6 30.3 9.8 31.3 9.9 32.3 10 33.3 10.2 34.2 10.6 35 11.2 35.7 11.9 36.3 12.7 36.7 13.6 36.9 14.6 37.2 15.5 37.6 16.4 38.2 17.3 38.9 18 39.6 18.7 40.2 19.5 40.6 20.4 40.9 21.3 41 22.3 40.9 23.3 40.6 24.3 40.2 25.2 39.8 26.1 39.5 27 39.4 28 39.5 29 39.6 30 39.5 31 39.3 32 38.9 32.9 38.3 33.7 37.6 34.4 36.8 35 35.9 35.4 35 35.8 34.1 36.3 33.4 37 32.9 37.9 32.3 38.7 31.6 39.4 30.8 40 29.9 40.4 28.9 40.7 27.9 40.8 27 40.7 26 40.4 25 40.1 24 40 23 40.1 22.1 40.4 21.1 40.7 20.1 40.8 19.1 40.7 18.2 40.5 17.3 40 16.4 39.5 15.7 38.8 15.2 37.9 14.6 37.1 13.9 36.4 13.1 35.8 12.2 35.4 11.3 35 10.5 34.4 9.7 33.8 9.1 32.9 8.7 32 8.5 31.1 8.4 30.1 8.5 29.1 8.6 28.1 8.5 27.1 8.3 26.1 7.8 25.2 7.4 24.3 7.1 23.4 7 22.4 7.1 21.4 7.3 20.4 7.8 19.5 8.3 18.7 9.1 18 9.8 17.3 10.4 16.5 10.8 15.6 11 14.6 11.3 13.7 11.7 12.8 12.2 11.9 12.9 11.2 13.8 10.7 14.7 10.2 15.6 10 16.6 9.9 17.6 9.8Z\",\n\t\"M18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.2 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 33.7 13.1 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.5 30.5 39.5 30 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7.1 21.7 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8 15.4 12.3 16.2 11.7 17 11.1 17.8 10.5Z\",\n\t\"M15.4 12.3 16.2 11.7 17 11.1 17.8 10.5 18.6 9.9 19.5 9.4 20.3 8.8 21.1 8.3 22 7.8 23 7.6 23.9 7.5 24.9 7.6 25.9 7.8 26.8 8.2 27.6 8.7 28.5 9.3 29.3 9.9 30.1 10.5 30.9 11 31.7 11.6 32.5 12.2 33.3 12.8 34.1 13.3 34.9 13.9 35.7 14.5 36.6 15 37.4 15.6 38.2 16.2 39 16.8 39.7 17.5 40.2 18.3 40.7 19.2 40.9 20.1 41 21.1 40.9 22.1 40.7 23.1 40.3 24 40 24.9 39.7 25.9 39.4 26.8 39 27.8 38.7 28.7 38.4 29.6 38.1 30.6 37.8 31.5 37.5 32.5 37.2 33.4 36.9 34.4 36.6 35.3 36.2 36.2 35.7 37.1 35 37.8 34.3 38.4 33.4 38.9 32.5 39.3 31.5 39.4 30.5 39.5 29.5 39.5 28.5 39.5 27.5 39.5 26.5 39.5 25.5 39.4 24.5 39.4 23.6 39.4 22.6 39.4 21.6 39.5 20.6 39.5 19.6 39.5 18.6 39.5 17.6 39.5 16.6 39.5 15.6 39.3 14.7 39 13.8 38.5 13.1 37.9 12.4 37.2 11.9 36.3 11.5 35.4 11.2 34.5 10.9 33.5 10.6 32.6 10.3 31.6 10 30.7 9.7 29.7 9.3 28.8 9 27.9 8.7 26.9 8.4 26 8 25 7.7 24.1 7.4 23.2 7.1 22.2 7 21.2 7.1 20.2 7.3 19.3 7.7 18.4 8.3 17.5 8.9 16.8 9.7 16.2 10.5 15.6 11.4 15.1 12.2 14.5 13 14 13.8 13.4 14.6 12.8Z\",\n\t\"M17 12.8 17.7 12.1 18.5 11.5 19.3 10.9 20.1 10.5 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 25 9 26 9 27 9 27.6 9.1 28 9.1 28.9 9.3 29.9 9.6 30.9 9.9 31.8 10.3 32.6 10.8 33.5 11.3 34.3 11.9 34.6 12.2 35 12.6 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.6 18.5 38.6 18.7 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.3 38.2 26.4 37.8 27.3 37.4 28.2 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.8 32.5 33.5 32.8 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.2 37.3 27.9 37.5 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 22.5 39 21.5 39 20.5 38.9 20.4 38.9 19.5 38.8 18.6 38.6 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.4 35.8 13.3 35.8 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.6 30 9.4 29.3 9.3 29 9.1 28 9 27 9 26 9 25 9.2 24 9.4 23 9.6 22.1 9.8 21.7 10 21.1 10.4 20.2 10.9 19.4 11.4 18.5 12.1 17.8 12.7 17 13.4 16.3 14.2 15.6 14.2 15.5 14.9 14.9 15.6 14.2 16.3 13.5Z\",\n\t\"M33.5 11.3 34.3 11.9 35 12.6 35.3 12.8 35.7 13.3 36.4 14.1 36.9 14.9 37.4 15.8 37.9 16.6 38.3 17.6 38.3 17.7 38.6 18.5 38.8 19.5 38.9 20.5 39 21.5 39 22.5 38.9 23.5 38.9 23.5 38.7 24.5 38.5 25.4 38.2 26.4 37.8 27.3 37.4 28.2 36.9 28.9 36.8 29.1 36.2 29.9 35.6 30.6 34.9 31.3 34.2 32 33.5 32.8 33.1 33.2 32.8 33.5 32.1 34.2 31.4 34.9 30.7 35.6 29.9 36.2 29.1 36.8 28.7 37 28.2 37.3 27.4 37.8 26.4 38.2 25.5 38.5 24.5 38.7 23.5 38.9 23.3 38.9 22.5 39 21.5 39 20.5 38.9 19.5 38.8 18.6 38.6 17.6 38.3 17.6 38.3 16.7 37.9 15.8 37.5 14.9 37 14.1 36.4 13.3 35.8 12.7 35.2 12.6 35.1 12 34.3 11.3 33.5 10.8 32.7 10.3 31.8 9.9 30.9 9.7 30.3 9.6 29.9 9.3 29 9.1 28 9 27 9 26 9 25 9.1 24.5 9.2 24 9.4 23 9.6 22.1 10 21.1 10.4 20.2 10.9 19.4 11.1 19.1 11.5 18.5 12.1 17.7 12.7 17 13.5 16.3 14.2 15.6 14.9 14.9 14.9 14.8 15.6 14.2 16.3 13.5 17 12.8 17.7 12.1 18.5 11.5 19.3 11 19.3 10.9 20.2 10.4 21.1 10 22 9.7 23 9.4 24 9.2 24.7 9.1 25 9 26 9 27 9 28 9.1 28.9 9.3 29.9 9.6 30.4 9.7 30.9 9.9 31.8 10.3 32.6 10.8Z\",\n\t\"M33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.8 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.6 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7 27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1Z\",\n\t\"M27.7 9.4 28.5 10 29.3 10.6 30.2 10.9 31.2 11 32.2 11.1 33.2 11.1 34.2 11.2 35.1 11.4 36 11.9 36.6 12.7 36.8 13.7 36.9 14.7 36.9 15.7 37 16.7 37.1 17.7 37.3 18.6 37.9 19.4 38.5 20.2 39.2 20.9 39.8 21.7 40.5 22.4 40.9 23.3 41 24.3 40.7 25.2 40.1 26 39.4 26.8 38.8 27.5 38.1 28.3 37.5 29.1 37.1 30 37 31 37 31.9 36.9 32.9 36.8 33.9 36.7 34.9 36.2 35.8 35.5 36.4 34.5 36.8 33.6 36.9 32.6 36.9 31.6 37 30.6 37.1 29.6 37.2 28.8 37.7 28 38.4 27.3 39 26.5 39.7 25.8 40.3 24.9 40.8 23.9 41 23 40.8 22.1 40.2 21.4 39.6 20.6 38.9 19.9 38.3 19.1 37.6 18.3 37.2 17.3 37 16.3 37 15.3 36.9 14.3 36.8 13.3 36.7 12.4 36.4 11.7 35.7 11.3 34.8 11.2 33.8 11.1 32.8 11 31.8 11 30.8 10.9 29.9 10.4 29 9.8 28.2 9.1 27.5 8.5 26.7 7.8 26 7.3 25.1 7 24.2 7.1 23.2 7.6 22.3 8.2 21.6 8.9 20.8 9.5 20.1 10.2 19.3 10.7 18.5 10.9 17.5 11 16.5 11.1 15.6 11.1 14.6 11.2 13.6 11.5 12.6 12.1 11.9 13 11.4 13.9 11.2 14.9 11.1 15.9 11 16.9 11 17.9 10.9 18.8 10.6 19.6 10 20.4 9.3 21.1 8.6 21.9 8 22.6 7.4 23.6 7 24.6 7.1 25.5 7.5 26.2 8.1 27 8.7Z\",\n\t\"M27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 34.8 11.3 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.9 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.4 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35 36 35.7 35.3 36.4 34.4 37 34.1 37.2 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.6 10 30.1 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10 16.6 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 20.9 11 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11Z\",\n\t\"M36 35.7 35.3 36.4 34.4 37 33.6 37.4 32.6 37.8 31.6 37.9 30.6 38 29.7 37.9 28.7 37.7 27.8 37.3 26.8 36.9 25.9 36.6 24.9 36.4 23.9 36.4 22.9 36.4 22 36.6 21 37 20.1 37.4 19.2 37.7 18.2 37.9 17.2 38 16.2 37.9 15.3 37.7 14.3 37.4 13.4 36.9 12.6 36.3 11.9 35.6 11.3 34.9 10.8 34 10.4 33.1 10.1 32.1 10 31.1 10 30.2 10.2 29.2 10.5 28.2 10.9 27.3 11.2 26.4 11.5 25.4 11.6 24.4 11.6 23.4 11.5 22.5 11.2 21.5 10.8 20.6 10.4 19.7 10.2 18.7 10 17.7 10 16.7 10.2 15.7 10.4 14.8 10.8 13.9 11.4 13 12 12.3 12.7 11.6 13.6 11 14.4 10.6 15.4 10.2 16.4 10.1 17.4 10 18.3 10.1 19.3 10.3 20.2 10.7 21.2 11.1 22.1 11.4 23.1 11.6 24.1 11.6 25.1 11.6 26 11.4 27 11 27.9 10.6 28.8 10.3 29.8 10.1 30.8 10 31.8 10.1 32.7 10.3 33.7 10.6 34.6 11.1 35.4 11.7 36.1 12.4 36.7 13.1 37.2 14 37.6 14.9 37.9 15.9 38 16.9 38 17.8 37.8 18.8 37.5 19.8 37.1 20.7 36.8 21.6 36.5 22.6 36.4 23.6 36.4 24.6 36.5 25.5 36.8 26.5 37.2 27.4 37.6 28.3 37.8 29.3 38 30.3 38 31.3 37.8 32.3 37.6 33.2 37.2 34.1 36.6 35Z\",\n\t\"M32.1 32.1 31.4 32.8 30.7 33.5 29.9 34.1 29.1 34.7 28.3 35.3 27.6 35.8 27.5 35.8 26.6 36.4 25.8 36.8 24.9 37.3 24 37.7 23.1 38 22.1 38.3 21.2 38.6 20.2 38.8 19.2 38.9 18.2 39 17.2 39 16.6 38.9 16.3 38.9 15.3 38.7 14.3 38.4 13.4 38 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10 34.6 9.6 33.7 9.3 32.7 9.1 31.7 9.1 31.4 9 30.8 9 29.8 9.1 28.8 9.2 27.8 9.4 26.8 9.7 25.9 10 24.9 10.3 24 10.7 23.1 11.2 22.2 11.6 21.4 12.2 20.5 12.2 20.4 12.7 19.7 13.3 18.9 13.9 18.1 14.5 17.3 15.2 16.6 15.9 15.9 16.6 15.2 17.3 14.5 18.1 13.9 18.9 13.3 19.7 12.7 20.4 12.2 20.5 12.2 21.4 11.6 22.2 11.2 23.1 10.7 24 10.3 24.9 10 25.9 9.7 26.8 9.4 27.8 9.2 28.8 9.1 29.8 9 30.8 9 31.4 9.1 31.7 9.1 32.7 9.3 33.7 9.6 34.6 10 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 38 13.4 38.4 14.3 38.7 15.3 38.9 16.3 38.9 16.6 39 17.2 39 18.2 38.9 19.2 38.8 20.2 38.6 21.2 38.3 22.1 38 23.1 37.7 24 37.3 24.9 36.8 25.8 36.4 26.6 35.8 27.5 35.8 27.6 35.3 28.3 34.7 29.1 34.1 29.9 33.5 30.7 32.8 31.4Z\",\n\t\"M24.3 10.2 24.9 10 25.9 9.7 26.8 9.4 27.1 9.4 27.8 9.2 28.8 9.1 29.8 9 29.9 9 30.8 9 31.7 9.1 32.7 9.3 32.8 9.3 33.7 9.6 34.6 10 35.5 10.5 35.5 10.5 36.3 11.1 36.9 11.7 37.5 12.5 37.5 12.5 38 13.4 38.4 14.3 38.7 15.2 38.7 15.3 38.9 16.3 39 17.2 39 18.1 39 18.2 38.9 19.2 38.8 20.2 38.6 20.9 38.6 21.2 38.3 22.1 38 23.1 37.8 23.7 37.7 24 37.3 24.9 36.8 25.8 36.5 26.4 36.4 26.6 35.8 27.5 35.3 28.3 35 28.8 34.7 29.1 34.1 29.9 33.5 30.7 33.1 31.1 32.8 31.4 32.1 32.1 31.4 32.8 31.1 33.1 30.7 33.5 29.9 34.1 29.1 34.7 28.8 35 28.3 35.3 27.5 35.8 26.6 36.4 26.4 36.5 25.8 36.8 24.9 37.3 24 37.7 23.7 37.8 23.1 38 22.1 38.3 21.2 38.6 20.9 38.6 20.2 38.8 19.2 38.9 18.2 39 18.1 39 17.2 39 16.3 38.9 15.3 38.7 15.2 38.7 14.3 38.4 13.4 38 12.5 37.5 12.5 37.5 11.7 36.9 11.1 36.3 10.5 35.5 10.5 35.5 10 34.6 9.6 33.7 9.3 32.8 9.3 32.7 9.1 31.7 9 30.8 9 29.9 9 29.8 9.1 28.8 9.2 27.8 9.4 27.1 9.4 26.8 9.7 25.9 10 24.9 10.2 24.3 10.3 24 10.7 23.1 11.2 22.2 11.5 21.6 11.6 21.4 12.2 20.5 12.7 19.7 13 19.2 13.3 18.9 13.9 18.1 14.5 17.3 14.9 16.9 15.2 16.6 15.9 15.9 16.6 15.2 16.9 14.9 17.3 14.5 18.1 13.9 18.9 13.3 19.2 13 19.7 12.7 20.5 12.2 21.4 11.6 21.6 11.5 22.2 11.2 23.1 10.7 24 10.3Z\",\n\t\"M22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.3 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.4 38.9 26.2 39.6 27 40.2 27.7 40.5 28.6 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.8 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.6 9.1 21.8 8.4 21 7.8 20.3 7.5 19.4 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.2 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1 20.9 10.4 21.4 9.5 21.9 8.7Z\",\n].join(\";\");\n\nconst ROTATE_KEY_TIMES = \"0; 0.14; 0.29; 0.43; 0.57; 0.71; 0.86; 1\";\nconst ROTATE_KEY_SPLINES = [\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n\t\"0.5 0.2 0 0.8\",\n].join(\"; \");\nconst ROTATE_VALUES =\n\t\"0 24 24; 154 24 24; 309 24 24; 463 24 24; 617 24 24; 771 24 24; 926 24 24; 1080 24 24\";\n\n// ─── Determinate: Circle → SoftBurst path data (viewBox 4 4 40 40, cx=24, cy=24) ─\n// Circle: perfect circle, r≈17 → matches the contained indicator's visual weight\nconst DETERMINATE_CIRCLE =\n\t\"M24 7 C34.49 7 41 13.51 41 24 C41 34.49 34.49 41 24 41 C13.51 41 7 34.49 7 24 C7 13.51 13.51 7 24 7 Z\";\n\n// SoftBurst: shape 1 from the indeterminate sequence (same visual as the spec)\nconst DETERMINATE_SOFT_BURST =\n\t\"M20.9 10.4 21.4 9.5 21.9 8.7 22.5 7.8 23.2 7.2 24.2 7 25.1 7.4 25.7 8.1 26.2 9 26.8 9.8 27.3 10.6 28.1 11.2 29 11.3 30 11 30.9 10.6 31.8 10.3 32.8 9.9 33.7 10 34.5 10.6 34.9 11.5 34.8 12.5 34.8 13.5 34.7 14.5 34.7 15.5 35.2 16.3 36 16.8 37 17.1 37.9 17.3 38.9 17.5 39.8 17.9 40.4 18.7 40.5 19.7 40 20.5 39.4 21.3 38.7 22 38.1 22.8 37.6 23.7 37.7 24.6 38.3 25.5 38.9 26.2 39.6 27 40.2 27.7 40.5 28.7 40.3 29.6 39.5 30.3 38.6 30.6 37.6 30.8 36.7 31 35.7 31.3 35 31.9 34.6 32.8 34.7 33.8 34.8 34.8 34.9 35.8 34.8 36.8 34.3 37.6 33.4 38.1 32.4 38 31.5 37.6 30.6 37.2 29.7 36.9 28.7 36.6 27.8 36.9 27.1 37.6 26.6 38.5 26.1 39.3 25.5 40.2 24.8 40.8 23.8 41 22.9 40.6 22.3 39.9 21.8 39 21.2 38.2 20.7 37.4 19.9 36.8 19 36.7 18 37 17.1 37.4 16.2 37.7 15.2 38.1 14.3 38 13.5 37.4 13.1 36.5 13.2 35.5 13.2 34.5 13.3 33.5 13.3 32.5 12.8 31.7 12 31.2 11 31 10.1 30.7 9.1 30.5 8.2 30.1 7.6 29.3 7.5 28.3 8 27.5 8.7 26.7 9.3 26 9.9 25.2 10.4 24.3 10.3 23.4 9.7 22.5 9.1 21.8 8.4 21 7.8 20.3 7.5 19.3 7.7 18.4 8.5 17.7 9.4 17.4 10.4 17.2 11.3 17 12.3 16.7 13 16.1 13.4 15.2 13.3 14.2 13.2 13.2 13.1 12.2 13.2 11.2 13.7 10.4 14.6 9.9 15.6 10 16.5 10.4 17.4 10.8 18.3 11.1 19.3 11.4 20.2 11.1Z\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\nexport interface LoadingIndicatorProps\n\textends Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> {\n\t/**\n\t * Visual style variant.\n\t * - `uncontained` (default): bare indicator, no container background\n\t * - `contained`: indicator inside a circular container\n\t * (MD3 spec: 38dp container / 24dp active indicator)\n\t */\n\tvariant?: \"uncontained\" | \"contained\";\n\n\t/**\n\t * Indicator size in dp (pixels). Clamped to the MD3 spec range [24dp, 240dp].\n\t * Defaults to 48dp.\n\t *\n\t * Size guidelines:\n\t * - Small displays: 24–48dp\n\t * - Medium displays: 48–80dp\n\t * - Large/XL displays (desktop): up to 240dp\n\t *\n\t * @default 48\n\t */\n\tsize?: number;\n\n\t/**\n\t * Determinate progress value between 0 and 1.\n\t * - **Omit** (default) for indeterminate mode: continuous morphing loop.\n\t * - **Provide** for determinate mode: Circle→SoftBurst morph + counterclockwise rotation.\n\t *\n\t * @example `progress={0.7}` shows 70% progress\n\t */\n\tprogress?: number;\n\n\t/**\n\t * Active indicator color override. Falls back to MD3 system color tokens.\n\t * Supports any valid CSS color value or CSS variable.\n\t * @example \"#ff5722\" | \"var(--brand-color)\"\n\t */\n\tcolor?: string;\n\n\t/**\n\t * Required accessible label describing what is loading.\n\t * @example \"Loading news article\"\n\t */\n\t\"aria-label\": string;\n}\n\n// ─── Indeterminate SVG (pure SMIL, zero JS overhead) ─────────────────────────\nconst IndeterminateSvg = React.memo(function IndeterminateSvg({\n\tsize,\n}: {\n\tsize: number;\n}) {\n\t// Delays <animate> tag insertion by 1 frame via requestAnimationFrame\n\t// to bypass Chromium SMIL freezing bugs when parent container executes CSS transforms/animations.\n\n\tconst [ready, setReady] = React.useState(false);\n\tReact.useEffect(() => {\n\t\tconst raf = requestAnimationFrame(() => setReady(true));\n\t\treturn () => cancelAnimationFrame(raf);\n\t}, []);\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t>\n\t\t\t<path d={SHAPE_VALUES.split(\";\")[0]}>\n\t\t\t\t{ready && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={SHAPE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={SHAPE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={SHAPE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tattributeType=\"XML\"\n\t\t\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\t\t\tdur=\"5s\"\n\t\t\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tkeySplines={ROTATE_KEY_SPLINES}\n\t\t\t\t\t\t\tkeyTimes={ROTATE_KEY_TIMES}\n\t\t\t\t\t\t\tvalues={ROTATE_VALUES}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</path>\n\t\t</svg>\n\t);\n});\n\n// ─── Determinate SVG (React-controlled morph + counterclockwise rotation) ────\n// Uses CSS transition for smooth d attribute changes where supported (Chromium),\n// with a style-based transform fallback for rotation.\nconst DeterminateSvg = React.memo(function DeterminateSvg({\n\tsize,\n\tprogress,\n}: {\n\tsize: number;\n\tprogress: number;\n}) {\n\t// Clamp and interpolate progress between 0 (circle) and 1 (soft burst)\n\tconst p = Math.min(1, Math.max(0, progress));\n\n\t// Counterclockwise rotation: 0° at 0% → -180° at 100% (per Android spec)\n\tconst rotation = -180 * p;\n\n\t// The path morphs from circle (p=0) to soft-burst (p=1).\n\t// We use a SMIL animate with begin=\"indefinite\" that we snap to progress.\n\t// For maximum compatibility, render the correct endpoint shape based on progress,\n\t// relying on the CSS `d` property transition for smooth animation.\n\tconst pathD = p < 0.5 ? DETERMINATE_CIRCLE : DETERMINATE_SOFT_BURST;\n\n\treturn (\n\t\t<svg\n\t\t\tviewBox=\"4 4 40 40\"\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tfill=\"currentColor\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t\tfocusable=\"false\"\n\t\t\tstyle={{\n\t\t\t\ttransform: `rotate(${rotation}deg)`,\n\t\t\t\ttransition: \"transform 0.3s ease\",\n\t\t\t}}\n\t\t>\n\t\t\t<path d={pathD} style={{ transition: \"d 0.3s ease\" }} />\n\t\t</svg>\n\t);\n});\n\n// ─── Main Component ───────────────────────────────────────────────────────────\nexport const LoadingIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tLoadingIndicatorProps\n>(\n\t(\n\t\t{\n\t\t\tvariant = \"uncontained\",\n\t\t\tsize = 48,\n\t\t\tprogress,\n\t\t\tcolor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isContained = variant === \"contained\";\n\t\tconst isDeterminate = progress !== undefined;\n\n\t\t// MD3 spec: strict size range [24dp, 240dp]\n\t\tconst clampedSize = Math.min(240, Math.max(24, size));\n\n\t\t// Proportional scaling based on the default 48dp spec size\n\t\tconst scaleFactor = clampedSize / 48;\n\n\t\t// MD3 spec: contained → 38dp container, 24dp active indicator\n\t\t// Ratio: 38/24 = 1.583 — preserved at all sizes\n\t\tconst containerSize = isContained ? 38 * scaleFactor : undefined;\n\t\tconst indicatorSize = isContained ? 24 * scaleFactor : clampedSize;\n\n\t\t// MD3 color tokens (with per-variant defaults)\n\t\tconst activeColor = isContained\n\t\t\t? (color ?? \"var(--md-sys-color-indicator-contained-active)\")\n\t\t\t: (color ?? \"var(--md-sys-color-indicator-active)\");\n\n\t\t// aria-valuenow is only set in determinate mode (per ARIA spec)\n\t\tconst ariaNow = isDeterminate\n\t\t\t? Math.round(Math.min(1, Math.max(0, progress)) * 100)\n\t\t\t: undefined;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\taria-valuenow={ariaNow}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: clampedSize,\n\t\t\t\t\theight: clampedSize,\n\t\t\t\t\tcolor: activeColor,\n\t\t\t\t\t...style,\n\t\t\t\t}}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{isContained ? (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"flex items-center justify-center rounded-full\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: containerSize,\n\t\t\t\t\t\t\theight: containerSize,\n\t\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\t\t\"var(--md-sys-color-indicator-contained-container)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : isDeterminate ? (\n\t\t\t\t\t<DeterminateSvg size={indicatorSize} progress={progress} />\n\t\t\t\t) : (\n\t\t\t\t\t<IndeterminateSvg size={indicatorSize} />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nLoadingIndicator.displayName = \"LoadingIndicator\";\n","export function easeInOutCubic(x: number): number {\n\treturn x < 0.5 ? 4 * x * x * x : 1 - (-2 * x + 2) ** 3 / 2;\n}\n\nexport function generateWavyCircularPath(\n\tcenter: number,\n\tradius: number,\n\tamplitude: number,\n\twavelength: number,\n): string {\n\tconst circumference = 2 * Math.PI * radius;\n\tconst numWaves = Math.max(\n\t\t3,\n\t\tMath.round(circumference / Math.max(1, wavelength)),\n\t);\n\tconst steps = numWaves * 4;\n\tconst dt = (2 * Math.PI) / steps;\n\n\tconst rAt = (t: number) => radius + amplitude * Math.sin(numWaves * t);\n\tconst drAt = (t: number) => amplitude * numWaves * Math.cos(numWaves * t);\n\tconst xAt = (t: number) => center + rAt(t) * Math.cos(t);\n\tconst yAt = (t: number) => center + rAt(t) * Math.sin(t);\n\tconst dxAt = (t: number) => drAt(t) * Math.cos(t) - rAt(t) * Math.sin(t);\n\tconst dyAt = (t: number) => drAt(t) * Math.sin(t) + rAt(t) * Math.cos(t);\n\n\tlet d = \"\";\n\tconst tStart = 0;\n\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst t0 = tStart + i * dt;\n\t\tconst t1 = tStart + (i + 1) * dt;\n\n\t\tconst scale = dt / 3;\n\t\tconst cp1x = xAt(t0) + scale * dxAt(t0);\n\t\tconst cp1y = yAt(t0) + scale * dyAt(t0);\n\t\tconst cp2x = xAt(t1) - scale * dxAt(t1);\n\t\tconst cp2y = yAt(t1) - scale * dyAt(t1);\n\n\t\tif (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;\n\t}\n\td += \" Z\";\n\treturn d;\n}\n\nexport function getSinePath(\n\tstartX: number,\n\tendX: number,\n\tphase: number,\n\twl: number,\n\tamp: number,\n) {\n\tif (startX >= endX) return \"\";\n\tlet d = \"\";\n\tconst step = amp === 0 ? Math.max(10, endX - startX) : 1;\n\n\tconst yStart = Math.sin(((startX + phase) / wl) * 2 * Math.PI) * amp;\n\td += `M ${startX.toFixed(2)} ${yStart.toFixed(2)}`;\n\n\tlet nextX = Math.ceil(startX / step) * step;\n\tif (nextX === startX) nextX += step;\n\n\twhile (nextX < endX) {\n\t\tconst y = Math.sin(((nextX + phase) / wl) * 2 * Math.PI) * amp;\n\t\td += ` L ${nextX.toFixed(2)} ${y.toFixed(2)}`;\n\t\tnextX += step;\n\t}\n\n\tconst yEnd = Math.sin(((endX + phase) / wl) * 2 * Math.PI) * amp;\n\td += ` L ${endX.toFixed(2)} ${yEnd.toFixed(2)}`;\n\n\treturn d;\n}\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CircularProgressProps } from \"./types\";\nimport { generateWavyCircularPath } from \"./utils\";\n\nexport const CircularProgress = React.forwardRef<\n\tHTMLDivElement,\n\tCircularProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tsize = 48,\n\t\t\ttrackHeight = 4,\n\t\t\tshape = \"flat\",\n\t\t\tamplitude,\n\t\t\twavelength,\n\t\t\tgapSize = 4,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst radius = (size - trackHeight) / 2;\n\t\tconst center = size / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst isWavy = shape === \"wavy\";\n\n\t\tconst BASELINE_SIZE = 48;\n\t\tconst scaleFactor = size / BASELINE_SIZE;\n\t\tconst effectiveAmplitude = React.useMemo(\n\t\t\t() => amplitude ?? 1.6 * scaleFactor,\n\t\t\t[amplitude, scaleFactor],\n\t\t);\n\t\tconst effectiveWavelength = React.useMemo(\n\t\t\t() => wavelength ?? 15 * scaleFactor,\n\t\t\t[wavelength, scaleFactor],\n\t\t);\n\n\t\tconst wavyActivePath = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisWavy\n\t\t\t\t\t? generateWavyCircularPath(\n\t\t\t\t\t\t\tcenter,\n\t\t\t\t\t\t\tradius,\n\t\t\t\t\t\t\teffectiveAmplitude,\n\t\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t[isWavy, center, radius, effectiveAmplitude, effectiveWavelength],\n\t\t);\n\n\t\tconst circumference = React.useMemo(() => 2 * Math.PI * radius, [radius]);\n\t\tconst gapForTrack = React.useMemo(\n\t\t\t() => (gapSize + trackHeight) / circumference,\n\t\t\t[gapSize, trackHeight, circumference],\n\t\t);\n\t\tconst activeAngularFraction = isDeterminate ? clampedValue / 100 : 0;\n\n\t\tconst trackOffset = isDeterminate ? activeAngularFraction + gapForTrack : 0;\n\t\tconst trackLength = isDeterminate\n\t\t\t? Math.max(0.001, 1 - activeAngularFraction - 2 * gapForTrack)\n\t\t\t: 1;\n\n\t\tconst ActiveCircleElem = m.circle;\n\t\tconst ActivePathElem = m.path;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{ transform: \"rotate(-90deg)\", overflow: \"visible\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tinitial={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\tanimate={{ pathLength: trackLength, pathOffset: trackOffset }}\n\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\n\t\t\t\t\t\t{isDeterminate &&\n\t\t\t\t\t\t\t(isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t</svg>\n\n\t\t\t\t\t{!isDeterminate && (\n\t\t\t\t\t\t<m.svg\n\t\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\t\theight={size}\n\t\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\t\t\trotate: \"-90deg\",\n\t\t\t\t\t\t\t\ttransformOrigin: \"center\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tanimate={{ rotate: [\"-90deg\", \"270deg\"] }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\trotate: {\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: \"linear\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tpathLength: [\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.75 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t\tMath.max(0.001, 1 - 0.1 - 2 * gapForTrack),\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\trotate: [\n\t\t\t\t\t\t\t\t\t\t`${(0.1 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.0 + gapForTrack) * 360}deg`,\n\t\t\t\t\t\t\t\t\t\t`${(1.1 + gapForTrack) * 360}deg`,\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\ttransition={{\n\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\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{isWavy ? (\n\t\t\t\t\t\t\t\t<ActivePathElem\n\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstyle={{ originX: \"50%\", originY: \"50%\" }}\n\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\tpathLength: [0.1, 0.75, 0.1],\n\t\t\t\t\t\t\t\t\t\trotate: [\"0deg\", \"90deg\", \"360deg\"],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\t\t\t\tease: [0.4, 0, 0.2, 1],\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.svg>\n\t\t\t\t\t)}\n\t\t\t\t</LazyMotion>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCircularProgress.displayName = \"CircularProgress\";\n","import * as React from \"react\";\n\nexport function useContainerWidth() {\n\tconst [width, setWidth] = React.useState(0);\n\tconst observerRef = React.useRef<ResizeObserver | null>(null);\n\n\tconst ref = React.useCallback((node: HTMLDivElement | null) => {\n\t\tif (observerRef.current) {\n\t\t\tobserverRef.current.disconnect();\n\t\t\tobserverRef.current = null;\n\t\t}\n\n\t\tif (node) {\n\t\t\tconst obs = new ResizeObserver((entries) => {\n\t\t\t\tconst contentRect = entries[0].contentRect;\n\t\t\t\tsetWidth(contentRect.width);\n\t\t\t});\n\t\t\tobs.observe(node);\n\t\t\tobserverRef.current = obs;\n\t\t}\n\t}, []);\n\n\t// Cleanup on unmount\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (observerRef.current) {\n\t\t\t\tobserverRef.current.disconnect();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn [ref, width] as const;\n}\n\nexport function useMergedRef<T>(\n\t...refs: (React.Ref<T> | undefined | null)[]\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t\t(ref as React.MutableRefObject<T | null>).current = node;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[refs],\n\t);\n}\n","import { m } from \"motion/react\";\nimport * as React from \"react\";\n\nexport const FlatLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\tcrawlerSpeed: number;\n}>(function FlatLinearTrack({\n\ttrackHeight,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\tcrawlerSpeed,\n}) {\n\tconst isDeterminate = value !== undefined;\n\tconst radius = trackHeight / 2;\n\tconst minActiveWidth = trackHeight;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: trackHeight, borderRadius: radius }}\n\t\t>\n\t\t\t{isDeterminate ? (\n\t\t\t\t<>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: trackColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, 0%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, ${value}%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\tminWidth: minActiveWidth,\n\t\t\t\t\t\t\t...(isRtl ? { right: 0 } : { left: 0 }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{ width: `${minActiveWidth}px` }}\n\t\t\t\t\t\tanimate={{ width: `${value}%` }}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: trackColor, borderRadius: radius }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: activeColor, borderRadius: radius }}\n\t\t\t\t\t\tinitial={{ left: \"-40%\", width: \"40%\" }}\n\t\t\t\t\t\tanimate={{ left: [\"-40%\", \"100%\"], width: [\"40%\", \"20%\", \"40%\"] }}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { animate, useAnimationFrame, useMotionValue } from \"motion/react\";\nimport * as React from \"react\";\nimport { useContainerWidth } from \"./hooks\";\nimport { easeInOutCubic, getSinePath } from \"./utils\";\n\nexport const WavyLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tsvgHeight: number;\n\tamplitude: number;\n\twavelength: number;\n\tindeterminateWavelength: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\twaveSpeed: number;\n\tcrawlerSpeed: number;\n\tdeterminateAnimation: \"md3\" | \"continuous\";\n\tindeterminateAnimation: \"md3\" | \"continuous\";\n\ttrackShape: \"flat\" | \"wavy\";\n}>(function WavyLinearTrack({\n\ttrackHeight,\n\tsvgHeight,\n\tamplitude,\n\twavelength,\n\tindeterminateWavelength,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\twaveSpeed,\n\tcrawlerSpeed,\n\tdeterminateAnimation,\n\tindeterminateAnimation,\n\ttrackShape,\n}) {\n\tconst isDeterminate = typeof value === \"number\";\n\tconst clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 100;\n\tconst titleId = React.useId();\n\n\tconst [containerRef, width] = useContainerWidth();\n\n\tconst activePathRef = React.useRef<SVGPathElement>(null);\n\tconst trackPathRef = React.useRef<SVGPathElement>(null);\n\n\tconst amplitudeMV = useMotionValue(amplitude);\n\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 1);\n\n\tReact.useEffect(() => {\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = clampedValue / 100;\n\n\t\t\t// Handle Flattening Logic based on determinateAnimation prop\n\t\t\tlet targetAmp = amplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp = fraction <= 0.1 || fraction >= 0.95 ? 0 : amplitude;\n\t\t\t}\n\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t\tanimate(fractionMV, fraction, { duration: 0.4, ease: [0.2, 0, 0, 1] });\n\t\t}\n\t}, [\n\t\tclampedValue,\n\t\tisDeterminate,\n\t\tamplitude,\n\t\tamplitudeMV,\n\t\tfractionMV,\n\t\tdeterminateAnimation,\n\t]);\n\n\tconst activeWavelength = Math.max(\n\t\t1,\n\t\tisDeterminate ? wavelength : indeterminateWavelength,\n\t);\n\tconst trackAmp = trackShape === \"wavy\" ? amplitude : 0;\n\n\tuseAnimationFrame((time) => {\n\t\tif (width === 0) return;\n\n\t\tconst currentAmp = amplitudeMV.get();\n\t\tconst phase = (time / 1000) * waveSpeed * activeWavelength;\n\t\tconst capWidth = trackHeight / 2;\n\n\t\tlet activePathD = \"\";\n\t\tlet trackD = \"\";\n\t\tconst totalGap = gapSize + trackHeight;\n\n\t\t// 1. DETERMINATE MODE\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = fractionMV.get();\n\t\t\tconst barHead = fraction * width;\n\n\t\t\tconst adjHead = Math.max(capWidth, Math.min(width - capWidth, barHead));\n\t\t\tconst adjTail = capWidth;\n\n\t\t\tif (fraction > 0 && adjHead - adjTail > 0.1) {\n\t\t\t\tactivePathD = getSinePath(\n\t\t\t\t\tadjTail,\n\t\t\t\t\tadjHead,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\tcurrentAmp,\n\t\t\t\t);\n\t\t\t} else if (fraction === 0) {\n\t\t\t\tactivePathD = `M ${capWidth} 0 L ${capWidth + 0.01} 0`;\n\t\t\t}\n\n\t\t\tconst trackStart = adjHead + totalGap;\n\t\t\tif (trackStart < width - capWidth) {\n\t\t\t\ttrackD = getSinePath(\n\t\t\t\t\ttrackStart,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// 2. INDETERMINATE MODE\n\t\telse {\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst activeLines: { tail: number; head: number }[] = [];\n\n\t\t\tif (indeterminateAnimation === \"continuous\") {\n\t\t\t\tconst cycle = 2000 / safeCrawlerSpeed;\n\t\t\t\tconst fraction = (time % cycle) / cycle;\n\t\t\t\tactiveLines.push({\n\t\t\t\t\ttail: easeInOutCubic(Math.max(0, fraction * 1.5 - 0.5)),\n\t\t\t\t\thead: easeInOutCubic(Math.min(1, fraction * 1.5)),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst cycle = 1750 / safeCrawlerSpeed;\n\t\t\t\tconst t = (time % cycle) * safeCrawlerSpeed;\n\n\t\t\t\tconst l1H = easeInOutCubic(Math.max(0, Math.min(1, t / 1000)));\n\t\t\t\tconst l1T = easeInOutCubic(Math.max(0, Math.min(1, (t - 250) / 1000)));\n\t\t\t\tconst l2H = easeInOutCubic(Math.max(0, Math.min(1, (t - 650) / 850)));\n\t\t\t\tconst l2T = easeInOutCubic(Math.max(0, Math.min(1, (t - 900) / 850)));\n\n\t\t\t\tactiveLines.push({ tail: l1T, head: l1H });\n\t\t\t\tactiveLines.push({ tail: l2T, head: l2H });\n\t\t\t}\n\n\t\t\tconst segments = activeLines\n\t\t\t\t.map((line) => {\n\t\t\t\t\tconst barTail = line.tail * width;\n\t\t\t\t\tconst barHead = line.head * width;\n\t\t\t\t\tconst adjTail = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barTail),\n\t\t\t\t\t);\n\t\t\t\t\tconst adjHead = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, barHead),\n\t\t\t\t\t);\n\t\t\t\t\treturn { adjTail, adjHead };\n\t\t\t\t})\n\t\t\t\t.filter((seg) => seg.adjHead - seg.adjTail > 0.1);\n\n\t\t\tactivePathD = segments\n\t\t\t\t.map((seg) =>\n\t\t\t\t\tgetSinePath(\n\t\t\t\t\t\tseg.adjTail,\n\t\t\t\t\t\tseg.adjHead,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\" \");\n\n\t\t\tlet currentTrackX = capWidth;\n\t\t\tfor (const seg of segments) {\n\t\t\t\tconst trackEnd = seg.adjTail - totalGap;\n\t\t\t\tif (trackEnd > currentTrackX) {\n\t\t\t\t\ttrackD += `${getSinePath(currentTrackX, trackEnd, phase, activeWavelength, trackAmp)} `;\n\t\t\t\t}\n\t\t\t\tcurrentTrackX = Math.max(currentTrackX, seg.adjHead + totalGap);\n\t\t\t}\n\t\t\tif (currentTrackX < width - capWidth) {\n\t\t\t\ttrackD += getSinePath(\n\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (activePathRef.current)\n\t\t\tactivePathRef.current.setAttribute(\"d\", activePathD);\n\t\tif (trackPathRef.current)\n\t\t\ttrackPathRef.current.setAttribute(\"d\", trackD.trim());\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: svgHeight }}\n\t\t>\n\t\t\t{width > 0 && (\n\t\t\t\t<svg\n\t\t\t\t\tclassName=\"absolute inset-0 w-full h-full\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\ttransform: isRtl ? \"scaleX(-1)\" : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t>\n\t\t\t\t\t<title id={titleId}>\n\t\t\t\t\t\t{isDeterminate\n\t\t\t\t\t\t\t? `Progress: ${clampedValue}%`\n\t\t\t\t\t\t\t: \"Indeterminate loading progress\"}\n\t\t\t\t\t</title>\n\t\t\t\t\t<g transform={`translate(0, ${svgHeight / 2})`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={trackPathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={trackColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={activePathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useMergedRef } from \"./hooks\";\nimport { FlatLinearTrack } from \"./linear-flat\";\nimport { WavyLinearTrack } from \"./linear-wavy\";\nimport type { LinearProgressProps } from \"./types\";\n\nexport const LinearProgress = React.forwardRef<\n\tHTMLDivElement,\n\tLinearProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape,\n\t\t\ttrackHeight = 4,\n\t\t\tamplitude,\n\t\t\twavelength = 40,\n\t\t\tindeterminateWavelength = 20,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tindeterminateAnimation = \"continuous\",\n\t\t\tgapSize = 4,\n\t\t\tshowStopIndicator = \"auto\",\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, containerRef);\n\t\tconst [isRtl, setIsRtl] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (containerRef.current) {\n\t\t\t\tconst dir = getComputedStyle(containerRef.current).direction;\n\t\t\t\tsetIsRtl(dir === \"rtl\");\n\t\t\t}\n\t\t}, []);\n\n\t\tconst isWavy = shape === \"wavy\";\n\t\tconst resolvedTrackShape = trackShape ?? shape;\n\n\t\tconst effectiveAmplitude = React.useMemo(() => amplitude ?? 3, [amplitude]);\n\t\tconst svgHeight = React.useMemo(\n\t\t\t() => (isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight),\n\t\t\t[isWavy, trackHeight, effectiveAmplitude],\n\t\t);\n\n\t\tconst shouldShowStop = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisDeterminate &&\n\t\t\t\tresolvedTrackShape === \"flat\" &&\n\t\t\t\t(showStopIndicator === true ||\n\t\t\t\t\t(showStopIndicator === \"auto\" && isDeterminate)),\n\t\t\t[isDeterminate, resolvedTrackShape, showStopIndicator],\n\t\t);\n\n\t\tconst stopSize = React.useMemo(\n\t\t\t() => Math.max(2, trackHeight > 4 ? 4 : trackHeight / 2),\n\t\t\t[trackHeight],\n\t\t);\n\n\t\tconst stopOffset = (trackHeight - stopSize) / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex w-full flex-col justify-center\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: svgHeight }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t<WavyLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tsvgHeight={svgHeight}\n\t\t\t\t\t\t\tamplitude={effectiveAmplitude}\n\t\t\t\t\t\t\twavelength={wavelength}\n\t\t\t\t\t\t\tindeterminateWavelength={indeterminateWavelength}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\twaveSpeed={waveSpeed}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t\tdeterminateAnimation={determinateAnimation}\n\t\t\t\t\t\t\tindeterminateAnimation={indeterminateAnimation}\n\t\t\t\t\t\t\ttrackShape={resolvedTrackShape}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<FlatLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{shouldShowStop && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute rounded-full\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: stopSize,\n\t\t\t\t\t\t\t\theight: stopSize,\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--md-sys-color-indicator-stop)\",\n\t\t\t\t\t\t\t\ttop: svgHeight / 2 - stopSize / 2,\n\t\t\t\t\t\t\t\t...(isRtl ? { left: stopOffset } : { right: stopOffset }),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nLinearProgress.displayName = \"LinearProgress\";\n","import * as React from \"react\";\nimport { CircularProgress } from \"./circular\";\nimport { LinearProgress } from \"./linear\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\n/**\n * Progress Indicator component based on Material Design 3 Expressive guidelines.\n * Flexible support for 2 presentation variants: Linear and Circular,\n * with smooth dynamic Wavy shape profiles.\n *\n * @example\n * ```tsx\n * // Determinate Flat Linear\n * <ProgressIndicator variant=\"linear\" value={60} aria-label=\"Loading profile...\" />\n *\n * // Indeterminate Wavy Linear\n * <ProgressIndicator variant=\"linear\" shape=\"wavy\" aria-label=\"Connecting to server...\" />\n *\n * // Determinate Flat Circular\n * <ProgressIndicator variant=\"circular\" value={45} size={48} aria-label=\"Syncing...\" />\n * ```\n */\n\nexport const ProgressIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tProgressIndicatorProps\n>((props, ref) => {\n\tif (props.variant === \"circular\") {\n\t\treturn <CircularProgress ref={ref} {...props} />;\n\t}\n\treturn <LinearProgress ref={ref} {...props} />;\n});\n\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport type {\n\tCircularProgressProps,\n\tLinearProgressProps,\n\tProgressIndicatorProps,\n} from \"./types\";\n","/**\n * @file ui/shared/motion-tokens.ts\n *\n * Framer Motion spring presets derived from the official MD3 Expressive\n * motion physics system (May 2025).\n *\n * Usage hierarchy:\n * 1. Import a named preset (e.g. `FAST_SPATIAL_SPRING`) for convenience.\n * 2. Call `getMotionSpring(speed, type)` when you need to pick dynamically.\n * 3. Call `getMotionTransitionCSS(speed, type, scheme?)` for pure-CSS contexts.\n *\n * @see https://m3.material.io/styles/motion/overview/how-it-works\n * @see https://m3.material.io/styles/motion/overview/specs\n */\n\nimport type { Transition } from \"motion/react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Spring Token Structure\n//\n// MD3 defines springs as dampingRatio (0–1) + stiffness.\n// Framer Motion uses absolute `damping` coefficient.\n//\n// Conversion (with Framer's default mass = 1):\n// damping = 2 × dampingRatio × √stiffness\n//\n// Computed values (rounded to 2 decimal places):\n//\n// fast spatial: 2 × 0.6 × √800 = 2 × 0.6 × 28.28 ≈ 33.94\n// fast effects: 2 × 1.0 × √3800 = 2 × 61.64 ≈ 123.29\n// default spatial: 2 × 0.8 × √380 = 2 × 0.8 × 19.49 ≈ 31.19\n// default effects: 2 × 1.0 × √1600 = 2 × 40 = 80\n// slow spatial: 2 × 0.8 × √200 = 2 × 0.8 × 14.14 ≈ 22.63\n// slow effects: 2 × 1.0 × √800 = 2 × 28.28 ≈ 56.57\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Spatial springs — use for position, size, border-radius, rotation, scale ─\n\n/**\n * MD3 Expressive — Fast Spatial Spring\n * `md.sys.motion.spring.fast.spatial` (dampingRatio: 0.6, stiffness: 800)\n *\n * Use for: small components (buttons, switches, chips).\n * Has notable bounce/overshoot — feels snappy and expressive.\n */\nexport const FAST_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 33.94,\n} as const;\n\n/**\n * MD3 Expressive — Default Spatial Spring\n * `md.sys.motion.spring.default.spatial` (dampingRatio: 0.8, stiffness: 380)\n *\n * Use for: medium elements (bottom sheets, menus, navigation rail).\n * Gentle overshoot — the go-to spring for most UI animations.\n */\nexport const DEFAULT_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 380,\n\tdamping: 31.19,\n} as const;\n\n/**\n * MD3 Expressive — Slow Spatial Spring\n * `md.sys.motion.spring.slow.spatial` (dampingRatio: 0.8, stiffness: 200)\n *\n * Use for: full-screen transitions and large layout shifts.\n * Subtle, slow overshoot.\n */\nexport const SLOW_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 22.63,\n} as const;\n\n// ── Effects springs — use for color, opacity (critically damped, no bounce) ──\n\n/**\n * MD3 Expressive — Fast Effects Spring\n * `md.sys.motion.spring.fast.effects` (dampingRatio: 1.0, stiffness: 3800)\n *\n * Use for: color changes on switches, icon swaps, badge counts.\n * Critically damped — very fast, no overshoot.\n */\nexport const FAST_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 3800,\n\tdamping: 123.29,\n} as const;\n\n/**\n * MD3 Expressive — Default Effects Spring\n * `md.sys.motion.spring.default.effects` (dampingRatio: 1.0, stiffness: 1600)\n *\n * Use for: opacity fades, color transitions for medium-sized elements.\n * Critically damped — smooth with no overshoot.\n */\nexport const DEFAULT_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 1600,\n\tdamping: 80,\n} as const;\n\n/**\n * MD3 Expressive — Slow Effects Spring\n * `md.sys.motion.spring.slow.effects` (dampingRatio: 1.0, stiffness: 800)\n *\n * Use for: full-screen opacity/color transitions.\n * Critically damped — slow and smooth.\n */\nexport const SLOW_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 56.57,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dynamic helper\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SpringSpeed = \"fast\" | \"default\" | \"slow\";\nexport type SpringAnimationType = \"spatial\" | \"effects\";\n\nconst springMap = {\n\tfast: { spatial: FAST_SPATIAL_SPRING, effects: FAST_EFFECTS_SPRING },\n\tdefault: { spatial: DEFAULT_SPATIAL_SPRING, effects: DEFAULT_EFFECTS_SPRING },\n\tslow: { spatial: SLOW_SPATIAL_SPRING, effects: SLOW_EFFECTS_SPRING },\n} as const;\n\n/**\n * Pick a Framer Motion spring by speed and type.\n *\n * @example\n * ```tsx\n * transition={getMotionSpring(\"fast\", \"spatial\")}\n * ```\n */\nexport function getMotionSpring(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n): Transition {\n\treturn springMap[speed][type];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CSS transition strings\n// For contexts where Framer Motion is not used (plain CSS / Tailwind).\n// Uses official Web spring → CSS cubic-bezier conversion table.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst CSS_CURVES = {\n\texpressive: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.42, 1.67, 0.21, 0.90)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.38, 1.21, 0.22, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.39, 1.29, 0.35, 0.98)\",\n\t\t\t\tdurationMs: 650,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n\tstandard: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 750,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n} as const;\n\nexport type MotionScheme = \"expressive\" | \"standard\";\n\n/**\n * Returns a CSS `transition` value string using the official MD3 web curve\n * conversion, e.g. `\"500ms cubic-bezier(0.38, 1.21, 0.22, 1.00)\"`.\n *\n * @example\n * ```ts\n * element.style.transition = `border-radius ${getMotionTransitionCSS(\"default\", \"spatial\")}`;\n * ```\n */\nexport function getMotionTransitionCSS(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n\tscheme: MotionScheme = \"expressive\",\n): string {\n\tconst { curve, durationMs } = CSS_CURVES[scheme][speed][type];\n\treturn `${durationMs}ms ${curve}`;\n}\n","/**\n * @file shared/constants.ts\n *\n * Shared animation constants for MD3 Expressive UI components.\n * Centralises spring transition configs and motion variant objects to avoid\n * duplication across button, icon-button, FAB, and other interactive components.\n *\n * @see https://m3.material.io/foundations/animation/overview\n */\n\nimport type { Target, TargetAndTransition, Transition } from \"motion/react\";\nimport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n} from \"./motion-tokens\";\n\nexport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n\tgetMotionSpring,\n\tgetMotionTransitionCSS,\n\tSLOW_EFFECTS_SPRING,\n\tSLOW_SPATIAL_SPRING,\n} from \"./motion-tokens\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Spring Transitions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fast spring — used for border-radius morphing, icon swaps.\n * Maps to MD3 `fast.effects` (critically damped, stiffness 3800).\n *\n * @example\n * ```tsx\n * <m.button transition={{ borderRadius: SPRING_TRANSITION_FAST }}>...</m.button>\n * ```\n */\nexport const SPRING_TRANSITION_FAST: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Standard spring — used for icon/content scale animations.\n * Maps to MD3 `default.effects` (critically damped, stiffness 1600).\n *\n * @example\n * ```tsx\n * <m.span transition={SPRING_TRANSITION}>...</m.span>\n * ```\n */\nexport const SPRING_TRANSITION: Transition = DEFAULT_EFFECTS_SPRING;\n\n/**\n * MD3 Expressive spring — active indicator expand/collapse.\n * Maps to MD3 `default.spatial` (dampingRatio: 0.8, stiffness: 380).\n * Gentle bounce for the \"pop\" effect per MD3 Expressive spec.\n */\nexport const SPRING_TRANSITION_EXPRESSIVE: Transition = DEFAULT_SPATIAL_SPRING;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Icon Span Motion Variants\n// Used for icon/loading indicator swap animation inside FAB and IconButton.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Framer Motion variants for animating icon spans in/out.\n *\n * Scale from near-zero → 1 on enter; back to near-zero on exit.\n * The near-zero value (0.01) avoids the SMIL freeze bug on Chromium\n * that occurs when an element starts at exactly `scale(0)`.\n *\n * @example\n * ```tsx\n * <AnimatePresence mode=\"wait\">\n * {loading ? (\n * <m.span key=\"loading\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * <LoadingIndicator />\n * </m.span>\n * ) : (\n * <m.span key=\"icon\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n * {icon}\n * </m.span>\n * )}\n * </AnimatePresence>\n * ```\n */\nexport const ICON_SPAN_VARIANTS: {\n\tinitial: Target;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { scale: 0.01 },\n\tanimate: { scale: 1 },\n\texit: { scale: 0.01 },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 TextField Animation Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Standard easing curve — used for label float, active indicator expand.\n * cubic-bezier(0.2, 0, 0, 1)\n *\n * @see https://m3.material.io/foundations/animation/easing-and-duration\n */\nexport const MD3_STANDARD_EASING: [number, number, number, number] = [\n\t0.2, 0, 0, 1,\n];\n\n/**\n * Duration for floating label transition: 150ms.\n * Used when label moves between inline position ↔ floated position.\n */\nexport const MD3_LABEL_FLOAT_DURATION = 0.15;\n\n/**\n * Duration for active indicator expand/collapse: 200ms.\n * Used for the bottom border (filled) and outline (outlined) on focus.\n */\nexport const MD3_INDICATOR_DURATION = 0.2;\n\n/**\n * Duration for supporting text / error text appear/disappear: 120ms.\n */\nexport const MD3_SUPPORTING_DURATION = 0.12;\n\n/**\n * Duration for trailing icon appear/disappear (clear button, password toggle): 100ms.\n */\nexport const MD3_ICON_SWAP_DURATION = 0.1;\n","/**\n * @file shared/touch-target.tsx\n *\n * Invisible 48×48dp touch-target expander for small interactive elements.\n *\n * WCAG 2.5.5 (Level AA) requires interactive targets to be at least 44×44 CSS pixels.\n * MD3 specifies a minimum 48dp touch target for all interactive components.\n * For button sizes XS (32dp) and SM (40dp) that are smaller than this minimum,\n * an invisible absolutely-positioned `<span>` is overlaid to extend the\n * effective tap area without affecting visual layout.\n *\n * @see https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html\n * @see https://m3.material.io/foundations/accessible-design/accessibility-basics\n */\n\n// ─────────────────────────────────────────────────────────────────────────────\n// TouchTarget Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Invisible 48×48dp touch area expander — satisfies WCAG 2.5.5 + MD3 spec.\n *\n * Place as a direct child of any interactive element whose visual size is\n * smaller than 48dp (e.g. `xs`/`sm` buttons and icon buttons).\n * The parent element **must** have `position: relative`.\n *\n * @remarks\n * - Hidden from assistive technologies via `aria-hidden=\"true\"`.\n * - `pointer-events: none` ensures it does not intercept click events.\n * - Centred with `left: 50% / top: 50%` + negative translate for symmetry.\n *\n * @example\n * ```tsx\n * // Used inside a 32dp XS button:\n * <button className=\"relative h-8 w-auto ...\">\n * <TouchTarget />\n * Label\n * </button>\n * ```\n *\n * @see https://m3.material.io/components/buttons/specs (Touch target section)\n */\nexport function TouchTarget() {\n\treturn (\n\t\t<span\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 min-w-12 min-h-12 cursor-pointer pointer-events-none\"\n\t\t/>\n\t);\n}\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\nimport type { Transition } from \"motion\";\nimport {\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../../shared/motion-tokens\";\n\n/**\n * Shape morphing spring animation for layout/width morphing.\n * MD3: `fast.spatial` — stiffness 800, dampingRatio 0.6 (has bounce).\n */\nexport const BUTTON_SHAPE_MORPH_SPRING: Transition = FAST_SPATIAL_SPRING;\n\n/**\n * Spring for border-radius changes on press/release and shape toggle.\n * MD3: `fast.effects` — stiffness 3800, critically damped (dampingRatio 1.0).\n * No overshoot; border-radius never goes negative.\n */\nexport const BUTTON_RADIUS_SPRING: Transition = FAST_EFFECTS_SPRING;\n\nexport const ROUND_SHAPE_RADIUS = 9999;\n\nexport const BUTTON_SIZE_TOKENS = {\n\txs: {\n\t\theight: \"2rem\", // 32dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 16,\n\t},\n\tsm: {\n\t\theight: \"2.5rem\", // 40dp\n\t\tleadingSpace: \"1rem\", // 16dp\n\t\ttrailingSpace: \"1rem\", // 16dp\n\t\ticonSize: \"1.25rem\", // 20dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.medium, // 12dp\n\t\tpressedShapeRadius: cornerRadius.small, // 8dp\n\t\troundShapeRadius: 20,\n\t},\n\tmd: {\n\t\theight: \"3.5rem\", // 56dp\n\t\tleadingSpace: \"1.5rem\", // 24dp\n\t\ttrailingSpace: \"1.5rem\", // 24dp\n\t\ticonSize: \"1.5rem\", // 24dp\n\t\ticonLabelSpace: \"0.5rem\", // 8dp\n\t\toutlineWidth: 1, // 1dp\n\t\tsquareShapeRadius: cornerRadius.large, // 16dp\n\t\tpressedShapeRadius: cornerRadius.medium, // 12dp\n\t\troundShapeRadius: 28,\n\t},\n\tlg: {\n\t\theight: \"6rem\", // 96dp\n\t\tleadingSpace: \"3rem\", // 48dp\n\t\ttrailingSpace: \"3rem\", // 48dp\n\t\ticonSize: \"2rem\", // 32dp\n\t\ticonLabelSpace: \"0.75rem\", // 12dp\n\t\toutlineWidth: 2, // 2dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 48,\n\t},\n\txl: {\n\t\theight: \"8.5rem\", // 136dp\n\t\tleadingSpace: \"4rem\", // 64dp\n\t\ttrailingSpace: \"4rem\", // 64dp\n\t\ticonSize: \"2.5rem\", // 40dp\n\t\ticonLabelSpace: \"1rem\", // 16dp\n\t\toutlineWidth: 3, // 3dp\n\t\tsquareShapeRadius: cornerRadius.extraLarge, // 28dp\n\t\tpressedShapeRadius: cornerRadius.large, // 16dp\n\t\troundShapeRadius: 68,\n\t},\n} as const;\n\nexport const BUTTON_TYPOGRAPHY_TOKENS = {\n\txs: \"text-sm font-medium tracking-wide\", // labelLarge\n\tsm: \"text-sm font-medium tracking-wide\", // labelLarge\n\tmd: \"text-base font-medium\", // titleMedium\n\tlg: \"text-xl font-normal\", // headlineSmall\n\txl: \"text-[2rem] font-normal leading-none\", // headlineLarge\n} as const;\n\nexport const BUTTON_COLOR_TOKENS = {\n\televated: {\n\t\tdefault: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary shadow-md\",\n\t\tunselected: \"bg-m3-surface-container-low text-m3-primary shadow-md\",\n\t},\n\tfilled: {\n\t\tdefault: \"bg-m3-primary text-m3-on-primary\",\n\t\tselected: \"bg-m3-primary text-m3-on-primary\",\n\t\tunselected: \"bg-m3-surface-container text-m3-on-surface-variant\",\n\t},\n\ttonal: {\n\t\tdefault: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\tselected: \"bg-m3-secondary text-m3-on-secondary\",\n\t\tunselected: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t},\n\toutlined: {\n\t\tdefault:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t\tselected:\n\t\t\t\"bg-m3-inverse-surface text-m3-inverse-on-surface border-transparent\",\n\t\tunselected:\n\t\t\t\"bg-transparent text-m3-on-surface-variant border-m3-outline-variant\",\n\t},\n\ttext: {\n\t\tdefault: \"bg-transparent text-m3-primary\",\n\t\tselected: \"bg-transparent text-m3-primary\",\n\t\tunselected: \"bg-transparent text-m3-primary\",\n\t},\n\n\t// ── MD3 Expressive accent variants ──────────────────────────────────────\n\t/**\n\t * High-chroma tertiary tone. Use for hero CTAs and expressive moments where\n\t * a distinct accent beyond primary is needed (e.g., hero chip, highlight fab).\n\t */\n\ttertiary: {\n\t\tdefault: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tselected: \"bg-m3-tertiary text-m3-on-tertiary\",\n\t\tunselected: \"bg-m3-tertiary-container text-m3-on-tertiary-container\",\n\t},\n\n\t/**\n\t * Brand-stable primary fixed. Hue stays consistent across light and dark modes.\n\t * Ideal for badges, pill chips, and elements that must carry the brand color\n\t * regardless of the active theme.\n\t */\n\t\"primary-fixed\": {\n\t\tdefault: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed\",\n\t\tunselected: \"bg-m3-primary-fixed text-m3-on-primary-fixed-variant\",\n\t},\n\n\t/**\n\t * Brand-stable tertiary fixed. Use for special-state indicators, achievement\n\t * badges, or accent pills that need a fixed tertiary hue across themes.\n\t */\n\t\"tertiary-fixed\": {\n\t\tdefault: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed\",\n\t\tunselected: \"bg-m3-tertiary-fixed text-m3-on-tertiary-fixed-variant\",\n\t},\n} as const;\n","/**\n * @file button.tsx\n *\n * MD3 Expressive Button component.\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { Transition } from \"motion/react\";\nimport {\n\tAnimatePresence,\n\tanimate,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseMotionValue,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { LoadingIndicator } from \"../../loading-indicator\";\nimport { ProgressIndicator } from \"../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { SPRING_TRANSITION } from \"../../shared/constants\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport {\n\tBUTTON_COLOR_TOKENS,\n\tBUTTON_RADIUS_SPRING,\n\tBUTTON_SHAPE_MORPH_SPRING,\n\tBUTTON_SIZE_TOKENS,\n\tBUTTON_TYPOGRAPHY_TOKENS,\n} from \"./button-tokens\";\nimport type { ButtonProps } from \"./types\";\n\nconst MOTION_PROP_KEYS = [\n\t\"animate\",\n\t\"exit\",\n\t\"initial\",\n\t\"transition\",\n\t\"variants\",\n\t\"whileHover\",\n\t\"whileTap\",\n\t\"whileFocus\",\n\t\"whileDrag\",\n\t\"whileInView\",\n\t\"onAnimationStart\",\n\t\"onAnimationComplete\",\n\t\"onUpdate\",\n\t\"onDragStart\",\n\t\"onDragEnd\",\n\t\"onDrag\",\n\t\"onDirectionLock\",\n\t\"onDragTransitionEnd\",\n\t\"layout\",\n\t\"layoutId\",\n\t\"onLayoutAnimationComplete\",\n] as const;\n\nfunction springAnimate(\n\tvalue: ReturnType<typeof useMotionValue<number>>,\n\tto: number,\n) {\n\treturn animate(value, to, { ...BUTTON_RADIUS_SPRING, type: \"spring\" });\n}\n\ninterface AnimatedIconSlotProps {\n\ticonSize: string;\n\tchildren: React.ReactNode;\n\tariaHidden?: boolean;\n\ttransition?: Transition;\n}\n\nfunction AnimatedIconSlot({\n\ticonSize,\n\tchildren,\n\tariaHidden,\n\ttransition,\n}: AnimatedIconSlotProps) {\n\treturn (\n\t\t<m.span\n\t\t\tlayout=\"position\"\n\t\t\tinitial={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\tanimate={{ width: iconSize, opacity: 1, scale: 1 }}\n\t\t\texit={{ width: 0, opacity: 0, scale: 0.5 }}\n\t\t\ttransition={transition}\n\t\t\taria-hidden={ariaHidden ? \"true\" : undefined}\n\t\t\tstyle={{ height: iconSize }}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden\",\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</m.span>\n\t);\n}\n\nconst ButtonComponent = React.forwardRef<HTMLButtonElement, ButtonProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"default\",\n\t\t\tcolorStyle = \"filled\",\n\t\t\tselectedColorStyle: _selectedColorStyle, // Deprecated — destructured to strip from restProps\n\t\t\tsize = \"sm\",\n\t\t\tshape = \"round\",\n\t\t\tselected,\n\t\t\ticon,\n\t\t\tselectedIcon,\n\t\t\ticonPosition = \"leading\",\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tasChild = false,\n\t\t\toutlineWidth,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabelProp,\n\t\t\ttransition: customTransition,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isToggle = variant === \"toggle\";\n\t\tconst isSelected = isToggle ? !!selected : false;\n\n\t\tconst effectiveShape = isSelected\n\t\t\t? shape === \"round\"\n\t\t\t\t? \"square\"\n\t\t\t\t: \"round\"\n\t\t\t: shape;\n\n\t\tconst sizeTokens = BUTTON_SIZE_TOKENS[size] ?? BUTTON_SIZE_TOKENS.sm;\n\t\tconst animateRadius =\n\t\t\teffectiveShape === \"round\"\n\t\t\t\t? sizeTokens.roundShapeRadius\n\t\t\t\t: sizeTokens.squareShapeRadius;\n\t\tconst pressedRadius = sizeTokens.pressedShapeRadius;\n\n\t\tconst colorState = isToggle\n\t\t\t? isSelected\n\t\t\t\t? \"selected\"\n\t\t\t\t: \"unselected\"\n\t\t\t: \"default\";\n\t\tconst colorClass = BUTTON_COLOR_TOKENS[colorStyle][colorState];\n\t\tconst typographyClass =\n\t\t\tBUTTON_TYPOGRAPHY_TOKENS[size] ?? BUTTON_TYPOGRAPHY_TOKENS.sm;\n\n\t\tconst mergedStyle = {\n\t\t\theight: sizeTokens.height,\n\t\t\tpaddingInlineStart: sizeTokens.leadingSpace,\n\t\t\tpaddingInlineEnd: sizeTokens.trailingSpace,\n\t\t\tgap: sizeTokens.iconLabelSpace,\n\t\t\tborderWidth:\n\t\t\t\toutlineWidth ??\n\t\t\t\t(colorStyle === \"outlined\" ? sizeTokens.outlineWidth : 0),\n\t\t\tborderStyle: colorStyle === \"outlined\" ? \"solid\" : undefined,\n\t\t\t...style,\n\t\t};\n\n\t\tconst labelText = React.useMemo(() => {\n\t\t\tif (asChild) {\n\t\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t}>;\n\t\t\t\treturn child.props.children;\n\t\t\t}\n\t\t\treturn children;\n\t\t}, [children, asChild]);\n\t\tconst computedAriaLabel =\n\t\t\tariaLabelProp || (typeof children === \"string\" ? children : undefined);\n\t\tconst needsTouchTarget = size === \"xs\" || size === \"sm\";\n\n\t\tconst motionRadius = useMotionValue<number>(animateRadius);\n\t\tconst asChildRef = React.useRef<HTMLElement | null>(null);\n\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\tasChildRef.current = node;\n\t\t\t\tif (typeof ref === \"function\") ref(node as HTMLButtonElement);\n\t\t\t\telse if (ref)\n\t\t\t\t\t(ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n\t\t\t\t\t\tnode as HTMLButtonElement;\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\treturn motionRadius.on(\"change\", (v) => {\n\t\t\t\tif (asChildRef.current)\n\t\t\t\t\tasChildRef.current.style.borderRadius = `${v}px`;\n\t\t\t});\n\t\t}, [motionRadius, asChild]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!asChild) return;\n\t\t\tconst controls = springAnimate(motionRadius, animateRadius);\n\t\t\treturn () => controls.stop();\n\t\t}, [animateRadius, motionRadius, asChild]);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled: loading,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return e.preventDefault();\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[loading, onClick],\n\t\t);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tif (loading) return;\n\t\t\t\tif (onClick && (e.key === \"Enter\" || e.key === \" \")) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t(e.currentTarget as HTMLButtonElement).click();\n\t\t\t\t}\n\t\t\t\tonKeyDown?.(e);\n\t\t\t},\n\t\t\t[loading, onClick, onKeyDown],\n\t\t);\n\n\t\tconst buttonClassName = cn(\n\t\t\t\"relative w-fit shrink-0 inline-flex flex-row items-center justify-center\",\n\t\t\t\"whitespace-nowrap select-none cursor-pointer\",\n\t\t\t\"transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200\",\n\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\t\t\"disabled:pointer-events-none disabled:opacity-[0.38] disabled:shadow-none\",\n\t\t\tcolorClass,\n\t\t\t\"overflow-hidden\",\n\t\t\ttypographyClass,\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst sharedTransition = customTransition ?? {\n\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\tlayout: BUTTON_SHAPE_MORPH_SPRING,\n\t\t\tdefault: SPRING_TRANSITION,\n\t\t};\n\n\t\tconst activeIcon = isSelected && selectedIcon ? selectedIcon : icon;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t{(loading || (activeIcon && iconPosition === \"leading\")) && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\tkey={isSelected && selectedIcon ? \"selected-icon\" : \"icon\"}\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden={!loading}\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\tloadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\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<ProgressIndicator\n\t\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\t\tsize={parseFloat(sizeTokens.iconSize) * 16}\n\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tactiveIcon\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{labelText && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\tclassName=\"inline-flex items-center h-full gap-[inherit]\"\n\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labelText}\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t{!loading && activeIcon && iconPosition === \"trailing\" && (\n\t\t\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\t\t\tkey={isSelected && selectedIcon ? \"selected-icon\" : \"icon\"}\n\t\t\t\t\t\t\ticonSize={sizeTokens.iconSize}\n\t\t\t\t\t\t\tariaHidden\n\t\t\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{activeIcon}\n\t\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</>\n\t\t);\n\n\t\tconst handleAsChildPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tspringAnimate(motionRadius, pressedRadius);\n\t\t\t\t(onPointerDown as React.PointerEventHandler<HTMLElement>)?.(e);\n\t\t\t},\n\t\t\t[motionRadius, pressedRadius, onPointerDown],\n\t\t);\n\n\t\tconst handleAsChildPointerUp = React.useCallback(() => {\n\t\t\tspringAnimate(motionRadius, animateRadius);\n\t\t}, [motionRadius, animateRadius]);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonPointerDown(e);\n\t\t\t},\n\t\t\t[onPointerDown],\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst strippedProps = { ...restProps } as Record<string, unknown>;\n\t\t\tfor (const key of MOTION_PROP_KEYS) delete strippedProps[key];\n\t\t\tconst htmlProps =\n\t\t\t\tstrippedProps as React.ButtonHTMLAttributes<HTMLButtonElement>;\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={mergedRef as React.Ref<HTMLButtonElement>}\n\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\tonClick={handleClick as React.MouseEventHandler<HTMLElement>}\n\t\t\t\t\t\tonPointerDown={handleAsChildPointerDown}\n\t\t\t\t\t\tonPointerUp={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerLeave={handleAsChildPointerUp}\n\t\t\t\t\t\tonPointerCancel={handleAsChildPointerUp}\n\t\t\t\t\t\tonKeyDown={handleKeyDown as React.KeyboardEventHandler<HTMLElement>}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...(mergedStyle as React.CSSProperties),\n\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t\t{...htmlProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\tlayout\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\taria-busy={loading ? true : undefined}\n\t\t\t\t\taria-disabled={loading ? true : restProps.disabled}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\tanimate={{ borderRadius: animateRadius }}\n\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\ttransition={sharedTransition}\n\t\t\t\t\tclassName={buttonClassName}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{innerContent}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nButtonComponent.displayName = \"Button\";\n\nexport const Button = React.memo(ButtonComponent);\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SPRING_TRANSITION_FAST } from \"./shared/constants\";\n\n// @internal — font must be loaded via '@bug-on/m3-expressive/material-symbols.css'\nconst VARIANT_FONT: Record<NonNullable<IconProps[\"variant\"]>, string> = {\n\toutlined: \"'Material Symbols Outlined'\",\n\trounded: \"'Material Symbols Rounded'\",\n\tsharp: \"'Material Symbols Sharp'\",\n};\n\n/**\n * Props cho component {@link Icon}.\n *\n * All variable font axes are mapped directly to `font-variation-settings`.\n */\nexport interface IconProps extends React.HTMLAttributes<HTMLSpanElement> {\n\t/**\n\t * Name of the Material Symbol in snake_case format.\n\t * @example \"home\", \"arrow_forward\", \"settings\"\n\t * @see https://fonts.google.com/icons\n\t */\n\tname: string;\n\n\t/**\n\t * Geometric style variant — maps to font family.\n\t * @default \"outlined\"\n\t */\n\tvariant?: \"outlined\" | \"rounded\" | \"sharp\";\n\n\t/**\n\t * `FILL` axis. `0` = outlined, `1` = filled.\n\t * Features spring animation when `animateFill` is true.\n\t * @default 0\n\t */\n\tfill?: 0 | 1;\n\n\t/**\n\t * `wght` axis — stroke weight. Should match surrounding text weight.\n\t * @default 400\n\t */\n\tweight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n\n\t/**\n\t * `GRAD` axis — fine-tunes visual weight without affecting layout dimensions.\n\t * Use `-25` on dark backgrounds to offset light halation effects.\n\t * @default 0\n\t */\n\tgrade?: -50 | -25 | 0 | 100 | 200;\n\n\t/**\n\t * `opsz` axis — optical size in dp. Used to set `font-size` if `size` is not specified.\n\t * Match rendered pixel size for best quality.\n\t * @default 24\n\t */\n\topticalSize?: 20 | 24 | 40 | 48;\n\n\t/**\n\t * Direct `font-size` override in px. `opsz` axis still respects `opticalSize`.\n\t * @example size={18} opticalSize={20}\n\t */\n\tsize?: number | \"inherit\";\n\n\t/**\n\t * Enables smooth spring animation when toggling FILL axis (uses `SPRING_TRANSITION_FAST`).\n\t * Requires `motion` dependency.\n\t * @default false\n\t * @example <Icon name=\"favorite\" fill={isLiked ? 1 : 0} animateFill />\n\t */\n\tanimateFill?: boolean;\n}\n\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tvariant = \"outlined\",\n\t\t\tfill = 0,\n\t\t\tweight = 400,\n\t\t\tgrade = 0,\n\t\t\topticalSize = 24,\n\t\t\tsize,\n\t\t\tanimateFill = false,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst fontVariationSettings = `'FILL' ${fill}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opticalSize}`;\n\n\t\tconst computedStyle: React.CSSProperties = {\n\t\t\tfontFamily: VARIANT_FONT[variant],\n\t\t\tfontSize:\n\t\t\t\tsize === \"inherit\"\n\t\t\t\t\t? \"inherit\"\n\t\t\t\t\t: size != null\n\t\t\t\t\t\t? `${size}px`\n\t\t\t\t\t\t: `${opticalSize}px`,\n\t\t\tfontVariationSettings,\n\t\t\t...style,\n\t\t};\n\n\t\tif (animateFill) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tanimate={{ fontVariationSettings }}\n\t\t\t\t\t\ttransition={SPRING_TRANSITION_FAST}\n\t\t\t\t\t\tstyle={computedStyle}\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: motion v12 HTMLMotionProps conflicts with React's event types\n\t\t\t\t\t\t{...(restProps as any)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</m.span>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={computedStyle}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</span>\n\t\t);\n\t},\n);\n\nIconComponent.displayName = \"Icon\";\n\n/**\n * Material Symbols (variable font) Icon component.\n *\n * Make sure to import the icon font CSS before usage:\n * ```ts\n * import '@bug-on/m3-expressive/material-symbols-cdn.css';\n * ```\n *\n * @remarks\n * - Use snake_case for icon names: `\"arrow_forward\"`, NOT `\"ArrowForward\"`.\n * - `aria-hidden=\"true\"` is attached automatically — provide screen reader labels on parent elements.\n *\n * @example\n * ```tsx\n * // Basic Icon\n * <Icon name=\"home\" />\n *\n * // Visual customization (filled, heavy weight)\n * <Icon name=\"favorite\" variant=\"rounded\" fill={1} weight={300} />\n *\n * // Animated transition on state change\n * <Icon name=\"bookmark\" fill={saved ? 1 : 0} animateFill />\n *\n * // Custom size override\n * <Icon name=\"close\" size={18} opticalSize={20} />\n *\n * // Combination with other components\n * <Button icon={<Icon name=\"add\" />}>Add to cart</Button>\n * ```\n *\n * @see https://fonts.google.com/icons\n * @see https://m3.material.io/styles/icons/overview\n */\nexport const Icon = React.memo(IconComponent);\n","\"use client\";\n\nimport * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n/** Radix accepts hover/scroll/always/auto. We add 'none' as a UI-only hide. */\nexport type ScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"none\";\ntype RadixScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"auto\";\nexport type ScrollAreaOrientation = \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface ScrollAreaProps\n\textends Omit<\n\t\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Root>,\n\t\t\"type\"\n\t> {\n\t/**\n\t * Controls when the scrollbars are visible.\n\t * - `hover`: Show on hover (default, recommended for desktop)\n\t * - `scroll`: Show only while scrolling (recommended for mobile)\n\t * - `always`: Always visible\n\t * - `none`: Never visible\n\t */\n\ttype?: ScrollAreaType;\n\t/**\n\t * The scrollbar orientation to render.\n\t * @default \"vertical\"\n\t */\n\torientation?: ScrollAreaOrientation;\n\t/** Delay in ms before scrollbars hide when `type` is `hover` or `scroll`. */\n\tscrollHideDelay?: number;\n\t/** Extra classes applied to the inner viewport element. */\n\tviewportClassName?: string;\n\t/** Ref to the scrolling viewport element. */\n\tviewportRef?: React.Ref<HTMLDivElement>;\n\t/** Extra props applied to the viewport element. */\n\tviewportProps?: React.ComponentPropsWithoutRef<\n\t\ttypeof RadixScrollArea.Viewport\n\t>;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\nconst ScrollArea = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Root>,\n\tScrollAreaProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tviewportClassName,\n\t\t\tchildren,\n\t\t\ttype = \"hover\",\n\t\t\torientation = \"vertical\",\n\t\t\tscrollHideDelay = 600,\n\t\t\tviewportRef,\n\t\t\tviewportProps,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [isTouchDevice, setIsTouchDevice] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tsetIsTouchDevice(\n\t\t\t\t\t\"ontouchstart\" in window || navigator.maxTouchPoints > 0,\n\t\t\t\t);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst resolvedType = React.useMemo(() => {\n\t\t\tif (type === \"hover\" && isTouchDevice) {\n\t\t\t\treturn \"scroll\";\n\t\t\t}\n\t\t\treturn type;\n\t\t}, [type, isTouchDevice]);\n\n\t\tconst radixType: RadixScrollAreaType =\n\t\t\tresolvedType === \"none\" ? \"always\" : resolvedType;\n\n\t\treturn (\n\t\t\t<RadixScrollArea.Root\n\t\t\t\tref={ref}\n\t\t\t\ttype={radixType}\n\t\t\t\tscrollHideDelay={scrollHideDelay}\n\t\t\t\tclassName={cn(\"relative overflow-hidden flex flex-col\", className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<RadixScrollArea.Viewport\n\t\t\t\t\tref={viewportRef}\n\t\t\t\t\t{...viewportProps}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"h-full w-full flex-1 min-h-0 min-w-0 rounded-[inherit]\",\n\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1\",\n\t\t\t\t\t\tviewportClassName,\n\t\t\t\t\t\tviewportProps?.className,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RadixScrollArea.Viewport>\n\n\t\t\t\t{(orientation === \"vertical\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{(orientation === \"horizontal\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"horizontal\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<RadixScrollArea.Corner className=\"bg-m3-surface-container\" />\n\t\t\t</RadixScrollArea.Root>\n\t\t);\n\t},\n);\nScrollArea.displayName = \"ScrollArea\";\n\n// ─── Scrollbar ────────────────────────────────────────────────────────────────\nconst ScrollAreaScrollbar = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Scrollbar>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Scrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n\t<RadixScrollArea.Scrollbar\n\t\tref={ref}\n\t\torientation={orientation}\n\t\tclassName={cn(\n\t\t\t\"flex touch-none select-none transition-all duration-300 ease-in-out\",\n\t\t\t\"absolute z-50\",\n\t\t\torientation === \"vertical\" &&\n\t\t\t\t\"right-0 top-0 bottom-0 w-2.5 border-l border-l-transparent p-px\",\n\t\t\torientation === \"horizontal\" &&\n\t\t\t\t\"bottom-0 left-0 right-0 h-2.5 flex-col border-t border-t-transparent p-px\",\n\t\t\t\"data-[state=hidden]:opacity-0 data-[state=visible]:opacity-100\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t<RadixScrollArea.Thumb\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex-1 rounded-full bg-m3-on-surface/25 transition-colors duration-200\",\n\t\t\t\t\"hover:bg-m3-on-surface/40 active:bg-m3-on-surface/55\",\n\t\t\t\t\"before:absolute before:left-1/2 before:top-1/2 before:min-h-11 before:min-w-11 before:-translate-x-1/2 before:-translate-y-1/2\",\n\t\t\t)}\n\t\t/>\n\t</RadixScrollArea.Scrollbar>\n));\nScrollAreaScrollbar.displayName = RadixScrollArea.Scrollbar.displayName;\n\n// ─── Corner ───────────────────────────────────────────────────────────────────\nconst ScrollAreaCorner = React.forwardRef<\n\tReact.ComponentRef<typeof RadixScrollArea.Corner>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Corner>\n>(({ className, ...props }, ref) => (\n\t<RadixScrollArea.Corner\n\t\tref={ref}\n\t\tclassName={cn(\"bg-m3-surface-container\", className)}\n\t\t{...props}\n\t/>\n));\nScrollAreaCorner.displayName = \"ScrollAreaCorner\";\n\nexport { ScrollArea, ScrollAreaScrollbar };\n","\"use client\";\n\nimport { createElement, useCallback, useEffect, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./buttons/button\";\nimport { Icon } from \"./icon\";\nimport { ScrollArea } from \"./scroll-area\";\n\nconst COPY_RESET_DELAY = 2000;\n\nexport interface CodeBlockProps {\n\t/** Raw code string to display and copy. */\n\tcode: string;\n\t/** Language label in the header (presentational only). @default \"React\" */\n\tlanguage?: string;\n\t/** Additional CSS classes for the outer wrapper. */\n\tclassName?: string;\n\t/**\n\t * Pre-highlighted HTML from Shiki SSR.\n\t * Use `codeToHtml` with `themes: { light, dark }` for dual-theme support.\n\t */\n\thtml?: string;\n}\n\n// ─── Sub-components ───────────────────────────────────────────────────────────\n\nfunction CopyButton({\n\tcopied,\n\tonCopy,\n}: {\n\tcopied: boolean;\n\tonCopy: () => void;\n}) {\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tonClick={onCopy}\n\t\t\ttitle=\"Copy code\"\n\t\t\taria-label={copied ? \"Code copied\" : \"Copy code\"}\n\t\t\tcolorStyle=\"text\"\n\t\t\tclassName=\"h-8 px-2 gap-1.5\"\n\t\t>\n\t\t\t{copied ? (\n\t\t\t\t<>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"check\"\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tclassName=\"text-m3-primary\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"text-[10px] font-bold uppercase tracking-wider text-m3-primary\">\n\t\t\t\t\t\tCopied!\n\t\t\t\t\t</span>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<Icon\n\t\t\t\t\t\tname=\"content_copy\"\n\t\t\t\t\t\tsize={14}\n\t\t\t\t\t\tclassName=\"text-m3-on-surface-variant\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"text-[10px] font-bold uppercase tracking-wider text-m3-on-surface-variant\">\n\t\t\t\t\t\tCopy\n\t\t\t\t\t</span>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</Button>\n\t);\n}\n\n/** Mappings for HTML attributes to React props */\nconst ATTR_MAP: Record<string, string> = {\n\tclass: \"className\",\n\ttabindex: \"tabIndex\",\n\treadonly: \"readOnly\",\n\tmaxlength: \"maxLength\",\n\tautocomplete: \"autoComplete\",\n\tautofocus: \"autoFocus\",\n\tcontenteditable: \"contentEditable\",\n\tspellcheck: \"spellCheck\",\n};\n\nfunction parseStyle(styleStr: string): React.CSSProperties {\n\tconst styleObj: Record<string, string> = {};\n\tfor (const s of styleStr.split(\";\")) {\n\t\tconst part = s.trim();\n\t\tif (!part) continue;\n\t\tconst colonIndex = part.indexOf(\":\");\n\t\tif (colonIndex === -1) continue;\n\n\t\tconst k = part.slice(0, colonIndex).trim();\n\t\tconst v = part.slice(colonIndex + 1).trim();\n\n\t\tif (k.startsWith(\"--\")) {\n\t\t\t// CSS variables must be passed as-is\n\t\t\tstyleObj[k] = v;\n\t\t} else {\n\t\t\t// Standard properties should be camelCased for React\n\t\t\tconst key = k.replace(/-./g, (x) => x[1].toUpperCase());\n\t\t\tstyleObj[key] = v;\n\t\t}\n\t}\n\treturn styleObj as React.CSSProperties;\n}\n\nfunction mapDomToReact(node: Node, key: string | number): React.ReactNode {\n\tif (node.nodeType === Node.TEXT_NODE) {\n\t\treturn node.textContent;\n\t}\n\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\tconst el = node as Element;\n\t\tconst tagName = el.tagName.toLowerCase();\n\t\tconst props: Record<string, unknown> = { key };\n\n\t\tfor (const attr of Array.from(el.attributes)) {\n\t\t\tconst propName = ATTR_MAP[attr.name] || attr.name;\n\t\t\tif (propName === \"style\") {\n\t\t\t\tprops.style = parseStyle(attr.value);\n\t\t\t} else {\n\t\t\t\tprops[propName] = attr.value;\n\t\t\t}\n\t\t}\n\n\t\treturn createElement(\n\t\t\ttagName,\n\t\t\tprops,\n\t\t\tArray.from(el.childNodes).map((child, i) => mapDomToReact(child, i)),\n\t\t);\n\t}\n\treturn null;\n}\n\nfunction CodeContent({ html, code }: { html?: string; code: string }) {\n\tconst [parsedContent, setParsedContent] = useState<React.ReactNode>(null);\n\n\tuseEffect(() => {\n\t\tif (html) {\n\t\t\tconst parser = new DOMParser();\n\t\t\tconst doc = parser.parseFromString(html, \"text/html\");\n\t\t\tconst content = Array.from(doc.body.childNodes).map((node, i) =>\n\t\t\t\tmapDomToReact(node, i),\n\t\t\t);\n\t\t\tsetParsedContent(content);\n\t\t}\n\t}, [html]);\n\n\tif (html) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"text-sm font-mono\",\n\t\t\t\t\t\"[&>pre]:bg-transparent! [&>pre]:p-0! [&>pre]:m-0!\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{parsedContent}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<pre className=\"text-sm font-mono text-m3-on-surface whitespace-pre\">\n\t\t\t{code}\n\t\t</pre>\n\t);\n}\n\n// ─── CodeBlock ────────────────────────────────────────────────────────────────\n\nexport function CodeBlock({\n\tcode,\n\tlanguage = \"React\",\n\tclassName,\n\thtml,\n}: CodeBlockProps) {\n\tconst [copied, setCopied] = useState(false);\n\n\tconst handleCopy = useCallback(async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(code);\n\t\t\tsetCopied(true);\n\t\t\tsetTimeout(() => setCopied(false), COPY_RESET_DELAY);\n\t\t} catch {\n\t\t\t// Clipboard API unavailable — fail silently\n\t\t}\n\t}, [code]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-m3-lg overflow-hidden max-w-full\",\n\t\t\t\t\"bg-m3-surface-container-lowest border border-m3-outline-variant/60\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"px-4 py-2 flex justify-between items-center\",\n\t\t\t\t\t\"bg-m3-surface-container-low border-b border-m3-outline-variant/60\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<span className=\"text-xs font-mono text-m3-on-surface-variant\">\n\t\t\t\t\t{language}\n\t\t\t\t</span>\n\t\t\t\t<CopyButton copied={copied} onCopy={handleCopy} />\n\t\t\t</div>\n\n\t\t\t<ScrollArea\n\t\t\t\ttype=\"hover\"\n\t\t\t\torientation=\"both\"\n\t\t\t\tclassName=\"max-h-120 flex-col w-full min-w-0\"\n\t\t\t>\n\t\t\t\t<div className=\"p-4 min-w-0 w-full\">\n\t\t\t\t\t<CodeContent html={html} code={code} />\n\t\t\t\t</div>\n\t\t\t</ScrollArea>\n\t\t</div>\n\t);\n}\n","/**\n * @file divider.tsx\n *\n * MD3 Expressive Divider component.\n *\n * - `Divider` → A thin line that groups content in lists and layouts.\n *\n * @remarks\n * Token references (Kotlin source — DividerTokens.kt v0_117):\n * Color = ColorSchemeKeyTokens.OutlineVariant → bg-m3-outline-variant / text-m3-outline-variant\n * Thickness = 1.0.dp → h-px (flat horizontal) | w-px (flat vertical) | strokeWidth={1} (wavy SVG)\n *\n * Variants:\n * - \"full-bleed\" → spans full width, no indent\n * - \"inset\" → leading indent (16dp standard / 72dp after-icon via insetStart)\n * - \"middle-inset\" → 16dp indent both sides\n * - \"subheader\" → same as full-bleed (label provided externally)\n *\n * Shapes:\n * - \"flat\" → straight 1px line rendered as <m.div> (default)\n * - \"wavy\" → sinusoidal SVG wave via <m.svg> + buildWavePath helper (horizontal only)\n *\n * Architecture:\n * - Styling: `cn` (clsx/tailwind-merge) + static Tailwind classes only\n * - Animation: Framer Motion LazyMotion/domMax, scaleX/scaleY spring entrance\n * - Wavy: SVG path generated by pure-JS `buildWavePath()` (cubic Bézier sine approx)\n * Uses ResizeObserver (via useContainerWidth) to measure container width so\n * the path has precise bounds and leading/trailing ends are properly rounded.\n * - A11y: role=\"separator\", aria-orientation, aria-hidden when decorative\n *\n * @see https://m3.material.io/components/divider/overview\n */\n\nimport { domMax, LazyMotion, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { useContainerWidth, useMergedRef } from \"./progress-indicator/hooks\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n// Exclude onDrag-family event handlers that conflict between React's HTMLAttributes\n// and Framer Motion's MotionProps (different DragEvent signatures).\ntype SafeHTMLDivAttrs = Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t| \"onDrag\"\n\t| \"onDragStart\"\n\t| \"onDragEnd\"\n\t| \"onDragEnter\"\n\t| \"onDragLeave\"\n\t| \"onDragOver\"\n\t| \"onDrop\"\n>;\n\nexport interface DividerProps extends SafeHTMLDivAttrs {\n\t/**\n\t * Visual variant controlling indentation.\n\t * - \"full-bleed\" → no indent, spans full container width/height (default)\n\t * - \"inset\" → leading indent only (use `insetStart` to control amount)\n\t * - \"middle-inset\" → 16px indent on both sides\n\t * - \"subheader\" → alias for full-bleed, used before section labels\n\t * @default \"full-bleed\"\n\t */\n\tvariant?: \"full-bleed\" | \"inset\" | \"middle-inset\" | \"subheader\";\n\n\t/**\n\t * Orientation of the divider line.\n\t * - \"horizontal\" → renders as `h-px w-full` bar (default)\n\t * - \"vertical\" → renders as `w-px h-full` column\n\t * Note: `shape=\"wavy\"` is not supported with orientation=\"vertical\".\n\t * @default \"horizontal\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\";\n\n\t/**\n\t * Shape of the divider line.\n\t * - \"flat\" → straight 1px line rendered as `<div>` (default)\n\t * - \"wavy\" → sinusoidal SVG wave (horizontal orientation only)\n\t *\n\t * When `shape=\"wavy\"` and `orientation=\"vertical\"`, silently falls back to\n\t * `shape=\"flat\"` and emits a `console.warn`.\n\t * @default \"flat\"\n\t */\n\tshape?: \"flat\" | \"wavy\";\n\n\t/**\n\t * Leading inset size for the \"inset\" variant.\n\t * - \"standard\" → 16px (`ml-4`)\n\t * - \"icon\" → 72px (`ml-[72px]`) — use when list items have leading icons/avatars\n\t * Only applies when `variant=\"inset\"`.\n\t * @default \"standard\"\n\t */\n\tinsetStart?: \"standard\" | \"icon\";\n\n\t/**\n\t * Wavy shape visual parameters. Only applies when `shape=\"wavy\"`.\n\t * All values are in pixels.\n\t */\n\twaveConfig?: {\n\t\t/**\n\t\t * Peak displacement from the center line.\n\t\t * @default 2\n\t\t */\n\t\tamplitude?: number;\n\t\t/**\n\t\t * Pixels per full sine cycle.\n\t\t * @default 32\n\t\t */\n\t\twavelength?: number;\n\t\t/**\n\t\t * Thickness of the wave stroke in pixels.\n\t\t * @default 1\n\t\t */\n\t\tstrokeWidth?: number;\n\t};\n\n\t/**\n\t * When true, marks the divider as decorative (`aria-hidden=\"true\"`).\n\t * Use when the divider is purely visual with no semantic meaning.\n\t * @default false\n\t */\n\tdecorative?: boolean;\n\n\t/**\n\t * When true, plays an entrance animation (scaleX/scaleY from 0→1).\n\t * Automatically disabled when user prefers reduced motion.\n\t * @default true\n\t */\n\tanimate?: boolean;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Generates an SVG path `d` string for a sinusoidal wave between two X bounds.\n * Uses cubic Bézier approximation of a sine curve for smooth rendering.\n * The error vs. a true sine is < 0.2%.\n *\n * Each half-cycle alternates between crest (+amplitude) and trough (-amplitude).\n * Control points are placed at 1/3 and 2/3 of each half-cycle for accuracy.\n *\n * @param startX - X coordinate where the path begins (e.g. capWidth = strokeWidth/2)\n * @param endX - X coordinate where the path ends (e.g. containerWidth - capWidth)\n * @param amplitude - Peak displacement from center line (px). Default: 2\n * @param wavelength - Pixels per full sine cycle. Default: 32\n * @param yCenter - Y coordinate of the wave center line. Default: 4\n * @returns SVG path `d` attribute string, or \"\" when startX >= endX\n *\n * @example\n * buildWavePath(0.5, 499.5, 2, 32, 4)\n * // → \"M 0.5,4 C 11.17,... 500,4 ...\"\n */\nexport function buildWavePath(\n\tstartX: number,\n\tendX: number,\n\tamplitude = 2,\n\twavelength = 32,\n\tyCenter = 4,\n): string {\n\tif (startX >= endX) return \"\";\n\n\tconst halfCycle = wavelength / 2;\n\tconst numHalfCycles = Math.ceil((endX - startX) / halfCycle);\n\n\t// MD3 precise bezier approximation: offset multiplier (4/3) lets control points\n\t// visually reach exactly the given amplitude.\n\tconst cpDistanceY = amplitude * (4 / 3);\n\n\tlet d = `M ${startX},${yCenter}`;\n\n\tfor (let i = 0; i < numHalfCycles; i++) {\n\t\tconst x0 = startX + i * halfCycle;\n\t\tconst x1 = Math.min(startX + (i + 1) * halfCycle, endX);\n\t\t// Alternate crest and trough\n\t\tconst peak = i % 2 === 0 ? yCenter - cpDistanceY : yCenter + cpDistanceY;\n\t\t// 1/3 and 2/3 ratio for smoother sine approximation (Google MD3 style)\n\t\tconst segLen = x1 - x0;\n\t\tconst cp1x = x0 + segLen / 3;\n\t\tconst cp2x = x1 - segLen / 3;\n\t\td += ` C ${cp1x},${peak} ${cp2x},${peak} ${x1},${yCenter}`;\n\t}\n\n\treturn d;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal implementation\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst DividerImpl = React.forwardRef<HTMLDivElement, DividerProps>(\n\t(\n\t\t{\n\t\t\tvariant = \"full-bleed\",\n\t\t\torientation = \"horizontal\",\n\t\t\tshape = \"flat\",\n\t\t\tinsetStart = \"standard\",\n\t\t\twaveConfig,\n\t\t\tdecorative = false,\n\t\t\tanimate = true,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst reducedMotion = useReducedMotion();\n\t\tconst shouldAnimate = animate && !reducedMotion;\n\n\t\t// Wavy is only supported for horizontal orientation\n\t\tconst effectiveShape =\n\t\t\tshape === \"wavy\" && orientation === \"vertical\" ? \"flat\" : shape;\n\n\t\tif (shape === \"wavy\" && orientation === \"vertical\") {\n\t\t\tconsole.warn(\n\t\t\t\t\"[Divider] shape='wavy' is not supported with orientation='vertical'. Falling back to shape='flat'.\",\n\t\t\t);\n\t\t}\n\n\t\t// Container width measurement — needed for direct SVG path rendering so\n\t\t// leading/trailing ends land at exact bounds (enabling rounded caps).\n\t\tconst [containerRef, containerWidth] = useContainerWidth();\n\n\t\t// ── A11y attrs ──────────────────────────────────────────────────────────\n\t\tconst a11yProps = decorative\n\t\t\t? { \"aria-hidden\": \"true\" as const }\n\t\t\t: {\n\t\t\t\t\trole: \"separator\" as const,\n\t\t\t\t\t\"aria-orientation\": orientation,\n\t\t\t\t};\n\n\t\t// ── Ref Merging ────────────────────────────────────────────────────────\n\t\t// We need to merge the internal containerRef (for ResizeObserver) with\n\t\t// the user-provided external ref.\n\t\tconst mergedRef = useMergedRef(containerRef, ref);\n\n\t\t// ── Inset class mapping (all static) ────────────────────────────────────\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\t\tconst insetClass = cn(\n\t\t\tvariant === \"inset\" &&\n\t\t\t\tisHorizontal &&\n\t\t\t\tinsetStart === \"standard\" &&\n\t\t\t\t\"ml-4\",\n\t\t\tvariant === \"inset\" &&\n\t\t\t\tisHorizontal &&\n\t\t\t\tinsetStart === \"icon\" &&\n\t\t\t\t\"ml-[72px]\",\n\t\t\tvariant === \"inset\" && !isHorizontal && \"mt-4\",\n\t\t\tvariant === \"middle-inset\" && isHorizontal && \"mx-4\",\n\t\t\tvariant === \"middle-inset\" && !isHorizontal && \"my-4\",\n\t\t);\n\n\t\t// ── Spring transition ────────────────────────────────────────────────────\n\t\tconst springTransition = shouldAnimate\n\t\t\t? ({ type: \"spring\", stiffness: 300, damping: 30, mass: 0.6 } as const)\n\t\t\t: ({ duration: 0 } as const);\n\n\t\t// ── Wavy amplitude / wavelength / thickness ───────────────────────────\n\t\tconst amplitude = waveConfig?.amplitude ?? 2;\n\t\tconst wavelength = waveConfig?.wavelength ?? 32;\n\t\tconst strokeWidth = waveConfig?.strokeWidth ?? 1;\n\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\t// RENDER: Wavy\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\tif (effectiveShape === \"wavy\") {\n\t\t\t// Canvas explicitly accommodates the curve's exact bounding box.\n\t\t\tconst canvasHeight = Math.ceil(amplitude * 2 + strokeWidth);\n\t\t\tconst yCenter = canvasHeight / 2;\n\n\t\t\t// Half stroke-width inset so rounded caps are not clipped by the SVG edge.\n\t\t\tconst capWidth = strokeWidth / 2;\n\t\t\tconst pathStartX = capWidth;\n\t\t\tconst pathEndX = Math.max(capWidth, containerWidth - capWidth);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block shrink-0 overflow-hidden\",\n\t\t\t\t\t\tisHorizontal ? \"w-full\" : \"h-full self-stretch\",\n\t\t\t\t\t\tinsetClass,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: `${canvasHeight}px`, ...style }}\n\t\t\t\t\t{...a11yProps}\n\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: spread safe HTMLDiv attrs\n\t\t\t\t\t{...(props as any)}\n\t\t\t\t>\n\t\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t\t<m.svg\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t\tclassName=\"text-m3-outline-variant block\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{ overflow: \"visible\", transformOrigin: \"left center\" }}\n\t\t\t\t\t\t\tinitial={shouldAnimate ? { scaleX: 0, opacity: 0 } : undefined}\n\t\t\t\t\t\t\tanimate={shouldAnimate ? { scaleX: 1, opacity: 1 } : undefined}\n\t\t\t\t\t\t\ttransition={springTransition}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{containerWidth > 0 && (\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td={buildWavePath(\n\t\t\t\t\t\t\t\t\t\tpathStartX,\n\t\t\t\t\t\t\t\t\t\tpathEndX,\n\t\t\t\t\t\t\t\t\t\tamplitude,\n\t\t\t\t\t\t\t\t\t\twavelength,\n\t\t\t\t\t\t\t\t\t\tyCenter,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</m.svg>\n\t\t\t\t\t</LazyMotion>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\t// RENDER: Flat\n\t\t// ────────────────────────────────────────────────────────────────────────\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"block shrink-0 bg-m3-outline-variant\",\n\t\t\t\t\t\tisHorizontal ? \"h-px w-full\" : \"w-px h-full self-stretch\",\n\t\t\t\t\t\tinsetClass,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...(isHorizontal\n\t\t\t\t\t\t\t? { transformOrigin: \"left\" }\n\t\t\t\t\t\t\t: { transformOrigin: \"top\" }),\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t\tinitial={\n\t\t\t\t\t\tshouldAnimate\n\t\t\t\t\t\t\t? isHorizontal\n\t\t\t\t\t\t\t\t? { scaleX: 0 }\n\t\t\t\t\t\t\t\t: { scaleY: 0 }\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tanimate={\n\t\t\t\t\t\tshouldAnimate\n\t\t\t\t\t\t\t? isHorizontal\n\t\t\t\t\t\t\t\t? { scaleX: 1 }\n\t\t\t\t\t\t\t\t: { scaleY: 1 }\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\ttransition={springTransition}\n\t\t\t\t\t{...a11yProps}\n\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: spread safe HTMLDiv attrs\n\t\t\t\t\t{...(props as any)}\n\t\t\t\t/>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nDividerImpl.displayName = \"Divider\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Public export\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Divider — a thin line that groups content in lists and layouts.\n *\n * Supports four layout variants (full-bleed, inset, middle-inset, subheader),\n * two orientations (horizontal, vertical), and two shape modes (flat, wavy).\n *\n * The wavy shape renders a sinusoidal SVG wave and is only supported with\n * `orientation=\"horizontal\"`.\n *\n * @example\n * ```tsx\n * // Default flat full-bleed horizontal divider\n * <Divider />\n *\n * // Inset after icon list items\n * <Divider variant=\"inset\" insetStart=\"icon\" />\n *\n * // Vertical separator between panes\n * <Divider orientation=\"vertical\" />\n *\n * // Wavy expressive divider\n * <Divider shape=\"wavy\" />\n *\n * // Wavy with custom wave config\n * <Divider shape=\"wavy\" waveConfig={{ amplitude: 5, wavelength: 24 }} />\n *\n * // Decorative (no a11y semantics)\n * <Divider decorative />\n *\n * // No entrance animation\n * <Divider animate={false} />\n *\n * // Middle-inset wavy divider\n * <Divider variant=\"middle-inset\" shape=\"wavy\" />\n * ```\n *\n * @see https://m3.material.io/components/divider/overview\n */\nexport const Divider = React.memo(DividerImpl);\n","import * as React from \"react\";\nimport type { ListSelectionMode, ListStyle, ListVariant } from \"./list-types\";\n\nexport interface ListContextValue {\n\tselectionMode: ListSelectionMode;\n\tvariant: ListVariant;\n\tlistStyle: ListStyle;\n\tselectedValues: Set<string>;\n\tonItemChange: (value: string, selected: boolean) => void;\n\treorderable: boolean;\n\titemCount: number;\n\touterRadius: number;\n\tinnerRadius: number;\n}\n\nexport const ListContext = React.createContext<ListContextValue | null>(null);\n\nexport const useListContext = () => React.useContext(ListContext);\nexport type { ListSelectionMode, ListStyle, ListVariant };\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\n\nexport const LIST_TOKENS = {\n\toneLineHeight: 56,\n\ttwoLineHeight: 72,\n\tthreeLineHeight: 88,\n\n\tleadingSpace: 16,\n\ttrailingSpace: 16,\n\ttopSpace: 8,\n\tbottomSpace: 8,\n\tbetweenSpace: 16,\n\tsegmentedGap: 2,\n\n\tshape: {\n\t\tcontainerShape: cornerRadius.large,\n\t\titemOuterRadius: cornerRadius.large,\n\t\titemInnerRadius: cornerRadius.extraSmall,\n\t\tresting: cornerRadius.extraSmall,\n\t\thovered: cornerRadius.medium,\n\t\tfocused: cornerRadius.large,\n\t\tpressed: cornerRadius.large,\n\t\tselected: cornerRadius.large,\n\t\tdragged: cornerRadius.large,\n\t\tdisabled: cornerRadius.extraSmall,\n\t},\n\n\tstateLayer: {\n\t\thover: 0.08,\n\t\tfocus: 0.1,\n\t\tpressed: 0.1,\n\t\tdragged: 0.16,\n\t\tdisabled: 0.1,\n\t},\n\n\tleadingIconSize: 24,\n\tleadingIconExpressiveSize: 20,\n\tleadingAvatarSize: 40,\n\tleadingImageWidth: 56,\n\tleadingImageHeight: 56,\n\tleadingVideoSmallWidth: 100,\n\tleadingVideoSmallHeight: 56,\n\tleadingVideoLargeWidth: 114,\n\tleadingVideoLargeHeight: 64,\n\n\ttrailingIconSize: 24,\n\ttrailingIconExpressiveSize: 20,\n\n\tfocusIndicatorThickness: 3,\n\tfocusIndicatorOffset: -3,\n\n\tcssVars: {\n\t\tcontainerBg: \"var(--md-sys-color-surface)\",\n\t\tselectedContainerBg: \"var(--md-sys-color-secondary-container)\",\n\t\tlabelText: \"var(--md-sys-color-on-surface)\",\n\t\tselectedLabelText: \"var(--md-sys-color-on-secondary-container)\",\n\t\tsupportingText: \"var(--md-sys-color-on-surface-variant)\",\n\t\toverlineText: \"var(--md-sys-color-on-surface-variant)\",\n\t\ttrailingText: \"var(--md-sys-color-on-surface-variant)\",\n\t\tleadingIcon: \"var(--md-sys-color-on-surface-variant)\",\n\t\tfocusIndicator: \"var(--md-sys-color-secondary)\",\n\t},\n} as const;\n","import {\n\tclosestCenter,\n\tDndContext,\n\ttype DragEndEvent,\n\ttype DragOverEvent,\n\ttype DragStartEvent,\n\tKeyboardSensor,\n\tPointerSensor,\n\tuseSensor,\n\tuseSensors,\n} from \"@dnd-kit/core\";\nimport {\n\tarrayMove,\n\tSortableContext,\n\tsortableKeyboardCoordinates,\n\tverticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ListContext } from \"./list-context\";\nimport { LIST_TOKENS } from \"./list-tokens\";\nimport type { ListProps } from \"./list-types\";\n\nconst DND_ACTIVATION_DISTANCE = 8;\n\nfunction resolveItemId(item: unknown): string {\n\tif (item && typeof item === \"object\") {\n\t\tconst obj = item as Record<string, unknown>;\n\t\treturn String(obj.id ?? obj.value ?? item);\n\t}\n\treturn String(item);\n}\n\nfunction isListItem(child: React.ReactNode): child is React.ReactElement {\n\treturn (\n\t\tReact.isValidElement(child) &&\n\t\tchild.props != null &&\n\t\ttypeof child.props === \"object\" &&\n\t\t\"value\" in (child.props as Record<string, unknown>)\n\t);\n}\n\nconst ListImpl = React.forwardRef<HTMLUListElement, ListProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant = \"baseline\",\n\t\t\tlistStyle = \"standard\",\n\t\t\tselectionMode = \"none\",\n\t\t\tvalue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\treorderable = false,\n\t\t\titems,\n\t\t\tonReorder,\n\t\t\touterRadius = LIST_TOKENS.shape.itemOuterRadius,\n\t\t\tinnerRadius = LIST_TOKENS.shape.itemInnerRadius,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst listRef = React.useRef<HTMLUListElement | null>(null);\n\t\tconst [draggedOrder, setDraggedOrder] = React.useState<string[] | null>(\n\t\t\tnull,\n\t\t);\n\n\t\tReact.useImperativeHandle(ref, () => listRef.current as HTMLUListElement);\n\n\t\tconst [selectedState, setSelectedState] = React.useState<Set<string>>(\n\t\t\t() => {\n\t\t\t\tconst initialValue = value ?? defaultValue ?? [];\n\t\t\t\treturn new Set(\n\t\t\t\t\tArray.isArray(initialValue)\n\t\t\t\t\t\t? initialValue\n\t\t\t\t\t\t: initialValue\n\t\t\t\t\t\t\t? [initialValue]\n\t\t\t\t\t\t\t: [],\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\n\t\tconst isControlled = value !== undefined;\n\t\tconst selectedValues = React.useMemo(() => {\n\t\t\tif (isControlled) {\n\t\t\t\treturn new Set(Array.isArray(value) ? value : value ? [value] : []);\n\t\t\t}\n\t\t\treturn selectedState;\n\t\t}, [isControlled, value, selectedState]);\n\n\t\tconst onItemChange = React.useCallback(\n\t\t\t(itemValue: string, selected: boolean) => {\n\t\t\t\tconst nextSet = new Set(selectedValues);\n\n\t\t\t\tif (selectionMode === \"single-select\") {\n\t\t\t\t\tnextSet.clear();\n\t\t\t\t\tif (selected) nextSet.add(itemValue);\n\t\t\t\t} else if (selectionMode === \"multi-select\") {\n\t\t\t\t\tif (selected) {\n\t\t\t\t\t\tnextSet.add(itemValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnextSet.delete(itemValue);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!isControlled) setSelectedState(nextSet);\n\n\t\t\t\tif (onChange) {\n\t\t\t\t\tonChange(\n\t\t\t\t\t\tselectionMode === \"single-select\"\n\t\t\t\t\t\t\t? Array.from(nextSet)[0] || \"\"\n\t\t\t\t\t\t\t: Array.from(nextSet),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[selectedValues, selectionMode, isControlled, onChange],\n\t\t);\n\n\t\tconst sensors = useSensors(\n\t\t\tuseSensor(PointerSensor, {\n\t\t\t\tactivationConstraint: { distance: DND_ACTIVATION_DISTANCE },\n\t\t\t}),\n\t\t\tuseSensor(KeyboardSensor, {\n\t\t\t\tcoordinateGetter: sortableKeyboardCoordinates,\n\t\t\t}),\n\t\t);\n\n\t\tconst itemIds = React.useMemo(\n\t\t\t() => (items ? items.map(resolveItemId) : []),\n\t\t\t[items],\n\t\t);\n\n\t\tconst currentOrder = React.useMemo(\n\t\t\t() => draggedOrder || itemIds,\n\t\t\t[draggedOrder, itemIds],\n\t\t);\n\n\t\tconst handleDragStart = (_event: DragStartEvent) => {\n\t\t\t// Snapshot from currentOrder (not itemIds) to stay consistent if drag starts\n\t\t\t// while a previous draggedOrder is still pending flush.\n\t\t\tsetDraggedOrder(\n\t\t\t\tcurrentOrder.length > 0 ? [...currentOrder] : [...itemIds],\n\t\t\t);\n\t\t};\n\n\t\tconst handleDragOver = (event: DragOverEvent) => {\n\t\t\tconst { active, over } = event;\n\t\t\tif (!over || active.id === over.id || !draggedOrder) return;\n\n\t\t\tconst activeIndex = draggedOrder.indexOf(String(active.id));\n\t\t\tconst overIndex = draggedOrder.indexOf(String(over.id));\n\n\t\t\t// Guard: skip setState when order hasn't changed to avoid unnecessary re-renders\n\t\t\tif (activeIndex !== -1 && overIndex !== -1 && activeIndex !== overIndex) {\n\t\t\t\tsetDraggedOrder((prev) =>\n\t\t\t\t\tprev ? arrayMove(prev, activeIndex, overIndex) : prev,\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\tconst handleDragEnd = (event: DragEndEvent) => {\n\t\t\tconst { active, over } = event;\n\n\t\t\t// Commit reorder BEFORE resetting draggedOrder so both state updates are\n\t\t\t// batched by React 18 automatic batching. Without this, resetting first\n\t\t\t// causes a flash render where currentOrder snaps back to the old itemIds\n\t\t\t// for one frame before the parent's new `items` prop arrives.\n\t\t\tif (over && active.id !== over.id && items && onReorder) {\n\t\t\t\tconst activeIndex = items.findIndex(\n\t\t\t\t\t(item) => resolveItemId(item) === active.id,\n\t\t\t\t);\n\t\t\t\tconst overIndex = items.findIndex(\n\t\t\t\t\t(item) => resolveItemId(item) === over.id,\n\t\t\t\t);\n\n\t\t\t\tif (activeIndex !== -1 && overIndex !== -1) {\n\t\t\t\t\tonReorder(arrayMove(items, activeIndex, overIndex));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetDraggedOrder(null);\n\t\t};\n\n\t\tconst handleDragCancel = () => {\n\t\t\tsetDraggedOrder(null);\n\t\t};\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLUListElement>) => {\n\t\t\tif (e.key !== \"ArrowDown\" && e.key !== \"ArrowUp\") return;\n\n\t\t\tconst listEl = listRef.current;\n\t\t\tif (!listEl) return;\n\n\t\t\tconst focusableItems = Array.from(\n\t\t\t\tlistEl.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'.md3-list-item-focusable:not([aria-disabled=\"true\"])',\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tif (focusableItems.length === 0) return;\n\n\t\t\te.preventDefault();\n\n\t\t\tconst activeEl = document.activeElement as HTMLElement;\n\t\t\tconst activeIndex = focusableItems.indexOf(activeEl);\n\n\t\t\tlet nextIndex: number;\n\t\t\tif (activeIndex === -1) {\n\t\t\t\tnextIndex = e.key === \"ArrowDown\" ? 0 : focusableItems.length - 1;\n\t\t\t} else {\n\t\t\t\tnextIndex =\n\t\t\t\t\te.key === \"ArrowDown\"\n\t\t\t\t\t\t? (activeIndex + 1) % focusableItems.length\n\t\t\t\t\t\t: (activeIndex - 1 + focusableItems.length) % focusableItems.length;\n\t\t\t}\n\n\t\t\tfocusableItems[nextIndex]?.focus();\n\t\t};\n\n\t\tconst childrenArray = React.Children.toArray(children);\n\t\tconst listItemCount = childrenArray.filter(isListItem).length;\n\n\t\tlet currentListItemIndex = 0;\n\t\tconst processedChildren = React.Children.map(children, (child) => {\n\t\t\tif (!isListItem(child)) return child;\n\n\t\t\tconst childValue = (child.props as Record<string, unknown>).value;\n\t\t\tconst index =\n\t\t\t\treorderable && currentOrder.length > 0\n\t\t\t\t\t? currentOrder.indexOf(String(childValue))\n\t\t\t\t\t: currentListItemIndex;\n\n\t\t\tcurrentListItemIndex++;\n\t\t\treturn React.cloneElement(\n\t\t\t\tchild as React.ReactElement<{ _listIndex?: number }>,\n\t\t\t\t{ _listIndex: index },\n\t\t\t);\n\t\t});\n\n\t\tconst contextValue = React.useMemo(\n\t\t\t() => ({\n\t\t\t\tselectionMode,\n\t\t\t\tvariant,\n\t\t\t\tlistStyle,\n\t\t\t\tselectedValues,\n\t\t\t\tonItemChange,\n\t\t\t\treorderable,\n\t\t\t\titemCount: listItemCount,\n\t\t\t\touterRadius,\n\t\t\t\tinnerRadius,\n\t\t\t}),\n\t\t\t[\n\t\t\t\tselectionMode,\n\t\t\t\tvariant,\n\t\t\t\tlistStyle,\n\t\t\t\tselectedValues,\n\t\t\t\tonItemChange,\n\t\t\t\treorderable,\n\t\t\t\tlistItemCount,\n\t\t\t\touterRadius,\n\t\t\t\tinnerRadius,\n\t\t\t],\n\t\t);\n\n\t\tconst dndId = React.useId();\n\n\t\tconst isListbox =\n\t\t\tselectionMode === \"single-select\" || selectionMode === \"multi-select\";\n\t\tconst role = isListbox ? \"listbox\" : \"list\";\n\t\tconst ariaMultiselectable =\n\t\t\tselectionMode === \"multi-select\" ? true : undefined;\n\n\t\tconst baseClasses = cn(\n\t\t\t\"flex flex-col w-full m-0 p-0 list-none bg-transparent focus:outline-none\",\n\t\t\tlistStyle === \"segmented\" && \"gap-[2px]\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst renderedList = (\n\t\t\t// biome-ignore lint/a11y/useAriaPropsSupportedByRole: role is dynamically set to listbox when selectionMode is active\n\t\t\t<ul\n\t\t\t\tref={listRef}\n\t\t\t\trole={role}\n\t\t\t\taria-multiselectable={ariaMultiselectable}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tclassName={baseClasses}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{processedChildren}\n\t\t\t</ul>\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<ListContext.Provider value={contextValue}>\n\t\t\t\t\t{reorderable && items ? (\n\t\t\t\t\t\t<DndContext\n\t\t\t\t\t\t\tid={dndId}\n\t\t\t\t\t\t\tsensors={sensors}\n\t\t\t\t\t\t\tcollisionDetection={closestCenter}\n\t\t\t\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\t\t\t\tonDragOver={handleDragOver}\n\t\t\t\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\t\t\t\tonDragCancel={handleDragCancel}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SortableContext\n\t\t\t\t\t\t\t\titems={currentOrder}\n\t\t\t\t\t\t\t\tstrategy={verticalListSortingStrategy}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{renderedList}\n\t\t\t\t\t\t\t</SortableContext>\n\t\t\t\t\t\t</DndContext>\n\t\t\t\t\t) : (\n\t\t\t\t\t\trenderedList\n\t\t\t\t\t)}\n\t\t\t\t</ListContext.Provider>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nListImpl.displayName = \"List\";\n\nexport const List = React.memo(ListImpl);\nexport type { ListProps };\n","import * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Divider } from \"../divider\";\nimport type { ListDividerProps } from \"./list-types\";\n\nconst INSET_CLASSES = {\n\ticon: \"pl-[56px]\",\n\tavatar: \"pl-[72px]\",\n\tcustom: \"pl-4\",\n} as const;\n\nconst ListDividerImpl = React.forwardRef<HTMLLIElement, ListDividerProps>(\n\t({ className, inset = false, insetType = \"avatar\", ...props }, ref) => {\n\t\tconst insetClass = inset ? INSET_CLASSES[insetType] : \"\";\n\n\t\treturn (\n\t\t\t<li\n\t\t\t\tref={ref}\n\t\t\t\trole=\"presentation\"\n\t\t\t\tclassName={cn(\"w-full bg-transparent list-none\", insetClass, className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Divider\n\t\t\t\t\tvariant=\"full-bleed\"\n\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\tanimate={false}\n\t\t\t\t\tdecorative\n\t\t\t\t/>\n\t\t\t</li>\n\t\t);\n\t},\n);\n\nListDividerImpl.displayName = \"ListDivider\";\n\nexport const ListDivider = React.memo(ListDividerImpl);\nexport type { ListDividerProps };\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 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 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","import { LIST_TOKENS } from \"./list-tokens\";\nimport type { ListItemPosition, ListSelectionMode } from \"./list-types\";\n\nexport function getListItemHeight(\n\thasOverline: boolean,\n\tsupportingTextLines: 0 | 1 | 2,\n): 56 | 72 | 88 {\n\tif (hasOverline && supportingTextLines > 0)\n\t\treturn LIST_TOKENS.threeLineHeight;\n\tif (supportingTextLines === 2) return LIST_TOKENS.threeLineHeight;\n\tif (hasOverline || supportingTextLines === 1)\n\t\treturn LIST_TOKENS.twoLineHeight;\n\treturn LIST_TOKENS.oneLineHeight;\n}\n\nexport function shouldTopAlign(height: number): boolean {\n\treturn height >= LIST_TOKENS.threeLineHeight;\n}\n\nexport function getExpressiveShape(\n\tstate:\n\t\t| \"resting\"\n\t\t| \"hovered\"\n\t\t| \"focused\"\n\t\t| \"pressed\"\n\t\t| \"selected\"\n\t\t| \"dragged\"\n\t\t| \"disabled\",\n): number {\n\treturn LIST_TOKENS.shape[state] ?? LIST_TOKENS.shape.resting;\n}\n\nexport function getListItemAriaProps(\n\tmode: ListSelectionMode,\n\tselected: boolean,\n\tdisabled: boolean,\n): Record<string, string | boolean | undefined> {\n\tconst props: Record<string, string | boolean | undefined> = {};\n\n\tif (disabled) props[\"aria-disabled\"] = true;\n\n\tif (mode === \"single-select\" || mode === \"multi-select\") {\n\t\tprops.role = \"option\";\n\t\tprops[\"aria-selected\"] = selected;\n\t} else if (mode === \"single-action\" || mode === \"multi-action\") {\n\t\tprops.role = \"button\";\n\t} else {\n\t\tprops.role = \"listitem\";\n\t}\n\n\treturn props;\n}\n\nexport function getListItemPosition(\n\tindex: number | undefined,\n\ttotal: number,\n): ListItemPosition {\n\tif (index === undefined || total <= 1) return \"solo\";\n\tif (index === 0) return \"leading\";\n\tif (index === total - 1) return \"trailing\";\n\treturn \"middle\";\n}\n\ntype RadiusCorners = { tl: number; tr: number; br: number; bl: number };\n\nexport function getAsymmetricRadius(\n\tposition: ListItemPosition,\n\touterRadius: number,\n\tinnerRadius: number,\n\tstateRadius: number,\n\tactive = false,\n): RadiusCorners {\n\tconst outer = Math.max(outerRadius, stateRadius);\n\tconst inner = active ? stateRadius : Math.min(innerRadius, stateRadius);\n\n\tif (active) {\n\t\tconst target = Math.max(outerRadius, stateRadius);\n\t\tswitch (position) {\n\t\t\tcase \"solo\":\n\t\t\t\treturn { tl: target, tr: target, br: target, bl: target };\n\t\t\tcase \"leading\":\n\t\t\t\treturn { tl: target, tr: target, br: stateRadius, bl: stateRadius };\n\t\t\tcase \"trailing\":\n\t\t\t\treturn { tl: stateRadius, tr: stateRadius, br: target, bl: target };\n\t\t\tdefault:\n\t\t\t\treturn {\n\t\t\t\t\ttl: stateRadius,\n\t\t\t\t\ttr: stateRadius,\n\t\t\t\t\tbr: stateRadius,\n\t\t\t\t\tbl: stateRadius,\n\t\t\t\t};\n\t\t}\n\t}\n\n\tswitch (position) {\n\t\tcase \"solo\":\n\t\t\treturn { tl: outer, tr: outer, br: outer, bl: outer };\n\t\tcase \"leading\":\n\t\t\treturn { tl: outer, tr: outer, br: inner, bl: inner };\n\t\tcase \"trailing\":\n\t\t\treturn { tl: inner, tr: inner, br: outer, bl: outer };\n\t\tdefault:\n\t\t\treturn {\n\t\t\t\ttl: stateRadius,\n\t\t\t\ttr: stateRadius,\n\t\t\t\tbr: stateRadius,\n\t\t\t\tbl: stateRadius,\n\t\t\t};\n\t}\n}\n","import { useSortable } from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Checkbox } from \"../checkbox\";\nimport { RadioButton } from \"../radio-button\";\nimport { Ripple, useRippleState } from \"../ripple\";\nimport { FAST_SPATIAL_SPRING } from \"../shared/motion-tokens\";\nimport { Switch } from \"../switch\";\nimport { useListContext } from \"./list-context\";\nimport { LIST_TOKENS } from \"./list-tokens\";\nimport type { ListItemProps } from \"./list-types\";\nimport {\n\tgetAsymmetricRadius,\n\tgetExpressiveShape,\n\tgetListItemAriaProps,\n\tgetListItemHeight,\n\tgetListItemPosition,\n\tshouldTopAlign,\n} from \"./list-utils\";\n\n// ── Sub-components ────────────────────────────────────────────────────────────\n\ninterface LeadingCheckboxProps {\n\tisSelected: boolean;\n\tdisabled: boolean;\n\tvalue: string;\n\ttopAlign: boolean;\n\tonItemChange: (value: string, selected: boolean) => void;\n}\n\nconst LeadingCheckbox = ({\n\tisSelected,\n\tdisabled,\n\tvalue,\n\ttopAlign,\n\tonItemChange,\n}: LeadingCheckboxProps) => (\n\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner checkbox handles key events\n\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center shrink-0 select-none md3-list-sub-focusable\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t)}\n\t\tonClick={(e) => e.stopPropagation()}\n\t>\n\t\t<Checkbox\n\t\t\tchecked={isSelected}\n\t\t\tdisabled={disabled}\n\t\t\tonCheckedChange={(checked) => onItemChange(value, checked)}\n\t\t/>\n\t</div>\n);\n\ninterface LeadingRadioProps {\n\tisSelected: boolean;\n\tdisabled: boolean;\n\tvalue: string;\n\ttopAlign: boolean;\n\tonItemChange: (value: string, selected: boolean) => void;\n}\n\nconst LeadingRadio = ({\n\tisSelected,\n\tdisabled,\n\tvalue,\n\ttopAlign,\n\tonItemChange,\n}: LeadingRadioProps) => (\n\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner radio handles key events\n\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t<div\n\t\tclassName={cn(\n\t\t\t\"flex items-center justify-center shrink-0 select-none md3-list-sub-focusable\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t)}\n\t\tonClick={(e) => e.stopPropagation()}\n\t>\n\t\t<RadioButton\n\t\t\tselected={isSelected}\n\t\t\tdisabled={disabled}\n\t\t\tonClick={() => onItemChange(value, true)}\n\t\t/>\n\t</div>\n);\n\n// ── Switch trailing helpers ───────────────────────────────────────────────────\n\ninterface SwitchTrailingProps {\n\ttrailingContent: React.ReactNode;\n\tisSelected: boolean;\n\tdisabled: boolean;\n\tselectionMode: string;\n\tvalue: string;\n\tonItemChange: (value: string, selected: boolean) => void;\n\ttrailingClass: string;\n}\n\nfunction renderSwitchTrailing({\n\ttrailingContent,\n\tisSelected,\n\tdisabled,\n\tselectionMode,\n\tvalue,\n\tonItemChange,\n\ttrailingClass,\n}: SwitchTrailingProps) {\n\tconst isSelectingMode =\n\t\tselectionMode === \"single-select\" || selectionMode === \"multi-select\";\n\n\tconst switchElement = React.isValidElement(trailingContent) ? (\n\t\t(() => {\n\t\t\tconst trailingProps = trailingContent.props as {\n\t\t\t\tchecked?: boolean;\n\t\t\t\tdisabled?: boolean;\n\t\t\t\tonCheckedChange?: (checked: boolean) => void;\n\t\t\t};\n\n\t\t\tconst checkedValue =\n\t\t\t\t!isSelectingMode && trailingProps.checked !== undefined\n\t\t\t\t\t? trailingProps.checked\n\t\t\t\t\t: isSelected;\n\n\t\t\tconst disabledValue =\n\t\t\t\ttrailingProps.disabled !== undefined\n\t\t\t\t\t? disabled || trailingProps.disabled\n\t\t\t\t\t: disabled;\n\n\t\t\tconst onCheckedChange = (checked: boolean) => {\n\t\t\t\tif (!isSelectingMode && trailingProps.onCheckedChange !== undefined) {\n\t\t\t\t\ttrailingProps.onCheckedChange(checked);\n\t\t\t\t} else {\n\t\t\t\t\tonItemChange(value, checked);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn React.cloneElement(\n\t\t\t\ttrailingContent as React.ReactElement<{\n\t\t\t\t\tchecked?: boolean;\n\t\t\t\t\tdisabled?: boolean;\n\t\t\t\t\tonCheckedChange?: (checked: boolean) => void;\n\t\t\t\t}>,\n\t\t\t\t{ checked: checkedValue, disabled: disabledValue, onCheckedChange },\n\t\t\t);\n\t\t})()\n\t) : (\n\t\t<Switch\n\t\t\tchecked={isSelected}\n\t\t\tdisabled={disabled}\n\t\t\tonCheckedChange={(checked) => onItemChange(value, checked)}\n\t\t/>\n\t);\n\n\treturn (\n\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner switch handles key events\n\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t<div\n\t\t\tclassName={cn(trailingClass, \"md3-list-sub-focusable\")}\n\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t>\n\t\t\t{switchElement}\n\t\t</div>\n\t);\n}\n\n// ── Main Component ────────────────────────────────────────────────────────────\n\nconst ListItemImpl = React.forwardRef<HTMLLIElement, ListItemProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvalue,\n\t\t\theadline,\n\t\t\tsupportingText,\n\t\t\tsupportingTextLines = 1,\n\t\t\toverline,\n\t\t\tleadingType = \"none\",\n\t\t\tleadingSrc,\n\t\t\tleadingAlt,\n\t\t\tleadingContent,\n\t\t\ttrailingType = \"none\",\n\t\t\ttrailingText,\n\t\t\ttrailingContent,\n\t\t\tdisabled = false,\n\t\t\tselected,\n\t\t\thref,\n\t\t\tonClick,\n\t\t\tinteractive = false,\n\t\t\tdragHandle = false,\n\t\t\tposition,\n\t\t\t_listIndex,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useListContext();\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\tconst selectionMode = context?.selectionMode ?? \"none\";\n\t\tconst variant = context?.variant ?? \"baseline\";\n\t\tconst onItemChange = context?.onItemChange ?? (() => {});\n\t\tconst reorderable = context?.reorderable ?? false;\n\n\t\tconst isSelected =\n\t\t\tselected !== undefined\n\t\t\t\t? selected\n\t\t\t\t: (context?.selectedValues.has(value) ?? false);\n\n\t\tconst [isHovered, setIsHovered] = React.useState(false);\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled,\n\t\t});\n\n\t\tconst {\n\t\t\tattributes,\n\t\t\tlisteners,\n\t\t\tsetNodeRef,\n\t\t\ttransform,\n\t\t\ttransition,\n\t\t\tisDragging,\n\t\t} = useSortable({ id: value, disabled: !reorderable });\n\n\t\tconst itemRef = React.useRef<HTMLLIElement | null>(null);\n\t\tconst setRefs = React.useCallback(\n\t\t\t(node: HTMLLIElement | null) => {\n\t\t\t\titemRef.current = node;\n\t\t\t\tsetNodeRef(node);\n\t\t\t\tif (typeof ref === \"function\") ref(node);\n\t\t\t\telse if (ref) ref.current = node;\n\t\t\t},\n\t\t\t[ref, setNodeRef],\n\t\t);\n\n\t\tconst height = getListItemHeight(\n\t\t\t!!overline,\n\t\t\tsupportingText ? supportingTextLines : 0,\n\t\t);\n\t\tconst topAlign = shouldTopAlign(height);\n\n\t\tconst currentState = disabled\n\t\t\t? \"disabled\"\n\t\t\t: isDragging\n\t\t\t\t? \"dragged\"\n\t\t\t\t: isPressed\n\t\t\t\t\t? \"pressed\"\n\t\t\t\t\t: isFocused\n\t\t\t\t\t\t? \"focused\"\n\t\t\t\t\t\t: isHovered\n\t\t\t\t\t\t\t? \"hovered\"\n\t\t\t\t\t\t\t: isSelected\n\t\t\t\t\t\t\t\t? \"selected\"\n\t\t\t\t\t\t\t\t: \"resting\";\n\n\t\tconst itemCount = context?.itemCount ?? 0;\n\t\tconst outerRadius =\n\t\t\tcontext?.outerRadius ?? LIST_TOKENS.shape.itemOuterRadius;\n\t\tconst innerRadius =\n\t\t\tcontext?.innerRadius ?? LIST_TOKENS.shape.itemInnerRadius;\n\n\t\tconst resolvedPosition = isDragging\n\t\t\t? \"solo\"\n\t\t\t: (position ?? getListItemPosition(_listIndex, itemCount));\n\n\t\tconst currentRadius =\n\t\t\tvariant === \"expressive\" ? getExpressiveShape(currentState) : 0;\n\t\tconst isActive = isSelected || isHovered || isPressed || isDragging;\n\n\t\tconst corners = getAsymmetricRadius(\n\t\t\tresolvedPosition,\n\t\t\touterRadius,\n\t\t\tinnerRadius,\n\t\t\tcurrentRadius,\n\t\t\tisActive,\n\t\t);\n\t\tconst staticCorners = getAsymmetricRadius(\n\t\t\tresolvedPosition,\n\t\t\touterRadius,\n\t\t\tinnerRadius,\n\t\t\tLIST_TOKENS.shape.resting,\n\t\t);\n\n\t\tconst _motionTransition = prefersReduced\n\t\t\t? { duration: 0 }\n\t\t\t: FAST_SPATIAL_SPRING;\n\n\t\tconst dndStyle = {\n\t\t\ttransform: CSS.Transform.toString(transform),\n\t\t\ttransition,\n\t\t\tzIndex: isDragging ? 10 : undefined,\n\t\t};\n\n\t\tconst isEntirelyInteractive =\n\t\t\tselectionMode !== \"multi-action\" &&\n\t\t\t(!!onClick || !!href || interactive || selectionMode !== \"none\");\n\n\t\tconst handleHorizontalKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tif (e.key !== \"ArrowRight\" && e.key !== \"ArrowLeft\") return;\n\n\t\t\tconst itemEl = itemRef.current;\n\t\t\tif (!itemEl) return;\n\n\t\t\tconst subFocusable = Array.from(\n\t\t\t\titemEl.querySelectorAll<HTMLElement>(\n\t\t\t\t\t\"button.md3-list-sub-focusable, input.md3-list-sub-focusable, a.md3-list-sub-focusable, [tabindex].md3-list-sub-focusable, .md3-list-sub-focusable button, .md3-list-sub-focusable input, .md3-list-sub-focusable a, .md3-list-sub-focusable [tabindex]\",\n\t\t\t\t),\n\t\t\t).filter(\n\t\t\t\t(el) =>\n\t\t\t\t\t!el.hasAttribute(\"disabled\") &&\n\t\t\t\t\tel.getAttribute(\"aria-disabled\") !== \"true\" &&\n\t\t\t\t\tel.getAttribute(\"tabindex\") !== \"-1\",\n\t\t\t);\n\n\t\t\tconst allFocusable: HTMLElement[] = [];\n\t\t\tconst mainFocusable = itemEl.querySelector(\".md3-list-item-focusable\");\n\t\t\tif (mainFocusable) {\n\t\t\t\tallFocusable.push(mainFocusable as HTMLElement);\n\t\t\t} else if (itemEl.classList.contains(\"md3-list-item-focusable\")) {\n\t\t\t\tallFocusable.push(itemEl);\n\t\t\t}\n\t\t\tallFocusable.push(...subFocusable);\n\n\t\t\tif (allFocusable.length <= 1) return;\n\n\t\t\tconst activeEl = document.activeElement as HTMLElement;\n\t\t\tconst activeIndex = allFocusable.indexOf(activeEl);\n\n\t\t\tif (activeIndex === -1) return;\n\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tconst nextIndex =\n\t\t\t\te.key === \"ArrowRight\"\n\t\t\t\t\t? (activeIndex + 1) % allFocusable.length\n\t\t\t\t\t: (activeIndex - 1 + allFocusable.length) % allFocusable.length;\n\n\t\t\tallFocusable[nextIndex]?.focus();\n\t\t};\n\n\t\tconst interactionHandlers = {\n\t\t\tonMouseEnter: () => !disabled && setIsHovered(true),\n\t\t\tonMouseLeave: () => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t},\n\t\t\tonFocus: () => !disabled && setIsFocused(true),\n\t\t\tonBlur: () => setIsFocused(false),\n\t\t\tonPointerDown: (e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tif (!disabled) {\n\t\t\t\t\tsetIsPressed(true);\n\t\t\t\t\tonPointerDown(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\tonPointerUp: () => setIsPressed(false),\n\t\t};\n\n\t\t// ── Render slots ──────────────────────────────────────────────────────────\n\n\t\tconst leadingBaseClass = cn(\n\t\t\t\"flex items-center justify-center shrink-0 select-none\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t);\n\n\t\tconst renderLeading = () => {\n\t\t\tswitch (leadingType) {\n\t\t\t\tcase \"icon\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\tvariant === \"expressive\"\n\t\t\t\t\t\t\t\t\t? \"size-5 text-[20px]\"\n\t\t\t\t\t\t\t\t\t: \"size-6 text-[24px]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"avatar\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"size-10 rounded-full overflow-hidden bg-m3-surface-container-highest\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"image\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"w-14 h-14 overflow-hidden bg-m3-surface-container-highest\",\n\t\t\t\t\t\t\t\tvariant === \"expressive\" ? \"rounded-m3-sm\" : \"rounded-none\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingSrc ? (\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tsrc={leadingSrc}\n\t\t\t\t\t\t\t\t\talt={leadingAlt || \"\"}\n\t\t\t\t\t\t\t\t\tclassName=\"size-full object-cover\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tleadingContent\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"video\": {\n\t\t\t\t\tconst isThreeLine = height === LIST_TOKENS.threeLineHeight;\n\t\t\t\t\tconst vWidth = isThreeLine\n\t\t\t\t\t\t? LIST_TOKENS.leadingVideoLargeWidth\n\t\t\t\t\t\t: LIST_TOKENS.leadingVideoSmallWidth;\n\t\t\t\t\tconst vHeight = isThreeLine\n\t\t\t\t\t\t? LIST_TOKENS.leadingVideoLargeHeight\n\t\t\t\t\t\t: LIST_TOKENS.leadingVideoSmallHeight;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tleadingBaseClass,\n\t\t\t\t\t\t\t\t\"overflow-hidden bg-black rounded-m3-sm\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{ width: vWidth, height: vHeight }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{leadingSrc ? (\n\t\t\t\t\t\t\t\t<video\n\t\t\t\t\t\t\t\t\tsrc={leadingSrc}\n\t\t\t\t\t\t\t\t\tclassName=\"size-full object-cover\"\n\t\t\t\t\t\t\t\t\tmuted\n\t\t\t\t\t\t\t\t\tplaysInline\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tleadingContent\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tcase \"checkbox\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LeadingCheckbox\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\ttopAlign={topAlign}\n\t\t\t\t\t\t\tonItemChange={onItemChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\tcase \"radio\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<LeadingRadio\n\t\t\t\t\t\t\tisSelected={isSelected}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\t\ttopAlign={topAlign}\n\t\t\t\t\t\t\tonItemChange={onItemChange}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn <div className={leadingBaseClass}>{leadingContent}</div>;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\tconst renderContent = () => (\n\t\t\t<div className=\"flex-1 min-w-0 flex flex-col justify-center select-none text-left\">\n\t\t\t\t{overline && (\n\t\t\t\t\t<span className=\"text-[11px] font-medium tracking-wider uppercase text-m3-on-surface-variant/80 mb-0.5 truncate\">\n\t\t\t\t\t\t{overline}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"text-sm font-medium transition-colors duration-200\",\n\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t: \"text-m3-on-surface\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{headline}\n\t\t\t\t</span>\n\t\t\t\t{supportingText && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"text-xs text-m3-on-surface-variant mt-0.5\",\n\t\t\t\t\t\t\tsupportingTextLines === 1 ? \"truncate\" : \"line-clamp-2\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{supportingText}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\n\t\tconst trailingBaseClass = cn(\n\t\t\t\"flex items-center justify-center shrink-0 ml-auto select-none\",\n\t\t\ttopAlign ? \"self-start pt-1\" : \"self-center\",\n\t\t);\n\n\t\tconst renderTrailing = () => {\n\t\t\tif (reorderable && dragHandle) {\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\ttrailingBaseClass,\n\t\t\t\t\t\t\t\"cursor-grab active:cursor-grabbing text-m3-on-surface-variant p-2 -mr-2\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{...attributes}\n\t\t\t\t\t\t{...listeners}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"material-symbols-outlined text-[24px]\">\n\t\t\t\t\t\t\tdrag_handle\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tswitch (trailingType) {\n\t\t\t\tcase \"icon\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\ttrailingBaseClass,\n\t\t\t\t\t\t\t\t\"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\tvariant === \"expressive\"\n\t\t\t\t\t\t\t\t\t? \"size-5 text-[20px]\"\n\t\t\t\t\t\t\t\t\t: \"size-6 text-[24px]\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"icon-button\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner button handles key events\n\t\t\t\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(trailingBaseClass, \"md3-list-sub-focusable\")}\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingContent}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"text\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\ttrailingBaseClass,\n\t\t\t\t\t\t\t\t\"text-xs text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingText}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t);\n\t\t\t\tcase \"checkbox\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner checkbox handles key events\n\t\t\t\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(trailingBaseClass, \"md3-list-sub-focusable\")}\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\tchecked={isSelected}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tonCheckedChange={(checked) => onItemChange(value, checked)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"radio\":\n\t\t\t\t\treturn (\n\t\t\t\t\t\t// biome-ignore lint/a11y/useKeyWithClickEvents: inner radio handles key events\n\t\t\t\t\t\t// biome-ignore lint/a11y/noStaticElementInteractions: only used to stop event bubbling\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(trailingBaseClass, \"md3-list-sub-focusable\")}\n\t\t\t\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RadioButton\n\t\t\t\t\t\t\t\tselected={isSelected}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tonClick={() => onItemChange(value, true)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\tcase \"switch\":\n\t\t\t\t\treturn renderSwitchTrailing({\n\t\t\t\t\t\ttrailingContent,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\tselectionMode,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tonItemChange,\n\t\t\t\t\t\ttrailingClass: trailingBaseClass,\n\t\t\t\t\t});\n\t\t\t\tcase \"custom\":\n\t\t\t\t\treturn <div className={trailingBaseClass}>{trailingContent}</div>;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\n\t\t// ── Render container layouts ──────────────────────────────────────────────\n\n\t\tconst ariaProps = getListItemAriaProps(selectionMode, isSelected, disabled);\n\n\t\tconst heightClass =\n\t\t\theight === LIST_TOKENS.oneLineHeight\n\t\t\t\t? \"min-h-[56px]\"\n\t\t\t\t: height === LIST_TOKENS.twoLineHeight\n\t\t\t\t\t? \"min-h-[72px]\"\n\t\t\t\t\t: \"min-h-[88px]\";\n\n\t\tconst paddingClass = topAlign ? \"py-3\" : \"py-2\";\n\n\t\tconst baseLiClasses = cn(\n\t\t\t\"flex w-full relative transition-colors duration-200 focus:outline-none\",\n\t\t\theightClass,\n\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst dndAttributes = reorderable && !dragHandle ? attributes : {};\n\t\tconst dndListeners = reorderable && !dragHandle ? listeners : {};\n\n\t\tconst cornerStyle = {\n\t\t\t...dndStyle,\n\t\t\tborderTopLeftRadius: corners.tl,\n\t\t\tborderTopRightRadius: corners.tr,\n\t\t\tborderBottomRightRadius: corners.br,\n\t\t\tborderBottomLeftRadius: corners.bl,\n\t\t};\n\n\t\tconst selectedBg =\n\t\t\tisSelected || isDragging\n\t\t\t\t? \"var(--md-sys-color-secondary-container)\"\n\t\t\t\t: \"var(--md-sys-color-surface)\";\n\n\t\tconst stateLayerClasses =\n\t\t\t\"relative overflow-hidden before:absolute before:inset-0 before:bg-current before:opacity-0 before:transition-opacity before:duration-200\";\n\n\t\tconst activeStateLayerClasses =\n\t\t\t\"hover:before:opacity-[0.08] focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\";\n\n\t\tif (selectionMode === \"multi-action\") {\n\t\t\tconst PrimaryWrapper = href ? m.a : m.button;\n\t\t\tconst primaryWrapperProps = href\n\t\t\t\t? { href: disabled ? undefined : href }\n\t\t\t\t: { type: \"button\" as const };\n\n\t\t\treturn (\n\t\t\t\t<m.li\n\t\t\t\t\tref={setRefs}\n\t\t\t\t\tstyle={{ ...cornerStyle, backgroundColor: selectedBg }}\n\t\t\t\t\tclassName={cn(baseLiClasses, \"overflow-hidden\")}\n\t\t\t\t\tonKeyDown={handleHorizontalKeyDown}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<PrimaryWrapper\n\t\t\t\t\t\t{...primaryWrapperProps}\n\t\t\t\t\t\tdisabled={href ? undefined : disabled}\n\t\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tif (disabled) return;\n\t\t\t\t\t\t\tonClick?.(e);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-1 items-center gap-3 text-left w-full focus:outline-none md3-list-item-focusable\",\n\t\t\t\t\t\t\tpaddingClass,\n\t\t\t\t\t\t\t\"pl-4 pr-2\",\n\t\t\t\t\t\t\tstateLayerClasses,\n\t\t\t\t\t\t\t!disabled && activeStateLayerClasses,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{...interactionHandlers}\n\t\t\t\t\t\t{...dndAttributes}\n\t\t\t\t\t\t{...dndListeners}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t{renderLeading()}\n\t\t\t\t\t\t{renderContent()}\n\t\t\t\t\t</PrimaryWrapper>\n\t\t\t\t\t<div className=\"pr-4 flex items-center\">{renderTrailing()}</div>\n\t\t\t\t</m.li>\n\t\t\t);\n\t\t}\n\n\t\tif (isEntirelyInteractive) {\n\t\t\tconst InteractiveWrapper = href ? m.a : m.button;\n\t\t\tconst wrapperProps = href\n\t\t\t\t? { href: disabled ? undefined : href }\n\t\t\t\t: { type: \"button\" as const };\n\n\t\t\treturn (\n\t\t\t\t<m.li\n\t\t\t\t\tref={setRefs}\n\t\t\t\t\tstyle={{ ...cornerStyle, backgroundColor: selectedBg }}\n\t\t\t\t\tclassName={cn(baseLiClasses, \"overflow-hidden\")}\n\t\t\t\t\tonKeyDown={handleHorizontalKeyDown}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<InteractiveWrapper\n\t\t\t\t\t\t{...wrapperProps}\n\t\t\t\t\t\tdisabled={href ? undefined : disabled}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tif (disabled) return;\n\t\t\t\t\t\t\tonClick?.(e);\n\t\t\t\t\t\t\tif (selectionMode === \"single-select\") {\n\t\t\t\t\t\t\t\tonItemChange(value, true);\n\t\t\t\t\t\t\t} else if (selectionMode === \"multi-select\") {\n\t\t\t\t\t\t\t\tonItemChange(value, !isSelected);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-1 items-center gap-3 text-left w-full focus:outline-none md3-list-item-focusable\",\n\t\t\t\t\t\t\tpaddingClass,\n\t\t\t\t\t\t\t\"px-4\",\n\t\t\t\t\t\t\tstateLayerClasses,\n\t\t\t\t\t\t\t!disabled && activeStateLayerClasses,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{...ariaProps}\n\t\t\t\t\t\t{...interactionHandlers}\n\t\t\t\t\t\t{...dndAttributes}\n\t\t\t\t\t\t{...dndListeners}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t{renderLeading()}\n\t\t\t\t\t\t{renderContent()}\n\t\t\t\t\t\t{renderTrailing()}\n\t\t\t\t\t</InteractiveWrapper>\n\t\t\t\t</m.li>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<m.li\n\t\t\t\tref={setRefs}\n\t\t\t\tstyle={{\n\t\t\t\t\t...dndStyle,\n\t\t\t\t\tborderTopLeftRadius: staticCorners.tl,\n\t\t\t\t\tborderTopRightRadius: staticCorners.tr,\n\t\t\t\t\tborderBottomRightRadius: staticCorners.br,\n\t\t\t\t\tborderBottomLeftRadius: staticCorners.bl,\n\t\t\t\t\tbackgroundColor: selectedBg,\n\t\t\t\t}}\n\t\t\t\tclassName={cn(\n\t\t\t\t\tbaseLiClasses,\n\t\t\t\t\t\"px-4 overflow-hidden items-center gap-3\",\n\t\t\t\t\tpaddingClass,\n\t\t\t\t)}\n\t\t\t\tonKeyDown={handleHorizontalKeyDown}\n\t\t\t\t{...ariaProps}\n\t\t\t\t{...dndAttributes}\n\t\t\t\t{...dndListeners}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{renderLeading()}\n\t\t\t\t{renderContent()}\n\t\t\t\t{renderTrailing()}\n\t\t\t</m.li>\n\t\t);\n\t},\n);\n\nListItemImpl.displayName = \"ListItem\";\n\nexport const ListItem = React.memo(ListItemImpl);\nexport type { ListItemProps };\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\nconst typographyVariants = cva(\"m-0 p-0 text-m3-on-surface\", {\n\tvariants: {\n\t\tvariant: {\n\t\t\t// Short hyphenated\n\t\t\t\"display-lg\": \"text-[57px] leading-[64px] font-normal tracking-[-0.25px]\",\n\t\t\t\"display-md\": \"text-[45px] leading-[52px] font-normal tracking-[0px]\",\n\t\t\t\"display-sm\": \"text-[36px] leading-[44px] font-normal tracking-[0px]\",\n\t\t\t\"headline-lg\": \"text-[32px] leading-[40px] font-normal tracking-[0px]\",\n\t\t\t\"headline-md\": \"text-[28px] leading-[36px] font-normal tracking-[0px]\",\n\t\t\t\"headline-sm\": \"text-[24px] leading-[32px] font-normal tracking-[0px]\",\n\t\t\t\"title-lg\": \"text-[22px] leading-[28px] font-normal tracking-[0px]\",\n\t\t\t\"title-md\": \"text-[16px] leading-[24px] font-medium tracking-[0.15px]\",\n\t\t\t\"title-sm\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-lg\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-md\": \"text-[12px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"label-sm\": \"text-[11px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"body-lg\": \"text-[16px] leading-[24px] font-normal tracking-[0.5px]\",\n\t\t\t\"body-md\": \"text-[14px] leading-[20px] font-normal tracking-[0.25px]\",\n\t\t\t\"body-sm\": \"text-[12px] leading-[16px] font-normal tracking-[0.4px]\",\n\n\t\t\t// Full hyphenated aliases\n\t\t\t\"display-large\":\n\t\t\t\t\"text-[57px] leading-[64px] font-normal tracking-[-0.25px]\",\n\t\t\t\"display-medium\": \"text-[45px] leading-[52px] font-normal tracking-[0px]\",\n\t\t\t\"display-small\": \"text-[36px] leading-[44px] font-normal tracking-[0px]\",\n\t\t\t\"headline-large\": \"text-[32px] leading-[40px] font-normal tracking-[0px]\",\n\t\t\t\"headline-medium\":\n\t\t\t\t\"text-[28px] leading-[36px] font-normal tracking-[0px]\",\n\t\t\t\"headline-small\": \"text-[24px] leading-[32px] font-normal tracking-[0px]\",\n\t\t\t\"title-large\": \"text-[22px] leading-[28px] font-normal tracking-[0px]\",\n\t\t\t\"title-medium\":\n\t\t\t\t\"text-[16px] leading-[24px] font-medium tracking-[0.15px]\",\n\t\t\t\"title-small\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-large\": \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\t\"label-medium\": \"text-[12px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"label-small\": \"text-[11px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\t\"body-large\": \"text-[16px] leading-[24px] font-normal tracking-[0.5px]\",\n\t\t\t\"body-medium\": \"text-[14px] leading-[20px] font-normal tracking-[0.25px]\",\n\t\t\t\"body-small\": \"text-[12px] leading-[16px] font-normal tracking-[0.4px]\",\n\n\t\t\t// CamelCase aliases\n\t\t\tdisplayLarge: \"text-[57px] leading-[64px] font-normal tracking-[-0.25px]\",\n\t\t\tdisplayMedium: \"text-[45px] leading-[52px] font-normal tracking-[0px]\",\n\t\t\tdisplaySmall: \"text-[36px] leading-[44px] font-normal tracking-[0px]\",\n\t\t\theadlineLarge: \"text-[32px] leading-[40px] font-normal tracking-[0px]\",\n\t\t\theadlineMedium: \"text-[28px] leading-[36px] font-normal tracking-[0px]\",\n\t\t\theadlineSmall: \"text-[24px] leading-[32px] font-normal tracking-[0px]\",\n\t\t\ttitleLarge: \"text-[22px] leading-[28px] font-normal tracking-[0px]\",\n\t\t\ttitleMedium: \"text-[16px] leading-[24px] font-medium tracking-[0.15px]\",\n\t\t\ttitleSmall: \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\tlabelLarge: \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\t\t\tlabelMedium: \"text-[12px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\tlabelSmall: \"text-[11px] leading-[16px] font-medium tracking-[0.5px]\",\n\t\t\tbodyLarge: \"text-[16px] leading-[24px] font-normal tracking-[0.5px]\",\n\t\t\tbodyMedium: \"text-[14px] leading-[20px] font-normal tracking-[0.25px]\",\n\t\t\tbodySmall: \"text-[12px] leading-[16px] font-normal tracking-[0.4px]\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tvariant: \"body-md\",\n\t},\n});\n\nexport interface TextProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof typographyVariants> {\n\t/**\n\t * Custom HTML element tag override.\n\t */\n\tas?: React.ElementType;\n\t/**\n\t * Text color override (CSS color value or Tailwind color class).\n\t */\n\tcolor?: string;\n\t/**\n\t * Font weight override.\n\t */\n\tweight?: string | number;\n}\n\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n\t(\n\t\t{ className, variant, as: Component, color, weight, style, ...props },\n\t\tref,\n\t) => {\n\t\t// Default component based on variant if not provided\n\t\tconst defaultComponent = React.useMemo(() => {\n\t\t\tconst v = variant ? String(variant).toLowerCase() : \"\";\n\t\t\tif (v.startsWith(\"display\") || v.startsWith(\"headline\")) return \"h1\";\n\t\t\tif (v.startsWith(\"title\")) return \"h2\";\n\t\t\treturn \"p\";\n\t\t}, [variant]);\n\n\t\tconst Tag = Component || defaultComponent;\n\n\t\tconst customStyle: React.CSSProperties = {\n\t\t\t...style,\n\t\t\t...(color ? { color } : {}),\n\t\t\t...(weight ? { fontWeight: weight } : {}),\n\t\t};\n\n\t\treturn (\n\t\t\t<Tag\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(typographyVariants({ variant, className }))}\n\t\t\t\tstyle={customStyle}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nText.displayName = \"Text\";\n\nexport { Text, typographyVariants };\n","/**\n * @file toc.tsx\n *\n * Table of Contents component for long-form documentation pages.\n *\n * Uses `IntersectionObserver` to track which section heading is currently in the\n * viewport and highlights the corresponding link. Smooth-scrolls to the target\n * when a link is clicked (respecting the browser's `prefers-reduced-motion`\n * media query via the native `scrollIntoView` API).\n *\n * @remarks\n * - SSR-safe: `IntersectionObserver` usage is guarded by a `typeof` check.\n * - The observer `rootMargin` is tuned for documentation layout with a fixed header\n * (~100px) and early deactivation (~80% from bottom) so the active item changes\n * before the section scrolls off-screen.\n */\n\nimport type React from \"react\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { ScrollArea, type ScrollAreaProps } from \"./scroll-area\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * A single entry in the Table of Contents.\n *\n * @example\n * ```ts\n * const items: ToCItem[] = [\n * { id: \"installation\", label: \"Installation\" },\n * { id: \"usage\", label: \"Usage\" },\n * ];\n * ```\n */\nexport interface ToCItem {\n\t/** The DOM `id` attribute of the corresponding section heading. */\n\tid: string;\n\t/** Human-readable label shown in the ToC. */\n\tlabel: string;\n}\n\n/**\n * Props for the `TableOfContents` component.\n */\nexport interface TableOfContentsProps {\n\t/**\n\t * Ordered list of section items to display.\n\t * Each item must have a matching DOM element with the same `id`.\n\t */\n\titems: ToCItem[];\n\t/**\n\t * Additional CSS classes applied to the root `<nav>` element.\n\t * Use this to control positioning (e.g. sticky, fixed) from the consumer.\n\t */\n\tclassName?: string;\n\t/**\n\t * Configuration for the internal ScrollArea.\n\t * @default { type: \"hover\" }\n\t */\n\tscrollAreaProps?: Omit<ScrollAreaProps, \"children\">;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Table of Contents sidebar component.\n *\n * Renders a `<nav>` sidebar with links to page sections. Tracks the active\n * section using `IntersectionObserver` and applies active styles to the\n * current link.\n *\n * @remarks\n * - Visible only on `xl` screens (`hidden xl:block` — sticky sidebar).\n * - The `aria-current` attribute is set on the active link for screen readers.\n * - Click scroll is smooth: `scrollIntoView({ behavior: \"smooth\" })`.\n *\n * @example\n * ```tsx\n * const toc: ToCItem[] = [\n * { id: \"overview\", label: \"Overview\" },\n * { id: \"props\", label: \"Props\" },\n * { id: \"examples\", label: \"Examples\" },\n * ];\n *\n * <TableOfContents items={toc} />\n * ```\n *\n * @see https://m3.material.io/foundations/content-design/navigation\n */\nexport function TableOfContents({\n\titems,\n\tclassName,\n\tscrollAreaProps,\n}: TableOfContentsProps) {\n\tconst [activeId, setActiveId] = useState(\"\");\n\n\t// Stabilize dependency — re-subscribe only when the item IDs actually change.\n\tconst itemIds = useMemo(() => items.map((i) => i.id), [items]);\n\n\tuseEffect(() => {\n\t\t// SSR guard: IntersectionObserver is not available in Node.js.\n\t\tif (typeof IntersectionObserver === \"undefined\") return;\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tif (entry.isIntersecting) setActiveId(entry.target.id);\n\t\t\t\t}\n\t\t\t},\n\t\t\t// rootMargin: top offset ~100px (fixed header), bottom -80% (early switch)\n\t\t\t{ rootMargin: \"-100px 0% -80% 0%\" },\n\t\t);\n\n\t\tfor (const id of itemIds) {\n\t\t\tconst el = document.getElementById(id);\n\t\t\tif (el) observer.observe(el);\n\t\t}\n\n\t\treturn () => observer.disconnect();\n\t}, [itemIds]);\n\n\tconst handleClick = useCallback(\n\t\t(e: React.MouseEvent<HTMLAnchorElement>, id: string) => {\n\t\t\te.preventDefault();\n\t\t\tdocument\n\t\t\t\t.getElementById(id)\n\t\t\t\t?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n\t\t},\n\t\t[],\n\t);\n\n\treturn (\n\t\t<nav\n\t\t\taria-label=\"On this page\"\n\t\t\tclassName={cn(\"pl-6 flex flex-col h-full\", className)}\n\t\t>\n\t\t\t<h4 className=\"text-xs font-bold text-m3-on-surface-variant uppercase tracking-widest mb-4 hidden lg:block\">\n\t\t\t\tOn this page\n\t\t\t</h4>\n\t\t\t<ScrollArea\n\t\t\t\ttype=\"hover\"\n\t\t\t\t{...scrollAreaProps}\n\t\t\t\tclassName={cn(\"flex-1 min-h-0\", scrollAreaProps?.className)}\n\t\t\t>\n\t\t\t\t<ul className=\"space-y-4 pr-4\">\n\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t<li key={item.id}>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref={`#${item.id}`}\n\t\t\t\t\t\t\t\tonClick={(e) => handleClick(e, item.id)}\n\t\t\t\t\t\t\t\taria-current={activeId === item.id ? \"true\" : undefined}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-sm transition-colors hover:text-m3-primary block\",\n\t\t\t\t\t\t\t\t\tactiveId === item.id\n\t\t\t\t\t\t\t\t\t\t? \"text-m3-primary font-bold\"\n\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant font-medium\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t))}\n\t\t\t\t</ul>\n\t\t\t</ScrollArea>\n\t\t</nav>\n\t);\n}\n","/**\n * TypeScaleTokens - MD3 Expressive Typography Physical Tokens\n *\n * Port of androidx.compose.material3.tokens.TypeScaleTokens\n * Adapted for Web with Google Sans Flex Variable Font (ROND axis = 100).\n *\n * All font sizes use rem units based on 14px root (project default).\n * Reference: Material Design 3 Type Scale Tokens spec.\n */\n\nconst font = \"'Google Sans Flex', system-ui, sans-serif\";\n\nexport const TypeScaleTokens = {\n\t// ─── DISPLAY ────────────────────────────────────────────────────────────────\n\tDisplayLargeFont: font,\n\tDisplayLargeWeight: 400,\n\tDisplayLargeSize: \"3.571rem\", // 57sp → ~57px / 14 = 4.071, MD3 uses 57px on 16px base → 3.5625rem\n\tDisplayLargeLineHeight: \"4rem\", // 64px\n\tDisplayLargeTracking: \"-0.25px\",\n\n\tDisplayMediumFont: font,\n\tDisplayMediumWeight: 400,\n\tDisplayMediumSize: \"2.857rem\", // 45px\n\tDisplayMediumLineHeight: \"3.286rem\", // 52px\n\tDisplayMediumTracking: \"0px\",\n\n\tDisplaySmallFont: font,\n\tDisplaySmallWeight: 400,\n\tDisplaySmallSize: \"2.571rem\", // 36px\n\tDisplaySmallLineHeight: \"3.143rem\", // 44px\n\tDisplaySmallTracking: \"0px\",\n\n\t// ─── HEADLINE ───────────────────────────────────────────────────────────────\n\tHeadlineLargeFont: font,\n\tHeadlineLargeWeight: 400,\n\tHeadlineLargeSize: \"2.286rem\", // 32px\n\tHeadlineLargeLineHeight: \"2.857rem\", // 40px\n\tHeadlineLargeTracking: \"0px\",\n\n\tHeadlineMediumFont: font,\n\tHeadlineMediumWeight: 400,\n\tHeadlineMediumSize: \"2rem\", // 28px\n\tHeadlineMediumLineHeight: \"2.571rem\", // 36px\n\tHeadlineMediumTracking: \"0px\",\n\n\tHeadlineSmallFont: font,\n\tHeadlineSmallWeight: 400,\n\tHeadlineSmallSize: \"1.714rem\", // 24px\n\tHeadlineSmallLineHeight: \"2.286rem\", // 32px\n\tHeadlineSmallTracking: \"0px\",\n\n\t// ─── TITLE ──────────────────────────────────────────────────────────────────\n\tTitleLargeFont: font,\n\tTitleLargeWeight: 400,\n\tTitleLargeSize: \"1.571rem\", // 22px\n\tTitleLargeLineHeight: \"2rem\", // 28px\n\tTitleLargeTracking: \"0px\",\n\n\tTitleMediumFont: font,\n\tTitleMediumWeight: 500,\n\tTitleMediumSize: \"1.143rem\", // 16px\n\tTitleMediumLineHeight: \"1.714rem\", // 24px\n\tTitleMediumTracking: \"0.15px\",\n\n\tTitleSmallFont: font,\n\tTitleSmallWeight: 500,\n\tTitleSmallSize: \"1rem\", // 14px\n\tTitleSmallLineHeight: \"1.429rem\", // 20px\n\tTitleSmallTracking: \"0.1px\",\n\n\t// ─── BODY ───────────────────────────────────────────────────────────────────\n\tBodyLargeFont: font,\n\tBodyLargeWeight: 400,\n\tBodyLargeSize: \"1.143rem\", // 16px\n\tBodyLargeLineHeight: \"1.714rem\", // 24px\n\tBodyLargeTracking: \"0.5px\",\n\n\tBodyMediumFont: font,\n\tBodyMediumWeight: 400,\n\tBodyMediumSize: \"1rem\", // 14px\n\tBodyMediumLineHeight: \"1.429rem\", // 20px\n\tBodyMediumTracking: \"0.25px\",\n\n\tBodySmallFont: font,\n\tBodySmallWeight: 400,\n\tBodySmallSize: \"0.857rem\", // 12px\n\tBodySmallLineHeight: \"1.143rem\", // 16px\n\tBodySmallTracking: \"0.4px\",\n\n\t// ─── LABEL ──────────────────────────────────────────────────────────────────\n\tLabelLargeFont: font,\n\tLabelLargeWeight: 500,\n\tLabelLargeSize: \"1rem\", // 14px\n\tLabelLargeLineHeight: \"1.429rem\", // 20px\n\tLabelLargeTracking: \"0.1px\",\n\n\tLabelMediumFont: font,\n\tLabelMediumWeight: 500,\n\tLabelMediumSize: \"0.857rem\", // 12px\n\tLabelMediumLineHeight: \"1.143rem\", // 16px\n\tLabelMediumTracking: \"0.5px\",\n\n\tLabelSmallFont: font,\n\tLabelSmallWeight: 500,\n\tLabelSmallSize: \"0.786rem\", // 11px\n\tLabelSmallLineHeight: \"1.143rem\", // 16px\n\tLabelSmallTracking: \"0.5px\",\n\n\t// ─── EMPHASIZED (MD3 Expressive) ────────────────────────────────────────────\n\t// Emphasized styles share Font/Size/LineHeight/Tracking with baseline.\n\t// Only fontWeight is elevated to create visual emphasis.\n\t// Source: TypographyTokens.kt (Emphasized entries reference same scale)\n\n\tDisplayLargeEmphasizedFont: font,\n\tDisplayLargeEmphasizedWeight: 800,\n\tDisplayLargeEmphasizedSize: \"3.571rem\",\n\tDisplayLargeEmphasizedLineHeight: \"4rem\",\n\tDisplayLargeEmphasizedTracking: \"-0.25px\",\n\n\tDisplayMediumEmphasizedFont: font,\n\tDisplayMediumEmphasizedWeight: 800,\n\tDisplayMediumEmphasizedSize: \"2.857rem\",\n\tDisplayMediumEmphasizedLineHeight: \"3.286rem\",\n\tDisplayMediumEmphasizedTracking: \"0px\",\n\n\tDisplaySmallEmphasizedFont: font,\n\tDisplaySmallEmphasizedWeight: 800,\n\tDisplaySmallEmphasizedSize: \"2.571rem\",\n\tDisplaySmallEmphasizedLineHeight: \"3.143rem\",\n\tDisplaySmallEmphasizedTracking: \"0px\",\n\n\tHeadlineLargeEmphasizedFont: font,\n\tHeadlineLargeEmphasizedWeight: 800,\n\tHeadlineLargeEmphasizedSize: \"2.286rem\",\n\tHeadlineLargeEmphasizedLineHeight: \"2.857rem\",\n\tHeadlineLargeEmphasizedTracking: \"0px\",\n\n\tHeadlineMediumEmphasizedFont: font,\n\tHeadlineMediumEmphasizedWeight: 800,\n\tHeadlineMediumEmphasizedSize: \"2rem\",\n\tHeadlineMediumEmphasizedLineHeight: \"2.571rem\",\n\tHeadlineMediumEmphasizedTracking: \"0px\",\n\n\tHeadlineSmallEmphasizedFont: font,\n\tHeadlineSmallEmphasizedWeight: 800,\n\tHeadlineSmallEmphasizedSize: \"1.714rem\",\n\tHeadlineSmallEmphasizedLineHeight: \"2.286rem\",\n\tHeadlineSmallEmphasizedTracking: \"0px\",\n\n\tTitleLargeEmphasizedFont: font,\n\tTitleLargeEmphasizedWeight: 700,\n\tTitleLargeEmphasizedSize: \"1.571rem\",\n\tTitleLargeEmphasizedLineHeight: \"2rem\",\n\tTitleLargeEmphasizedTracking: \"0px\",\n\n\tTitleMediumEmphasizedFont: font,\n\tTitleMediumEmphasizedWeight: 700,\n\tTitleMediumEmphasizedSize: \"1.143rem\",\n\tTitleMediumEmphasizedLineHeight: \"1.714rem\",\n\tTitleMediumEmphasizedTracking: \"0.15px\",\n\n\tTitleSmallEmphasizedFont: font,\n\tTitleSmallEmphasizedWeight: 700,\n\tTitleSmallEmphasizedSize: \"1rem\",\n\tTitleSmallEmphasizedLineHeight: \"1.429rem\",\n\tTitleSmallEmphasizedTracking: \"0.1px\",\n\n\tBodyLargeEmphasizedFont: font,\n\tBodyLargeEmphasizedWeight: 700,\n\tBodyLargeEmphasizedSize: \"1.143rem\",\n\tBodyLargeEmphasizedLineHeight: \"1.714rem\",\n\tBodyLargeEmphasizedTracking: \"0.5px\",\n\n\tBodyMediumEmphasizedFont: font,\n\tBodyMediumEmphasizedWeight: 700,\n\tBodyMediumEmphasizedSize: \"1rem\",\n\tBodyMediumEmphasizedLineHeight: \"1.429rem\",\n\tBodyMediumEmphasizedTracking: \"0.25px\",\n\n\tBodySmallEmphasizedFont: font,\n\tBodySmallEmphasizedWeight: 700,\n\tBodySmallEmphasizedSize: \"0.857rem\",\n\tBodySmallEmphasizedLineHeight: \"1.143rem\",\n\tBodySmallEmphasizedTracking: \"0.4px\",\n\n\tLabelLargeEmphasizedFont: font,\n\tLabelLargeEmphasizedWeight: 800,\n\tLabelLargeEmphasizedSize: \"1rem\",\n\tLabelLargeEmphasizedLineHeight: \"1.429rem\",\n\tLabelLargeEmphasizedTracking: \"0.1px\",\n\n\tLabelMediumEmphasizedFont: font,\n\tLabelMediumEmphasizedWeight: 800,\n\tLabelMediumEmphasizedSize: \"0.857rem\",\n\tLabelMediumEmphasizedLineHeight: \"1.143rem\",\n\tLabelMediumEmphasizedTracking: \"0.5px\",\n\n\tLabelSmallEmphasizedFont: font,\n\tLabelSmallEmphasizedWeight: 800,\n\tLabelSmallEmphasizedSize: \"0.786rem\",\n\tLabelSmallEmphasizedLineHeight: \"1.143rem\",\n\tLabelSmallEmphasizedTracking: \"0.5px\",\n} as const;\n\nexport type TypeScaleTokensType = typeof TypeScaleTokens;\n","/**\n * TypographyKeyTokens - MD3 Expressive Typography Key Tokens Enum\n *\n * Port of androidx.compose.material3.tokens.TypographyKeyTokens (Kotlin enum class).\n * Used to reference a specific TextStyle via Typography.fromToken().\n *\n * Contains 30 keys: 15 baseline + 15 emphasized (MD3 Expressive).\n */\nexport enum TypographyKeyTokens {\n\t// ─── Baseline (15) ──────────────────────────────────────────────────────\n\tBodyLarge = \"BodyLarge\",\n\tBodyMedium = \"BodyMedium\",\n\tBodySmall = \"BodySmall\",\n\tDisplayLarge = \"DisplayLarge\",\n\tDisplayMedium = \"DisplayMedium\",\n\tDisplaySmall = \"DisplaySmall\",\n\tHeadlineLarge = \"HeadlineLarge\",\n\tHeadlineMedium = \"HeadlineMedium\",\n\tHeadlineSmall = \"HeadlineSmall\",\n\tLabelLarge = \"LabelLarge\",\n\tLabelMedium = \"LabelMedium\",\n\tLabelSmall = \"LabelSmall\",\n\tTitleLarge = \"TitleLarge\",\n\tTitleMedium = \"TitleMedium\",\n\tTitleSmall = \"TitleSmall\",\n\n\t// ─── Emphasized (15) - MD3 Expressive ───────────────────────────────────\n\tBodyLargeEmphasized = \"BodyLargeEmphasized\",\n\tBodyMediumEmphasized = \"BodyMediumEmphasized\",\n\tBodySmallEmphasized = \"BodySmallEmphasized\",\n\tDisplayLargeEmphasized = \"DisplayLargeEmphasized\",\n\tDisplayMediumEmphasized = \"DisplayMediumEmphasized\",\n\tDisplaySmallEmphasized = \"DisplaySmallEmphasized\",\n\tHeadlineLargeEmphasized = \"HeadlineLargeEmphasized\",\n\tHeadlineMediumEmphasized = \"HeadlineMediumEmphasized\",\n\tHeadlineSmallEmphasized = \"HeadlineSmallEmphasized\",\n\tLabelLargeEmphasized = \"LabelLargeEmphasized\",\n\tLabelMediumEmphasized = \"LabelMediumEmphasized\",\n\tLabelSmallEmphasized = \"LabelSmallEmphasized\",\n\tTitleLargeEmphasized = \"TitleLargeEmphasized\",\n\tTitleMediumEmphasized = \"TitleMediumEmphasized\",\n\tTitleSmallEmphasized = \"TitleSmallEmphasized\",\n}\n","/**\n * @file typography-tokens.ts\n * @description MD3 Expressive Typography Token Definitions.\n *\n * Port of `androidx.compose.material3.tokens.TypographyTokens` (Kotlin class).\n *\n * ### Memory Optimization\n * All 30 `TextStyle` properties are implemented as **lazy getters** — they are\n * computed on first access and cached, rather than being computed eagerly at\n * construction time. This reduces the instantiation cost of `TypographyTokens`.\n *\n * ### Variable Font Axes\n * Supports customizable CSS `font-variation-settings` via {@link FontVariationAxes}.\n * - Default `ROND` value is `100` (maximum roundness of Google Sans Flex).\n * - Other axes remain at font defaults unless explicitly overridden.\n *\n * @example Basic usage (default tokens)\n * ```ts\n * const tokens = new TypographyTokens();\n * const style = tokens.BodyLarge; // { fontSize, fontWeight, ... }\n * ```\n *\n * @example Custom font family\n * ```ts\n * const tokens = new TypographyTokens({ fontFamily: \"'Inter', sans-serif\" });\n * ```\n *\n * @example Custom ROND axis (partial roundness)\n * ```ts\n * const tokens = new TypographyTokens({ fontVariationAxes: { ROND: 50 } });\n * ```\n */\n\nimport { TypeScaleTokens } from \"./type-scale-tokens\";\n\n// ─── Font Variation ───────────────────────────────────────────────────────────\n\n/**\n * Configurable axes for CSS `font-variation-settings`.\n *\n * Each key maps to a named variable font axis. Any axis not specified falls\n * back to the font's own default value.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/font-variation-settings\n *\n * @example\n * ```ts\n * const axes: FontVariationAxes = { ROND: 100, wght: 600 };\n * ```\n */\nexport interface FontVariationAxes {\n\t/**\n\t * Roundness axis of Google Sans Flex Variable Font.\n\t * Range: `0` (sharp corners) – `100` (fully rounded).\n\t * @default 100\n\t */\n\tROND?: number;\n\t/**\n\t * Weight axis. Overrides `font-weight` via variation settings.\n\t * @default font default\n\t */\n\twght?: number;\n\t/**\n\t * Width axis. Controls glyph condensation/expansion.\n\t * @default font default\n\t */\n\twdth?: number;\n\t/** Any additional named variation axis supported by the font. */\n\t[axis: string]: number | undefined;\n}\n\n/**\n * Default font variation axes for MD3 Expressive.\n * Sets `ROND` to `100` for maximum roundness; all other axes use font defaults.\n */\nexport const DEFAULT_FONT_VARIATION_AXES: Readonly<FontVariationAxes> =\n\tObject.freeze({ ROND: 100 });\n\n/**\n * Serializes a {@link FontVariationAxes} map into a CSS `font-variation-settings` string.\n *\n * @example\n * ```ts\n * serializeFontVariationAxes({ ROND: 100, wght: 700 });\n * // → '\"ROND\" 100, \"wght\" 700'\n * ```\n */\nexport function serializeFontVariationAxes(axes: FontVariationAxes): string {\n\treturn Object.entries(axes)\n\t\t.filter(([, v]) => v !== undefined)\n\t\t.map(([k, v]) => `\"${k}\" ${v}`)\n\t\t.join(\", \");\n}\n\n/**\n * Pre-computed default `font-variation-settings` string.\n * Equivalent to `'\"ROND\" 100'`.\n */\nexport const MD3_EXPRESSIVE_FONT_VARIATION: string = serializeFontVariationAxes(\n\tDEFAULT_FONT_VARIATION_AXES,\n);\n\n// ─── TextStyle ────────────────────────────────────────────────────────────────\n\n/**\n * Web equivalent of Compose's `TextStyle`.\n *\n * All properties are readonly and map directly to CSS font properties.\n * The `fontVariationSettings` field carries the serialized variable-font axes.\n */\nexport interface TextStyle {\n\t/** CSS `font-family` value. */\n\treadonly fontFamily: string;\n\t/** CSS `font-weight` numeric value (e.g. `400`, `700`). */\n\treadonly fontWeight: number;\n\t/** CSS `font-size` in `rem` units. */\n\treadonly fontSize: string;\n\t/** CSS `line-height` in `rem` units. */\n\treadonly lineHeight: string;\n\t/** CSS `letter-spacing` in `px` units. */\n\treadonly letterSpacing: string;\n\t/**\n\t * CSS `font-variation-settings` string.\n\t * @example '\"ROND\" 100'\n\t * @example '\"ROND\" 50, \"wght\" 600'\n\t */\n\treadonly fontVariationSettings: string;\n}\n\n// ─── TypographyTokens Options ─────────────────────────────────────────────────\n\n/**\n * Constructor options for {@link TypographyTokens}.\n */\nexport interface TypographyTokensOptions {\n\t/**\n\t * Custom CSS `font-family` string. When provided, overrides the default\n\t * Google Sans Flex font for all token styles.\n\t *\n\t * @example \"'Roboto', sans-serif\"\n\t */\n\tfontFamily?: string;\n\t/**\n\t * Variable font axes to apply via `font-variation-settings`.\n\t * Merged on top of {@link DEFAULT_FONT_VARIATION_AXES}.\n\t * Provide only the axes you want to override.\n\t *\n\t * @example { ROND: 0 } // sharp corners\n\t */\n\tfontVariationAxes?: FontVariationAxes;\n}\n\n// ─── Internal factory ─────────────────────────────────────────────────────────\n\ntype TokenRecord = Record<string, string | number>;\n\n/**\n * Creates a frozen {@link TextStyle} from the {@link TypeScaleTokens} lookup\n * using the given token prefix (e.g. `\"BodyLarge\"`).\n *\n * @internal\n */\nfunction buildStyle(\n\tprefix: string,\n\tfontFamily: string | undefined,\n\tfontVariationSettings: string,\n): TextStyle {\n\tconst t = TypeScaleTokens as TokenRecord;\n\treturn Object.freeze({\n\t\tfontFamily: fontFamily ?? (t[`${prefix}Font`] as string),\n\t\tfontWeight: t[`${prefix}Weight`] as number,\n\t\tfontSize: t[`${prefix}Size`] as string,\n\t\tlineHeight: t[`${prefix}LineHeight`] as string,\n\t\tletterSpacing: t[`${prefix}Tracking`] as string,\n\t\tfontVariationSettings,\n\t});\n}\n\n// ─── TypographyTokens ─────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Typography Token class.\n *\n * Port of `internal class TypographyTokens(val fontFamily: FontFamily? = null)`\n * from `androidx.compose.material3.tokens.TypographyTokens`.\n *\n * Provides 30 pre-defined {@link TextStyle} properties (15 baseline + 15 emphasized),\n * each implemented as a **lazy getter** — computed once on first access, then cached.\n *\n * ### Customization\n * Pass {@link TypographyTokensOptions} to the constructor to override:\n * - `fontFamily` — swap the typeface\n * - `fontVariationAxes` — control variable font axes (e.g., `ROND`)\n *\n * @example Default\n * ```ts\n * const tokens = new TypographyTokens();\n * ```\n *\n * @example Custom font + half-rounded\n * ```ts\n * const tokens = new TypographyTokens({\n * fontFamily: \"'Inter', sans-serif\",\n * fontVariationAxes: { ROND: 50 },\n * });\n * ```\n */\nexport class TypographyTokens {\n\treadonly #fontFamily: string | undefined;\n\treadonly #fontVariationSettings: string;\n\n\tconstructor(options: TypographyTokensOptions | string = {}) {\n\t\t// Support legacy string signature: new TypographyTokens(\"'Inter', sans-serif\")\n\t\tif (typeof options === \"string\") {\n\t\t\tthis.#fontFamily = options;\n\t\t\tthis.#fontVariationSettings = MD3_EXPRESSIVE_FONT_VARIATION;\n\t\t} else {\n\t\t\tthis.#fontFamily = options.fontFamily;\n\t\t\tconst axes: FontVariationAxes = options.fontVariationAxes\n\t\t\t\t? { ...DEFAULT_FONT_VARIATION_AXES, ...options.fontVariationAxes }\n\t\t\t\t: DEFAULT_FONT_VARIATION_AXES;\n\t\t\tthis.#fontVariationSettings = serializeFontVariationAxes(axes);\n\t\t}\n\t}\n\n\t// Helper to lazily build + cache a style on first access\n\t#cache: Map<string, TextStyle> = new Map();\n\t#get(prefix: string): TextStyle {\n\t\tlet style = this.#cache.get(prefix);\n\t\tif (!style) {\n\t\t\tstyle = buildStyle(prefix, this.#fontFamily, this.#fontVariationSettings);\n\t\t\tthis.#cache.set(prefix, style);\n\t\t}\n\t\treturn style;\n\t}\n\n\t// ─── Baseline Styles (15) ──────────────────────────────────────────────────\n\t/** Display Large – `57px`, weight 400 */\n\tget DisplayLarge(): TextStyle {\n\t\treturn this.#get(\"DisplayLarge\");\n\t}\n\t/** Display Medium – `45px`, weight 400 */\n\tget DisplayMedium(): TextStyle {\n\t\treturn this.#get(\"DisplayMedium\");\n\t}\n\t/** Display Small – `36px`, weight 400 */\n\tget DisplaySmall(): TextStyle {\n\t\treturn this.#get(\"DisplaySmall\");\n\t}\n\t/** Headline Large – `32px`, weight 400 */\n\tget HeadlineLarge(): TextStyle {\n\t\treturn this.#get(\"HeadlineLarge\");\n\t}\n\t/** Headline Medium – `28px`, weight 400 */\n\tget HeadlineMedium(): TextStyle {\n\t\treturn this.#get(\"HeadlineMedium\");\n\t}\n\t/** Headline Small – `24px`, weight 400 */\n\tget HeadlineSmall(): TextStyle {\n\t\treturn this.#get(\"HeadlineSmall\");\n\t}\n\t/** Title Large – `22px`, weight 400 */\n\tget TitleLarge(): TextStyle {\n\t\treturn this.#get(\"TitleLarge\");\n\t}\n\t/** Title Medium – `16px`, weight 500 */\n\tget TitleMedium(): TextStyle {\n\t\treturn this.#get(\"TitleMedium\");\n\t}\n\t/** Title Small – `14px`, weight 500 */\n\tget TitleSmall(): TextStyle {\n\t\treturn this.#get(\"TitleSmall\");\n\t}\n\t/** Body Large – `16px`, weight 400 */\n\tget BodyLarge(): TextStyle {\n\t\treturn this.#get(\"BodyLarge\");\n\t}\n\t/** Body Medium – `14px`, weight 400 */\n\tget BodyMedium(): TextStyle {\n\t\treturn this.#get(\"BodyMedium\");\n\t}\n\t/** Body Small – `12px`, weight 400 */\n\tget BodySmall(): TextStyle {\n\t\treturn this.#get(\"BodySmall\");\n\t}\n\t/** Label Large – `14px`, weight 500 */\n\tget LabelLarge(): TextStyle {\n\t\treturn this.#get(\"LabelLarge\");\n\t}\n\t/** Label Medium – `12px`, weight 500 */\n\tget LabelMedium(): TextStyle {\n\t\treturn this.#get(\"LabelMedium\");\n\t}\n\t/** Label Small – `11px`, weight 500 */\n\tget LabelSmall(): TextStyle {\n\t\treturn this.#get(\"LabelSmall\");\n\t}\n\n\t// ─── Emphasized Styles (15) – MD3 Expressive ──────────────────────────────\n\t/** Display Large Emphasized – `57px`, weight 800 */\n\tget DisplayLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"DisplayLargeEmphasized\");\n\t}\n\t/** Display Medium Emphasized – `45px`, weight 800 */\n\tget DisplayMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"DisplayMediumEmphasized\");\n\t}\n\t/** Display Small Emphasized – `36px`, weight 800 */\n\tget DisplaySmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"DisplaySmallEmphasized\");\n\t}\n\t/** Headline Large Emphasized – `32px`, weight 800 */\n\tget HeadlineLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"HeadlineLargeEmphasized\");\n\t}\n\t/** Headline Medium Emphasized – `28px`, weight 800 */\n\tget HeadlineMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"HeadlineMediumEmphasized\");\n\t}\n\t/** Headline Small Emphasized – `24px`, weight 800 */\n\tget HeadlineSmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"HeadlineSmallEmphasized\");\n\t}\n\t/** Title Large Emphasized – `22px`, weight 700 */\n\tget TitleLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"TitleLargeEmphasized\");\n\t}\n\t/** Title Medium Emphasized – `16px`, weight 700 */\n\tget TitleMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"TitleMediumEmphasized\");\n\t}\n\t/** Title Small Emphasized – `14px`, weight 700 */\n\tget TitleSmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"TitleSmallEmphasized\");\n\t}\n\t/** Body Large Emphasized – `16px`, weight 700 */\n\tget BodyLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"BodyLargeEmphasized\");\n\t}\n\t/** Body Medium Emphasized – `14px`, weight 700 */\n\tget BodyMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"BodyMediumEmphasized\");\n\t}\n\t/** Body Small Emphasized – `12px`, weight 700 */\n\tget BodySmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"BodySmallEmphasized\");\n\t}\n\t/** Label Large Emphasized – `14px`, weight 800 */\n\tget LabelLargeEmphasized(): TextStyle {\n\t\treturn this.#get(\"LabelLargeEmphasized\");\n\t}\n\t/** Label Medium Emphasized – `12px`, weight 800 */\n\tget LabelMediumEmphasized(): TextStyle {\n\t\treturn this.#get(\"LabelMediumEmphasized\");\n\t}\n\t/** Label Small Emphasized – `11px`, weight 800 */\n\tget LabelSmallEmphasized(): TextStyle {\n\t\treturn this.#get(\"LabelSmallEmphasized\");\n\t}\n}\n","/**\n * @file typography.tsx\n * @description MD3 Expressive Typography System for React.\n *\n * Port of `androidx.compose.material3.Typography` (Kotlin `@Immutable` class).\n *\n * Provides 30 {@link TextStyle} definitions via the React Context API, mirroring\n * the Compose `LocalTypography` / `MaterialTheme.typography` pattern.\n *\n * ### Memory & Performance Optimizations\n * - The `Typography` class delegates all property access to a `TypographyTokens`\n * instance that uses **lazy getters**, so styles are computed only on first use.\n * - `TypographyProvider` memoizes the context value via `useMemo` to prevent\n * unnecessary re-renders downstream.\n *\n * @example Wrap your application\n * ```tsx\n * <TypographyProvider>\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Consume in a component\n * ```tsx\n * const typography = useTypography();\n * <p style={typography.bodyLarge}>Hello</p>\n * ```\n *\n * @example Via token key\n * ```tsx\n * const style = typography.fromToken(TypographyKeyTokens.BodyLarge);\n * ```\n *\n * @example Custom font + half-rounded corners\n * ```tsx\n * <TypographyProvider\n * fontFamily=\"'Roboto', sans-serif\"\n * fontVariationAxes={{ ROND: 50 }}\n * >\n * <App />\n * </TypographyProvider>\n * ```\n */\n\nimport { createContext, type ReactNode, useContext, useMemo } from \"react\";\nimport { TypographyKeyTokens } from \"./typography-key-tokens\";\nimport {\n\ttype FontVariationAxes,\n\ttype TextStyle,\n\tTypographyTokens,\n} from \"./typography-tokens\";\n\n// ─── Typography Class ─────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Typography — port of Compose's `@Immutable class Typography(...)`.\n *\n * All 30 style properties are **readonly** and lazily resolved from the\n * underlying {@link TypographyTokens} instance. Use {@link Typography.copy}\n * to create a customized variant without mutating the original.\n *\n * @example Default\n * ```ts\n * const typography = new Typography();\n * const style = typography.displayLarge; // lazy — computed on first access\n * ```\n *\n * @example Custom tokens\n * ```ts\n * const typography = new Typography(\n * new TypographyTokens({ fontFamily: \"'Inter', sans-serif\", fontVariationAxes: { ROND: 0 } })\n * );\n * ```\n */\nexport class Typography {\n\treadonly #tokens: TypographyTokens;\n\n\tconstructor(tokens: TypographyTokens = defaultTokens) {\n\t\tthis.#tokens = tokens;\n\t}\n\n\t// ─── Baseline Styles ────────────────────────────────────────────────────────\n\n\t/** Display Large text style (`57px`, weight `400`). */\n\tget displayLarge(): TextStyle {\n\t\treturn this.#tokens.DisplayLarge;\n\t}\n\t/** Display Medium text style (`45px`, weight `400`). */\n\tget displayMedium(): TextStyle {\n\t\treturn this.#tokens.DisplayMedium;\n\t}\n\t/** Display Small text style (`36px`, weight `400`). */\n\tget displaySmall(): TextStyle {\n\t\treturn this.#tokens.DisplaySmall;\n\t}\n\t/** Headline Large text style (`32px`, weight `400`). */\n\tget headlineLarge(): TextStyle {\n\t\treturn this.#tokens.HeadlineLarge;\n\t}\n\t/** Headline Medium text style (`28px`, weight `400`). */\n\tget headlineMedium(): TextStyle {\n\t\treturn this.#tokens.HeadlineMedium;\n\t}\n\t/** Headline Small text style (`24px`, weight `400`). */\n\tget headlineSmall(): TextStyle {\n\t\treturn this.#tokens.HeadlineSmall;\n\t}\n\t/** Title Large text style (`22px`, weight `400`). */\n\tget titleLarge(): TextStyle {\n\t\treturn this.#tokens.TitleLarge;\n\t}\n\t/** Title Medium text style (`16px`, weight `500`). */\n\tget titleMedium(): TextStyle {\n\t\treturn this.#tokens.TitleMedium;\n\t}\n\t/** Title Small text style (`14px`, weight `500`). */\n\tget titleSmall(): TextStyle {\n\t\treturn this.#tokens.TitleSmall;\n\t}\n\t/** Body Large text style (`16px`, weight `400`). */\n\tget bodyLarge(): TextStyle {\n\t\treturn this.#tokens.BodyLarge;\n\t}\n\t/** Body Medium text style (`14px`, weight `400`). */\n\tget bodyMedium(): TextStyle {\n\t\treturn this.#tokens.BodyMedium;\n\t}\n\t/** Body Small text style (`12px`, weight `400`). */\n\tget bodySmall(): TextStyle {\n\t\treturn this.#tokens.BodySmall;\n\t}\n\t/** Label Large text style (`14px`, weight `500`). */\n\tget labelLarge(): TextStyle {\n\t\treturn this.#tokens.LabelLarge;\n\t}\n\t/** Label Medium text style (`12px`, weight `500`). */\n\tget labelMedium(): TextStyle {\n\t\treturn this.#tokens.LabelMedium;\n\t}\n\t/** Label Small text style (`11px`, weight `500`). */\n\tget labelSmall(): TextStyle {\n\t\treturn this.#tokens.LabelSmall;\n\t}\n\n\t// ─── Emphasized Styles (MD3 Expressive) ─────────────────────────────────────\n\n\t/** Display Large Emphasized text style (`57px`, weight `800`). */\n\tget displayLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.DisplayLargeEmphasized;\n\t}\n\t/** Display Medium Emphasized text style (`45px`, weight `800`). */\n\tget displayMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.DisplayMediumEmphasized;\n\t}\n\t/** Display Small Emphasized text style (`36px`, weight `800`). */\n\tget displaySmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.DisplaySmallEmphasized;\n\t}\n\t/** Headline Large Emphasized text style (`32px`, weight `800`). */\n\tget headlineLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.HeadlineLargeEmphasized;\n\t}\n\t/** Headline Medium Emphasized text style (`28px`, weight `800`). */\n\tget headlineMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.HeadlineMediumEmphasized;\n\t}\n\t/** Headline Small Emphasized text style (`24px`, weight `800`). */\n\tget headlineSmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.HeadlineSmallEmphasized;\n\t}\n\t/** Title Large Emphasized text style (`22px`, weight `700`). */\n\tget titleLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.TitleLargeEmphasized;\n\t}\n\t/** Title Medium Emphasized text style (`16px`, weight `700`). */\n\tget titleMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.TitleMediumEmphasized;\n\t}\n\t/** Title Small Emphasized text style (`14px`, weight `700`). */\n\tget titleSmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.TitleSmallEmphasized;\n\t}\n\t/** Body Large Emphasized text style (`16px`, weight `700`). */\n\tget bodyLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.BodyLargeEmphasized;\n\t}\n\t/** Body Medium Emphasized text style (`14px`, weight `700`). */\n\tget bodyMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.BodyMediumEmphasized;\n\t}\n\t/** Body Small Emphasized text style (`12px`, weight `700`). */\n\tget bodySmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.BodySmallEmphasized;\n\t}\n\t/** Label Large Emphasized text style (`14px`, weight `800`). */\n\tget labelLargeEmphasized(): TextStyle {\n\t\treturn this.#tokens.LabelLargeEmphasized;\n\t}\n\t/** Label Medium Emphasized text style (`12px`, weight `800`). */\n\tget labelMediumEmphasized(): TextStyle {\n\t\treturn this.#tokens.LabelMediumEmphasized;\n\t}\n\t/** Label Small Emphasized text style (`11px`, weight `800`). */\n\tget labelSmallEmphasized(): TextStyle {\n\t\treturn this.#tokens.LabelSmallEmphasized;\n\t}\n\n\t// ─── Methods ─────────────────────────────────────────────────────────────────\n\n\t/**\n\t * Returns the `TextStyle` corresponding to the given {@link TypographyKeyTokens}.\n\t *\n\t * Port of `internal fun Typography.fromToken(value: TypographyKeyTokens): TextStyle`.\n\t *\n\t * @example\n\t * ```ts\n\t * const style = typography.fromToken(TypographyKeyTokens.BodyLarge);\n\t * ```\n\t */\n\tfromToken(value: TypographyKeyTokens): TextStyle {\n\t\treturn this[TOKEN_TO_PROP[value]];\n\t}\n\n\t/**\n\t * Creates a new `Typography` instance with the specified property overrides\n\t * merged on top of the current instance's styles.\n\t *\n\t * Port of Compose's `fun Typography.copy(...)`.\n\t *\n\t * Unlike a shallow `Object.assign`, this method preserves the lazy-getter\n\t * architecture — overridden styles are stored separately and looked up first\n\t * on each property access, while non-overridden styles continue to be\n\t * resolved from the underlying {@link TypographyTokens}.\n\t *\n\t * @param overrides - Map of camelCase property names to partial `TextStyle` overrides.\n\t * @returns A new `Typography` instance. The original is never mutated.\n\t *\n\t * @example\n\t * ```ts\n\t * const custom = typography.copy({ bodyLarge: { fontSize: \"2rem\" } });\n\t * custom.bodyLarge.fontSize; // \"2rem\"\n\t * custom.bodySmall.fontSize; // original token value — untouched\n\t * ```\n\t */\n\tcopy(\n\t\toverrides: Partial<Record<TypographyStyleKey, Partial<TextStyle>>>,\n\t): Typography {\n\t\treturn new OverriddenTypography(this.#tokens, this, overrides);\n\t}\n}\n\n// ─── TypographyStyleKey ───────────────────────────────────────────────────────\n\n/**\n * Union of all camelCase property names on {@link Typography} that return a\n * {@link TextStyle}. Used as the key type for `copy()` overrides and the\n * `OverriddenTypography` resolver.\n */\ntype TypographyStyleKey = {\n\t[K in keyof Typography]: Typography[K] extends TextStyle ? K : never;\n}[keyof Typography];\n\n// ─── OverriddenTypography ─────────────────────────────────────────────────────\n\n/**\n * Internal subclass used by {@link Typography.copy}.\n *\n * Holds a map of explicit style overrides. Each getter checks for an override\n * first; if none exists, it falls through to the parent {@link Typography}.\n *\n * @internal\n */\nclass OverriddenTypography extends Typography {\n\treadonly #base: Typography;\n\treadonly #overrides: Partial<Record<TypographyStyleKey, Partial<TextStyle>>>;\n\n\tconstructor(\n\t\ttokens: TypographyTokens,\n\t\tbase: Typography,\n\t\toverrides: Partial<Record<TypographyStyleKey, Partial<TextStyle>>>,\n\t) {\n\t\tsuper(tokens);\n\t\tthis.#base = base;\n\t\tthis.#overrides = overrides;\n\t}\n\n\t#resolve(key: TypographyStyleKey): TextStyle {\n\t\tconst override = this.#overrides[key];\n\t\tconst base = (this.#base as unknown as Record<string, TextStyle>)[key];\n\t\treturn override ? { ...base, ...override } : base;\n\t}\n\n\t// ─── Baseline\n\toverride get displayLarge() {\n\t\treturn this.#resolve(\"displayLarge\");\n\t}\n\toverride get displayMedium() {\n\t\treturn this.#resolve(\"displayMedium\");\n\t}\n\toverride get displaySmall() {\n\t\treturn this.#resolve(\"displaySmall\");\n\t}\n\toverride get headlineLarge() {\n\t\treturn this.#resolve(\"headlineLarge\");\n\t}\n\toverride get headlineMedium() {\n\t\treturn this.#resolve(\"headlineMedium\");\n\t}\n\toverride get headlineSmall() {\n\t\treturn this.#resolve(\"headlineSmall\");\n\t}\n\toverride get titleLarge() {\n\t\treturn this.#resolve(\"titleLarge\");\n\t}\n\toverride get titleMedium() {\n\t\treturn this.#resolve(\"titleMedium\");\n\t}\n\toverride get titleSmall() {\n\t\treturn this.#resolve(\"titleSmall\");\n\t}\n\toverride get bodyLarge() {\n\t\treturn this.#resolve(\"bodyLarge\");\n\t}\n\toverride get bodyMedium() {\n\t\treturn this.#resolve(\"bodyMedium\");\n\t}\n\toverride get bodySmall() {\n\t\treturn this.#resolve(\"bodySmall\");\n\t}\n\toverride get labelLarge() {\n\t\treturn this.#resolve(\"labelLarge\");\n\t}\n\toverride get labelMedium() {\n\t\treturn this.#resolve(\"labelMedium\");\n\t}\n\toverride get labelSmall() {\n\t\treturn this.#resolve(\"labelSmall\");\n\t}\n\t// ─── Emphasized\n\toverride get displayLargeEmphasized() {\n\t\treturn this.#resolve(\"displayLargeEmphasized\");\n\t}\n\toverride get displayMediumEmphasized() {\n\t\treturn this.#resolve(\"displayMediumEmphasized\");\n\t}\n\toverride get displaySmallEmphasized() {\n\t\treturn this.#resolve(\"displaySmallEmphasized\");\n\t}\n\toverride get headlineLargeEmphasized() {\n\t\treturn this.#resolve(\"headlineLargeEmphasized\");\n\t}\n\toverride get headlineMediumEmphasized() {\n\t\treturn this.#resolve(\"headlineMediumEmphasized\");\n\t}\n\toverride get headlineSmallEmphasized() {\n\t\treturn this.#resolve(\"headlineSmallEmphasized\");\n\t}\n\toverride get titleLargeEmphasized() {\n\t\treturn this.#resolve(\"titleLargeEmphasized\");\n\t}\n\toverride get titleMediumEmphasized() {\n\t\treturn this.#resolve(\"titleMediumEmphasized\");\n\t}\n\toverride get titleSmallEmphasized() {\n\t\treturn this.#resolve(\"titleSmallEmphasized\");\n\t}\n\toverride get bodyLargeEmphasized() {\n\t\treturn this.#resolve(\"bodyLargeEmphasized\");\n\t}\n\toverride get bodyMediumEmphasized() {\n\t\treturn this.#resolve(\"bodyMediumEmphasized\");\n\t}\n\toverride get bodySmallEmphasized() {\n\t\treturn this.#resolve(\"bodySmallEmphasized\");\n\t}\n\toverride get labelLargeEmphasized() {\n\t\treturn this.#resolve(\"labelLargeEmphasized\");\n\t}\n\toverride get labelMediumEmphasized() {\n\t\treturn this.#resolve(\"labelMediumEmphasized\");\n\t}\n\toverride get labelSmallEmphasized() {\n\t\treturn this.#resolve(\"labelSmallEmphasized\");\n\t}\n}\n\n// ─── Token → Property lookup (avoids recreating the map on every fromToken call) ──\n\ntype TypographyProp = {\n\t[K in keyof Typography]: Typography[K] extends TextStyle ? K : never;\n}[keyof Typography];\n\nconst TOKEN_TO_PROP: Record<TypographyKeyTokens, TypographyProp> = {\n\t[TypographyKeyTokens.DisplayLarge]: \"displayLarge\",\n\t[TypographyKeyTokens.DisplayMedium]: \"displayMedium\",\n\t[TypographyKeyTokens.DisplaySmall]: \"displaySmall\",\n\t[TypographyKeyTokens.HeadlineLarge]: \"headlineLarge\",\n\t[TypographyKeyTokens.HeadlineMedium]: \"headlineMedium\",\n\t[TypographyKeyTokens.HeadlineSmall]: \"headlineSmall\",\n\t[TypographyKeyTokens.TitleLarge]: \"titleLarge\",\n\t[TypographyKeyTokens.TitleMedium]: \"titleMedium\",\n\t[TypographyKeyTokens.TitleSmall]: \"titleSmall\",\n\t[TypographyKeyTokens.BodyLarge]: \"bodyLarge\",\n\t[TypographyKeyTokens.BodyMedium]: \"bodyMedium\",\n\t[TypographyKeyTokens.BodySmall]: \"bodySmall\",\n\t[TypographyKeyTokens.LabelLarge]: \"labelLarge\",\n\t[TypographyKeyTokens.LabelMedium]: \"labelMedium\",\n\t[TypographyKeyTokens.LabelSmall]: \"labelSmall\",\n\t[TypographyKeyTokens.DisplayLargeEmphasized]: \"displayLargeEmphasized\",\n\t[TypographyKeyTokens.DisplayMediumEmphasized]: \"displayMediumEmphasized\",\n\t[TypographyKeyTokens.DisplaySmallEmphasized]: \"displaySmallEmphasized\",\n\t[TypographyKeyTokens.HeadlineLargeEmphasized]: \"headlineLargeEmphasized\",\n\t[TypographyKeyTokens.HeadlineMediumEmphasized]: \"headlineMediumEmphasized\",\n\t[TypographyKeyTokens.HeadlineSmallEmphasized]: \"headlineSmallEmphasized\",\n\t[TypographyKeyTokens.TitleLargeEmphasized]: \"titleLargeEmphasized\",\n\t[TypographyKeyTokens.TitleMediumEmphasized]: \"titleMediumEmphasized\",\n\t[TypographyKeyTokens.TitleSmallEmphasized]: \"titleSmallEmphasized\",\n\t[TypographyKeyTokens.BodyLargeEmphasized]: \"bodyLargeEmphasized\",\n\t[TypographyKeyTokens.BodyMediumEmphasized]: \"bodyMediumEmphasized\",\n\t[TypographyKeyTokens.BodySmallEmphasized]: \"bodySmallEmphasized\",\n\t[TypographyKeyTokens.LabelLargeEmphasized]: \"labelLargeEmphasized\",\n\t[TypographyKeyTokens.LabelMediumEmphasized]: \"labelMediumEmphasized\",\n\t[TypographyKeyTokens.LabelSmallEmphasized]: \"labelSmallEmphasized\",\n};\n\n// ─── React Context API ────────────────────────────────────────────────────────\n\n/** Singleton default token instance (shared; never mutated). */\nconst defaultTokens = new TypographyTokens();\n\n/**\n * Default {@link Typography} instance used as the context fallback when no\n * `TypographyProvider` is present in the tree.\n *\n * Mirrors `private val LocalTypography = staticCompositionLocalOf { Typography() }`.\n */\nconst defaultTypography = new Typography();\n\n/**\n * React context that holds the current {@link Typography} instance.\n *\n * Port of `internal val LocalTypography = staticCompositionLocalOf { Typography() }`.\n *\n * @internal — Prefer {@link useTypography} and {@link TypographyProvider}.\n */\nexport const TypographyContext = createContext<Typography>(defaultTypography);\n\n/**\n * React hook to access the current {@link Typography} from the nearest\n * {@link TypographyProvider} in the tree. Falls back to the default\n * googleapis Typography when no provider is present.\n *\n * @returns The current `Typography` instance.\n *\n * @example\n * ```tsx\n * const typography = useTypography();\n * <p style={typography.bodyLarge}>Hello</p>\n * ```\n */\nexport function useTypography(): Typography {\n\treturn useContext(TypographyContext);\n}\n\n// ─── TypographyProvider ───────────────────────────────────────────────────────\n\n/**\n * Props for {@link TypographyProvider}.\n */\nexport interface TypographyProviderProps {\n\t/** The child tree that will have access to the provided typography. */\n\tchildren: ReactNode;\n\t/**\n\t * A fully custom {@link Typography} instance.\n\t * When provided, `fontFamily` and `fontVariationAxes` are ignored.\n\t */\n\ttypography?: Typography;\n\t/**\n\t * Shorthand to override the CSS `font-family` for all typography styles.\n\t * Ignored when `typography` is provided.\n\t *\n\t * @example \"'Roboto', sans-serif\"\n\t */\n\tfontFamily?: string;\n\t/**\n\t * Variable font axes to apply globally via `font-variation-settings`.\n\t * Merged on top of the defaults (`ROND: 100`). Only the axes you specify\n\t * will be overridden; unspecified axes retain font defaults.\n\t * Ignored when `typography` is provided.\n\t *\n\t * @example { ROND: 50 } // half-rounded\n\t * @example { ROND: 0 } // sharp corners\n\t */\n\tfontVariationAxes?: FontVariationAxes;\n}\n\n/**\n * Typography Provider component.\n *\n * Port of `CompositionLocalProvider(LocalTypography provides typography)`.\n * Wrap your application (or a subtree) to provide MD3 Expressive typography\n * to all descendant components that call {@link useTypography}.\n *\n * The context value is **memoized** — it is only re-computed when `typography`,\n * `fontFamily`, or `fontVariationAxes` change, preventing unnecessary re-renders.\n *\n * @example Default (Google Sans Flex, ROND = 100)\n * ```tsx\n * <TypographyProvider>\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Custom font\n * ```tsx\n * <TypographyProvider fontFamily=\"'Inter', sans-serif\">\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Partially rounded corners (ROND = 50)\n * ```tsx\n * <TypographyProvider fontVariationAxes={{ ROND: 50 }}>\n * <App />\n * </TypographyProvider>\n * ```\n *\n * @example Fully sharp (ROND = 0) with a custom font\n * ```tsx\n * <TypographyProvider\n * fontFamily=\"'Outfit', sans-serif\"\n * fontVariationAxes={{ ROND: 0 }}\n * >\n * <App />\n * </TypographyProvider>\n * ```\n */\nexport function TypographyProvider({\n\tchildren,\n\ttypography,\n\tfontFamily,\n\tfontVariationAxes,\n}: TypographyProviderProps) {\n\tconst value = useMemo<Typography>(() => {\n\t\tif (typography) return typography;\n\t\tif (fontFamily || fontVariationAxes) {\n\t\t\treturn new Typography(\n\t\t\t\tnew TypographyTokens({ fontFamily, fontVariationAxes }),\n\t\t\t);\n\t\t}\n\t\treturn defaultTypography;\n\t}, [typography, fontFamily, fontVariationAxes]);\n\n\treturn (\n\t\t<TypographyContext.Provider value={value}>\n\t\t\t{children}\n\t\t</TypographyContext.Provider>\n\t);\n}\n"]}
|