{"version":3,"sources":["../src/hooks/useMediaQuery.ts","../src/hooks/useRipple.ts","../src/lib/theme-utils.ts","../src/lib/create-theme.ts","../src/lib/material-symbols-preconnect.tsx","../src/lib/utils.ts","../src/shapes/core/features.ts","../src/shapes/math/corner-rounding.ts","../src/shapes/utils/utils.ts","../src/shapes/math/point.ts","../src/shapes/math/cubic.ts","../src/shapes/core/rounded-polygon.ts","../src/shapes/catalog/md3-expressive-shapes.ts","../src/shapes/catalog/shape-tokens.ts","../src/shapes/catalog/shapes.ts","../src/shapes/morph/float-mapping.ts","../src/shapes/morph/feature-mapping.ts","../src/shapes/morph/polygon-measure.ts","../src/shapes/morph/morph.ts","../src/shapes/render/shape-rendering.ts","../src/ui/shared/fading-blur-mask.tsx","../src/ui/shared/motion-tokens.ts","../src/ui/app-bar/app-bar.tokens.ts","../src/ui/app-bar/app-bar-item-button.tsx","../src/ui/scroll-area.tsx","../src/ui/menu/menu-animations.ts","../src/ui/menu/menu-context.tsx","../src/ui/menu/menu-tokens.ts","../src/ui/menu/menu-utils.ts","../src/ui/menu/context-menu.tsx","../src/ui/menu/menu.tsx","../src/ui/menu/menu-divider.tsx","../src/ui/menu/menu-group.tsx","../src/ui/shared/constants.ts","../src/ui/icon.tsx","../src/ui/menu/menu-item.tsx","../src/ui/menu/sub-menu.tsx","../src/ui/menu/vertical-menu.tsx","../src/ui/app-bar/app-bar-overflow-indicator.tsx","../src/ui/app-bar/app-bar-column.tsx","../src/ui/app-bar/app-bar-row.tsx","../src/ui/app-bar/hooks/use-app-bar-scroll.ts","../src/ui/app-bar/bottom-app-bar.tsx","../src/ui/app-bar/docked-toolbar.tsx","../src/ui/app-bar/hooks/use-flexible-app-bar.ts","../src/ui/app-bar/large-flexible-app-bar.tsx","../src/ui/app-bar/medium-flexible-app-bar.tsx","../src/ui/app-bar/search-app-bar.tsx","../src/ui/app-bar/search-view.tsx","../src/ui/app-bar/small-app-bar.tsx","../src/ui/badge.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/ripple.tsx","../src/ui/shared/touch-target.tsx","../src/ui/buttons/button/button-tokens.ts","../src/ui/buttons/button/button.tsx","../src/ui/buttons/button-distribute/button-distribute-tokens.ts","../src/ui/buttons/button-distribute/use-distribute-weights.ts","../src/ui/buttons/button-distribute/button-distribute.tsx","../src/ui/buttons/button-group/button-group-tokens.ts","../src/ui/buttons/button-group/button-group-defaults.ts","../src/ui/buttons/button-group/button-group.tsx","../src/ui/buttons/fabs/extended-fab/extended-fab.tsx","../src/ui/buttons/fabs/fab/fab.tsx","../src/ui/buttons/fabs/fab-menu/fab-menu.tsx","../src/ui/buttons/icon-button/icon-button.tsx","../src/ui/buttons/split-button/split-button-context.ts","../src/ui/buttons/split-button/split-button.tsx","../src/ui/shared/state-layer.tsx","../src/ui/buttons/split-button/split-button-tokens.ts","../src/ui/buttons/split-button/split-button-variants.ts","../src/ui/buttons/split-button/split-button-leading.tsx","../src/ui/buttons/split-button/split-button-trailing.tsx","../src/ui/buttons/split-button/split-button-trailing-uncheckable.tsx","../src/ui/cards/card/card-tokens.ts","../src/ui/cards/card/card.tsx","../src/ui/cards/card/card-sub-components.tsx","../src/ui/carousel/carousel-grid.tsx","../src/ui/carousel/carousel-item.tsx","../src/ui/carousel/hooks/useCarouselA11y.ts","../src/ui/carousel/carousel.tokens.ts","../src/ui/carousel/hooks/useCarouselKeylines.ts","../src/ui/carousel/carousel-scroll.tsx","../src/ui/carousel/carousel.tsx","../src/ui/checkbox.tsx","../src/ui/chip.tsx","../src/ui/code-block.tsx","../src/ui/date-time-pickers/shared/animation-tokens.ts","../src/ui/date-time-pickers/shared/calendar-model.ts","../src/ui/date-time-pickers/date-picker/date-picker-input.tsx","../src/ui/date-time-pickers/date-picker/subcomponents/day-cell.tsx","../src/ui/date-time-pickers/date-picker/subcomponents/weekday-row.tsx","../src/ui/date-time-pickers/date-picker/subcomponents/calendar-grid.tsx","../src/ui/date-time-pickers/date-picker/subcomponents/calendar-header.tsx","../src/ui/date-time-pickers/date-picker/subcomponents/month-picker-list.tsx","../src/ui/date-time-pickers/date-picker/subcomponents/year-picker-list.tsx","../src/ui/date-time-pickers/date-picker/date-picker.tsx","../src/ui/date-time-pickers/date-picker/date-picker.tokens.ts","../src/ui/dialog.tsx","../src/ui/date-time-pickers/date-picker/date-picker-dialog.tsx","../src/ui/date-time-pickers/date-picker/date-range-picker.tsx","../src/ui/date-time-pickers/shared/types.ts","../src/ui/date-time-pickers/date-picker/use-date-picker-state.ts","../src/ui/date-time-pickers/date-picker/use-date-range-picker-state.ts","../src/ui/date-time-pickers/time-picker/time-picker.tokens.ts","../src/ui/date-time-pickers/time-picker/subcomponents/period-selector.tsx","../src/ui/date-time-pickers/time-picker/subcomponents/time-field.tsx","../src/ui/date-time-pickers/time-picker/time-input.tsx","../src/ui/date-time-pickers/time-picker/subcomponents/clock-dial.tsx","../src/ui/date-time-pickers/time-picker/time-picker.tsx","../src/ui/date-time-pickers/time-picker/time-picker-dialog.tsx","../src/ui/date-time-pickers/time-picker/use-time-picker-state.ts","../src/ui/divider.tsx","../src/ui/drawer.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/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/navigation/navigation-shape-utils.ts","../src/ui/navigation/navigation-bar.tsx","../src/ui/navigation/navigation-rail.tsx","../src/ui/search/hooks/use-search-keyboard.ts","../src/ui/search/search.tokens.ts","../src/ui/search/animated-placeholder.tsx","../src/ui/search/search-bar.tsx","../src/ui/search/search-context.tsx","../src/hooks/useClickOutside.ts","../src/ui/search/hooks/use-search-view-focus.ts","../src/ui/search/trailing-action.tsx","../src/ui/search/search-view-docked.tsx","../src/ui/search/search-view-fullscreen.tsx","../src/ui/search/search.tsx","../src/hooks/useVirtualList.ts","../src/ui/toolbar/toolbar-context.tsx","../src/ui/text-field/text-field.tokens.ts","../src/ui/text-field/subcomponents/active-indicator.tsx","../src/ui/text-field/subcomponents/floating-label.tsx","../src/ui/text-field/subcomponents/leading-icon.tsx","../src/ui/text-field/subcomponents/outline-container.tsx","../src/ui/text-field/subcomponents/prefix-suffix.tsx","../src/ui/text-field/subcomponents/supporting-text.tsx","../src/ui/text-field/subcomponents/trailing-icon.tsx","../src/ui/text-field/text-field.tsx","../src/ui/select/select.tsx","../src/ui/shape-media/useShapeMorph.ts","../src/ui/shape-media/shape-media.tsx","../src/ui/shape-media/shape-icon.tsx","../src/ui/shape-media/shape-media-server.tsx","../src/ui/shape-media/shape-svg.tsx","../src/ui/sheets/shared/drag-handle.tsx","../src/ui/sheets/shared/utils.ts","../src/ui/sheets/bottom-sheet/use-bottom-sheet.ts","../src/ui/sheets/bottom-sheet/bottom-sheet.tsx","../src/ui/sheets/shared/scrim.tsx","../src/ui/sheets/bottom-sheet/bottom-sheet-modal.tsx","../src/ui/sheets/side-sheet/side-sheet.tsx","../src/ui/sheets/side-sheet/side-sheet-modal.tsx","../src/ui/slider/hooks/useSliderMath.ts","../src/ui/slider/slider.tokens.ts","../src/ui/slider/slider-thumb.tsx","../src/ui/slider/range-slider.tsx","../src/ui/slider/slider-track.tsx","../src/ui/slider/slider.tsx","../src/ui/snackbar/snackbar.tsx","../src/ui/tabs/tabs.tsx","../src/ui/tabs/tabs.tokens.ts","../src/ui/tabs/tab.tsx","../src/ui/tabs/tabs-content.tsx","../src/ui/tabs/tabs-list.tsx","../src/ui/text.tsx","../src/ui/typography/typography-key-tokens.ts","../src/ui/typography/type-scale-tokens.ts","../src/ui/typography/typography-tokens.ts","../src/ui/typography/typography.tsx","../src/ui/theme-provider/index.tsx","../src/ui/toc.tsx","../src/ui/toolbar/toolbar-colors.ts","../src/ui/toolbar/docked-toolbar.tsx","../src/ui/toolbar/toolbar-tokens.ts","../src/ui/toolbar/floating-toolbar.tsx","../src/ui/toolbar/floating-toolbar-with-fab.tsx","../src/ui/toolbar/toolbar-divider.tsx","../src/ui/toolbar/toolbar-icon-button.tsx","../src/ui/toolbar/toolbar-scroll-behavior.ts","../src/ui/toolbar/toolbar-toggle-button.tsx","../src/ui/tooltip/tooltip.tokens.ts","../src/ui/tooltip/tooltip-caret-shape.tsx","../src/ui/tooltip/plain-tooltip.tsx","../src/ui/tooltip/rich-tooltip.tsx","../src/ui/tooltip/use-tooltip-position.ts","../src/ui/tooltip/use-tooltip-state.ts","../src/ui/tooltip/tooltip-box.tsx"],"names":["m","convex","clockwise","jsx","Fragment","React","jsxs","React2","React3","React4","_a","React5","AnimatePresence","React6","DropdownMenu2","React7","itemPosition","React8","React9","ContextMenu2","DropdownMenu3","React10","Sub","ContextMenu3","DropdownMenu4","SubTrigger","SubContent","Portal","React11","React12","React13","React14","useReducedMotion","React15","React16","React17","React18","LazyMotion","domMax","React19","IndeterminateSvg","DeterminateSvg","React20","useMotionValue","React21","React22","FlatLinearTrack","React23","WavyLinearTrack","animate","useAnimationFrame","React24","React25","React26","RippleItem","useRipple","cornerRadius","React27","_b","Slot","React28","baseWeights","result","expandAmount","React29","React30","AnimatedCheckLabel","React31","SIZE_ICON","MORPH_RADIUS","COLOR_CLASSES","React32","MENU_CONTAINER_VARIANTS","CloseIcon","React33","useTransform","React34","React35","React36","React37","React38","React39","prefersReducedMotion","React40","cva","React41","React42","React43","React44","CarouselItem","useState","useCallback","useMemo","range","progress","React45","items","innerContent","e","React46","React47","CheckboxVisual","useMergedRef","React48","Root","useEffect","React49","React50","React51","React52","React53","React54","navigateMonth","React55","React56","RadixDialog2","React57","DEFAULT_YEAR_RANGE","React58","React59","raw","React60","React61","RadixDialog3","React62","RadixDialog4","React63","React64","React65","React66","MD3_FAST_EFFECTS","RadioVisual","React68","SwitchVisual","React69","React70","React71","cloneIconWithFill","ActivePill","HoverStateLayer","RippleLayer","IconContainer","React72","React73","React74","React75","useRef","React76","DefaultSearchIcon","React77","ArrowBackIcon","React78","createPortal","React79","React80","React81","React82","ActiveIndicator","React83","FloatingLabel","React84","LeadingIcon","React85","OutlineContainer","React86","PrefixSuffix","React87","SupportingText","AnimatedIconSlot","React88","TrailingIcon","React89","React90","React91","useLayoutEffect","viewportHeight","safeAreaOffset","naturalHeight","point","React92","React93","SHEET_ANIM","ABSOLUTE_MAX_HEIGHT","resolveMaxHeight","React94","RadixDialog5","React95","React96","RadixDialog6","React97","ValueIndicator","SliderThumb","insetLimit","trackInset","React98","RangeTrack","gapWithThumbStr","React99","InsetIcon","SliderTrack","segments","React100","React101","Snackbar","React102","React103","React104","React105","React106","TypographyKeyTokens","createContext","useContext","defaultTokens","defaultTypography","React107","React108","React109","React110","useScroll","useMotionValueEvent","MOTION_PROP_KEYS","React111","forwardRef","font","useIsomorphicLayoutEffect","clearTimeout","useId","cloneElement","React112"],"mappings":"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","file":"index.mjs","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * useMediaQuery — SSR-safe responsive hook.\n *\n * Prevents hydration mismatch by initializing with `false`.\n *\n * @example\n * ```tsx\n * const isMobile = useMediaQuery('(max-width: 768px)');\n * ```\n */\n\nexport function useMediaQuery(query: string): boolean {\n\tconst [matches, setMatches] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst mql = window.matchMedia(query);\n\t\tconst handler = (e: MediaQueryListEvent) => setMatches(e.matches);\n\n\t\tsetMatches(mql.matches);\n\t\tmql.addEventListener(\"change\", handler);\n\t\treturn () => mql.removeEventListener(\"change\", handler);\n\t}, [query]);\n\n\treturn matches;\n}\n","import { useCallback, useRef } from \"react\";\n\nexport interface RippleOptions {\n\t/** Ripple animation duration (ms). Default: 600 */\n\tduration?: number;\n\t/** Ripple color. Default: 'currentColor' */\n\tcolor?: string;\n\t/** Opacity. Default: 0.12 (MD3 standard) */\n\topacity?: number;\n\t/** Disable ripple (e.g. when component is disabled) */\n\tdisabled?: boolean;\n}\n\n/**\n * useRipple — Material Design 3 Expressive Ripple Effect\n *\n * Pure DOM hook with zero external animation dependencies.\n * Note: Requires element to have `position: relative` and `overflow: hidden`.\n *\n * @example\n * ```tsx\n * const { rippleRef, onPointerDown } = useRipple();\n * <button ref={rippleRef} onPointerDown={onPointerDown}>Click me</button>\n * ```\n */\nexport function useRipple<T extends HTMLElement = HTMLElement>(\n\toptions: RippleOptions = {},\n) {\n\tconst {\n\t\tduration = 600,\n\t\tcolor = \"currentColor\",\n\t\topacity = 0.12,\n\t\tdisabled = false,\n\t} = options;\n\tconst ref = useRef<T>(null);\n\n\tconst onPointerDown = useCallback(\n\t\t(event: React.PointerEvent<T>) => {\n\t\t\tif (disabled || !ref.current) return;\n\n\t\t\tconst el = ref.current;\n\t\t\tconst rect = el.getBoundingClientRect();\n\n\t\t\tconst size = Math.max(rect.width, rect.height) * 2;\n\t\t\tconst x = event.clientX - rect.left - size / 2;\n\t\t\tconst y = event.clientY - rect.top - size / 2;\n\n\t\t\tconst ripple = document.createElement(\"span\");\n\t\t\tripple.setAttribute(\"aria-hidden\", \"true\");\n\n\t\t\tObject.assign(ripple.style, {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tborderRadius: \"50%\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\twidth: `${size}px`,\n\t\t\t\theight: `${size}px`,\n\t\t\t\tleft: `${x}px`,\n\t\t\t\ttop: `${y}px`,\n\t\t\t\tbackground: color,\n\t\t\t\topacity: String(opacity),\n\t\t\t\ttransform: \"scale(0)\",\n\t\t\t\ttransition: `transform ${duration}ms cubic-bezier(0.2, 0, 0, 1), opacity ${duration * 0.6}ms ease-out`,\n\t\t\t});\n\n\t\t\tel.appendChild(ripple);\n\n\t\t\t// Next frame to trigger animation\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tripple.style.transform = \"scale(1)\";\n\t\t\t});\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tripple.style.opacity = \"0\";\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (el.contains(ripple)) el.removeChild(ripple);\n\t\t\t\t}, duration * 0.6);\n\t\t\t\tel.removeEventListener(\"pointerup\", cleanup);\n\t\t\t\tel.removeEventListener(\"pointerleave\", cleanup);\n\t\t\t};\n\n\t\t\tel.addEventListener(\"pointerup\", cleanup, { once: true });\n\t\t\tel.addEventListener(\"pointerleave\", cleanup, { once: true });\n\t\t},\n\t\t[disabled, duration, color, opacity],\n\t);\n\n\treturn { rippleRef: ref, onPointerDown };\n}\n","import {\n\tHct,\n\thexFromArgb,\n\tSchemeContent,\n\tSchemeExpressive,\n\tSchemeFidelity,\n\tSchemeMonochrome,\n\tSchemeNeutral,\n\tSchemeTonalSpot,\n\tSchemeVibrant,\n} from \"@material/material-color-utilities\";\n\nexport type ThemeMode = \"light\" | \"dark\" | \"system\";\n\n/**\n * Color scheme variants from Material Design 3.\n * - `expressive` — MD3 Expressive 2025: high-chroma, intentionally detached from\n *   source color. **Default for this library.**\n * - `tonal_spot` — Standard Android 12+ theme: low-to-medium colorfulness.\n * - `vibrant` — More colorful than tonal_spot, hue from source.\n * - `fidelity` — Stays close to the source color's hue and chroma.\n * - `content` — Similar to fidelity, optimised for image-based content.\n * - `monochrome` — No hue; all grays.\n * - `neutral` — Near-neutral colors with subtle tint.\n */\nexport type SchemeVariant =\n\t| \"expressive\"\n\t| \"tonal_spot\"\n\t| \"vibrant\"\n\t| \"fidelity\"\n\t| \"content\"\n\t| \"monochrome\"\n\t| \"neutral\";\n\n/**\n * Contrast level for the generated scheme.\n * - `-1` — Minimum contrast (accessibility not guaranteed)\n * - `0`  — Standard (design as spec'd)\n * - `0.5` — Medium contrast\n * - `1`  — Maximum contrast (WCAG AAA)\n */\nexport type ContrastLevel = -1 | 0 | 0.5 | 1;\n\n/**\n * Resolves the effective color scheme from a ThemeMode.\n * When mode is \"system\", reads the OS preference via matchMedia.\n * Returns \"light\" as the safe default in SSR environments.\n */\nexport function resolveMode(mode: ThemeMode): \"light\" | \"dark\" {\n\tif (mode !== \"system\") return mode;\n\tif (typeof window === \"undefined\") return \"light\";\n\treturn window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n\t\t? \"dark\"\n\t\t: \"light\";\n}\n\n// ─── Color Scheme Interface ────────────────────────────────────────────────────\n\nexport interface MD3ColorScheme {\n\tprimary: string;\n\tonPrimary: string;\n\tprimaryContainer: string;\n\tonPrimaryContainer: string;\n\tinversePrimary: string;\n\tprimaryFixed: string;\n\tprimaryFixedDim: string;\n\tonPrimaryFixed: string;\n\tonPrimaryFixedVariant: string;\n\t/** Expressive dim tone for primary (v0.4.0+) */\n\tprimaryDim: string;\n\n\tsecondary: string;\n\tonSecondary: string;\n\tsecondaryContainer: string;\n\tonSecondaryContainer: string;\n\tsecondaryFixed: string;\n\tsecondaryFixedDim: string;\n\tonSecondaryFixed: string;\n\tonSecondaryFixedVariant: string;\n\t/** Expressive dim tone for secondary (v0.4.0+) */\n\tsecondaryDim: string;\n\n\ttertiary: string;\n\tonTertiary: string;\n\ttertiaryContainer: string;\n\tonTertiaryContainer: string;\n\ttertiaryFixed: string;\n\ttertiaryFixedDim: string;\n\tonTertiaryFixed: string;\n\tonTertiaryFixedVariant: string;\n\t/** Expressive dim tone for tertiary (v0.4.0+) */\n\ttertiaryDim: string;\n\n\terror: string;\n\tonError: string;\n\terrorContainer: string;\n\tonErrorContainer: string;\n\n\tsurface: string;\n\tonSurface: string;\n\tsurfaceVariant: string;\n\tonSurfaceVariant: string;\n\tsurfaceTint: string;\n\t/** Dimmed surface — darker than surface, lighter than surface-container. */\n\tsurfaceDim: string;\n\t/** Brightened surface — lighter than surface. */\n\tsurfaceBright: string;\n\tsurfaceContainerLowest: string;\n\tsurfaceContainerLow: string;\n\tsurfaceContainer: string;\n\tsurfaceContainerHigh: string;\n\tsurfaceContainerHighest: string;\n\n\tinverseSurface: string;\n\tinverseOnSurface: string;\n\n\tbackground: string;\n\tonBackground: string;\n\n\toutline: string;\n\toutlineVariant: string;\n\n\tshadow: string;\n\tscrim: string;\n}\n\n// ─── Internal scheme factory ───────────────────────────────────────────────────\n\n/**\n * Creates a `DynamicScheme` subclass instance from a seed hex color using\n * Material Color Utilities v0.4.0. Defaults to Spec 2025 + Expressive variant.\n */\nfunction createDynamicScheme(\n\tsourceColorHex: string,\n\tisDark: boolean,\n\tvariant: SchemeVariant = \"expressive\",\n\tcontrastLevel: ContrastLevel = 0,\n) {\n\tconst hct = Hct.fromInt(argbFromHex(sourceColorHex));\n\tconst spec = \"2025\" as const;\n\n\tswitch (variant) {\n\t\tcase \"tonal_spot\":\n\t\t\treturn new SchemeTonalSpot(hct, isDark, contrastLevel, spec);\n\t\tcase \"vibrant\":\n\t\t\treturn new SchemeVibrant(hct, isDark, contrastLevel, spec);\n\t\tcase \"fidelity\":\n\t\t\treturn new SchemeFidelity(hct, isDark, contrastLevel, spec);\n\t\tcase \"content\":\n\t\t\treturn new SchemeContent(hct, isDark, contrastLevel, spec);\n\t\tcase \"monochrome\":\n\t\t\treturn new SchemeMonochrome(hct, isDark, contrastLevel, spec);\n\t\tcase \"neutral\":\n\t\t\treturn new SchemeNeutral(hct, isDark, contrastLevel, spec);\n\t\tdefault:\n\t\t\treturn new SchemeExpressive(hct, isDark, contrastLevel, spec);\n\t}\n}\n\n/** Parse a hex string (#rrggbb) to ARGB int. */\nfunction argbFromHex(hex: string): number {\n\tconst sanitized = hex.replace(/^#/, \"\");\n\tconst r = Number.parseInt(sanitized.substring(0, 2), 16);\n\tconst g = Number.parseInt(sanitized.substring(2, 4), 16);\n\tconst b = Number.parseInt(sanitized.substring(4, 6), 16);\n\treturn (0xff000000 | (r << 16) | (g << 8) | b) >>> 0;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport interface GenerateM3ThemeOptions {\n\tvariant?: SchemeVariant;\n\tcontrastLevel?: ContrastLevel;\n}\n\n/**\n * Generate a complete MD3 Expressive color scheme from a seed hex string.\n *\n * Uses Material Color Utilities v0.4.0 with SpecVersion 2025 by default.\n *\n * @param sourceColorHex - Seed color in hex format (e.g. `\"#6750A4\"`).\n * @param mode - Light or dark scheme. Defaults to `\"light\"`.\n * @param options - Optional variant + contrast overrides.\n *   - `variant` — defaults to `\"expressive\"` (MD3 Expressive 2025)\n *   - `contrastLevel` — defaults to `0` (standard)\n *\n * @example\n * // Backward-compatible call (no options required)\n * generateM3Theme(\"#6750A4\")\n *\n * @example\n * // Expressive with high contrast\n * generateM3Theme(\"#6750A4\", \"dark\", { contrastLevel: 1 })\n */\nexport function generateM3Theme(\n\tsourceColorHex: string,\n\tmode: \"light\" | \"dark\" = \"light\",\n\toptions: GenerateM3ThemeOptions = {},\n): MD3ColorScheme {\n\tconst { variant = \"expressive\", contrastLevel = 0 } = options;\n\tconst isDark = mode === \"dark\";\n\tconst scheme = createDynamicScheme(\n\t\tsourceColorHex,\n\t\tisDark,\n\t\tvariant,\n\t\tcontrastLevel,\n\t);\n\n\tconst hex = (argb: number) => hexFromArgb(argb);\n\n\treturn {\n\t\t// Primary\n\t\tprimary: hex(scheme.primary),\n\t\tonPrimary: hex(scheme.onPrimary),\n\t\tprimaryContainer: hex(scheme.primaryContainer),\n\t\tonPrimaryContainer: hex(scheme.onPrimaryContainer),\n\t\tinversePrimary: hex(scheme.inversePrimary),\n\t\tprimaryFixed: hex(scheme.primaryFixed),\n\t\tprimaryFixedDim: hex(scheme.primaryFixedDim),\n\t\tonPrimaryFixed: hex(scheme.onPrimaryFixed),\n\t\tonPrimaryFixedVariant: hex(scheme.onPrimaryFixedVariant),\n\t\tprimaryDim: hex(scheme.primaryDim),\n\n\t\t// Secondary\n\t\tsecondary: hex(scheme.secondary),\n\t\tonSecondary: hex(scheme.onSecondary),\n\t\tsecondaryContainer: hex(scheme.secondaryContainer),\n\t\tonSecondaryContainer: hex(scheme.onSecondaryContainer),\n\t\tsecondaryFixed: hex(scheme.secondaryFixed),\n\t\tsecondaryFixedDim: hex(scheme.secondaryFixedDim),\n\t\tonSecondaryFixed: hex(scheme.onSecondaryFixed),\n\t\tonSecondaryFixedVariant: hex(scheme.onSecondaryFixedVariant),\n\t\tsecondaryDim: hex(scheme.secondaryDim),\n\n\t\t// Tertiary\n\t\ttertiary: hex(scheme.tertiary),\n\t\tonTertiary: hex(scheme.onTertiary),\n\t\ttertiaryContainer: hex(scheme.tertiaryContainer),\n\t\tonTertiaryContainer: hex(scheme.onTertiaryContainer),\n\t\ttertiaryFixed: hex(scheme.tertiaryFixed),\n\t\ttertiaryFixedDim: hex(scheme.tertiaryFixedDim),\n\t\tonTertiaryFixed: hex(scheme.onTertiaryFixed),\n\t\tonTertiaryFixedVariant: hex(scheme.onTertiaryFixedVariant),\n\t\ttertiaryDim: hex(scheme.tertiaryDim),\n\n\t\t// Error\n\t\terror: hex(scheme.error),\n\t\tonError: hex(scheme.onError),\n\t\terrorContainer: hex(scheme.errorContainer),\n\t\tonErrorContainer: hex(scheme.onErrorContainer),\n\n\t\t// Surface\n\t\tsurface: hex(scheme.surface),\n\t\tonSurface: hex(scheme.onSurface),\n\t\tsurfaceVariant: hex(scheme.surfaceVariant),\n\t\tonSurfaceVariant: hex(scheme.onSurfaceVariant),\n\t\tsurfaceTint: hex(scheme.surfaceTint),\n\t\tsurfaceDim: hex(scheme.surfaceDim),\n\t\tsurfaceBright: hex(scheme.surfaceBright),\n\t\tsurfaceContainerLowest: hex(scheme.surfaceContainerLowest),\n\t\tsurfaceContainerLow: hex(scheme.surfaceContainerLow),\n\t\tsurfaceContainer: hex(scheme.surfaceContainer),\n\t\tsurfaceContainerHigh: hex(scheme.surfaceContainerHigh),\n\t\tsurfaceContainerHighest: hex(scheme.surfaceContainerHighest),\n\n\t\t// Inverse\n\t\tinverseSurface: hex(scheme.inverseSurface),\n\t\tinverseOnSurface: hex(scheme.inverseOnSurface),\n\n\t\t// Background\n\t\tbackground: hex(scheme.background),\n\t\tonBackground: hex(scheme.onBackground),\n\n\t\t// Outline\n\t\toutline: hex(scheme.outline),\n\t\toutlineVariant: hex(scheme.outlineVariant),\n\n\t\t// Utility\n\t\tshadow: hex(scheme.shadow),\n\t\tscrim: hex(scheme.scrim),\n\t};\n}\n\n/**\n * Apply an MD3 Expressive dynamic color scheme to the document root as CSS\n * custom properties.\n *\n * Sets `--md-sys-color-*` tokens (used by components) and\n * `--color-m3-*` tokens (used by Tailwind). Also sets the `data-theme`\n * attribute for dark mode CSS selectors.\n *\n * @param sourceColorHex - Seed color hex string.\n * @param mode - Light/dark/system mode. Defaults to `\"light\"`.\n * @param root - Target element. Defaults to `document.documentElement`.\n * @param options - Optional variant + contrast overrides.\n */\nexport function applyTheme(\n\tsourceColorHex: string,\n\tmode: ThemeMode = \"light\",\n\troot: HTMLElement = document.documentElement,\n\toptions: GenerateM3ThemeOptions = {},\n): void {\n\tconst resolved = resolveMode(mode);\n\tconst colors = generateM3Theme(sourceColorHex, resolved, options);\n\n\tfor (const [key, value] of Object.entries(colors)) {\n\t\tconst kebabKey = key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\t\troot.style.setProperty(`--md-sys-color-${kebabKey}`, value);\n\t\troot.style.setProperty(`--color-m3-${kebabKey}`, value);\n\t}\n\n\t// data-theme is always \"light\" or \"dark\" — never \"system\"\n\troot.setAttribute(\"data-theme\", resolved);\n}\n","import {\n\ttype ContrastLevel,\n\ttype GenerateM3ThemeOptions,\n\tgenerateM3Theme,\n\ttype MD3ColorScheme,\n\ttype SchemeVariant,\n} from \"./theme-utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface CreateMd3ThemeOptions {\n\t/** Seed color in hex format, e.g. `\"#6750A4\"`. */\n\tseedColor: string;\n\t/** Whether to generate a dark scheme. Defaults to `false`. */\n\tisDark?: boolean;\n\t/**\n\t * Color scheme variant. Defaults to `\"expressive\"` (MD3 Expressive 2025).\n\t * @see SchemeVariant\n\t */\n\tvariant?: SchemeVariant;\n\t/**\n\t * Contrast adjustment. Defaults to `0` (standard).\n\t * - `0` — Standard\n\t * - `0.5` — Medium contrast\n\t * - `1` — Maximum contrast (WCAG AAA)\n\t */\n\tcontrastLevel?: ContrastLevel;\n}\n\nexport interface Md3ThemeResult {\n\t/**\n\t * Flat map of CSS custom properties that can be injected into a style block.\n\t * Keys use `--md-sys-color-*` naming.\n\t *\n\t * @example\n\t * Object.entries(cssVariables).forEach(([k, v]) => {\n\t *   document.documentElement.style.setProperty(k, v);\n\t * });\n\t */\n\tcssVariables: Record<string, string>;\n\t/** Fully-typed color scheme object with camelCase role names. */\n\tcolorScheme: MD3ColorScheme;\n}\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\n/**\n * High-level one-call API to generate a Material 3 Expressive theme.\n *\n * Returns both a CSS variable map (for injection into the DOM or SSR style tags)\n * and a typed `MD3ColorScheme` object for use in TypeScript.\n *\n * Uses **SpecVersion 2025** and **Variant.EXPRESSIVE** by default, aligning with\n * the MD3 Expressive 2025 color specification.\n *\n * @example\n * const { cssVariables } = createMd3ExpressiveTheme({ seedColor: \"#6750A4\" });\n * // Inject at runtime:\n * for (const [k, v] of Object.entries(cssVariables)) {\n *   document.documentElement.style.setProperty(k, v);\n * }\n *\n * @example\n * // High-contrast dark scheme with tonal_spot variant\n * const theme = createMd3ExpressiveTheme({\n *   seedColor: \"#00639B\",\n *   isDark: true,\n *   variant: \"tonal_spot\",\n *   contrastLevel: 1,\n * });\n */\nexport function createMd3ExpressiveTheme(\n\toptions: CreateMd3ThemeOptions,\n): Md3ThemeResult {\n\tconst { seedColor, isDark = false, variant, contrastLevel } = options;\n\n\tconst themeOptions: GenerateM3ThemeOptions = { variant, contrastLevel };\n\tconst colorScheme = generateM3Theme(\n\t\tseedColor,\n\t\tisDark ? \"dark\" : \"light\",\n\t\tthemeOptions,\n\t);\n\n\tconst cssVariables = schemeToCssVariables(colorScheme);\n\n\treturn { cssVariables, colorScheme };\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/** Convert a camelCase color scheme to `--md-sys-color-*` CSS variable map. */\nfunction schemeToCssVariables(scheme: MD3ColorScheme): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(scheme)) {\n\t\tconst kebabKey = key.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\t\tresult[`--md-sys-color-${kebabKey}`] = value;\n\t}\n\treturn result;\n}\n","/**\n * MaterialSymbolsPreconnect\n *\n * Injects preconnect resource hints for Google Fonts CDN into <head>.\n * Place this component AS EARLY AS POSSIBLE in the app tree, ideally\n * directly inside <head> or root layout.\n *\n * WHY THIS MATTERS:\n * If @import url() is inside a CSS file, browser must:\n * 1. Parse HTML -> download JS bundle -> execute CSS -> hit @import -> start Google Fonts connection\n * Preconnect hints allow browser to establish TCP handshake + TLS connection early at step 1,\n * saving 100-500ms connection latency depending on network.\n *\n * USAGE:\n * ```tsx\n * // app/layout.tsx (Next.js) or index.html equivalent\n * import { MaterialSymbolsPreconnect } from '@bug-on/m3-expressive';\n *\n * export default function RootLayout({ children }) {\n *   return (\n *     <html>\n *       <head>\n *         <MaterialSymbolsPreconnect />\n *       </head>\n *       <body>{children}</body>\n *     </html>\n *   );\n * }\n * ```\n *\n * NOTE: Use this component only with CDN mode.\n * Self-hosted fonts do not require preconnecting to external origins.\n */\nexport interface MaterialSymbolsPreconnectProps {\n\t/**\n\t * Array of Material Symbols font variants to load.\n\t * Include only variants used by application to minimize bandwidth.\n\t * @default [\"outlined\"]\n\t */\n\tvariants?: Array<\"outlined\" | \"rounded\" | \"sharp\">;\n}\n\nexport function MaterialSymbolsPreconnect({\n\tvariants = [\"outlined\"],\n}: MaterialSymbolsPreconnectProps) {\n\treturn (\n\t\t<>\n\t\t\t{/* Preconnect for CSS stylesheet */}\n\t\t\t<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n\t\t\t{/* Preconnect for font files — crossorigin required for CORS request */}\n\t\t\t<link\n\t\t\t\trel=\"preconnect\"\n\t\t\t\thref=\"https://fonts.gstatic.com\"\n\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t/>\n\t\t\t{/* Load selected font variants.\n\t\t\t    Uses display=swap for performance optimization (Lighthouse/Next.js recommendation).\n\t\t\t    Note: May cause brief ligature flicker during initial load. */}\n\n\t\t\t{variants.includes(\"outlined\") && (\n\t\t\t\t<link\n\t\t\t\t\thref=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap\"\n\t\t\t\t\trel=\"stylesheet\"\n\t\t\t\t\tprecedence=\"default\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{variants.includes(\"rounded\") && (\n\t\t\t\t<link\n\t\t\t\t\thref=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap\"\n\t\t\t\t\trel=\"stylesheet\"\n\t\t\t\t\tprecedence=\"default\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{variants.includes(\"sharp\") && (\n\t\t\t\t<link\n\t\t\t\t\thref=\"https://fonts.googleapis.com/css2?family=Material+Symbols+Sharp:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap\"\n\t\t\t\t\trel=\"stylesheet\"\n\t\t\t\t\tprecedence=\"default\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n}\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\n * Feature types for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Features.kt\n *\n * Features describe the outline segments of a RoundedPolygon:\n * - Corner: a (potentially rounded) vertex\n * - Edge: a straight or curved segment between two corners\n */\n\nimport type { Cubic } from \"../math/cubic\";\nimport type { PointTransformer } from \"../utils/utils\";\n\n/**\n * A discriminated union representing one outline segment of a polygon.\n *\n * @example\n * const corner: Feature = { type: \"corner\", cubics: [...], convex: true };\n * const edge: Feature   = { type: \"edge\",   cubics: [...] };\n */\nexport type Feature = CornerFeature | EdgeFeature;\n\n/** A (potentially rounded) corner vertex. */\nexport interface CornerFeature {\n\treadonly type: \"corner\";\n\t/**\n\t * Cubic curves making up this corner.\n\t * Unrounded corner = 1 zero-length cubic. Rounded = 1–3 cubics (flanking + arc + flanking).\n\t */\n\treadonly cubics: Cubic[];\n\t/** True if this corner is convex (pointing outward). */\n\treadonly convex: boolean;\n}\n\n/** A straight or curved edge segment between two corners. */\nexport interface EdgeFeature {\n\treadonly type: \"edge\";\n\t/** Cubic curves making up this edge (usually a single straight-line cubic). */\n\treadonly cubics: Cubic[];\n}\n\n/**\n * Creates a corner feature.\n * @param cubics - Cubic curves defining the corner shape\n * @param convex - Whether the corner is convex\n */\nexport function cornerFeature(cubics: Cubic[], convex: boolean): CornerFeature {\n\treturn { type: \"corner\", cubics, convex };\n}\n\n/**\n * Creates an edge feature.\n * @param cubics - Cubic curves defining the edge\n */\nexport function edgeFeature(cubics: Cubic[]): EdgeFeature {\n\treturn { type: \"edge\", cubics };\n}\n\n/**\n * Returns a transformed copy of a feature.\n * @param feature - The feature to transform\n * @param fn - Point transformer function\n */\nexport function transformFeature(\n\tfeature: Feature,\n\tfn: PointTransformer,\n): Feature {\n\tconst cubics = feature.cubics.map((c) => c.transformed(fn));\n\tif (feature.type === \"corner\") {\n\t\treturn cornerFeature(cubics, feature.convex);\n\t}\n\treturn edgeFeature(cubics);\n}\n","/**\n * Corner rounding parameters for polygon vertices.\n * Ported from androidx.graphics.shapes.CornerRounding.kt\n *\n * @see https://m3.material.io/styles/shape/corner-radius-scale\n */\n\n/**\n * Defines how a polygon corner is rounded.\n *\n * @example\n * // Fully rounded corner with radius 16\n * const rounding: CornerRounding = { radius: 16, smoothing: 0 };\n *\n * @example\n * // Rounded corner with iOS-style squircle smoothing\n * const smoothRounding: CornerRounding = { radius: 16, smoothing: 0.6 };\n */\nexport interface CornerRounding {\n\t/**\n\t * The radius of the rounding. A value of 0 means no rounding (sharp corner).\n\t * @default 0\n\t */\n\treadonly radius: number;\n\n\t/**\n\t * Smoothing factor in [0, 1]. Controls how the rounding curve transitions from\n\t * the straight edge to the circular arc (squircle-like effect).\n\t * 0 = pure circular arc, 1 = maximum smoothing.\n\t * @default 0\n\t */\n\treadonly smoothing: number;\n}\n\n/**\n * Creates a CornerRounding.\n * @param radius - Rounding radius (default: 0)\n * @param smoothing - Smoothing factor 0–1 (default: 0)\n */\nexport function cornerRounding(radius = 0, smoothing = 0): CornerRounding {\n\treturn { radius, smoothing };\n}\n\n/** No rounding: straight/sharp corners. */\nexport const UNROUNDED: CornerRounding = Object.freeze({\n\tradius: 0,\n\tsmoothing: 0,\n});\n","/**\n * Shared utility constants and functions for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Utils.kt\n *\n * @see https://m3.material.io/styles/shape/overview-principles\n */\n\n/** Epsilon for floating-point distance comparisons */\nexport const DISTANCE_EPSILON = 1e-4;\n\n/** Epsilon for angle comparisons */\nexport const ANGLE_EPSILON = 1e-4;\n\n/** Pi as a float constant */\nexport const FLOAT_PI = Math.PI;\n\n/**\n * Calculates the Euclidean distance between two coordinate offsets.\n * @param dx - Difference in x coordinates\n * @param dy - Difference in y coordinates\n * @returns The distance\n */\nexport function distance(dx: number, dy: number): number {\n\treturn Math.sqrt(dx * dx + dy * dy);\n}\n\n/**\n * Calculates the squared Euclidean distance (cheaper than distance).\n * @param dx - Difference in x coordinates\n * @param dy - Difference in y coordinates\n * @returns The squared distance\n */\nexport function distanceSquared(dx: number, dy: number): number {\n\treturn dx * dx + dy * dy;\n}\n\n/**\n * Converts polar coordinates to Cartesian (x, y).\n * @param radius - The radial distance\n * @param angle - The angle in radians\n * @returns A tuple [x, y]\n */\nexport function radialToCartesian(\n\tradius: number,\n\tangle: number,\n): [number, number] {\n\treturn [radius * Math.cos(angle), radius * Math.sin(angle)];\n}\n\n/**\n * Returns value modulo divisor, always positive.\n * @param value - The value\n * @param divisor - The divisor\n * @returns Positive modulo result\n */\nexport function positiveModulo(value: number, divisor: number): number {\n\treturn ((value % divisor) + divisor) % divisor;\n}\n\n/**\n * Linearly interpolates between start and stop.\n * @param start - Start value (at fraction=0)\n * @param stop - End value (at fraction=1)\n * @param fraction - Interpolation factor [0,1]\n * @returns Interpolated value\n */\nexport function interpolate(\n\tstart: number,\n\tstop: number,\n\tfraction: number,\n): number {\n\treturn start + (stop - start) * fraction;\n}\n\n/**\n * Returns the square of a value.\n * @param value - The value to square\n */\nexport function square(value: number): number {\n\treturn value * value;\n}\n\n/**\n * Returns a unit direction vector from (0,0) toward (dx, dy).\n * @param dx - X component\n * @param dy - Y component\n * @returns [nx, ny] normalized direction\n */\nexport function directionVector(dx: number, dy: number): [number, number] {\n\tconst d = distance(dx, dy);\n\tif (d < DISTANCE_EPSILON) return [0, 0];\n\treturn [dx / d, dy / d];\n}\n\n/**\n * Checks if the turn from prev→curr→next is convex (clockwise in screen coords).\n * @param prevX - Previous vertex x\n * @param prevY - Previous vertex y\n * @param currX - Current vertex x\n * @param currY - Current vertex y\n * @param nextX - Next vertex x\n * @param nextY - Next vertex y\n * @returns true if convex\n */\nexport function convex(\n\tprevX: number,\n\tprevY: number,\n\tcurrX: number,\n\tcurrY: number,\n\tnextX: number,\n\tnextY: number,\n): boolean {\n\t// Cross product of (curr-prev) × (next-curr)\n\tconst v1x = currX - prevX;\n\tconst v1y = currY - prevY;\n\tconst v2x = nextX - currX;\n\tconst v2y = nextY - currY;\n\treturn v1x * v2y - v1y * v2x > 0;\n}\n\n/**\n * Type for a function that transforms a point (x, y) → (x', y').\n */\nexport type PointTransformer = (x: number, y: number) => [number, number];\n","/**\n * Point type and operations for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Point.kt\n *\n * In Kotlin, Point is a type alias for FloatFloatPair. Here we use a plain object\n * for zero-overhead structural typing in TypeScript.\n */\n\nimport {\n\tDISTANCE_EPSILON,\n\tdirectionVector,\n\tdistance,\n\tinterpolate,\n\ttype PointTransformer,\n} from \"../utils/utils\";\n\n/** A 2D point or vector. */\nexport interface Point {\n\treadonly x: number;\n\treadonly y: number;\n}\n\n/**\n * Creates a new Point.\n * @param x - X coordinate\n * @param y - Y coordinate\n */\nexport function point(x: number, y: number): Point {\n\treturn { x, y };\n}\n\n/**\n * Returns the magnitude (distance from origin) of the point.\n * @param p - The point\n */\nexport function getDistance(p: Point): number {\n\treturn distance(p.x, p.y);\n}\n\n/**\n * Returns the squared magnitude of the point (cheaper than getDistance).\n * @param p - The point\n */\nexport function getDistanceSquared(p: Point): number {\n\treturn p.x * p.x + p.y * p.y;\n}\n\n/**\n * Dot product of two points (treated as vectors).\n * @param a - First point\n * @param b - Second point\n */\nexport function dotProduct(a: Point, b: Point): number {\n\treturn a.x * b.x + a.y * b.y;\n}\n\n/**\n * Rotates the point 90 degrees counter-clockwise.\n * @param p - The point\n * @returns New rotated point\n */\nexport function rotate90(p: Point): Point {\n\treturn { x: -p.y, y: p.x };\n}\n\n/**\n * Returns the unit vector in the direction of the point from (0,0).\n * @param p - The point\n * @throws Error if the point is at the origin\n */\nexport function getDirection(p: Point): Point {\n\tconst d = getDistance(p);\n\tif (d < DISTANCE_EPSILON)\n\t\tthrow new Error(\"Can't get direction of zero-length vector\");\n\treturn { x: p.x / d, y: p.y / d };\n}\n\n/**\n * Checks if p0→p1→p2 turn is clockwise (positive cross product in screen coords).\n * @param p0 - Previous point\n * @param p1 - Current point\n * @param p2 - Next point\n */\nexport function clockwise(p0: Point, p1: Point, p2: Point): boolean {\n\tconst v1x = p1.x - p0.x;\n\tconst v1y = p1.y - p0.y;\n\tconst v2x = p2.x - p1.x;\n\tconst v2y = p2.y - p1.y;\n\treturn v1x * v2y - v1y * v2x > 0;\n}\n\n/** Point addition. */\nexport function addPoints(a: Point, b: Point): Point {\n\treturn { x: a.x + b.x, y: a.y + b.y };\n}\n\n/** Point subtraction. */\nexport function subtractPoints(a: Point, b: Point): Point {\n\treturn { x: a.x - b.x, y: a.y - b.y };\n}\n\n/** Scalar multiplication. */\nexport function scalePoint(p: Point, scalar: number): Point {\n\treturn { x: p.x * scalar, y: p.y * scalar };\n}\n\n/** Scalar division. */\nexport function dividePoint(p: Point, scalar: number): Point {\n\treturn { x: p.x / scalar, y: p.y / scalar };\n}\n\n/**\n * Linearly interpolates between two points.\n * @param start - Start point (at fraction=0)\n * @param stop - End point (at fraction=1)\n * @param fraction - Interpolation factor [0,1]\n */\nexport function lerpPoint(start: Point, stop: Point, fraction: number): Point {\n\treturn {\n\t\tx: interpolate(start.x, stop.x, fraction),\n\t\ty: interpolate(start.y, stop.y, fraction),\n\t};\n}\n\n/**\n * Returns a direction unit vector from dx/dy components.\n * @param dx - X component\n * @param dy - Y component\n */\nexport function pointDirection(dx: number, dy: number): Point {\n\tconst [nx, ny] = directionVector(dx, dy);\n\treturn { x: nx, y: ny };\n}\n\n/**\n * Applies a PointTransformer to a point.\n * @param p - The original point\n * @param fn - The transform function\n */\nexport function transformPoint(p: Point, fn: PointTransformer): Point {\n\tconst [tx, ty] = fn(p.x, p.y);\n\treturn { x: tx, y: ty };\n}\n","/**\n * Cubic Bézier curve type for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Cubic.kt\n *\n * A cubic holds 8 floats: [anchor0X, anchor0Y, control0X, control0Y, control1X, control1Y, anchor1X, anchor1Y]\n */\n\nimport type { PointTransformer } from \"../utils/utils\";\nimport { DISTANCE_EPSILON, interpolate, square } from \"../utils/utils\";\nimport { type Point, point } from \"./point\";\n\n/**\n * A single cubic Bézier curve segment.\n *\n * The curve goes from anchor0 → (via control0, control1) → anchor1.\n *\n * @example\n * const line = Cubic.straightLine(0, 0, 1, 0);\n * const arc  = Cubic.circularArc(0, 0, 1, 0, 0, 1);\n */\nexport class Cubic {\n\t/** Internal storage: [a0x, a0y, c0x, c0y, c1x, c1y, a1x, a1y] */\n\treadonly points: number[];\n\n\tconstructor(points: number[]) {\n\t\tif (points.length !== 8)\n\t\t\tthrow new Error(\"Cubic points array must have exactly 8 elements\");\n\t\tthis.points = points;\n\t}\n\n\t/** First anchor point X */\n\tget anchor0X(): number {\n\t\treturn this.points[0];\n\t}\n\t/** First anchor point Y */\n\tget anchor0Y(): number {\n\t\treturn this.points[1];\n\t}\n\t/** First control point X */\n\tget control0X(): number {\n\t\treturn this.points[2];\n\t}\n\t/** First control point Y */\n\tget control0Y(): number {\n\t\treturn this.points[3];\n\t}\n\t/** Second control point X */\n\tget control1X(): number {\n\t\treturn this.points[4];\n\t}\n\t/** Second control point Y */\n\tget control1Y(): number {\n\t\treturn this.points[5];\n\t}\n\t/** Second anchor point X */\n\tget anchor1X(): number {\n\t\treturn this.points[6];\n\t}\n\t/** Second anchor point Y */\n\tget anchor1Y(): number {\n\t\treturn this.points[7];\n\t}\n\n\t/**\n\t * Returns a point on the curve at parameter t (0=start, 1=end).\n\t * Uses the standard cubic Bézier formula.\n\t * @param t - Parameter in [0, 1]\n\t */\n\tpointOnCurve(t: number): Point {\n\t\tconst u = 1 - t;\n\t\treturn point(\n\t\t\tthis.anchor0X * (u * u * u) +\n\t\t\t\tthis.control0X * (3 * t * u * u) +\n\t\t\t\tthis.control1X * (3 * t * t * u) +\n\t\t\t\tthis.anchor1X * (t * t * t),\n\t\t\tthis.anchor0Y * (u * u * u) +\n\t\t\t\tthis.control0Y * (3 * t * u * u) +\n\t\t\t\tthis.control1Y * (3 * t * t * u) +\n\t\t\t\tthis.anchor1Y * (t * t * t),\n\t\t);\n\t}\n\n\t/**\n\t * Returns true if this curve has (near) zero length.\n\t */\n\tzeroLength(): boolean {\n\t\treturn (\n\t\t\tMath.abs(this.anchor0X - this.anchor1X) < DISTANCE_EPSILON &&\n\t\t\tMath.abs(this.anchor0Y - this.anchor1Y) < DISTANCE_EPSILON\n\t\t);\n\t}\n\n\t/**\n\t * Splits this cubic at parameter t, returning two cubics.\n\t * Uses De Casteljau's algorithm.\n\t * @param t - Split parameter in [0, 1]\n\t * @returns [left, right] pair\n\t */\n\tsplit(t: number): [Cubic, Cubic] {\n\t\tconst u = 1 - t;\n\t\tconst mid = this.pointOnCurve(t);\n\t\tconst left = new Cubic([\n\t\t\tthis.anchor0X,\n\t\t\tthis.anchor0Y,\n\t\t\tthis.anchor0X * u + this.control0X * t,\n\t\t\tthis.anchor0Y * u + this.control0Y * t,\n\t\t\tthis.anchor0X * (u * u) +\n\t\t\t\tthis.control0X * (2 * u * t) +\n\t\t\t\tthis.control1X * (t * t),\n\t\t\tthis.anchor0Y * (u * u) +\n\t\t\t\tthis.control0Y * (2 * u * t) +\n\t\t\t\tthis.control1Y * (t * t),\n\t\t\tmid.x,\n\t\t\tmid.y,\n\t\t]);\n\t\tconst right = new Cubic([\n\t\t\tmid.x,\n\t\t\tmid.y,\n\t\t\tthis.control0X * (u * u) +\n\t\t\t\tthis.control1X * (2 * u * t) +\n\t\t\t\tthis.anchor1X * (t * t),\n\t\t\tthis.control0Y * (u * u) +\n\t\t\t\tthis.control1Y * (2 * u * t) +\n\t\t\t\tthis.anchor1Y * (t * t),\n\t\t\tthis.control1X * u + this.anchor1X * t,\n\t\t\tthis.control1Y * u + this.anchor1Y * t,\n\t\t\tthis.anchor1X,\n\t\t\tthis.anchor1Y,\n\t\t]);\n\t\treturn [left, right];\n\t}\n\n\t/**\n\t * Returns a reversed copy of this cubic (anchor0 ↔ anchor1, controls swapped).\n\t */\n\treverse(): Cubic {\n\t\treturn new Cubic([\n\t\t\tthis.anchor1X,\n\t\t\tthis.anchor1Y,\n\t\t\tthis.control1X,\n\t\t\tthis.control1Y,\n\t\t\tthis.control0X,\n\t\t\tthis.control0Y,\n\t\t\tthis.anchor0X,\n\t\t\tthis.anchor0Y,\n\t\t]);\n\t}\n\n\t/**\n\t * Calculates the axis-aligned bounding box.\n\t * @param approximate - If true, uses control point hull (faster). Default: false.\n\t * @returns [minX, minY, maxX, maxY]\n\t */\n\tcalculateBounds(approximate = false): [number, number, number, number] {\n\t\tif (this.zeroLength()) {\n\t\t\treturn [this.anchor0X, this.anchor0Y, this.anchor0X, this.anchor0Y];\n\t\t}\n\n\t\tlet minX = Math.min(this.anchor0X, this.anchor1X);\n\t\tlet minY = Math.min(this.anchor0Y, this.anchor1Y);\n\t\tlet maxX = Math.max(this.anchor0X, this.anchor1X);\n\t\tlet maxY = Math.max(this.anchor0Y, this.anchor1Y);\n\n\t\tif (approximate) {\n\t\t\tminX = Math.min(minX, this.control0X, this.control1X);\n\t\t\tminY = Math.min(minY, this.control0Y, this.control1Y);\n\t\t\tmaxX = Math.max(maxX, this.control0X, this.control1X);\n\t\t\tmaxY = Math.max(maxY, this.control0Y, this.control1Y);\n\t\t\treturn [minX, minY, maxX, maxY];\n\t\t}\n\n\t\t// Find derivative roots (quadratic formula) for x\n\t\tconst xa =\n\t\t\t-this.anchor0X + 3 * this.control0X - 3 * this.control1X + this.anchor1X;\n\t\tconst xb = 2 * this.anchor0X - 4 * this.control0X + 2 * this.control1X;\n\t\tconst xc = -this.anchor0X + this.control0X;\n\n\t\tconst expandX = (t: number) => {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tconst v = this.pointOnCurve(t).x;\n\t\t\t\tif (v < minX) minX = v;\n\t\t\t\tif (v > maxX) maxX = v;\n\t\t\t}\n\t\t};\n\n\t\tif (Math.abs(xa) < DISTANCE_EPSILON) {\n\t\t\tif (xb !== 0) expandX((2 * xc) / (-2 * xb));\n\t\t} else {\n\t\t\tconst xs = xb * xb - 4 * xa * xc;\n\t\t\tif (xs >= 0) {\n\t\t\t\texpandX((-xb + Math.sqrt(xs)) / (2 * xa));\n\t\t\t\texpandX((-xb - Math.sqrt(xs)) / (2 * xa));\n\t\t\t}\n\t\t}\n\n\t\t// Same for y\n\t\tconst ya =\n\t\t\t-this.anchor0Y + 3 * this.control0Y - 3 * this.control1Y + this.anchor1Y;\n\t\tconst yb = 2 * this.anchor0Y - 4 * this.control0Y + 2 * this.control1Y;\n\t\tconst yc = -this.anchor0Y + this.control0Y;\n\n\t\tconst expandY = (t: number) => {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tconst v = this.pointOnCurve(t).y;\n\t\t\t\tif (v < minY) minY = v;\n\t\t\t\tif (v > maxY) maxY = v;\n\t\t\t}\n\t\t};\n\n\t\tif (Math.abs(ya) < DISTANCE_EPSILON) {\n\t\t\tif (yb !== 0) expandY((2 * yc) / (-2 * yb));\n\t\t} else {\n\t\t\tconst ys = yb * yb - 4 * ya * yc;\n\t\t\tif (ys >= 0) {\n\t\t\t\texpandY((-yb + Math.sqrt(ys)) / (2 * ya));\n\t\t\t\texpandY((-yb - Math.sqrt(ys)) / (2 * ya));\n\t\t\t}\n\t\t}\n\n\t\treturn [minX, minY, maxX, maxY];\n\t}\n\n\t/**\n\t * Interpolates between this cubic and another at fraction t.\n\t * @param other - Target cubic\n\t * @param t - Fraction [0, 1]\n\t */\n\tinterpolateTo(other: Cubic, t: number): Cubic {\n\t\treturn new Cubic(\n\t\t\tthis.points.map((v, i) => interpolate(v, other.points[i], t)),\n\t\t);\n\t}\n\n\t/**\n\t * Applies a PointTransformer to all anchor and control points.\n\t * @param fn - The transform function\n\t */\n\ttransformed(fn: PointTransformer): Cubic {\n\t\tconst p = this.points.slice();\n\t\tfor (let i = 0; i < 8; i += 2) {\n\t\t\tconst [tx, ty] = fn(p[i], p[i + 1]);\n\t\t\tp[i] = tx;\n\t\t\tp[i + 1] = ty;\n\t\t}\n\t\treturn new Cubic(p);\n\t}\n\n\ttoString(): string {\n\t\treturn `Cubic(a0=(${this.anchor0X},${this.anchor0Y}) c0=(${this.control0X},${this.control0Y}) c1=(${this.control1X},${this.control1Y}) a1=(${this.anchor1X},${this.anchor1Y}))`;\n\t}\n\n\t// ─── Static factories ─────────────────────────────────────────────────────\n\n\t/**\n\t * Creates a cubic representing a straight line.\n\t * Control points lie at 1/3 and 2/3 of the line.\n\t * @param x0 - Start anchor X\n\t * @param y0 - Start anchor Y\n\t * @param x1 - End anchor X\n\t * @param y1 - End anchor Y\n\t */\n\tstatic straightLine(x0: number, y0: number, x1: number, y1: number): Cubic {\n\t\treturn new Cubic([\n\t\t\tx0,\n\t\t\ty0,\n\t\t\tinterpolate(x0, x1, 1 / 3),\n\t\t\tinterpolate(y0, y1, 1 / 3),\n\t\t\tinterpolate(x0, x1, 2 / 3),\n\t\t\tinterpolate(y0, y1, 2 / 3),\n\t\t\tx1,\n\t\t\ty1,\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a cubic approximating a circular arc.\n\t * p0 and p1 must be equidistant from the center.\n\t * For arcs > 180°, use multiple cubics.\n\t *\n\t * @param centerX - Arc center X\n\t * @param centerY - Arc center Y\n\t * @param x0 - Start point X (on circle)\n\t * @param y0 - Start point Y (on circle)\n\t * @param x1 - End point X (on circle)\n\t * @param y1 - End point Y (on circle)\n\t */\n\tstatic circularArc(\n\t\tcenterX: number,\n\t\tcenterY: number,\n\t\tx0: number,\n\t\ty0: number,\n\t\tx1: number,\n\t\ty1: number,\n\t): Cubic {\n\t\tconst p0dx = x0 - centerX;\n\t\tconst p0dy = y0 - centerY;\n\t\tconst p1dx = x1 - centerX;\n\t\tconst p1dy = y1 - centerY;\n\t\tconst d0 = Math.sqrt(p0dx * p0dx + p0dy * p0dy);\n\t\tconst d1 = Math.sqrt(p1dx * p1dx + p1dy * p1dy);\n\t\tif (d0 < DISTANCE_EPSILON || d1 < DISTANCE_EPSILON) {\n\t\t\treturn Cubic.straightLine(x0, y0, x1, y1);\n\t\t}\n\t\t// Normalized direction vectors\n\t\tconst nx0 = p0dx / d0,\n\t\t\tny0 = p0dy / d0;\n\t\tconst nx1 = p1dx / d1,\n\t\t\tny1 = p1dy / d1;\n\t\t// 90-degree rotations (tangent directions)\n\t\tconst rx0 = -ny0,\n\t\t\try0 = nx0;\n\t\tconst rx1 = -ny1,\n\t\t\try1 = nx1;\n\t\t// cos of angle between vectors\n\t\tconst cosa = nx0 * nx1 + ny0 * ny1;\n\t\tif (cosa > 0.999) return Cubic.straightLine(x0, y0, x1, y1);\n\t\t// Is arc clockwise?\n\t\tconst clockwise = rx0 * p1dx + ry0 * p1dy >= 0;\n\t\tconst k =\n\t\t\t((d0 *\n\t\t\t\t(4 / 3) *\n\t\t\t\t(Math.sqrt(2 * (1 - cosa)) - Math.sqrt(1 - square(cosa)))) /\n\t\t\t\t(1 - cosa)) *\n\t\t\t(clockwise ? 1 : -1);\n\t\treturn new Cubic([\n\t\t\tx0,\n\t\t\ty0,\n\t\t\tx0 + rx0 * k,\n\t\t\ty0 + ry0 * k,\n\t\t\tx1 - rx1 * k,\n\t\t\ty1 - ry1 * k,\n\t\t\tx1,\n\t\t\ty1,\n\t\t]);\n\t}\n\n\t/**\n\t * Creates a zero-length cubic at the given point.\n\t * @param x - X coordinate\n\t * @param y - Y coordinate\n\t */\n\tstatic empty(x: number, y: number): Cubic {\n\t\treturn new Cubic([x, y, x, y, x, y, x, y]);\n\t}\n}\n\n/**\n * A mutable version of Cubic used in performance-critical paths (Morph.forEachCubic).\n * Reuses the same instance to avoid allocations.\n */\nexport class MutableCubic extends Cubic {\n\tconstructor() {\n\t\tsuper([0, 0, 0, 0, 0, 0, 0, 0]);\n\t}\n\n\t/**\n\t * Mutably interpolates between c1 and c2 at the given progress.\n\t * @param c1 - Start cubic\n\t * @param c2 - End cubic\n\t * @param progress - Interpolation factor [0, 1]\n\t */\n\tinterpolate(c1: Cubic, c2: Cubic, progress: number): void {\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\t(this.points as number[])[i] = interpolate(\n\t\t\t\tc1.points[i],\n\t\t\t\tc2.points[i],\n\t\t\t\tprogress,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Mutably applies a PointTransformer to all points.\n\t * @param fn - The transform function\n\t */\n\ttransform(fn: PointTransformer): void {\n\t\tconst p = this.points as number[];\n\t\tfor (let i = 0; i < 8; i += 2) {\n\t\t\tconst [tx, ty] = fn(p[i], p[i + 1]);\n\t\t\tp[i] = tx;\n\t\t\tp[i + 1] = ty;\n\t\t}\n\t}\n}\n","/**\n * RoundedPolygon — core shape class for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.RoundedPolygon.kt\n *\n * A RoundedPolygon is defined by a list of Feature (Corner + Edge) objects.\n * Its geometry is stored as a flat list of Cubic Bézier curves that form\n * a closed, contiguous outline.\n */\n\nimport { type CornerRounding, UNROUNDED } from \"../math/corner-rounding\";\nimport { Cubic } from \"../math/cubic\";\nimport { type Point, point } from \"../math/point\";\nimport {\n\tconvex,\n\tDISTANCE_EPSILON,\n\tdistance,\n\tdistanceSquared,\n\tFLOAT_PI,\n\tinterpolate,\n\ttype PointTransformer,\n\tradialToCartesian,\n\tsquare,\n} from \"../utils/utils\";\nimport {\n\tcornerFeature,\n\tedgeFeature,\n\ttype Feature,\n\ttransformFeature,\n} from \"./features\";\n\n// ─── Internal: RoundedCorner ─────────────────────────────────────────────────\n\n/**\n * Internal helper that computes the Bézier curves for a single rounded corner.\n * Ported from the private RoundedCorner class in RoundedPolygon.kt\n */\nclass RoundedCorner {\n\tprivate readonly d1: Point;\n\tprivate readonly d2: Point;\n\tprivate readonly cornerRadius: number;\n\tprivate readonly smoothing: number;\n\tprivate readonly sinAngle: number;\n\treadonly expectedRoundCut: number;\n\tprivate center: Point = point(0, 0);\n\n\tconstructor(\n\t\tprivate readonly p0: Point,\n\t\tprivate readonly p1: Point,\n\t\tprivate readonly p2: Point,\n\t\treadonly rounding: CornerRounding = UNROUNDED,\n\t) {\n\t\tconst v01x = p0.x - p1.x,\n\t\t\tv01y = p0.y - p1.y;\n\t\tconst v21x = p2.x - p1.x,\n\t\t\tv21y = p2.y - p1.y;\n\t\tconst d01 = distance(v01x, v01y);\n\t\tconst d21 = distance(v21x, v21y);\n\n\t\tif (d01 > 0 && d21 > 0) {\n\t\t\tthis.d1 = point(v01x / d01, v01y / d01);\n\t\t\tthis.d2 = point(v21x / d21, v21y / d21);\n\t\t\tthis.cornerRadius = rounding.radius;\n\t\t\tthis.smoothing = rounding.smoothing;\n\t\t\tconst cosA = this.d1.x * this.d2.x + this.d1.y * this.d2.y;\n\t\t\tthis.sinAngle = Math.sqrt(Math.max(0, 1 - square(cosA)));\n\t\t\tthis.expectedRoundCut =\n\t\t\t\tthis.sinAngle > 1e-3\n\t\t\t\t\t? (this.cornerRadius * (cosA + 1)) / this.sinAngle\n\t\t\t\t\t: 0;\n\t\t} else {\n\t\t\tthis.d1 = point(0, 0);\n\t\t\tthis.d2 = point(0, 0);\n\t\t\tthis.cornerRadius = 0;\n\t\t\tthis.smoothing = 0;\n\t\t\tthis.sinAngle = 0;\n\t\t\tthis.expectedRoundCut = 0;\n\t\t}\n\t}\n\n\tget expectedCut(): number {\n\t\treturn (1 + this.smoothing) * this.expectedRoundCut;\n\t}\n\n\tgetCubics(allowedCut0: number, allowedCut1 = allowedCut0): Cubic[] {\n\t\tconst allowedCut = Math.min(allowedCut0, allowedCut1);\n\t\tif (\n\t\t\tthis.expectedRoundCut < DISTANCE_EPSILON ||\n\t\t\tallowedCut < DISTANCE_EPSILON ||\n\t\t\tthis.cornerRadius < DISTANCE_EPSILON\n\t\t) {\n\t\t\tthis.center = this.p1;\n\t\t\treturn [Cubic.straightLine(this.p1.x, this.p1.y, this.p1.x, this.p1.y)];\n\t\t}\n\n\t\tconst actualRoundCut = Math.min(allowedCut, this.expectedRoundCut);\n\t\tconst actualSmoothing0 = this.calcSmoothingValue(allowedCut0);\n\t\tconst actualSmoothing1 = this.calcSmoothingValue(allowedCut1);\n\t\tconst actualR =\n\t\t\t(this.cornerRadius * actualRoundCut) / this.expectedRoundCut;\n\t\tconst centerDist = Math.sqrt(square(actualR) + square(actualRoundCut));\n\n\t\t// Center of rounding arc\n\t\tconst midDirX = (this.d1.x + this.d2.x) / 2;\n\t\tconst midDirY = (this.d1.y + this.d2.y) / 2;\n\t\tconst midDist = distance(midDirX, midDirY);\n\t\tthis.center = point(\n\t\t\tthis.p1.x + (midDirX / midDist) * centerDist,\n\t\t\tthis.p1.y + (midDirY / midDist) * centerDist,\n\t\t);\n\n\t\tconst ci0 = point(\n\t\t\tthis.p1.x + this.d1.x * actualRoundCut,\n\t\t\tthis.p1.y + this.d1.y * actualRoundCut,\n\t\t);\n\t\tconst ci2 = point(\n\t\t\tthis.p1.x + this.d2.x * actualRoundCut,\n\t\t\tthis.p1.y + this.d2.y * actualRoundCut,\n\t\t);\n\n\t\tconst flanking0 = this.computeFlankingCurve(\n\t\t\tactualRoundCut,\n\t\t\tactualSmoothing0,\n\t\t\tthis.p1,\n\t\t\tthis.p0,\n\t\t\tci0,\n\t\t\tci2,\n\t\t\tthis.center,\n\t\t\tactualR,\n\t\t);\n\t\tconst flanking2 = this.computeFlankingCurve(\n\t\t\tactualRoundCut,\n\t\t\tactualSmoothing1,\n\t\t\tthis.p1,\n\t\t\tthis.p2,\n\t\t\tci2,\n\t\t\tci0,\n\t\t\tthis.center,\n\t\t\tactualR,\n\t\t).reverse();\n\n\t\treturn [\n\t\t\tflanking0,\n\t\t\tCubic.circularArc(\n\t\t\t\tthis.center.x,\n\t\t\t\tthis.center.y,\n\t\t\t\tflanking0.anchor1X,\n\t\t\t\tflanking0.anchor1Y,\n\t\t\t\tflanking2.anchor0X,\n\t\t\t\tflanking2.anchor0Y,\n\t\t\t),\n\t\t\tflanking2,\n\t\t];\n\t}\n\n\tprivate calcSmoothingValue(allowedCut: number): number {\n\t\tif (allowedCut > this.expectedCut) return this.smoothing;\n\t\tif (allowedCut > this.expectedRoundCut) {\n\t\t\treturn (\n\t\t\t\t(this.smoothing * (allowedCut - this.expectedRoundCut)) /\n\t\t\t\t(this.expectedCut - this.expectedRoundCut)\n\t\t\t);\n\t\t}\n\t\treturn 0;\n\t}\n\n\tprivate computeFlankingCurve(\n\t\tactualRoundCut: number,\n\t\tactualSmoothing: number,\n\t\tcorner: Point,\n\t\tsideStart: Point,\n\t\tcircleIntersect: Point,\n\t\totherIntersect: Point,\n\t\tcircleCenter: Point,\n\t\tactualR: number,\n\t): Cubic {\n\t\tconst sdx = sideStart.x - corner.x,\n\t\t\tsdy = sideStart.y - corner.y;\n\t\tconst sd = distance(sdx, sdy);\n\t\tconst sideDir = point(sdx / sd, sdy / sd);\n\t\tconst curveStart = point(\n\t\t\tcorner.x + sideDir.x * actualRoundCut * (1 + actualSmoothing),\n\t\t\tcorner.y + sideDir.y * actualRoundCut * (1 + actualSmoothing),\n\t\t);\n\n\t\t// Interpolate on the circle arc for the end point\n\t\tconst px = interpolate(\n\t\t\tcircleIntersect.x,\n\t\t\t(circleIntersect.x + otherIntersect.x) / 2,\n\t\t\tactualSmoothing,\n\t\t);\n\t\tconst py = interpolate(\n\t\t\tcircleIntersect.y,\n\t\t\t(circleIntersect.y + otherIntersect.y) / 2,\n\t\t\tactualSmoothing,\n\t\t);\n\n\t\t// Project onto circle\n\t\tconst ptoCx = px - circleCenter.x,\n\t\t\tptoCy = py - circleCenter.y;\n\t\tconst ptoCd = distance(ptoCx, ptoCy);\n\t\tconst curveEnd = point(\n\t\t\tcircleCenter.x + (ptoCx / ptoCd) * actualR,\n\t\t\tcircleCenter.y + (ptoCy / ptoCd) * actualR,\n\t\t);\n\n\t\t// Tangent at curveEnd\n\t\tconst tangentX = -(curveEnd.y - circleCenter.y);\n\t\tconst tangentY = curveEnd.x - circleCenter.x;\n\n\t\t// Line intersection to find anchor end\n\t\tconst anchorEnd =\n\t\t\tlineIntersection(\n\t\t\t\tsideStart,\n\t\t\t\tsideDir,\n\t\t\t\tcurveEnd,\n\t\t\t\tpoint(tangentX, tangentY),\n\t\t\t) ?? circleIntersect;\n\t\tconst anchorStart = point(\n\t\t\t(curveStart.x + anchorEnd.x * 2) / 3,\n\t\t\t(curveStart.y + anchorEnd.y * 2) / 3,\n\t\t);\n\n\t\treturn new Cubic([\n\t\t\tcurveStart.x,\n\t\t\tcurveStart.y,\n\t\t\tanchorStart.x,\n\t\t\tanchorStart.y,\n\t\t\tanchorEnd.x,\n\t\t\tanchorEnd.y,\n\t\t\tcurveEnd.x,\n\t\t\tcurveEnd.y,\n\t\t]);\n\t}\n}\n\nfunction lineIntersection(\n\tp0: Point,\n\td0: Point,\n\tp1: Point,\n\td1: Point,\n): Point | null {\n\t// d1 rotated 90°\n\tconst rd1x = -d1.y,\n\t\trd1y = d1.x;\n\tconst den = d0.x * rd1x + d0.y * rd1y;\n\tif (Math.abs(den) < DISTANCE_EPSILON) return null;\n\tconst num = (p1.x - p0.x) * rd1x + (p1.y - p0.y) * rd1y;\n\tif (Math.abs(den) < DISTANCE_EPSILON * Math.abs(num)) return null;\n\tconst k = num / den;\n\treturn point(p0.x + d0.x * k, p0.y + d0.y * k);\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction calculateCenter(vertices: number[]): Point {\n\tlet cx = 0,\n\t\tcy = 0;\n\tfor (let i = 0; i < vertices.length; i += 2) {\n\t\tcx += vertices[i];\n\t\tcy += vertices[i + 1];\n\t}\n\tconst n = vertices.length / 2;\n\treturn point(cx / n, cy / n);\n}\n\nfunction verticesFromNumVerts(\n\tnumVertices: number,\n\tradius: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst result: number[] = [];\n\tfor (let i = 0; i < numVertices; i++) {\n\t\tconst angle = (FLOAT_PI / numVertices) * 2 * i;\n\t\tconst [rx, ry] = radialToCartesian(radius, angle);\n\t\tresult.push(cx + rx, cy + ry);\n\t}\n\treturn result;\n}\n\nfunction starVerticesFromNumVerts(\n\tnumVerticesPerRadius: number,\n\tradius: number,\n\tinnerRadius: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst result: number[] = [];\n\tconst total = numVerticesPerRadius * 2;\n\tfor (let i = 0; i < total; i++) {\n\t\tconst r = i % 2 === 0 ? radius : innerRadius;\n\t\tconst angle = (FLOAT_PI / numVerticesPerRadius) * i;\n\t\tconst [rx, ry] = radialToCartesian(r, angle);\n\t\tresult.push(cx + rx, cy + ry);\n\t}\n\treturn result;\n}\n\n// ─── RoundedPolygon ──────────────────────────────────────────────────────────\n\n/**\n * The core shape class. Represents a closed polygon outline as a list of Cubic\n * Bézier curves, optionally rounded at the vertices.\n *\n * All shapes in MD3 Expressive are represented as RoundedPolygon instances.\n *\n * @example\n * // Create a circle (8-vertex polygon, fully rounded)\n * const circle = RoundedPolygon.circle();\n *\n * @example\n * // Create a rounded rectangle\n * const rect = RoundedPolygon.rectangle(2, 1, { radius: 0.25, smoothing: 0 });\n */\nexport class RoundedPolygon {\n\t/** Flat list of cubic Bézier curves forming the closed outline. */\n\treadonly cubics: Cubic[];\n\t/** Feature list (corners + edges). */\n\treadonly features: Feature[];\n\t/** Center point of the polygon. */\n\treadonly center: Point;\n\n\t/** @internal Use static factory methods instead */\n\tprivate constructor(features: Feature[], center: Point) {\n\t\tthis.features = features;\n\t\tthis.center = center;\n\t\tthis.cubics = buildCubicsList(features);\n\t\tvalidateContiguity(this.cubics);\n\t}\n\n\tget centerX(): number {\n\t\treturn this.center.x;\n\t}\n\tget centerY(): number {\n\t\treturn this.center.y;\n\t}\n\n\t// ─── Static factories ────────────────────────────────────────────────\n\n\t/**\n\t * Creates a polygon from a vertex count (regular polygon).\n\t * @param numVertices - Number of vertices (≥ 3)\n\t * @param radius - Circumradius (default: 1)\n\t * @param centerX - Center X (default: 0)\n\t * @param centerY - Center Y (default: 0)\n\t * @param rounding - Corner rounding for all vertices\n\t * @param perVertexRounding - Per-vertex rounding overrides\n\t */\n\tstatic fromNumVertices(\n\t\tnumVertices: number,\n\t\tradius = 1,\n\t\tcenterX = 0,\n\t\tcenterY = 0,\n\t\trounding: CornerRounding = UNROUNDED,\n\t\tperVertexRounding?: CornerRounding[],\n\t): RoundedPolygon {\n\t\tif (numVertices < 3)\n\t\t\tthrow new Error(\"Polygon must have at least 3 vertices\");\n\t\tconst vertices = verticesFromNumVerts(\n\t\t\tnumVertices,\n\t\t\tradius,\n\t\t\tcenterX,\n\t\t\tcenterY,\n\t\t);\n\t\treturn RoundedPolygon.fromVertices(\n\t\t\tvertices,\n\t\t\trounding,\n\t\t\tperVertexRounding,\n\t\t\tcenterX,\n\t\t\tcenterY,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a polygon from a flat vertex array [x0, y0, x1, y1, ...].\n\t * @param vertices - Flat array of x,y pairs (length must be even and ≥ 6)\n\t * @param rounding - Corner rounding for all vertices\n\t * @param perVertexRounding - Per-vertex rounding overrides\n\t * @param centerX - Center X (auto-calculated if not provided)\n\t * @param centerY - Center Y (auto-calculated if not provided)\n\t */\n\tstatic fromVertices(\n\t\tvertices: number[],\n\t\trounding: CornerRounding = UNROUNDED,\n\t\tperVertexRounding?: CornerRounding[],\n\t\tcenterX?: number,\n\t\tcenterY?: number,\n\t): RoundedPolygon {\n\t\tif (vertices.length < 6)\n\t\t\tthrow new Error(\"Polygon must have at least 3 vertices\");\n\t\tif (vertices.length % 2 !== 0)\n\t\t\tthrow new Error(\"Vertices array must have even length\");\n\t\tif (perVertexRounding && perVertexRounding.length * 2 !== vertices.length) {\n\t\t\tthrow new Error(\"perVertexRounding must match vertex count\");\n\t\t}\n\n\t\tconst n = vertices.length / 2;\n\n\t\t// Build rounded corners\n\t\tconst roundedCorners: RoundedCorner[] = [];\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst vtxRounding = perVertexRounding ? perVertexRounding[i] : rounding;\n\t\t\tconst prevIdx = ((i + n - 1) % n) * 2;\n\t\t\tconst nextIdx = ((i + 1) % n) * 2;\n\t\t\troundedCorners.push(\n\t\t\t\tnew RoundedCorner(\n\t\t\t\t\tpoint(vertices[prevIdx], vertices[prevIdx + 1]),\n\t\t\t\t\tpoint(vertices[i * 2], vertices[i * 2 + 1]),\n\t\t\t\t\tpoint(vertices[nextIdx], vertices[nextIdx + 1]),\n\t\t\t\t\tvtxRounding,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\t// Calculate how much each side can accommodate rounding cuts\n\t\tconst cutAdjusts: [number, number][] = [];\n\t\tfor (let ix = 0; ix < n; ix++) {\n\t\t\tconst expectedRoundCut =\n\t\t\t\troundedCorners[ix].expectedRoundCut +\n\t\t\t\troundedCorners[(ix + 1) % n].expectedRoundCut;\n\t\t\tconst expectedCut =\n\t\t\t\troundedCorners[ix].expectedCut +\n\t\t\t\troundedCorners[(ix + 1) % n].expectedCut;\n\t\t\tconst vx = vertices[ix * 2],\n\t\t\t\tvy = vertices[ix * 2 + 1];\n\t\t\tconst nx = vertices[((ix + 1) % n) * 2],\n\t\t\t\tny = vertices[((ix + 1) % n) * 2 + 1];\n\t\t\tconst sideSize = distance(vx - nx, vy - ny);\n\n\t\t\tif (expectedRoundCut > sideSize) {\n\t\t\t\tcutAdjusts.push([sideSize / expectedRoundCut, 0]);\n\t\t\t} else if (expectedCut > sideSize) {\n\t\t\t\tcutAdjusts.push([\n\t\t\t\t\t1,\n\t\t\t\t\t(sideSize - expectedRoundCut) / (expectedCut - expectedRoundCut),\n\t\t\t\t]);\n\t\t\t} else {\n\t\t\t\tcutAdjusts.push([1, 1]);\n\t\t\t}\n\t\t}\n\n\t\t// Generate cubics per corner\n\t\tconst corners: Cubic[][] = [];\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst allowedCuts: number[] = [];\n\t\t\tfor (const delta of [0, 1]) {\n\t\t\t\tconst [roundCutRatio, cutRatio] = cutAdjusts[(i + n - 1 + delta) % n];\n\t\t\t\tallowedCuts.push(\n\t\t\t\t\troundedCorners[i].expectedRoundCut * roundCutRatio +\n\t\t\t\t\t\t(roundedCorners[i].expectedCut -\n\t\t\t\t\t\t\troundedCorners[i].expectedRoundCut) *\n\t\t\t\t\t\t\tcutRatio,\n\t\t\t\t);\n\t\t\t}\n\t\t\tcorners.push(roundedCorners[i].getCubics(allowedCuts[0], allowedCuts[1]));\n\t\t}\n\n\t\t// Build feature list\n\t\tconst tempFeatures: Feature[] = [];\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst prevIdx = (i + n - 1) % n;\n\t\t\tconst nextIdx = (i + 1) % n;\n\t\t\tconst currV = point(vertices[i * 2], vertices[i * 2 + 1]);\n\t\t\tconst prevV = point(vertices[prevIdx * 2], vertices[prevIdx * 2 + 1]);\n\t\t\tconst nextV = point(vertices[nextIdx * 2], vertices[nextIdx * 2 + 1]);\n\t\t\tconst isConvex = convex(\n\t\t\t\tprevV.x,\n\t\t\t\tprevV.y,\n\t\t\t\tcurrV.x,\n\t\t\t\tcurrV.y,\n\t\t\t\tnextV.x,\n\t\t\t\tnextV.y,\n\t\t\t);\n\t\t\ttempFeatures.push(cornerFeature(corners[i], isConvex));\n\t\t\tconst lastCornerA1 = corners[i][corners[i].length - 1];\n\t\t\tconst nextCornerA0 = corners[(i + 1) % n][0];\n\t\t\ttempFeatures.push(\n\t\t\t\tedgeFeature([\n\t\t\t\t\tCubic.straightLine(\n\t\t\t\t\t\tlastCornerA1.anchor1X,\n\t\t\t\t\t\tlastCornerA1.anchor1Y,\n\t\t\t\t\t\tnextCornerA0.anchor0X,\n\t\t\t\t\t\tnextCornerA0.anchor0Y,\n\t\t\t\t\t),\n\t\t\t\t]),\n\t\t\t);\n\t\t}\n\n\t\tconst cx = centerX ?? calculateCenter(vertices).x;\n\t\tconst cy = centerY ?? calculateCenter(vertices).y;\n\t\treturn new RoundedPolygon(tempFeatures, point(cx, cy));\n\t}\n\n\t/**\n\t * Creates a polygon from a pre-built Feature list.\n\t * @param features - Feature list (≥ 2 features)\n\t * @param centerX - Center X (auto-calculated if NaN)\n\t * @param centerY - Center Y (auto-calculated if NaN)\n\t */\n\tstatic fromFeatures(\n\t\tfeatures: Feature[],\n\t\tcenterX = Number.NaN,\n\t\tcenterY = Number.NaN,\n\t): RoundedPolygon {\n\t\tif (features.length < 2)\n\t\t\tthrow new Error(\"Polygon must have at least 2 features\");\n\t\tconst allVertices: number[] = [];\n\t\tfor (const f of features) {\n\t\t\tfor (const c of f.cubics) {\n\t\t\t\tallVertices.push(c.anchor0X, c.anchor0Y);\n\t\t\t}\n\t\t}\n\t\tconst cx = Number.isNaN(centerX) ? calculateCenter(allVertices).x : centerX;\n\t\tconst cy = Number.isNaN(centerY) ? calculateCenter(allVertices).y : centerY;\n\t\treturn new RoundedPolygon(features, point(cx, cy));\n\t}\n\n\t// ─── Instance methods ────────────────────────────────────────────────\n\n\t/**\n\t * Returns a new RoundedPolygon with all points transformed.\n\t * @param fn - Transform function: (x, y) => [x', y']\n\t */\n\ttransformed(fn: PointTransformer): RoundedPolygon {\n\t\tconst [cx, cy] = fn(this.center.x, this.center.y);\n\t\treturn new RoundedPolygon(\n\t\t\tthis.features.map((f) => transformFeature(f, fn)),\n\t\t\tpoint(cx, cy),\n\t\t);\n\t}\n\n\t/**\n\t * Returns a normalized copy: scaled and centered to fit in [0,1] × [0,1].\n\t * Maintains aspect ratio by using the larger dimension.\n\t */\n\tnormalized(): RoundedPolygon {\n\t\tconst [minX, minY, maxX, maxY] = this.calculateBounds(false);\n\t\tconst width = maxX - minX;\n\t\tconst height = maxY - minY;\n\t\tconst side = Math.max(width, height);\n\t\tconst offsetX = (side - width) / 2 - minX;\n\t\tconst offsetY = (side - height) / 2 - minY;\n\t\treturn this.transformed((x, y) => [\n\t\t\t(x + offsetX) / side,\n\t\t\t(y + offsetY) / side,\n\t\t]);\n\t}\n\n\t/**\n\t * Calculates the axis-aligned bounding box.\n\t * @param approximate - If true, uses control point hull (faster). Default: true.\n\t * @returns [minX, minY, maxX, maxY]\n\t */\n\tcalculateBounds(approximate = true): [number, number, number, number] {\n\t\tlet minX = Number.MAX_VALUE,\n\t\t\tminY = Number.MAX_VALUE;\n\t\tlet maxX = -Number.MAX_VALUE,\n\t\t\tmaxY = -Number.MAX_VALUE;\n\t\tfor (const c of this.cubics) {\n\t\t\tconst [cx0, cy0, cx1, cy1] = c.calculateBounds(approximate);\n\t\t\tif (cx0 < minX) minX = cx0;\n\t\t\tif (cy0 < minY) minY = cy0;\n\t\t\tif (cx1 > maxX) maxX = cx1;\n\t\t\tif (cy1 > maxY) maxY = cy1;\n\t\t}\n\t\treturn [minX, minY, maxX, maxY];\n\t}\n\n\t/**\n\t * Calculates the maximum bounding square (useful for shapes that rotate).\n\t * @returns [minX, minY, maxX, maxY] of the max-bounds square\n\t */\n\tcalculateMaxBounds(): [number, number, number, number] {\n\t\tlet maxDistSq = 0;\n\t\tfor (const c of this.cubics) {\n\t\t\tconst ad = distanceSquared(\n\t\t\t\tc.anchor0X - this.centerX,\n\t\t\t\tc.anchor0Y - this.centerY,\n\t\t\t);\n\t\t\tconst mid = c.pointOnCurve(0.5);\n\t\t\tconst md = distanceSquared(mid.x - this.centerX, mid.y - this.centerY);\n\t\t\tconst m = Math.max(ad, md);\n\t\t\tif (m > maxDistSq) maxDistSq = m;\n\t\t}\n\t\tconst d = Math.sqrt(maxDistSq);\n\t\treturn [\n\t\t\tthis.centerX - d,\n\t\t\tthis.centerY - d,\n\t\t\tthis.centerX + d,\n\t\t\tthis.centerY + d,\n\t\t];\n\t}\n}\n\n// ─── Internal: build cubics list from features ─────────────────────────────\n\nfunction buildCubicsList(features: Feature[]): Cubic[] {\n\tconst result: Cubic[] = [];\n\tlet firstCubic: Cubic | null = null;\n\tlet lastCubic: Cubic | null = null;\n\tlet firstFeatureSplitStart: Cubic[] | null = null;\n\tlet firstFeatureSplitEnd: Cubic[] | null = null;\n\n\tif (features.length > 0 && features[0].cubics.length === 3) {\n\t\tconst center = features[0].cubics[1];\n\t\tconst [start, end] = center.split(0.5);\n\t\tfirstFeatureSplitStart = [features[0].cubics[0], start];\n\t\tfirstFeatureSplitEnd = [end, features[0].cubics[2]];\n\t}\n\n\tfor (let i = 0; i <= features.length; i++) {\n\t\tlet featureCubics: Cubic[];\n\t\tif (i === 0 && firstFeatureSplitEnd) {\n\t\t\tfeatureCubics = firstFeatureSplitEnd;\n\t\t} else if (i === features.length) {\n\t\t\tif (firstFeatureSplitStart) featureCubics = firstFeatureSplitStart;\n\t\t\telse break;\n\t\t} else {\n\t\t\tfeatureCubics = features[i].cubics;\n\t\t}\n\n\t\tfor (const cubic of featureCubics) {\n\t\t\tif (!cubic.zeroLength()) {\n\t\t\t\tif (lastCubic) result.push(lastCubic);\n\t\t\t\tlastCubic = cubic;\n\t\t\t\tif (!firstCubic) firstCubic = cubic;\n\t\t\t} else if (lastCubic) {\n\t\t\t\t// Update last anchor to maintain contiguity\n\t\t\t\tconst p: number[] = lastCubic.points.slice();\n\t\t\t\tp[6] = cubic.anchor1X;\n\t\t\t\tp[7] = cubic.anchor1Y;\n\t\t\t\tlastCubic = new Cubic(p);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (lastCubic && firstCubic) {\n\t\tresult.push(\n\t\t\tnew Cubic([\n\t\t\t\tlastCubic.anchor0X,\n\t\t\t\tlastCubic.anchor0Y,\n\t\t\t\tlastCubic.control0X,\n\t\t\t\tlastCubic.control0Y,\n\t\t\t\tlastCubic.control1X,\n\t\t\t\tlastCubic.control1Y,\n\t\t\t\tfirstCubic.anchor0X,\n\t\t\t\tfirstCubic.anchor0Y,\n\t\t\t]),\n\t\t);\n\t} else {\n\t\tresult.push(Cubic.empty(0, 0));\n\t}\n\n\treturn result;\n}\n\nfunction validateContiguity(cubics: Cubic[]): void {\n\tlet prev = cubics[cubics.length - 1];\n\tfor (const cubic of cubics) {\n\t\tif (\n\t\t\tMath.abs(cubic.anchor0X - prev.anchor1X) > DISTANCE_EPSILON ||\n\t\t\tMath.abs(cubic.anchor0Y - prev.anchor1Y) > DISTANCE_EPSILON\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`RoundedPolygon must be contiguous: gap between (${cubic.anchor0X},${cubic.anchor0Y}) and (${prev.anchor1X},${prev.anchor1Y})`,\n\t\t\t);\n\t\t}\n\t\tprev = cubic;\n\t}\n}\n\n// ─── Star vertex helper (used by Shapes.ts) ─────────────────────────────────\n\nexport { starVerticesFromNumVerts };\n","/**\n * MD3 Expressive Shape Catalog — auto-generated from SVGs.\n *\n * Each shape is a pre-normalized RoundedPolygon (fits in [0,1]×[0,1], centered at (0.5, 0.5)).\n * Regenerated via scratch/generate-shapes.ts.\n */\n\nimport { cornerFeature, edgeFeature, type Feature } from \"../core/features\";\nimport { RoundedPolygon } from \"../core/rounded-polygon\";\nimport { Cubic } from \"../math/cubic\";\n\nfunction createShape(pts: number[][]): RoundedPolygon {\n\tconst cubics = pts.map((p) => new Cubic(p));\n\treturn RoundedPolygon.fromFeatures(\n\t\tcubics.map((c) => cornerFeature([c], false)),\n\t);\n}\n\n// ─── SVG Shapes ─────────────────────────────────────────────────────────────\n\nconst archShape = createShape([\n\t[1, 0.83461, 1, 0.8547, 1, 0.86477, 0.99898, 0.87322],\n\t[0.99898, 0.87322, 0.99115, 0.93918, 0.93918, 0.99115, 0.87322, 0.99898],\n\t[0.87322, 0.99898, 0.86477, 1, 0.8547, 1, 0.83461, 1],\n\t[0.83461, 1, 0.61154, 1, 0.38847, 1, 0.1654, 1],\n\t[0.1654, 1, 0.14529, 1, 0.13524, 1, 0.12679, 0.99898],\n\t[0.12679, 0.99898, 0.06084, 0.99115, 0.00884, 0.93918, 0.001, 0.87322],\n\t[0.001, 0.87322, 0, 0.86477, 0, 0.8547, 0, 0.83461],\n\t[0, 0.83461, 0, 0.72307, 0, 0.61154, 0, 0.5],\n\t[0, 0.5, 0, 0.22385, 0.22386, 0, 0.5, 0],\n\t[0.5, 0, 0.77615, 0, 1, 0.22385, 1, 0.5],\n\t[1, 0.5, 1, 0.61154, 1, 0.72307, 1, 0.83461],\n]);\n\nconst arrowShape = createShape([\n\t[0.8594, 0.44684, 0.81504, 0.37855, 0.77068, 0.31016, 0.72632, 0.24187],\n\t[0.72632, 0.24187, 0.69754, 0.19753, 0.66825, 0.1526, 0.62934, 0.11738],\n\t[0.62934, 0.11738, 0.59043, 0.08209, 0.54003, 0.05716, 0.48834, 0.06041],\n\t[0.48834, 0.06041, 0.44296, 0.06333, 0.4009, 0.08773, 0.36769, 0.11959],\n\t[0.36769, 0.11959, 0.33449, 0.15146, 0.30869, 0.1907, 0.28332, 0.22956],\n\t[0.28332, 0.22956, 0.21469, 0.33456, 0.14598, 0.43956, 0.07736, 0.54462],\n\t[0.07736, 0.54462, 0.04474, 0.5945, 0.01128, 0.64655, 0.00226, 0.70598],\n\t[0.00226, 0.70598, -0.00864, 0.77779, 0.02074, 0.85092, 0.07284, 0.89867],\n\t[0.07284, 0.89867, 0.12733, 0.94861, 0.21563, 0.94456, 0.28196, 0.93089],\n\t[0.28196, 0.93089, 0.35467, 0.91586, 0.42576, 0.8876, 0.49992, 0.88769],\n\t[0.49992, 0.88769, 0.56344, 0.88769, 0.62483, 0.90858, 0.68664, 0.92377],\n\t[0.68664, 0.92377, 0.74837, 0.93886, 0.8147, 0.94817, 0.8743, 0.9257],\n\t[0.8743, 0.9257, 0.94829, 0.89788, 1.00142, 0.81877, 0.99997, 0.73757],\n\t[0.99997, 0.73757, 0.99861, 0.66348, 0.95714, 0.59731, 0.91721, 0.53567],\n\t[0.91721, 0.53567, 0.89797, 0.50608, 0.87873, 0.47643, 0.85948, 0.44684],\n\t[0.85948, 0.44684, 0.85946, 0.44684, 0.85943, 0.44684, 0.8594, 0.44684],\n]);\n\nconst boomShape = createShape([\n\t[0.49006, 0.03176, 0.49241, 0.01294, 0.49359, 0.00354, 0.49537, 0.00185],\n\t[0.49537, 0.00185, 0.49796, -0.00062, 0.50203, -0.00062, 0.50462, 0.00185],\n\t[0.50462, 0.00185, 0.50641, 0.00354, 0.50759, 0.01294, 0.50994, 0.03176],\n\t[0.50994, 0.03176, 0.51992, 0.11153, 0.5299, 0.1913, 0.53987, 0.27107],\n\t[0.53987, 0.27107, 0.54082, 0.27866, 0.5413, 0.28244, 0.54266, 0.28403],\n\t[0.54266, 0.28403, 0.54464, 0.28628, 0.54787, 0.287, 0.5506, 0.28572],\n\t[0.5506, 0.28572, 0.55248, 0.28485, 0.55445, 0.28157, 0.55839, 0.275],\n\t[0.55839, 0.275, 0.59978, 0.20621, 0.64116, 0.13742, 0.68254, 0.06863],\n\t[0.68254, 0.06863, 0.69231, 0.05241, 0.69719, 0.04429, 0.6995, 0.04348],\n\t[0.6995, 0.04348, 0.70287, 0.04232, 0.70657, 0.04398, 0.70795, 0.04729],\n\t[0.70795, 0.04729, 0.70891, 0.04954, 0.70617, 0.05863, 0.70071, 0.07679],\n\t[0.70071, 0.07679, 0.67756, 0.15373, 0.6544, 0.23068, 0.63124, 0.30763],\n\t[0.63124, 0.30763, 0.62904, 0.31497, 0.62794, 0.31863, 0.62855, 0.3206],\n\t[0.62855, 0.3206, 0.62942, 0.32348, 0.6321, 0.32544, 0.63512, 0.32541],\n\t[0.63512, 0.32541, 0.63719, 0.32538, 0.64031, 0.32319, 0.64656, 0.31882],\n\t[0.64656, 0.31882, 0.7122, 0.2729, 0.77783, 0.22698, 0.84347, 0.18107],\n\t[0.84347, 0.18107, 0.85895, 0.17022, 0.86669, 0.16482, 0.86913, 0.16501],\n\t[0.86913, 0.16501, 0.87269, 0.16533, 0.87539, 0.16834, 0.87532, 0.17191],\n\t[0.87532, 0.17191, 0.87528, 0.17438, 0.86911, 0.18157, 0.85678, 0.19591],\n\t[0.85678, 0.19591, 0.80449, 0.25674, 0.75221, 0.31758, 0.69992, 0.37841],\n\t[0.69992, 0.37841, 0.69494, 0.38419, 0.69246, 0.3871, 0.69221, 0.38916],\n\t[0.69221, 0.38916, 0.69185, 0.39216, 0.6935, 0.39503, 0.69627, 0.39622],\n\t[0.69627, 0.39622, 0.69817, 0.39706, 0.70191, 0.39631, 0.70939, 0.39488],\n\t[0.70939, 0.39488, 0.78793, 0.37977, 0.86646, 0.36467, 0.945, 0.34957],\n\t[0.945, 0.34957, 0.96353, 0.346, 0.9728, 0.34422, 0.97494, 0.34541],\n\t[0.97494, 0.34541, 0.97806, 0.34713, 0.97931, 0.351, 0.9778, 0.35425],\n\t[0.9778, 0.35425, 0.97676, 0.35647, 0.96822, 0.3605, 0.95115, 0.36856],\n\t[0.95115, 0.36856, 0.87878, 0.40276, 0.80641, 0.43696, 0.73403, 0.47116],\n\t[0.73403, 0.47116, 0.72714, 0.47441, 0.7237, 0.47603, 0.72263, 0.47781],\n\t[0.72263, 0.47781, 0.72109, 0.48041, 0.72144, 0.48372, 0.72348, 0.48594],\n\t[0.72348, 0.48594, 0.72489, 0.48747, 0.7286, 0.48834, 0.73601, 0.49006],\n\t[0.73601, 0.49006, 0.81387, 0.50839, 0.89173, 0.52671, 0.96959, 0.54503],\n\t[0.96959, 0.54503, 0.98796, 0.54934, 0.99715, 0.5515, 0.99862, 0.55347],\n\t[0.99862, 0.55347, 1.00077, 0.55631, 1.00035, 0.56037, 0.99766, 0.56272],\n\t[0.99766, 0.56272, 0.9958, 0.56431, 0.98638, 0.56453, 0.96751, 0.56491],\n\t[0.96751, 0.56491, 0.88757, 0.56654, 0.80762, 0.56818, 0.72767, 0.56981],\n\t[0.72767, 0.56981, 0.72006, 0.56997, 0.71626, 0.57006, 0.71456, 0.57125],\n\t[0.71456, 0.57125, 0.7121, 0.573, 0.71108, 0.57617, 0.71206, 0.57903],\n\t[0.71206, 0.57903, 0.71272, 0.581, 0.71576, 0.58331, 0.72182, 0.58794],\n\t[0.72182, 0.58794, 0.78555, 0.6365, 0.84927, 0.68506, 0.91299, 0.73362],\n\t[0.91299, 0.73362, 0.92802, 0.74509, 0.93554, 0.75084, 0.93609, 0.75322],\n\t[0.93609, 0.75322, 0.93691, 0.7567, 0.93489, 0.76022, 0.93147, 0.76128],\n\t[0.93147, 0.76128, 0.92912, 0.762, 0.92043, 0.75831, 0.90304, 0.75097],\n\t[0.90304, 0.75097, 0.82934, 0.71977, 0.75565, 0.68857, 0.68195, 0.65737],\n\t[0.68195, 0.65737, 0.67493, 0.6544, 0.67142, 0.6529, 0.66939, 0.65331],\n\t[0.66939, 0.65331, 0.66644, 0.65391, 0.66423, 0.65637, 0.66396, 0.65937],\n\t[0.66396, 0.65937, 0.66378, 0.66144, 0.66561, 0.66481, 0.66928, 0.6715],\n\t[0.66928, 0.6715, 0.70784, 0.74193, 0.74641, 0.81237, 0.78497, 0.88281],\n\t[0.78497, 0.88281, 0.79407, 0.8994, 0.79862, 0.90771, 0.79815, 0.91015],\n\t[0.79815, 0.91015, 0.79748, 0.91366, 0.79421, 0.91604, 0.79067, 0.91562],\n\t[0.79067, 0.91562, 0.78824, 0.91531, 0.78179, 0.9084, 0.76888, 0.89456],\n\t[0.76888, 0.89456, 0.71418, 0.83591, 0.65947, 0.77727, 0.60477, 0.71862],\n\t[0.60477, 0.71862, 0.59956, 0.71306, 0.59695, 0.71025, 0.59494, 0.70981],\n\t[0.59494, 0.70981, 0.592, 0.70912, 0.58897, 0.71048, 0.58752, 0.71312],\n\t[0.58752, 0.71312, 0.58651, 0.71493, 0.58683, 0.71875, 0.58747, 0.72637],\n\t[0.58747, 0.72637, 0.59421, 0.80649, 0.60094, 0.8866, 0.60768, 0.96671],\n\t[0.60768, 0.96671, 0.60927, 0.98562, 0.61006, 0.99506, 0.60866, 0.99709],\n\t[0.60866, 0.99709, 0.60663, 1.00002, 0.60267, 1.00087, 0.59962, 0.99902],\n\t[0.59962, 0.99902, 0.59752, 0.99774, 0.59442, 0.98877, 0.58823, 0.97087],\n\t[0.58823, 0.97087, 0.56197, 0.89493, 0.53572, 0.819, 0.50946, 0.74306],\n\t[0.50946, 0.74306, 0.50696, 0.73581, 0.50571, 0.73222, 0.50406, 0.73097],\n\t[0.50406, 0.73097, 0.50165, 0.72916, 0.49834, 0.72916, 0.49594, 0.73097],\n\t[0.49594, 0.73097, 0.49428, 0.73222, 0.49303, 0.73581, 0.49053, 0.74306],\n\t[0.49053, 0.74306, 0.46428, 0.819, 0.43803, 0.89493, 0.41177, 0.97087],\n\t[0.41177, 0.97087, 0.40558, 0.98877, 0.40248, 0.99774, 0.40038, 0.99902],\n\t[0.40038, 0.99902, 0.39733, 1.00087, 0.39338, 1.00002, 0.39134, 0.99709],\n\t[0.39134, 0.99709, 0.38994, 0.99506, 0.39073, 0.98562, 0.39232, 0.96671],\n\t[0.39232, 0.96671, 0.39906, 0.8866, 0.40579, 0.80649, 0.41253, 0.72637],\n\t[0.41253, 0.72637, 0.41317, 0.71875, 0.41349, 0.71493, 0.41248, 0.71312],\n\t[0.41248, 0.71312, 0.41104, 0.71048, 0.408, 0.70912, 0.40507, 0.70981],\n\t[0.40507, 0.70981, 0.40305, 0.71025, 0.40044, 0.71306, 0.39523, 0.71862],\n\t[0.39523, 0.71862, 0.34053, 0.77727, 0.28582, 0.83591, 0.23112, 0.89456],\n\t[0.23112, 0.89456, 0.21821, 0.9084, 0.21176, 0.91531, 0.20933, 0.91562],\n\t[0.20933, 0.91562, 0.20578, 0.91604, 0.20252, 0.91366, 0.20184, 0.91015],\n\t[0.20184, 0.91015, 0.20138, 0.90771, 0.20593, 0.8994, 0.21503, 0.88281],\n\t[0.21503, 0.88281, 0.25359, 0.81237, 0.29215, 0.74193, 0.33072, 0.6715],\n\t[0.33072, 0.6715, 0.33439, 0.66481, 0.33622, 0.66144, 0.33604, 0.65937],\n\t[0.33604, 0.65937, 0.33577, 0.65637, 0.33356, 0.65391, 0.3306, 0.65331],\n\t[0.3306, 0.65331, 0.32857, 0.6529, 0.32506, 0.6544, 0.31805, 0.65737],\n\t[0.31805, 0.65737, 0.24435, 0.68857, 0.17065, 0.71977, 0.09695, 0.75097],\n\t[0.09695, 0.75097, 0.07957, 0.75831, 0.07087, 0.762, 0.06853, 0.76128],\n\t[0.06853, 0.76128, 0.06511, 0.76022, 0.06309, 0.7567, 0.06391, 0.75322],\n\t[0.06391, 0.75322, 0.06446, 0.75084, 0.07198, 0.74509, 0.08701, 0.73362],\n\t[0.08701, 0.73362, 0.15073, 0.68506, 0.21445, 0.6365, 0.27817, 0.58794],\n\t[0.27817, 0.58794, 0.28424, 0.58331, 0.28727, 0.581, 0.28794, 0.57903],\n\t[0.28794, 0.57903, 0.28892, 0.57617, 0.2879, 0.573, 0.28543, 0.57125],\n\t[0.28543, 0.57125, 0.28374, 0.57006, 0.27993, 0.56997, 0.27232, 0.56981],\n\t[0.27232, 0.56981, 0.19238, 0.56818, 0.11243, 0.56654, 0.03248, 0.56491],\n\t[0.03248, 0.56491, 0.01362, 0.56453, 0.00419, 0.56431, 0.00234, 0.56272],\n\t[0.00234, 0.56272, -0.00035, 0.56036, -0.00077, 0.55633, 0.00138, 0.55347],\n\t[0.00138, 0.55347, 0.00285, 0.5515, 0.01204, 0.54934, 0.03041, 0.54503],\n\t[0.03041, 0.54503, 0.10827, 0.52671, 0.18613, 0.50839, 0.26399, 0.49006],\n\t[0.26399, 0.49006, 0.2714, 0.48834, 0.27511, 0.48747, 0.27652, 0.48594],\n\t[0.27652, 0.48594, 0.27856, 0.48372, 0.27891, 0.48041, 0.27736, 0.47781],\n\t[0.27736, 0.47781, 0.2763, 0.47603, 0.27286, 0.47441, 0.26597, 0.47116],\n\t[0.26597, 0.47116, 0.19359, 0.43696, 0.12122, 0.40276, 0.04885, 0.36856],\n\t[0.04885, 0.36856, 0.03177, 0.3605, 0.02324, 0.35647, 0.0222, 0.35425],\n\t[0.0222, 0.35425, 0.02068, 0.35101, 0.02193, 0.34715, 0.02506, 0.34541],\n\t[0.02506, 0.34541, 0.0272, 0.34422, 0.03647, 0.346, 0.055, 0.34957],\n\t[0.055, 0.34957, 0.13353, 0.36467, 0.21207, 0.37977, 0.29061, 0.39488],\n\t[0.29061, 0.39488, 0.29809, 0.39631, 0.30183, 0.39706, 0.30373, 0.39622],\n\t[0.30373, 0.39622, 0.3065, 0.39502, 0.30815, 0.39215, 0.30779, 0.38916],\n\t[0.30779, 0.38916, 0.30755, 0.3871, 0.30506, 0.38419, 0.30008, 0.37841],\n\t[0.30008, 0.37841, 0.24779, 0.31758, 0.19551, 0.25674, 0.14322, 0.19591],\n\t[0.14322, 0.19591, 0.13089, 0.18157, 0.12472, 0.17438, 0.12468, 0.17191],\n\t[0.12468, 0.17191, 0.12461, 0.16834, 0.12731, 0.16533, 0.13086, 0.16501],\n\t[0.13086, 0.16501, 0.1333, 0.16482, 0.14104, 0.17022, 0.15653, 0.18107],\n\t[0.15653, 0.18107, 0.22217, 0.22698, 0.2878, 0.2729, 0.35344, 0.31882],\n\t[0.35344, 0.31882, 0.35969, 0.32319, 0.36281, 0.32538, 0.36488, 0.32541],\n\t[0.36488, 0.32541, 0.3679, 0.32544, 0.37058, 0.32348, 0.37145, 0.3206],\n\t[0.37145, 0.3206, 0.37206, 0.31863, 0.37096, 0.31497, 0.36875, 0.30763],\n\t[0.36875, 0.30763, 0.3456, 0.23068, 0.32244, 0.15373, 0.29929, 0.07679],\n\t[0.29929, 0.07679, 0.29382, 0.05863, 0.29109, 0.04954, 0.29205, 0.04729],\n\t[0.29205, 0.04729, 0.29342, 0.04399, 0.29711, 0.04232, 0.3005, 0.04348],\n\t[0.3005, 0.04348, 0.30281, 0.04429, 0.30769, 0.05241, 0.31745, 0.06863],\n\t[0.31745, 0.06863, 0.35884, 0.13742, 0.40022, 0.20621, 0.44161, 0.275],\n\t[0.44161, 0.275, 0.44555, 0.28157, 0.44752, 0.28485, 0.4494, 0.28572],\n\t[0.4494, 0.28572, 0.45212, 0.287, 0.45536, 0.28628, 0.45734, 0.28403],\n\t[0.45734, 0.28403, 0.4587, 0.28244, 0.45917, 0.27866, 0.46012, 0.27107],\n\t[0.46012, 0.27107, 0.4701, 0.1913, 0.48008, 0.11153, 0.49006, 0.03176],\n]);\n\nconst bunShape = createShape([\n\t[0.01546, 0.25425, 0.01545, 0.18682, 0.04224, 0.12214, 0.08992, 0.07446],\n\t[0.08992, 0.07446, 0.1376, 0.02678, 0.20228, -0.00001, 0.26971, 0],\n\t[0.26971, 0, 0.42313, 0, 0.57654, 0, 0.72996, 0],\n\t[0.72996, 0, 0.85665, -0.00017, 0.96413, 0.09297, 0.98198, 0.2184],\n\t[0.98198, 0.2184, 0.99983, 0.34383, 0.92261, 0.46325, 0.8009, 0.49844],\n\t[0.8009, 0.49844, 0.8002, 0.49863, 0.79972, 0.49927, 0.79974, 0.5],\n\t[0.79974, 0.5, 0.79974, 0.50072, 0.80021, 0.50134, 0.8009, 0.50156],\n\t[0.8009, 0.50156, 0.92232, 0.537, 0.99924, 0.65629, 0.98142, 0.78152],\n\t[0.98142, 0.78152, 0.96359, 0.90675, 0.85645, 0.99984, 0.72996, 1],\n\t[0.72996, 1, 0.57654, 1, 0.42313, 1, 0.26971, 1],\n\t[0.26971, 1, 0.20228, 1.00001, 0.1376, 0.97322, 0.08992, 0.92554],\n\t[0.08992, 0.92554, 0.04224, 0.87786, 0.01545, 0.81318, 0.01546, 0.74575],\n\t[0.01546, 0.74575, 0.01548, 0.63344, 0.08915, 0.53444, 0.19671, 0.50216],\n\t[0.19671, 0.50216, 0.19766, 0.50187, 0.19832, 0.501, 0.19832, 0.5],\n\t[0.19832, 0.5, 0.19832, 0.49901, 0.19766, 0.49813, 0.19671, 0.49784],\n\t[0.19671, 0.49784, 0.08915, 0.46556, 0.01548, 0.36656, 0.01546, 0.25425],\n]);\n\nconst burstShape = createShape([\n\t[0.49184, 0.00797, 0.49416, 0.00384, 0.49528, 0.00181, 0.49669, 0.00094],\n\t[0.49669, 0.00094, 0.49872, -0.00031, 0.50128, -0.00031, 0.50331, 0.00094],\n\t[0.50331, 0.00094, 0.50472, 0.00181, 0.50584, 0.00384, 0.50816, 0.00797],\n\t[0.50816, 0.00797, 0.53447, 0.055, 0.56078, 0.10203, 0.58709, 0.14906],\n\t[0.58709, 0.14906, 0.5885, 0.15159, 0.58922, 0.15287, 0.59019, 0.15362],\n\t[0.59019, 0.15362, 0.59156, 0.15475, 0.59334, 0.15522, 0.59509, 0.15494],\n\t[0.59509, 0.15494, 0.59631, 0.15475, 0.59756, 0.15403, 0.60003, 0.15253],\n\t[0.60003, 0.15253, 0.64634, 0.12496, 0.69266, 0.09739, 0.73897, 0.06981],\n\t[0.73897, 0.06981, 0.743, 0.06741, 0.74503, 0.06619, 0.74666, 0.06616],\n\t[0.74666, 0.06616, 0.74906, 0.06606, 0.75125, 0.06734, 0.75241, 0.06944],\n\t[0.75241, 0.06944, 0.75319, 0.07091, 0.75316, 0.07325, 0.75309, 0.07797],\n\t[0.75309, 0.07797, 0.75236, 0.13185, 0.75164, 0.18574, 0.75091, 0.23962],\n\t[0.75091, 0.23962, 0.75084, 0.24253, 0.75084, 0.24397, 0.75128, 0.24512],\n\t[0.75128, 0.24512, 0.75191, 0.24678, 0.75322, 0.24809, 0.75488, 0.24872],\n\t[0.75488, 0.24872, 0.75603, 0.24916, 0.75747, 0.24916, 0.76038, 0.24909],\n\t[0.76038, 0.24909, 0.81426, 0.24836, 0.86815, 0.24764, 0.92203, 0.24691],\n\t[0.92203, 0.24691, 0.92675, 0.24684, 0.92909, 0.24681, 0.93056, 0.24759],\n\t[0.93056, 0.24759, 0.93266, 0.24875, 0.93394, 0.25094, 0.93384, 0.25334],\n\t[0.93384, 0.25334, 0.93381, 0.25497, 0.93259, 0.257, 0.93019, 0.26103],\n\t[0.93019, 0.26103, 0.90261, 0.30734, 0.87504, 0.35366, 0.84747, 0.39997],\n\t[0.84747, 0.39997, 0.84597, 0.40244, 0.84525, 0.40369, 0.84506, 0.40491],\n\t[0.84506, 0.40491, 0.84478, 0.40666, 0.84525, 0.40844, 0.84638, 0.40981],\n\t[0.84638, 0.40981, 0.84713, 0.41078, 0.84841, 0.4115, 0.85094, 0.41291],\n\t[0.85094, 0.41291, 0.89797, 0.43922, 0.945, 0.46553, 0.99203, 0.49184],\n\t[0.99203, 0.49184, 0.99616, 0.49416, 0.99819, 0.49528, 0.99906, 0.49669],\n\t[0.99906, 0.49669, 1.00031, 0.49872, 1.00031, 0.50128, 0.99906, 0.50331],\n\t[0.99906, 0.50331, 0.99819, 0.50472, 0.99616, 0.50584, 0.99203, 0.50816],\n\t[0.99203, 0.50816, 0.945, 0.53447, 0.89797, 0.56078, 0.85094, 0.58709],\n\t[0.85094, 0.58709, 0.84841, 0.5885, 0.84713, 0.58922, 0.84638, 0.59019],\n\t[0.84638, 0.59019, 0.84525, 0.59156, 0.84478, 0.59334, 0.84506, 0.59509],\n\t[0.84506, 0.59509, 0.84525, 0.59631, 0.84597, 0.59756, 0.84747, 0.60003],\n\t[0.84747, 0.60003, 0.87504, 0.64634, 0.90261, 0.69266, 0.93019, 0.73897],\n\t[0.93019, 0.73897, 0.93259, 0.743, 0.93381, 0.74503, 0.93384, 0.74666],\n\t[0.93384, 0.74666, 0.93394, 0.74906, 0.93266, 0.75125, 0.93056, 0.75241],\n\t[0.93056, 0.75241, 0.92909, 0.75319, 0.92675, 0.75316, 0.92203, 0.75309],\n\t[0.92203, 0.75309, 0.86815, 0.75236, 0.81426, 0.75164, 0.76038, 0.75091],\n\t[0.76038, 0.75091, 0.75747, 0.75084, 0.75603, 0.75084, 0.75488, 0.75128],\n\t[0.75488, 0.75128, 0.75322, 0.75191, 0.75191, 0.75322, 0.75128, 0.75488],\n\t[0.75128, 0.75488, 0.75084, 0.75603, 0.75084, 0.75747, 0.75091, 0.76038],\n\t[0.75091, 0.76038, 0.75164, 0.81426, 0.75236, 0.86815, 0.75309, 0.92203],\n\t[0.75309, 0.92203, 0.75316, 0.92675, 0.75319, 0.92909, 0.75241, 0.93056],\n\t[0.75241, 0.93056, 0.75125, 0.93266, 0.74906, 0.93394, 0.74666, 0.93384],\n\t[0.74666, 0.93384, 0.74503, 0.93381, 0.743, 0.93259, 0.73897, 0.93019],\n\t[0.73897, 0.93019, 0.69266, 0.90261, 0.64634, 0.87504, 0.60003, 0.84747],\n\t[0.60003, 0.84747, 0.59756, 0.84597, 0.59631, 0.84525, 0.59509, 0.84506],\n\t[0.59509, 0.84506, 0.59334, 0.84478, 0.59156, 0.84525, 0.59019, 0.84638],\n\t[0.59019, 0.84638, 0.58922, 0.84713, 0.5885, 0.84841, 0.58709, 0.85094],\n\t[0.58709, 0.85094, 0.56078, 0.89797, 0.53447, 0.945, 0.50816, 0.99203],\n\t[0.50816, 0.99203, 0.50584, 0.99616, 0.50472, 0.99819, 0.50331, 0.99906],\n\t[0.50331, 0.99906, 0.50128, 1.00031, 0.49872, 1.00031, 0.49669, 0.99906],\n\t[0.49669, 0.99906, 0.49528, 0.99819, 0.49416, 0.99616, 0.49184, 0.99203],\n\t[0.49184, 0.99203, 0.46553, 0.945, 0.43922, 0.89797, 0.41291, 0.85094],\n\t[0.41291, 0.85094, 0.4115, 0.84841, 0.41078, 0.84713, 0.40981, 0.84638],\n\t[0.40981, 0.84638, 0.40844, 0.84525, 0.40666, 0.84478, 0.40491, 0.84506],\n\t[0.40491, 0.84506, 0.40369, 0.84525, 0.40244, 0.84597, 0.39997, 0.84747],\n\t[0.39997, 0.84747, 0.35366, 0.87504, 0.30734, 0.90261, 0.26103, 0.93019],\n\t[0.26103, 0.93019, 0.257, 0.93259, 0.25497, 0.93381, 0.25334, 0.93384],\n\t[0.25334, 0.93384, 0.25094, 0.93394, 0.24875, 0.93266, 0.24759, 0.93056],\n\t[0.24759, 0.93056, 0.24681, 0.92909, 0.24684, 0.92675, 0.24691, 0.92203],\n\t[0.24691, 0.92203, 0.24764, 0.86815, 0.24836, 0.81426, 0.24909, 0.76038],\n\t[0.24909, 0.76038, 0.24916, 0.75747, 0.24916, 0.75603, 0.24872, 0.75488],\n\t[0.24872, 0.75488, 0.24809, 0.75322, 0.24678, 0.75191, 0.24513, 0.75128],\n\t[0.24513, 0.75128, 0.24397, 0.75084, 0.24253, 0.75084, 0.23963, 0.75091],\n\t[0.23963, 0.75091, 0.18574, 0.75164, 0.13185, 0.75236, 0.07797, 0.75309],\n\t[0.07797, 0.75309, 0.07325, 0.75316, 0.07091, 0.75319, 0.06944, 0.75241],\n\t[0.06944, 0.75241, 0.06734, 0.75127, 0.06607, 0.74904, 0.06616, 0.74666],\n\t[0.06616, 0.74666, 0.06619, 0.74503, 0.06741, 0.743, 0.06981, 0.73897],\n\t[0.06981, 0.73897, 0.09739, 0.69266, 0.12496, 0.64634, 0.15253, 0.60003],\n\t[0.15253, 0.60003, 0.15403, 0.59756, 0.15475, 0.59631, 0.15494, 0.59509],\n\t[0.15494, 0.59509, 0.15522, 0.59334, 0.15475, 0.59156, 0.15363, 0.59019],\n\t[0.15363, 0.59019, 0.15288, 0.58922, 0.15159, 0.5885, 0.14906, 0.58709],\n\t[0.14906, 0.58709, 0.10203, 0.56078, 0.055, 0.53447, 0.00797, 0.50816],\n\t[0.00797, 0.50816, 0.00384, 0.50584, 0.00181, 0.50472, 0.00094, 0.50331],\n\t[0.00094, 0.50331, -0.00031, 0.50128, -0.00031, 0.49872, 0.00094, 0.49669],\n\t[0.00094, 0.49669, 0.00181, 0.49528, 0.00384, 0.49416, 0.00797, 0.49184],\n\t[0.00797, 0.49184, 0.055, 0.46553, 0.10203, 0.43922, 0.14906, 0.41291],\n\t[0.14906, 0.41291, 0.15159, 0.4115, 0.15287, 0.41078, 0.15362, 0.40981],\n\t[0.15362, 0.40981, 0.15475, 0.40844, 0.15522, 0.40666, 0.15494, 0.40491],\n\t[0.15494, 0.40491, 0.15475, 0.40369, 0.15403, 0.40244, 0.15253, 0.39997],\n\t[0.15253, 0.39997, 0.12496, 0.35366, 0.09739, 0.30734, 0.06981, 0.26103],\n\t[0.06981, 0.26103, 0.06741, 0.257, 0.06619, 0.25497, 0.06616, 0.25334],\n\t[0.06616, 0.25334, 0.06606, 0.25094, 0.06734, 0.24875, 0.06944, 0.24759],\n\t[0.06944, 0.24759, 0.07091, 0.24681, 0.07325, 0.24684, 0.07797, 0.24691],\n\t[0.07797, 0.24691, 0.13185, 0.24764, 0.18574, 0.24836, 0.23963, 0.24909],\n\t[0.23963, 0.24909, 0.24253, 0.24916, 0.24397, 0.24916, 0.24513, 0.24872],\n\t[0.24513, 0.24872, 0.24678, 0.24809, 0.24809, 0.24678, 0.24872, 0.24512],\n\t[0.24872, 0.24512, 0.24916, 0.24397, 0.24916, 0.24253, 0.24909, 0.23962],\n\t[0.24909, 0.23962, 0.24836, 0.18574, 0.24764, 0.13185, 0.24691, 0.07797],\n\t[0.24691, 0.07797, 0.24684, 0.07325, 0.24681, 0.07091, 0.24759, 0.06944],\n\t[0.24759, 0.06944, 0.24875, 0.06734, 0.25094, 0.06606, 0.25334, 0.06616],\n\t[0.25334, 0.06616, 0.25497, 0.06619, 0.257, 0.06741, 0.26103, 0.06981],\n\t[0.26103, 0.06981, 0.30734, 0.09739, 0.35366, 0.12496, 0.39997, 0.15253],\n\t[0.39997, 0.15253, 0.40244, 0.15403, 0.40369, 0.15475, 0.40491, 0.15494],\n\t[0.40491, 0.15494, 0.40666, 0.15522, 0.40844, 0.15475, 0.40981, 0.15362],\n\t[0.40981, 0.15362, 0.41078, 0.15287, 0.4115, 0.15159, 0.41291, 0.14906],\n\t[0.41291, 0.14906, 0.43922, 0.10203, 0.46553, 0.055, 0.49184, 0.00797],\n]);\n\nconst circleShape = createShape([\n\t[1, 0.5, 1, 0.77614, 0.77614, 1, 0.5, 1],\n\t[0.5, 1, 0.22386, 1, 0, 0.77614, 0, 0.5],\n\t[0, 0.5, 0, 0.22386, 0.22386, 0, 0.5, 0],\n\t[0.5, 0, 0.77614, 0, 1, 0.22386, 1, 0.5],\n]);\n\nconst clamshellShape = createShape([\n\t[0.95752, 0.36588, 0.97848, 0.4081, 0.98896, 0.42921, 0.99426, 0.45126],\n\t[0.99426, 0.45126, 1.00191, 0.4833, 1.00191, 0.5167, 0.99426, 0.54874],\n\t[0.99426, 0.54874, 0.98896, 0.57079, 0.97848, 0.5919, 0.95752, 0.63412],\n\t[0.95752, 0.63412, 0.93623, 0.677, 0.91494, 0.71987, 0.89365, 0.76275],\n\t[0.89365, 0.76275, 0.87268, 0.80497, 0.8622, 0.82608, 0.84842, 0.84244],\n\t[0.84842, 0.84244, 0.8285, 0.86609, 0.80339, 0.88295, 0.77581, 0.89118],\n\t[0.77581, 0.89118, 0.75673, 0.89688, 0.73577, 0.89688, 0.69384, 0.89688],\n\t[0.69384, 0.89688, 0.56461, 0.89688, 0.43539, 0.89688, 0.30616, 0.89688],\n\t[0.30616, 0.89688, 0.26423, 0.89688, 0.24327, 0.89688, 0.22419, 0.89118],\n\t[0.22419, 0.89118, 0.19661, 0.88295, 0.1715, 0.86609, 0.15158, 0.84244],\n\t[0.15158, 0.84244, 0.1378, 0.82608, 0.12732, 0.80497, 0.10635, 0.76275],\n\t[0.10635, 0.76275, 0.08506, 0.71987, 0.06377, 0.677, 0.04248, 0.63412],\n\t[0.04248, 0.63412, 0.02152, 0.5919, 0.01104, 0.57079, 0.00574, 0.54874],\n\t[0.00574, 0.54874, -0.00191, 0.5167, -0.00191, 0.4833, 0.00574, 0.45126],\n\t[0.00574, 0.45126, 0.01104, 0.42921, 0.02152, 0.4081, 0.04248, 0.36588],\n\t[0.04248, 0.36588, 0.06377, 0.323, 0.08506, 0.28013, 0.10635, 0.23725],\n\t[0.10635, 0.23725, 0.12732, 0.19503, 0.1378, 0.17392, 0.15158, 0.15756],\n\t[0.15158, 0.15756, 0.1715, 0.13391, 0.19661, 0.11705, 0.22419, 0.10882],\n\t[0.22419, 0.10882, 0.24327, 0.10312, 0.26423, 0.10312, 0.30616, 0.10312],\n\t[0.30616, 0.10312, 0.43539, 0.10312, 0.56461, 0.10312, 0.69384, 0.10312],\n\t[0.69384, 0.10312, 0.73577, 0.10312, 0.75673, 0.10312, 0.77581, 0.10882],\n\t[0.77581, 0.10882, 0.80339, 0.11705, 0.8285, 0.13391, 0.84842, 0.15756],\n\t[0.84842, 0.15756, 0.8622, 0.17392, 0.87268, 0.19503, 0.89365, 0.23725],\n\t[0.89365, 0.23725, 0.91494, 0.28013, 0.93623, 0.323, 0.95752, 0.36588],\n]);\n\nconst diamondShape = createShape([\n\t[0.67951, 0.864, 0.62689, 0.93286, 0.60059, 0.96728, 0.57021, 0.98296],\n\t[0.57021, 0.98296, 0.52616, 1.00568, 0.47384, 1.00568, 0.42979, 0.98296],\n\t[0.42979, 0.98296, 0.39941, 0.96728, 0.37311, 0.93286, 0.32049, 0.864],\n\t[0.32049, 0.864, 0.26225, 0.78778, 0.20401, 0.71156, 0.14577, 0.63534],\n\t[0.14577, 0.63534, 0.11377, 0.59346, 0.09777, 0.57252, 0.08984, 0.5501],\n\t[0.08984, 0.5501, 0.07838, 0.51768, 0.07838, 0.48232, 0.08984, 0.4499],\n\t[0.08984, 0.4499, 0.09777, 0.42748, 0.11377, 0.40654, 0.14577, 0.36466],\n\t[0.14577, 0.36466, 0.20401, 0.28844, 0.26225, 0.21222, 0.32049, 0.136],\n\t[0.32049, 0.136, 0.37311, 0.06714, 0.39941, 0.03271, 0.42979, 0.01704],\n\t[0.42979, 0.01704, 0.47384, -0.00568, 0.52616, -0.00568, 0.57021, 0.01704],\n\t[0.57021, 0.01704, 0.60059, 0.03272, 0.62689, 0.06714, 0.67951, 0.136],\n\t[0.67951, 0.136, 0.73775, 0.21222, 0.79599, 0.28844, 0.85423, 0.36466],\n\t[0.85423, 0.36466, 0.88623, 0.40654, 0.90223, 0.42748, 0.91016, 0.4499],\n\t[0.91016, 0.4499, 0.92162, 0.48232, 0.92162, 0.51768, 0.91016, 0.5501],\n\t[0.91016, 0.5501, 0.90223, 0.57252, 0.88623, 0.59346, 0.85423, 0.63534],\n\t[0.85423, 0.63534, 0.79599, 0.71156, 0.73775, 0.78778, 0.67951, 0.864],\n]);\n\nconst fanShape = createShape([\n\t[0, 0.15789, 0, 0.15232, 0, 0.14954, 0.00007, 0.14718],\n\t[0.00007, 0.14718, 0.00256, 0.06699, 0.06699, 0.00256, 0.14718, 0.00008],\n\t[0.14718, 0.00008, 0.14954, 0, 0.15232, 0, 0.1579, 0],\n\t[0.1579, 0, 0.18761, 0, 0.20246, 0, 0.21503, 0.00039],\n\t[0.21503, 0.00039, 0.64271, 0.01366, 0.98632, 0.35728, 0.99961, 0.78497],\n\t[0.99961, 0.78497, 1, 0.79753, 1, 0.81239, 1, 0.8421],\n\t[1, 0.8421, 1, 0.84767, 1, 0.85046, 0.99993, 0.85282],\n\t[0.99993, 0.85282, 0.99743, 0.93301, 0.933, 0.99744, 0.85282, 0.99993],\n\t[0.85282, 0.99993, 0.85046, 1, 0.84768, 1, 0.84211, 1],\n\t[0.84211, 1, 0.63634, 1, 0.43057, 1, 0.2248, 1],\n\t[0.2248, 1, 0.15688, 1, 0.12292, 1, 0.09598, 0.98933],\n\t[0.09598, 0.98933, 0.05698, 0.97389, 0.02611, 0.94301, 0.01067, 0.90402],\n\t[0.01067, 0.90402, 0, 0.87708, 0, 0.84312, 0, 0.7752],\n\t[0, 0.7752, 0, 0.56943, 0, 0.36366, 0, 0.15789],\n]);\n\nconst flowerShape = createShape([\n\t[0.85353, 0.14645, 0.81641, 0.10934, 0.73184, 0.12769, 0.62984, 0.1865],\n\t[0.62984, 0.1865, 0.59928, 0.07277, 0.55247, 0, 0.5, 0],\n\t[0.5, 0, 0.4475, 0, 0.40069, 0.07276, 0.37016, 0.18649],\n\t[0.37016, 0.18649, 0.26813, 0.12768, 0.18359, 0.10934, 0.14647, 0.14644],\n\t[0.14647, 0.14644, 0.10938, 0.18355, 0.12772, 0.26811, 0.18653, 0.37014],\n\t[0.18653, 0.37014, 0.07278, 0.40069, 0, 0.44751, 0, 0.5],\n\t[0, 0.5, 0, 0.55248, 0.07275, 0.59929, 0.1865, 0.62984],\n\t[0.1865, 0.62984, 0.12766, 0.73188, 0.10931, 0.81644, 0.14641, 0.85355],\n\t[0.14641, 0.85355, 0.18353, 0.89067, 0.26809, 0.87231, 0.37012, 0.81347],\n\t[0.37012, 0.81347, 0.40069, 0.92722, 0.4475, 1, 0.5, 1],\n\t[0.5, 1, 0.55247, 1, 0.59928, 0.92722, 0.62984, 0.81346],\n\t[0.62984, 0.81346, 0.73191, 0.8723, 0.81647, 0.89066, 0.85359, 0.85355],\n\t[0.85359, 0.85355, 0.89069, 0.81644, 0.87234, 0.73188, 0.8135, 0.62984],\n\t[0.8135, 0.62984, 0.92725, 0.59929, 1, 0.55248, 1, 0.5],\n\t[1, 0.5, 1, 0.44751, 0.92722, 0.40069, 0.81344, 0.37014],\n\t[0.81344, 0.37014, 0.87228, 0.26811, 0.89063, 0.18356, 0.85353, 0.14645],\n]);\n\nconst gemShape = createShape([\n\t[0.31244, 0.08536, 0.37064, 0.04306, 0.39978, 0.02191, 0.4308, 0.0114],\n\t[0.4308, 0.0114, 0.47568, -0.0038, 0.52432, -0.0038, 0.5692, 0.0114],\n\t[0.5692, 0.0114, 0.60022, 0.02191, 0.62936, 0.04306, 0.68756, 0.08536],\n\t[0.68756, 0.08536, 0.73121, 0.11706, 0.77485, 0.14876, 0.81849, 0.18046],\n\t[0.81849, 0.18046, 0.85308, 0.20558, 0.87038, 0.21814, 0.88446, 0.23321],\n\t[0.88446, 0.23321, 0.90483, 0.25499, 0.92046, 0.28077, 0.93035, 0.30891],\n\t[0.93035, 0.30891, 0.93721, 0.32838, 0.94032, 0.34951, 0.9466, 0.39178],\n\t[0.9466, 0.39178, 0.95468, 0.44627, 0.96276, 0.50076, 0.97083, 0.55524],\n\t[0.97083, 0.55524, 0.98183, 0.6294, 0.98734, 0.66648, 0.9818, 0.69989],\n\t[0.9818, 0.69989, 0.97375, 0.74823, 0.9495, 0.79239, 0.91301, 0.8251],\n\t[0.91301, 0.8251, 0.88779, 0.84771, 0.85353, 0.86296, 0.78503, 0.89347],\n\t[0.78503, 0.89347, 0.73331, 0.91651, 0.68159, 0.93954, 0.62987, 0.96258],\n\t[0.62987, 0.96258, 0.58853, 0.98099, 0.56785, 0.99019, 0.54663, 0.9949],\n\t[0.54663, 0.9949, 0.51592, 1.0017, 0.48408, 1.0017, 0.45337, 0.9949],\n\t[0.45337, 0.9949, 0.43215, 0.99019, 0.41147, 0.98099, 0.37013, 0.96258],\n\t[0.37013, 0.96258, 0.31841, 0.93954, 0.26669, 0.91651, 0.21497, 0.89347],\n\t[0.21497, 0.89347, 0.14647, 0.86296, 0.11221, 0.84771, 0.08699, 0.8251],\n\t[0.08699, 0.8251, 0.0505, 0.79239, 0.02625, 0.74823, 0.0182, 0.69989],\n\t[0.0182, 0.69989, 0.01266, 0.66648, 0.01817, 0.6294, 0.02917, 0.55524],\n\t[0.02917, 0.55524, 0.03724, 0.50076, 0.04532, 0.44627, 0.0534, 0.39178],\n\t[0.0534, 0.39178, 0.05968, 0.34951, 0.06279, 0.32838, 0.06965, 0.30891],\n\t[0.06965, 0.30891, 0.07954, 0.28077, 0.09517, 0.25499, 0.11554, 0.23321],\n\t[0.11554, 0.23321, 0.12962, 0.21814, 0.14692, 0.20558, 0.18151, 0.18046],\n\t[0.18151, 0.18046, 0.22515, 0.14876, 0.26879, 0.11706, 0.31244, 0.08536],\n]);\n\nconst ghostishShape = createShape([\n\t[0, 0.47619, 0, 0.2132, 0.22386, 0, 0.5, 0],\n\t[0.5, 0, 0.77614, 0, 1, 0.2132, 1, 0.47619],\n\t[1, 0.47619, 1, 0.5873, 1, 0.69841, 1, 0.80952],\n\t[1, 0.80952, 1, 0.91472, 0.91046, 1, 0.8, 1],\n\t[0.8, 1, 0.76726, 1, 0.73636, 0.99251, 0.70908, 0.97923],\n\t[0.70908, 0.97923, 0.69518, 0.97246, 0.68131, 0.96504, 0.66738, 0.95759],\n\t[0.66738, 0.95759, 0.61838, 0.93137, 0.56864, 0.90476, 0.51423, 0.90476],\n\t[0.51423, 0.90476, 0.50474, 0.90476, 0.49526, 0.90476, 0.48577, 0.90476],\n\t[0.48577, 0.90476, 0.43136, 0.90476, 0.38163, 0.93137, 0.33262, 0.95759],\n\t[0.33262, 0.95759, 0.31869, 0.96504, 0.30482, 0.97246, 0.29092, 0.97923],\n\t[0.29092, 0.97923, 0.26364, 0.99251, 0.23274, 1, 0.2, 1],\n\t[0.2, 1, 0.08954, 1, 0, 0.91472, 0, 0.80952],\n\t[0, 0.80952, 0, 0.69841, 0, 0.5873, 0, 0.47619],\n]);\n\nconst heartShape = createShape([\n\t[0.78469, 0.05353, 0.717, 0.05353, 0.6566, 0.08531, 0.61713, 0.135],\n\t[0.61713, 0.135, 0.57809, 0.17803, 0.53904, 0.22106, 0.5, 0.26409],\n\t[0.5, 0.26409, 0.5, 0.26396, 0.5, 0.26382, 0.5, 0.26369],\n\t[0.5, 0.26369, 0.46096, 0.22065, 0.42191, 0.1776, 0.38287, 0.13456],\n\t[0.38287, 0.13456, 0.3434, 0.08491, 0.283, 0.05312, 0.21531, 0.05312],\n\t[0.21531, 0.05312, 0.0964, 0.05312, 0, 0.15116, 0, 0.27206],\n\t[0, 0.27206, 0, 0.37831, 0.08867, 0.45772, 0.15287, 0.534],\n\t[0.15287, 0.534, 0.21684, 0.61003, 0.2808, 0.686, 0.34476, 0.762],\n\t[0.34476, 0.762, 0.39262, 0.81887, 0.44049, 0.87575, 0.48835, 0.93263],\n\t[0.48835, 0.93263, 0.49224, 0.93722, 0.49611, 0.94184, 0.5, 0.94647],\n\t[0.5, 0.94647, 0.5, 0.9466, 0.5, 0.94674, 0.5, 0.94688],\n\t[0.5, 0.94688, 0.50389, 0.94225, 0.50776, 0.93766, 0.51165, 0.93303],\n\t[0.51165, 0.93303, 0.55951, 0.87616, 0.60737, 0.81931, 0.65524, 0.76244],\n\t[0.65524, 0.76244, 0.7192, 0.68644, 0.78317, 0.61044, 0.84713, 0.53444],\n\t[0.84713, 0.53444, 0.91133, 0.45816, 1, 0.37875, 1, 0.27247],\n\t[1, 0.27247, 1, 0.15156, 0.9036, 0.05353, 0.78469, 0.05353],\n]);\n\nconst clover4LeafShape = createShape([\n\t[0.07095, 0.5, 0.02669, 0.44709, 0, 0.37882, 0, 0.30426],\n\t[0, 0.30426, 0, 0.13622, 0.13551, 0, 0.3027, 0],\n\t[0.3027, 0, 0.37834, 0, 0.44753, 0.02791, 0.50057, 0.07402],\n\t[0.50057, 0.07402, 0.55351, 0.02791, 0.62253, 0, 0.69801, 0],\n\t[0.69801, 0, 0.8648, 0, 1, 0.13622, 1, 0.30426],\n\t[1, 0.30426, 1, 0.37882, 0.97338, 0.44709, 0.92922, 0.5],\n\t[0.92922, 0.5, 0.97338, 0.55291, 1, 0.62118, 1, 0.69574],\n\t[1, 0.69574, 1, 0.86378, 0.8648, 1, 0.69801, 1],\n\t[0.69801, 1, 0.62253, 1, 0.55351, 0.97209, 0.50057, 0.92598],\n\t[0.50057, 0.92598, 0.44753, 0.97209, 0.37834, 1, 0.3027, 1],\n\t[0.3027, 1, 0.13551, 1, 0, 0.86378, 0, 0.69574],\n\t[0, 0.69574, 0, 0.62118, 0.02669, 0.55291, 0.07095, 0.5],\n]);\n\nconst clover8LeafShape = createShape([\n\t[0.96431, 0.5, 1.0451, 0.6505, 0.98406, 0.78678, 0.82834, 0.82831],\n\t[0.82834, 0.82831, 0.78678, 0.98406, 0.6505, 1.04506, 0.5, 0.96431],\n\t[0.5, 0.96431, 0.34947, 1.0451, 0.21319, 0.98406, 0.17166, 0.82834],\n\t[0.17166, 0.82834, 0.01594, 0.78678, -0.0451, 0.6505, 0.03569, 0.5],\n\t[0.03569, 0.5, -0.0451, 0.34947, 0.01594, 0.21319, 0.17166, 0.17166],\n\t[0.17166, 0.17166, 0.21319, 0.01594, 0.34947, -0.0451, 0.5, 0.03569],\n\t[0.5, 0.03569, 0.6505, -0.0451, 0.78678, 0.01594, 0.82831, 0.17166],\n\t[0.82831, 0.17166, 0.98406, 0.21319, 1.04506, 0.34947, 0.96431, 0.5],\n]);\n\nconst ovalShape = createShape([\n\t[0.77103, 0.77103, 0.53902, 1.00303, 0.22959, 1.06979, 0.07991, 0.9201],\n\t[0.07991, 0.9201, -0.06978, 0.7704, -0.00304, 0.46097, 0.22897, 0.22897],\n\t[0.22897, 0.22897, 0.46098, -0.00303, 0.77041, -0.06979, 0.92009, 0.0799],\n\t[0.92009, 0.0799, 1.06978, 0.2296, 1.00304, 0.53903, 0.77103, 0.77103],\n]);\n\nconst pentagonShape = createShape([\n\t[0.3426, 0.07617, 0.39138, 0.03842, 0.41575, 0.01954, 0.44181, 0.01017],\n\t[0.44181, 0.01017, 0.47942, -0.00336, 0.52058, -0.00336, 0.55819, 0.01017],\n\t[0.55819, 0.01017, 0.58425, 0.01954, 0.60862, 0.03842, 0.6574, 0.07617],\n\t[0.6574, 0.07617, 0.69296, 0.1037, 0.72853, 0.13123, 0.76409, 0.15876],\n\t[0.76409, 0.15876, 0.79963, 0.18455, 0.83517, 0.21034, 0.87071, 0.23613],\n\t[0.87071, 0.23613, 0.9213, 0.27285, 0.94662, 0.29123, 0.96352, 0.31429],\n\t[0.96352, 0.31429, 0.98796, 0.34769, 1.00083, 0.38872, 0.99996, 0.43069],\n\t[0.99996, 0.43069, 0.99933, 0.45972, 0.9893, 0.49006, 0.96918, 0.55072],\n\t[0.96918, 0.55072, 0.95522, 0.59283, 0.94126, 0.63495, 0.9273, 0.67706],\n\t[0.9273, 0.67706, 0.91443, 0.72021, 0.90155, 0.76335, 0.88868, 0.8065],\n\t[0.88868, 0.8065, 0.87052, 0.86724, 0.86146, 0.89762, 0.84562, 0.92124],\n\t[0.84562, 0.92124, 0.82268, 0.95543, 0.78934, 0.98055, 0.75099, 0.99259],\n\t[0.75099, 0.99259, 0.7245, 1.00093, 0.69393, 1.00043, 0.63281, 0.99946],\n\t[0.63281, 0.99946, 0.58854, 0.99876, 0.54427, 0.99806, 0.5, 0.99737],\n\t[0.5, 0.99737, 0.45573, 0.99806, 0.41146, 0.99876, 0.36719, 0.99946],\n\t[0.36719, 0.99946, 0.30607, 1.00043, 0.2755, 1.00093, 0.24901, 0.99259],\n\t[0.24901, 0.99259, 0.21066, 0.98055, 0.17732, 0.95543, 0.15438, 0.92124],\n\t[0.15438, 0.92124, 0.13854, 0.89762, 0.12948, 0.86724, 0.11132, 0.8065],\n\t[0.11132, 0.8065, 0.09845, 0.76335, 0.08557, 0.72021, 0.0727, 0.67706],\n\t[0.0727, 0.67706, 0.05874, 0.63495, 0.04478, 0.59283, 0.03082, 0.55072],\n\t[0.03082, 0.55072, 0.0107, 0.49006, 0.00067, 0.45972, 0.00004, 0.43069],\n\t[0.00004, 0.43069, -0.00083, 0.38872, 0.01204, 0.34769, 0.03648, 0.31429],\n\t[0.03648, 0.31429, 0.05338, 0.29123, 0.0787, 0.27285, 0.12929, 0.23613],\n\t[0.12929, 0.23613, 0.16483, 0.21034, 0.20037, 0.18455, 0.23591, 0.15876],\n\t[0.23591, 0.15876, 0.27147, 0.13123, 0.30704, 0.1037, 0.3426, 0.07617],\n]);\n\nconst pillShape = createShape([\n\t[0.2662, 0.1259, 0.43407, -0.04197, 0.70623, -0.04197, 0.8741, 0.1259],\n\t[0.8741, 0.1259, 1.04197, 0.29377, 1.04197, 0.56593, 0.8741, 0.7338],\n\t[0.8741, 0.7338, 0.82733, 0.78057, 0.78057, 0.82733, 0.7338, 0.8741],\n\t[0.7338, 0.8741, 0.56593, 1.04197, 0.29377, 1.04197, 0.1259, 0.8741],\n\t[0.1259, 0.8741, -0.04197, 0.70623, -0.04197, 0.43407, 0.1259, 0.2662],\n\t[0.1259, 0.2662, 0.17267, 0.21943, 0.21943, 0.17267, 0.2662, 0.1259],\n]);\n\nconst pixelCircleShape = createShape([\n\t[0.70372, 0, 0.56791, 0, 0.43209, 0, 0.29628, 0],\n\t[0.29628, 0, 0.29628, 0.0216, 0.29628, 0.04321, 0.29628, 0.06481],\n\t[0.29628, 0.06481, 0.24999, 0.06481, 0.2037, 0.06481, 0.15741, 0.06481],\n\t[0.15741, 0.06481, 0.15741, 0.09259, 0.15741, 0.12037, 0.15741, 0.14816],\n\t[0.15741, 0.14816, 0.12963, 0.14816, 0.10185, 0.14816, 0.07408, 0.14816],\n\t[0.07408, 0.14816, 0.07408, 0.19753, 0.07408, 0.24691, 0.07408, 0.29628],\n\t[0.07408, 0.29628, 0.04938, 0.29628, 0.02469, 0.29628, 0, 0.29628],\n\t[0, 0.29628, 0, 0.43209, 0, 0.56791, 0, 0.70372],\n\t[0, 0.70372, 0.02469, 0.70372, 0.04938, 0.70372, 0.07408, 0.70372],\n\t[0.07408, 0.70372, 0.07408, 0.75309, 0.07408, 0.80247, 0.07408, 0.85184],\n\t[0.07408, 0.85184, 0.10185, 0.85184, 0.12963, 0.85184, 0.15741, 0.85184],\n\t[0.15741, 0.85184, 0.15741, 0.87962, 0.15741, 0.90741, 0.15741, 0.93519],\n\t[0.15741, 0.93519, 0.2037, 0.93519, 0.24999, 0.93519, 0.29628, 0.93519],\n\t[0.29628, 0.93519, 0.29628, 0.95679, 0.29628, 0.9784, 0.29628, 1],\n\t[0.29628, 1, 0.43209, 1, 0.56791, 1, 0.70372, 1],\n\t[0.70372, 1, 0.70372, 0.9784, 0.70372, 0.95679, 0.70372, 0.93519],\n\t[0.70372, 0.93519, 0.75001, 0.93519, 0.7963, 0.93519, 0.84259, 0.93519],\n\t[0.84259, 0.93519, 0.84259, 0.90741, 0.84259, 0.87962, 0.84259, 0.85184],\n\t[0.84259, 0.85184, 0.87037, 0.85184, 0.89816, 0.85184, 0.92594, 0.85184],\n\t[0.92594, 0.85184, 0.92594, 0.80247, 0.92594, 0.75309, 0.92594, 0.70372],\n\t[0.92594, 0.70372, 0.95062, 0.70372, 0.97531, 0.70372, 1, 0.70372],\n\t[1, 0.70372, 1, 0.56791, 1, 0.43209, 1, 0.29628],\n\t[1, 0.29628, 0.97531, 0.29628, 0.95062, 0.29628, 0.92594, 0.29628],\n\t[0.92594, 0.29628, 0.92594, 0.24691, 0.92594, 0.19753, 0.92594, 0.14816],\n\t[0.92594, 0.14816, 0.89816, 0.14816, 0.87037, 0.14816, 0.84259, 0.14816],\n\t[0.84259, 0.14816, 0.84259, 0.12038, 0.84259, 0.09259, 0.84259, 0.06481],\n\t[0.84259, 0.06481, 0.7963, 0.06481, 0.75001, 0.06481, 0.70372, 0.06481],\n\t[0.70372, 0.06481, 0.70372, 0.04321, 0.70372, 0.0216, 0.70372, 0],\n]);\n\nconst pixelTriangleShape = createShape([\n\t[0.28637, 0, 0.22842, 0, 0.17046, 0, 0.1125, 0],\n\t[0.1125, 0, 0.1125, 0.33333, 0.1125, 0.66667, 0.1125, 1],\n\t[0.1125, 1, 0.17046, 1, 0.22842, 1, 0.28637, 1],\n\t[0.28637, 1, 0.28637, 0.97101, 0.28637, 0.94203, 0.28637, 0.91304],\n\t[0.28637, 0.91304, 0.33108, 0.91304, 0.37579, 0.91304, 0.4205, 0.91304],\n\t[0.4205, 0.91304, 0.4205, 0.88551, 0.4205, 0.85797, 0.4205, 0.83043],\n\t[0.4205, 0.83043, 0.46688, 0.83043, 0.51325, 0.83043, 0.55963, 0.83043],\n\t[0.55963, 0.83043, 0.55963, 0.79855, 0.55963, 0.76667, 0.55963, 0.73478],\n\t[0.55963, 0.73478, 0.59771, 0.73478, 0.63579, 0.73478, 0.67388, 0.73478],\n\t[0.67388, 0.73478, 0.67388, 0.70869, 0.67388, 0.68261, 0.67388, 0.65652],\n\t[0.67388, 0.65652, 0.71197, 0.65652, 0.75006, 0.65652, 0.78816, 0.65652],\n\t[0.78816, 0.65652, 0.78816, 0.62464, 0.78816, 0.59275, 0.78816, 0.56087],\n\t[0.78816, 0.56087, 0.82127, 0.56087, 0.85439, 0.56087, 0.8875, 0.56087],\n\t[0.8875, 0.56087, 0.8875, 0.52029, 0.8875, 0.47971, 0.8875, 0.43913],\n\t[0.8875, 0.43913, 0.85439, 0.43913, 0.82127, 0.43913, 0.78816, 0.43913],\n\t[0.78816, 0.43913, 0.78816, 0.40725, 0.78816, 0.37536, 0.78816, 0.34347],\n\t[0.78816, 0.34347, 0.75006, 0.34347, 0.71197, 0.34347, 0.67388, 0.34347],\n\t[0.67388, 0.34347, 0.67388, 0.31739, 0.67388, 0.2913, 0.67388, 0.26522],\n\t[0.67388, 0.26522, 0.63579, 0.26522, 0.59771, 0.26522, 0.55963, 0.26522],\n\t[0.55963, 0.26522, 0.55963, 0.23333, 0.55963, 0.20145, 0.55963, 0.16957],\n\t[0.55963, 0.16957, 0.51325, 0.16957, 0.46688, 0.16957, 0.4205, 0.16957],\n\t[0.4205, 0.16957, 0.4205, 0.14203, 0.4205, 0.11449, 0.4205, 0.08696],\n\t[0.4205, 0.08696, 0.37579, 0.08696, 0.33108, 0.08696, 0.28637, 0.08696],\n\t[0.28637, 0.08696, 0.28637, 0.05797, 0.28637, 0.02899, 0.28637, 0],\n]);\n\nconst puffyDiamondShape = createShape([\n\t[0.77937, 0.78048, 0.81712, 0.7427, 0.8299, 0.6894, 0.81768, 0.64111],\n\t[0.81768, 0.64111, 0.86599, 0.65339, 0.91937, 0.64063, 0.95718, 0.60282],\n\t[0.95718, 0.60282, 1.01427, 0.54574, 1.01427, 0.45319, 0.95718, 0.39611],\n\t[0.95718, 0.39611, 0.91959, 0.35852, 0.86662, 0.34569, 0.81856, 0.3576],\n\t[0.81856, 0.3576, 0.82928, 0.31027, 0.81621, 0.25865, 0.77937, 0.2218],\n\t[0.77937, 0.2218, 0.7415, 0.18394, 0.68803, 0.17119, 0.63969, 0.18355],\n\t[0.63969, 0.18355, 0.6525, 0.13492, 0.63984, 0.08095, 0.60169, 0.04282],\n\t[0.60169, 0.04282, 0.54462, -0.01426, 0.45206, -0.01426, 0.395, 0.04282],\n\t[0.395, 0.04282, 0.3571, 0.08073, 0.34435, 0.13427, 0.35678, 0.18269],\n\t[0.35678, 0.18269, 0.30938, 0.17184, 0.2576, 0.18487, 0.22069, 0.2218],\n\t[0.22069, 0.2218, 0.18385, 0.25865, 0.17079, 0.31028, 0.1815, 0.35761],\n\t[0.1815, 0.35761, 0.13341, 0.34568, 0.08041, 0.35851, 0.04282, 0.39611],\n\t[0.04282, 0.39611, -0.01427, 0.45319, -0.01427, 0.54574, 0.04282, 0.60282],\n\t[0.04282, 0.60282, 0.08063, 0.64064, 0.13404, 0.6534, 0.18235, 0.6411],\n\t[0.18235, 0.6411, 0.17013, 0.68939, 0.18291, 0.7427, 0.22069, 0.78048],\n\t[0.22069, 0.78048, 0.25744, 0.81725, 0.30894, 0.83033, 0.35619, 0.81973],\n\t[0.35619, 0.81973, 0.34478, 0.8675, 0.35772, 0.9199, 0.395, 0.95718],\n\t[0.395, 0.95718, 0.45206, 1.01426, 0.54462, 1.01426, 0.60169, 0.95718],\n\t[0.60169, 0.95718, 0.63919, 0.91968, 0.65206, 0.86688, 0.64028, 0.81888],\n\t[0.64028, 0.81888, 0.6885, 0.83098, 0.74165, 0.81817, 0.77937, 0.78048],\n]);\n\nconst puffyShape = createShape([\n\t[0.99994, 0.49408, 0.99912, 0.42679, 0.94916, 0.37292, 0.88825, 0.37382],\n\t[0.88825, 0.37382, 0.88491, 0.37382, 0.88159, 0.3741, 0.87831, 0.37449],\n\t[0.87831, 0.37449, 0.88087, 0.37218, 0.88337, 0.36982, 0.88575, 0.36722],\n\t[0.88575, 0.36722, 0.92937, 0.32028, 0.93028, 0.24307, 0.88784, 0.19483],\n\t[0.88784, 0.19483, 0.88534, 0.19201, 0.88287, 0.18919, 0.88031, 0.18648],\n\t[0.88031, 0.18648, 0.83669, 0.13954, 0.76694, 0.14055, 0.72444, 0.1888],\n\t[0.72444, 0.1888, 0.72209, 0.19144, 0.71997, 0.19421, 0.71787, 0.19703],\n\t[0.71787, 0.19703, 0.71822, 0.19342, 0.71844, 0.18975, 0.7185, 0.18603],\n\t[0.7185, 0.18603, 0.71934, 0.11874, 0.67066, 0.06346, 0.60981, 0.0625],\n\t[0.60981, 0.0625, 0.60682, 0.0625, 0.60383, 0.0625, 0.60084, 0.0625],\n\t[0.60084, 0.0625, 0.55575, 0.0625, 0.51706, 0.09248, 0.5, 0.13537],\n\t[0.5, 0.13537, 0.48294, 0.09248, 0.44422, 0.0625, 0.39916, 0.0625],\n\t[0.39916, 0.0625, 0.39617, 0.0625, 0.39318, 0.0625, 0.39019, 0.0625],\n\t[0.39019, 0.0625, 0.32934, 0.0634, 0.28066, 0.11869, 0.28147, 0.18603],\n\t[0.28147, 0.18603, 0.28147, 0.18975, 0.28172, 0.19342, 0.28206, 0.19703],\n\t[0.28206, 0.19703, 0.28, 0.19418, 0.27781, 0.19144, 0.2755, 0.1888],\n\t[0.2755, 0.1888, 0.23306, 0.14055, 0.16325, 0.13954, 0.11962, 0.18648],\n\t[0.11962, 0.18648, 0.11709, 0.18925, 0.11453, 0.19201, 0.11209, 0.19483],\n\t[0.11209, 0.19483, 0.06966, 0.24307, 0.07056, 0.32022, 0.11419, 0.36722],\n\t[0.11419, 0.36722, 0.11659, 0.36982, 0.11906, 0.37218, 0.12162, 0.37449],\n\t[0.12162, 0.37449, 0.11833, 0.37409, 0.11501, 0.37387, 0.11169, 0.37382],\n\t[0.11169, 0.37382, 0.05084, 0.37292, 0.00087, 0.42679, 0, 0.49408],\n\t[0, 0.49408, 0, 0.49803, 0, 0.50197, 0, 0.50592],\n\t[0, 0.50592, 0.00081, 0.57321, 0.05081, 0.62708, 0.11169, 0.62618],\n\t[0.11169, 0.62618, 0.11506, 0.62618, 0.11837, 0.6259, 0.12162, 0.62551],\n\t[0.12162, 0.62551, 0.11906, 0.62782, 0.11659, 0.63018, 0.11419, 0.63278],\n\t[0.11419, 0.63278, 0.07056, 0.67972, 0.06966, 0.75693, 0.11209, 0.80518],\n\t[0.11209, 0.80518, 0.11459, 0.80799, 0.11709, 0.81081, 0.11962, 0.81352],\n\t[0.11962, 0.81352, 0.16325, 0.86046, 0.233, 0.85945, 0.2755, 0.8112],\n\t[0.2755, 0.8112, 0.27784, 0.80856, 0.28, 0.80579, 0.28206, 0.80297],\n\t[0.28206, 0.80298, 0.28171, 0.80663, 0.28151, 0.8103, 0.28147, 0.81397],\n\t[0.28147, 0.81397, 0.28066, 0.88126, 0.32931, 0.9366, 0.39019, 0.9375],\n\t[0.39019, 0.9375, 0.39318, 0.9375, 0.39617, 0.9375, 0.39916, 0.9375],\n\t[0.39916, 0.9375, 0.44425, 0.9375, 0.48294, 0.90752, 0.5, 0.86463],\n\t[0.5, 0.86463, 0.51706, 0.90752, 0.55578, 0.9375, 0.60084, 0.9375],\n\t[0.60084, 0.9375, 0.60383, 0.9375, 0.60682, 0.9375, 0.60981, 0.9375],\n\t[0.60981, 0.9375, 0.67066, 0.9366, 0.71934, 0.88131, 0.71853, 0.81397],\n\t[0.71853, 0.81397, 0.71853, 0.81025, 0.71828, 0.80658, 0.71794, 0.80297],\n\t[0.71794, 0.80297, 0.72, 0.80579, 0.72216, 0.80856, 0.7245, 0.8112],\n\t[0.7245, 0.8112, 0.76694, 0.85945, 0.83675, 0.86046, 0.88037, 0.81352],\n\t[0.88037, 0.81352, 0.88291, 0.81075, 0.88547, 0.80799, 0.88791, 0.80518],\n\t[0.88791, 0.80518, 0.93034, 0.75693, 0.92944, 0.67978, 0.88581, 0.63278],\n\t[0.88581, 0.63278, 0.88341, 0.63018, 0.88094, 0.62782, 0.87838, 0.62551],\n\t[0.87838, 0.62551, 0.88167, 0.62591, 0.88499, 0.62613, 0.88831, 0.62618],\n\t[0.88831, 0.62618, 0.94916, 0.62708, 0.99919, 0.57327, 1, 0.50592],\n\t[1, 0.50592, 1, 0.50197, 1, 0.49803, 1, 0.49408],\n\t[1, 0.49408, 0.99998, 0.49408, 0.99996, 0.49408, 0.99994, 0.49408],\n]);\n\nconst semiCircleShape = createShape([\n\t[1, 0.70913, 1, 0.76622, 0.95372, 0.8125, 0.89663, 0.8125],\n\t[0.89663, 0.8125, 0.63221, 0.8125, 0.36779, 0.8125, 0.10337, 0.8125],\n\t[0.10337, 0.8125, 0.04628, 0.8125, 0, 0.76622, 0, 0.70913],\n\t[0, 0.70913, 0, 0.70192, 0, 0.69471, 0, 0.6875],\n\t[0, 0.6875, 0, 0.41134, 0.22386, 0.1875, 0.5, 0.1875],\n\t[0.5, 0.1875, 0.77614, 0.1875, 1, 0.41134, 1, 0.6875],\n\t[1, 0.6875, 1, 0.69471, 1, 0.70192, 1, 0.70913],\n]);\n\nconst cookie12SidedShape = createShape([\n\t[0.42719, 0.03077, 0.42887, 0.02912, 0.42972, 0.02827, 0.43044, 0.02759],\n\t[0.43044, 0.02759, 0.46953, -0.0092, 0.53047, -0.0092, 0.56956, 0.02759],\n\t[0.56956, 0.02759, 0.57028, 0.02827, 0.57113, 0.02912, 0.57281, 0.03077],\n\t[0.57281, 0.03077, 0.57384, 0.03174, 0.57434, 0.03224, 0.57481, 0.03271],\n\t[0.57481, 0.03271, 0.59982, 0.05657, 0.63526, 0.06606, 0.66885, 0.0579],\n\t[0.66885, 0.0579, 0.6695, 0.05774, 0.67019, 0.05756, 0.67157, 0.05721],\n\t[0.67157, 0.05721, 0.67385, 0.05662, 0.675, 0.05634, 0.67597, 0.05609],\n\t[0.67597, 0.05609, 0.72819, 0.04377, 0.781, 0.07424, 0.79644, 0.12565],\n\t[0.79644, 0.12565, 0.79672, 0.12662, 0.79704, 0.12774, 0.79769, 0.13003],\n\t[0.79769, 0.13003, 0.79807, 0.1314, 0.79825, 0.13209, 0.79844, 0.13274],\n\t[0.79844, 0.13274, 0.80817, 0.1659, 0.8341, 0.19183, 0.86726, 0.20156],\n\t[0.86726, 0.20156, 0.86791, 0.20175, 0.8686, 0.20193, 0.86997, 0.20231],\n\t[0.86997, 0.20231, 0.87226, 0.20296, 0.87338, 0.20328, 0.87435, 0.20356],\n\t[0.87435, 0.20356, 0.92576, 0.219, 0.95623, 0.27181, 0.94391, 0.32403],\n\t[0.94391, 0.32403, 0.94366, 0.325, 0.94338, 0.32615, 0.94279, 0.32843],\n\t[0.94279, 0.32843, 0.94244, 0.32981, 0.94226, 0.3305, 0.9421, 0.33115],\n\t[0.9421, 0.33115, 0.93394, 0.36474, 0.94343, 0.40018, 0.96729, 0.42519],\n\t[0.96729, 0.42519, 0.96776, 0.42566, 0.96826, 0.42616, 0.96923, 0.42719],\n\t[0.96923, 0.42719, 0.97088, 0.42887, 0.97173, 0.42972, 0.97241, 0.43044],\n\t[0.97241, 0.43044, 1.0092, 0.46953, 1.0092, 0.53047, 0.97241, 0.56956],\n\t[0.97241, 0.56956, 0.97173, 0.57028, 0.97088, 0.57113, 0.96923, 0.57281],\n\t[0.96923, 0.57281, 0.96826, 0.57384, 0.96776, 0.57434, 0.96729, 0.57481],\n\t[0.96729, 0.57481, 0.94343, 0.59982, 0.93394, 0.63526, 0.9421, 0.66885],\n\t[0.9421, 0.66885, 0.94226, 0.6695, 0.94244, 0.67019, 0.94279, 0.67157],\n\t[0.94279, 0.67157, 0.94338, 0.67385, 0.94366, 0.675, 0.94391, 0.67597],\n\t[0.94391, 0.67597, 0.95623, 0.72819, 0.92576, 0.781, 0.87435, 0.79644],\n\t[0.87435, 0.79644, 0.87338, 0.79672, 0.87226, 0.79704, 0.86997, 0.79769],\n\t[0.86997, 0.79769, 0.8686, 0.79807, 0.86791, 0.79825, 0.86726, 0.79844],\n\t[0.86726, 0.79844, 0.8341, 0.80817, 0.80817, 0.8341, 0.79844, 0.86726],\n\t[0.79844, 0.86726, 0.79825, 0.86791, 0.79807, 0.8686, 0.79769, 0.86997],\n\t[0.79769, 0.86997, 0.79704, 0.87226, 0.79672, 0.87338, 0.79644, 0.87435],\n\t[0.79644, 0.87435, 0.781, 0.92576, 0.72819, 0.95623, 0.67597, 0.94391],\n\t[0.67597, 0.94391, 0.675, 0.94366, 0.67385, 0.94338, 0.67157, 0.94279],\n\t[0.67157, 0.94279, 0.67019, 0.94244, 0.6695, 0.94226, 0.66885, 0.9421],\n\t[0.66885, 0.9421, 0.63526, 0.93394, 0.59982, 0.94343, 0.57481, 0.96729],\n\t[0.57481, 0.96729, 0.57434, 0.96776, 0.57384, 0.96826, 0.57281, 0.96923],\n\t[0.57281, 0.96923, 0.57113, 0.97088, 0.57028, 0.97173, 0.56956, 0.97241],\n\t[0.56956, 0.97241, 0.53047, 1.0092, 0.46953, 1.0092, 0.43044, 0.97241],\n\t[0.43044, 0.97241, 0.42972, 0.97173, 0.42887, 0.97088, 0.42719, 0.96923],\n\t[0.42719, 0.96923, 0.42616, 0.96826, 0.42566, 0.96776, 0.42519, 0.96729],\n\t[0.42519, 0.96729, 0.40018, 0.94343, 0.36474, 0.93394, 0.33115, 0.9421],\n\t[0.33115, 0.9421, 0.3305, 0.94226, 0.32981, 0.94244, 0.32843, 0.94279],\n\t[0.32843, 0.94279, 0.32615, 0.94338, 0.325, 0.94366, 0.32403, 0.94391],\n\t[0.32403, 0.94391, 0.27181, 0.95623, 0.219, 0.92576, 0.20356, 0.87435],\n\t[0.20356, 0.87435, 0.20328, 0.87338, 0.20296, 0.87226, 0.20231, 0.86997],\n\t[0.20231, 0.86997, 0.20193, 0.8686, 0.20175, 0.86791, 0.20156, 0.86726],\n\t[0.20156, 0.86726, 0.19183, 0.8341, 0.1659, 0.80817, 0.13274, 0.79844],\n\t[0.13274, 0.79844, 0.13209, 0.79825, 0.1314, 0.79807, 0.13003, 0.79769],\n\t[0.13003, 0.79769, 0.12774, 0.79704, 0.12662, 0.79672, 0.12565, 0.79644],\n\t[0.12565, 0.79644, 0.07424, 0.781, 0.04377, 0.72819, 0.05609, 0.67597],\n\t[0.05609, 0.67597, 0.05634, 0.675, 0.05662, 0.67385, 0.05721, 0.67157],\n\t[0.05721, 0.67157, 0.05756, 0.67019, 0.05774, 0.6695, 0.0579, 0.66885],\n\t[0.0579, 0.66885, 0.06606, 0.63526, 0.05657, 0.59982, 0.03271, 0.57481],\n\t[0.03271, 0.57481, 0.03224, 0.57434, 0.03174, 0.57384, 0.03077, 0.57281],\n\t[0.03077, 0.57281, 0.02912, 0.57113, 0.02827, 0.57028, 0.02759, 0.56956],\n\t[0.02759, 0.56956, -0.0092, 0.53047, -0.0092, 0.46953, 0.02759, 0.43044],\n\t[0.02759, 0.43044, 0.02827, 0.42972, 0.02912, 0.42887, 0.03077, 0.42719],\n\t[0.03077, 0.42719, 0.03174, 0.42616, 0.03224, 0.42566, 0.03271, 0.42519],\n\t[0.03271, 0.42519, 0.05657, 0.40018, 0.06606, 0.36474, 0.0579, 0.33115],\n\t[0.0579, 0.33115, 0.05774, 0.3305, 0.05756, 0.32981, 0.05721, 0.32843],\n\t[0.05721, 0.32843, 0.05662, 0.32615, 0.05634, 0.325, 0.05609, 0.32403],\n\t[0.05609, 0.32403, 0.04377, 0.27181, 0.07424, 0.219, 0.12565, 0.20356],\n\t[0.12565, 0.20356, 0.12662, 0.20328, 0.12774, 0.20296, 0.13003, 0.20231],\n\t[0.13003, 0.20231, 0.1314, 0.20193, 0.13209, 0.20175, 0.13274, 0.20156],\n\t[0.13274, 0.20156, 0.1659, 0.19183, 0.19183, 0.1659, 0.20156, 0.13274],\n\t[0.20156, 0.13274, 0.20175, 0.13209, 0.20193, 0.1314, 0.20231, 0.13003],\n\t[0.20231, 0.13003, 0.20296, 0.12774, 0.20328, 0.12662, 0.20356, 0.12565],\n\t[0.20356, 0.12565, 0.219, 0.07424, 0.27181, 0.04377, 0.32403, 0.05609],\n\t[0.32403, 0.05609, 0.325, 0.05634, 0.32615, 0.05662, 0.32843, 0.05721],\n\t[0.32843, 0.05721, 0.32981, 0.05756, 0.3305, 0.05774, 0.33115, 0.0579],\n\t[0.33115, 0.0579, 0.36474, 0.06606, 0.40018, 0.05657, 0.42519, 0.03271],\n\t[0.42519, 0.03271, 0.42566, 0.03224, 0.42616, 0.03174, 0.42719, 0.03077],\n]);\n\nconst cookie4SidedShape = createShape([\n\t[0.63833, 0.02217, 0.85312, -0.07111, 1.07112, 0.14689, 0.97783, 0.36168],\n\t[0.97783, 0.36168, 0.97269, 0.37351, 0.96755, 0.38534, 0.9624, 0.39718],\n\t[0.9624, 0.39718, 0.93394, 0.46277, 0.93394, 0.53723, 0.9624, 0.60282],\n\t[0.9624, 0.60282, 0.96755, 0.61466, 0.97269, 0.62649, 0.97783, 0.63832],\n\t[0.97783, 0.63832, 1.07112, 0.85311, 0.85312, 1.07111, 0.63833, 0.97783],\n\t[0.63833, 0.97783, 0.6265, 0.97268, 0.61466, 0.96754, 0.60283, 0.9624],\n\t[0.60283, 0.9624, 0.53724, 0.93393, 0.46278, 0.93393, 0.39718, 0.9624],\n\t[0.39718, 0.9624, 0.38535, 0.96754, 0.37352, 0.97268, 0.36168, 0.97783],\n\t[0.36168, 0.97783, 0.14689, 1.07111, -0.07112, 0.85311, 0.02217, 0.63832],\n\t[0.02217, 0.63832, 0.02731, 0.62649, 0.03245, 0.61466, 0.03759, 0.60282],\n\t[0.03759, 0.60282, 0.06608, 0.53723, 0.06608, 0.46277, 0.03759, 0.39718],\n\t[0.03759, 0.39718, 0.03245, 0.38534, 0.02731, 0.37351, 0.02217, 0.36168],\n\t[0.02217, 0.36168, -0.07112, 0.14689, 0.14689, -0.07111, 0.36168, 0.02217],\n\t[0.36168, 0.02217, 0.37352, 0.02732, 0.38535, 0.03246, 0.39718, 0.0376],\n\t[0.39718, 0.0376, 0.46278, 0.06607, 0.53724, 0.06607, 0.60283, 0.0376],\n\t[0.60283, 0.0376, 0.61466, 0.03246, 0.6265, 0.02732, 0.63833, 0.02217],\n]);\n\nconst cookie6SidedShape = createShape([\n\t[0.32337, 0.07142, 0.42176, -0.02381, 0.57824, -0.02381, 0.67663, 0.07142],\n\t[0.67663, 0.07142, 0.70677, 0.10055, 0.74365, 0.12178, 0.78399, 0.13319],\n\t[0.78399, 0.13319, 0.91589, 0.17053, 0.99413, 0.30566, 0.96061, 0.4382],\n\t[0.96061, 0.4382, 0.95036, 0.47876, 0.95036, 0.52124, 0.96061, 0.5618],\n\t[0.96061, 0.5618, 0.99413, 0.69434, 0.91589, 0.82947, 0.78399, 0.86681],\n\t[0.78399, 0.86681, 0.74365, 0.87822, 0.70677, 0.89945, 0.67663, 0.92858],\n\t[0.67663, 0.92858, 0.57824, 1.02381, 0.42176, 1.02381, 0.32337, 0.92858],\n\t[0.32337, 0.92858, 0.29323, 0.89945, 0.25635, 0.87822, 0.21601, 0.86681],\n\t[0.21601, 0.86681, 0.08411, 0.82947, 0.00587, 0.69434, 0.03939, 0.5618],\n\t[0.03939, 0.5618, 0.04964, 0.52124, 0.04964, 0.47876, 0.03939, 0.4382],\n\t[0.03939, 0.4382, 0.00587, 0.30566, 0.08411, 0.17053, 0.21601, 0.13319],\n\t[0.21601, 0.13319, 0.25635, 0.12178, 0.29323, 0.10055, 0.32337, 0.07142],\n]);\n\nconst cookie7SidedShape = createShape([\n\t[0.35209, 0.06806, 0.36326, 0.05824, 0.36884, 0.05334, 0.37397, 0.04937],\n\t[0.37397, 0.04937, 0.4482, -0.00813, 0.5518, -0.00813, 0.62603, 0.04937],\n\t[0.62603, 0.04937, 0.63116, 0.05334, 0.63674, 0.05824, 0.64791, 0.06806],\n\t[0.64791, 0.06806, 0.65164, 0.07137, 0.65351, 0.07299, 0.65539, 0.07459],\n\t[0.65539, 0.07459, 0.68167, 0.09662, 0.71303, 0.11176, 0.74663, 0.11862],\n\t[0.74663, 0.11862, 0.74903, 0.11912, 0.75147, 0.11956, 0.75637, 0.12043],\n\t[0.75637, 0.12043, 0.771, 0.12306, 0.77831, 0.12434, 0.78461, 0.1259],\n\t[0.78461, 0.1259, 0.87573, 0.14821, 0.94032, 0.2294, 0.94176, 0.3234],\n\t[0.94176, 0.3234, 0.94186, 0.3299, 0.94151, 0.33734, 0.9408, 0.35221],\n\t[0.9408, 0.35221, 0.94057, 0.35721, 0.94045, 0.35968, 0.94039, 0.36215],\n\t[0.94039, 0.36215, 0.93958, 0.39649, 0.94732, 0.43049, 0.96293, 0.46109],\n\t[0.96293, 0.46109, 0.96404, 0.46328, 0.96523, 0.46546, 0.96759, 0.46987],\n\t[0.96759, 0.46987, 0.97467, 0.48296, 0.97821, 0.4895, 0.98093, 0.4954],\n\t[0.98093, 0.4954, 1.02032, 0.58071, 0.99727, 0.68196, 0.92484, 0.74168],\n\t[0.92484, 0.74168, 0.91984, 0.74584, 0.91381, 0.75018, 0.90177, 0.7589],\n\t[0.90177, 0.7589, 0.89774, 0.76184, 0.89572, 0.76328, 0.89377, 0.76478],\n\t[0.89377, 0.76478, 0.86646, 0.78557, 0.84476, 0.81284, 0.83064, 0.84412],\n\t[0.83064, 0.84412, 0.82963, 0.84637, 0.82865, 0.84865, 0.82671, 0.85325],\n\t[0.82671, 0.85325, 0.82091, 0.86696, 0.818, 0.87381, 0.8151, 0.87962],\n\t[0.8151, 0.87962, 0.7731, 0.96368, 0.67977, 1.00875, 0.58801, 0.98925],\n\t[0.58801, 0.98925, 0.58166, 0.98787, 0.57451, 0.98587, 0.56019, 0.98187],\n\t[0.56019, 0.98187, 0.5554, 0.98056, 0.55301, 0.97987, 0.55063, 0.97928],\n\t[0.55063, 0.97928, 0.51741, 0.97084, 0.48259, 0.97084, 0.44937, 0.97928],\n\t[0.44937, 0.97928, 0.44699, 0.97987, 0.4446, 0.98056, 0.43981, 0.98187],\n\t[0.43981, 0.98187, 0.42549, 0.98587, 0.41834, 0.98787, 0.41199, 0.98925],\n\t[0.41199, 0.98925, 0.32023, 1.00875, 0.2269, 0.96368, 0.1849, 0.87962],\n\t[0.1849, 0.87962, 0.18199, 0.87381, 0.17909, 0.86696, 0.17329, 0.85325],\n\t[0.17329, 0.85325, 0.17135, 0.84865, 0.17037, 0.84637, 0.16936, 0.84412],\n\t[0.16936, 0.84412, 0.15523, 0.81284, 0.13353, 0.78557, 0.10623, 0.76478],\n\t[0.10623, 0.76478, 0.10428, 0.76328, 0.10226, 0.76184, 0.09823, 0.7589],\n\t[0.09823, 0.7589, 0.08619, 0.75018, 0.08017, 0.74584, 0.07516, 0.74168],\n\t[0.07516, 0.74168, 0.00273, 0.68196, -0.02032, 0.58071, 0.01907, 0.4954],\n\t[0.01907, 0.4954, 0.02179, 0.4895, 0.02533, 0.48296, 0.03241, 0.46987],\n\t[0.03241, 0.46987, 0.03477, 0.46546, 0.03596, 0.46328, 0.03707, 0.46109],\n\t[0.03707, 0.46109, 0.05268, 0.43049, 0.06042, 0.39649, 0.05961, 0.36215],\n\t[0.05961, 0.36215, 0.05955, 0.35968, 0.05943, 0.35721, 0.0592, 0.35221],\n\t[0.0592, 0.35221, 0.05849, 0.33734, 0.05813, 0.3299, 0.05824, 0.3234],\n\t[0.05824, 0.3234, 0.05968, 0.2294, 0.12427, 0.14821, 0.21539, 0.1259],\n\t[0.21539, 0.1259, 0.22169, 0.12434, 0.229, 0.12306, 0.24363, 0.12043],\n\t[0.24363, 0.12043, 0.24853, 0.11956, 0.25097, 0.11912, 0.25337, 0.11862],\n\t[0.25337, 0.11862, 0.28697, 0.11176, 0.31833, 0.09662, 0.34461, 0.07459],\n\t[0.34461, 0.07459, 0.34649, 0.07299, 0.34836, 0.07137, 0.35209, 0.06806],\n]);\n\nconst cookie9SidedShape = createShape([\n\t[0.39144, 0.04182, 0.39684, 0.03735, 0.39953, 0.03513, 0.402, 0.03326],\n\t[0.402, 0.03326, 0.45981, -0.01109, 0.54019, -0.01109, 0.598, 0.03326],\n\t[0.598, 0.03326, 0.60047, 0.03513, 0.60316, 0.03735, 0.60856, 0.04182],\n\t[0.60856, 0.04182, 0.61097, 0.04379, 0.61216, 0.04479, 0.61334, 0.04576],\n\t[0.61334, 0.04576, 0.64056, 0.06743, 0.67404, 0.07974, 0.70881, 0.08085],\n\t[0.70881, 0.08085, 0.71031, 0.08088, 0.71187, 0.08091, 0.71497, 0.08094],\n\t[0.71497, 0.08094, 0.72194, 0.08104, 0.72544, 0.08107, 0.7285, 0.08123],\n\t[0.7285, 0.08123, 0.80112, 0.08494, 0.86243, 0.13694, 0.87865, 0.20854],\n\t[0.87865, 0.20854, 0.87934, 0.21157, 0.88, 0.21504, 0.88131, 0.22194],\n\t[0.88131, 0.22194, 0.88187, 0.22504, 0.88215, 0.22657, 0.88247, 0.22807],\n\t[0.88247, 0.22807, 0.88956, 0.26244, 0.90737, 0.29357, 0.93325, 0.31694],\n\t[0.93325, 0.31694, 0.9344, 0.31797, 0.93556, 0.319, 0.93793, 0.32104],\n\t[0.93793, 0.32104, 0.94321, 0.32563, 0.94584, 0.32794, 0.94809, 0.33007],\n\t[0.94809, 0.33007, 1.00137, 0.38004, 1.01528, 0.45972, 0.98215, 0.5251],\n\t[0.98215, 0.5251, 0.98075, 0.52788, 0.97903, 0.53094, 0.97562, 0.53707],\n\t[0.97562, 0.53707, 0.97409, 0.53982, 0.97334, 0.54119, 0.97262, 0.54253],\n\t[0.97262, 0.54253, 0.9562, 0.57351, 0.95003, 0.60889, 0.955, 0.6436],\n\t[0.955, 0.6436, 0.95521, 0.64513, 0.95546, 0.64666, 0.95596, 0.64975],\n\t[0.95596, 0.64975, 0.95709, 0.65672, 0.95765, 0.66019, 0.95803, 0.66328],\n\t[0.95803, 0.66328, 0.96703, 0.73616, 0.927, 0.80622, 0.86003, 0.83478],\n\t[0.86003, 0.83478, 0.85718, 0.836, 0.8539, 0.83725, 0.8474, 0.83975],\n\t[0.8474, 0.83975, 0.8445, 0.84084, 0.84303, 0.84141, 0.84162, 0.84197],\n\t[0.84162, 0.84197, 0.80937, 0.855, 0.78212, 0.87812, 0.76381, 0.90794],\n\t[0.76381, 0.90794, 0.76303, 0.90925, 0.76225, 0.91059, 0.76065, 0.91328],\n\t[0.76065, 0.91328, 0.75709, 0.91934, 0.75531, 0.92237, 0.75362, 0.925],\n\t[0.75362, 0.925, 0.71415, 0.98665, 0.63894, 1.01434, 0.56944, 0.99272],\n\t[0.56944, 0.99272, 0.5665, 0.99181, 0.56319, 0.99065, 0.55662, 0.98831],\n\t[0.55662, 0.98831, 0.55369, 0.98728, 0.55222, 0.98675, 0.55078, 0.98628],\n\t[0.55078, 0.98628, 0.51782, 0.97531, 0.48218, 0.97531, 0.44922, 0.98628],\n\t[0.44922, 0.98628, 0.44778, 0.98675, 0.44631, 0.98728, 0.44338, 0.98831],\n\t[0.44338, 0.98831, 0.43681, 0.99065, 0.4335, 0.99181, 0.43056, 0.99272],\n\t[0.43056, 0.99272, 0.36106, 1.01434, 0.28585, 0.98665, 0.24638, 0.925],\n\t[0.24638, 0.925, 0.24469, 0.92237, 0.24291, 0.91934, 0.23935, 0.91328],\n\t[0.23935, 0.91328, 0.23775, 0.91059, 0.23697, 0.90925, 0.23619, 0.90794],\n\t[0.23619, 0.90794, 0.21788, 0.87812, 0.19063, 0.855, 0.15838, 0.84197],\n\t[0.15838, 0.84197, 0.15697, 0.84141, 0.1555, 0.84084, 0.1526, 0.83975],\n\t[0.1526, 0.83975, 0.1461, 0.83725, 0.14282, 0.836, 0.13997, 0.83478],\n\t[0.13997, 0.83478, 0.073, 0.80622, 0.03297, 0.73616, 0.04197, 0.66328],\n\t[0.04197, 0.66328, 0.04235, 0.66019, 0.04291, 0.65672, 0.04404, 0.64975],\n\t[0.04404, 0.64975, 0.04454, 0.64666, 0.04479, 0.64513, 0.045, 0.6436],\n\t[0.045, 0.6436, 0.04997, 0.60889, 0.0438, 0.57351, 0.02738, 0.54253],\n\t[0.02738, 0.54253, 0.02666, 0.54119, 0.02591, 0.53982, 0.02438, 0.53707],\n\t[0.02438, 0.53707, 0.02097, 0.53094, 0.01925, 0.52788, 0.01785, 0.5251],\n\t[0.01785, 0.5251, -0.01528, 0.45972, -0.00137, 0.38004, 0.05191, 0.33007],\n\t[0.05191, 0.33007, 0.05416, 0.32794, 0.05679, 0.32563, 0.06207, 0.32104],\n\t[0.06207, 0.32104, 0.06444, 0.319, 0.0656, 0.31797, 0.06675, 0.31694],\n\t[0.06675, 0.31694, 0.0927, 0.29347, 0.11049, 0.26234, 0.11753, 0.22807],\n\t[0.11753, 0.22807, 0.11785, 0.22657, 0.11813, 0.22504, 0.11869, 0.22194],\n\t[0.11869, 0.22194, 0.12, 0.21504, 0.12066, 0.21157, 0.12135, 0.20854],\n\t[0.12135, 0.20854, 0.13757, 0.13694, 0.19888, 0.08494, 0.2715, 0.08123],\n\t[0.2715, 0.08123, 0.27456, 0.08107, 0.27806, 0.08104, 0.28503, 0.08094],\n\t[0.28503, 0.08094, 0.28813, 0.08091, 0.28969, 0.08088, 0.29119, 0.08085],\n\t[0.29119, 0.08085, 0.32596, 0.07974, 0.35944, 0.06743, 0.38666, 0.04576],\n\t[0.38666, 0.04576, 0.38784, 0.04479, 0.38903, 0.04379, 0.39144, 0.04182],\n]);\n\nconst slantedShape = createShape([\n\t[0.04911, 0.28294, 0.05715, 0.20613, 0.06118, 0.16772, 0.07595, 0.13743],\n\t[0.07595, 0.13743, 0.09732, 0.09358, 0.13462, 0.05972, 0.18009, 0.04288],\n\t[0.18009, 0.04288, 0.21151, 0.03125, 0.24979, 0.03125, 0.32635, 0.03125],\n\t[0.32635, 0.03125, 0.45521, 0.03125, 0.58407, 0.03125, 0.71293, 0.03125],\n\t[0.71293, 0.03125, 0.80551, 0.03125, 0.85181, 0.03125, 0.88715, 0.04642],\n\t[0.88715, 0.04642, 0.93832, 0.06838, 0.97725, 0.11203, 0.99352, 0.16569],\n\t[0.99352, 0.16569, 1.00476, 0.20272, 0.9999, 0.24916, 0.99017, 0.34206],\n\t[0.99017, 0.34206, 0.97708, 0.46706, 0.96398, 0.59206, 0.95089, 0.71706],\n\t[0.95089, 0.71706, 0.94285, 0.79387, 0.93883, 0.83228, 0.92405, 0.86256],\n\t[0.92405, 0.86256, 0.90268, 0.90641, 0.86538, 0.94028, 0.81991, 0.95712],\n\t[0.81991, 0.95712, 0.78849, 0.96875, 0.75021, 0.96875, 0.67365, 0.96875],\n\t[0.67365, 0.96875, 0.54479, 0.96875, 0.41593, 0.96875, 0.28707, 0.96875],\n\t[0.28707, 0.96875, 0.19449, 0.96875, 0.14819, 0.96875, 0.11285, 0.95359],\n\t[0.11285, 0.95359, 0.06169, 0.93162, 0.02275, 0.88797, 0.00648, 0.83431],\n\t[0.00648, 0.83431, -0.00476, 0.79728, 0.0001, 0.75084, 0.00983, 0.65794],\n\t[0.00983, 0.65794, 0.02292, 0.53294, 0.03602, 0.40794, 0.04911, 0.28294],\n]);\n\nconst softBoomShape = createShape([\n\t[0.54668, 0.26546, 0.61712, -0.08849, 0.38296, -0.08849, 0.45337, 0.26546],\n\t[0.45337, 0.26546, 0.38296, -0.08849, 0.16664, 0.0011, 0.36715, 0.30118],\n\t[0.36715, 0.30118, 0.16664, 0.0011, 0.0011, 0.16665, 0.30118, 0.36715],\n\t[0.30118, 0.36715, 0.0011, 0.16665, -0.08849, 0.38296, 0.26546, 0.45334],\n\t[0.26546, 0.45334, -0.08849, 0.38293, -0.08849, 0.61706, 0.26546, 0.54665],\n\t[0.26546, 0.54665, -0.08849, 0.61706, 0.00114, 0.83334, 0.30118, 0.63284],\n\t[0.30118, 0.63284, 0.00114, 0.83334, 0.16668, 0.9989, 0.36715, 0.69881],\n\t[0.36715, 0.69881, 0.16664, 0.99884, 0.38296, 1.08843, 0.45334, 0.73452],\n\t[0.45334, 0.73452, 0.38293, 1.08849, 0.61706, 1.08849, 0.54665, 0.73452],\n\t[0.54665, 0.73452, 0.61706, 1.08849, 0.83334, 0.99884, 0.63284, 0.69881],\n\t[0.63284, 0.69881, 0.83334, 0.99884, 0.9989, 0.83331, 0.69881, 0.63284],\n\t[0.69881, 0.63284, 0.99884, 0.83334, 1.08843, 0.61702, 0.73452, 0.54665],\n\t[0.73452, 0.54665, 1.08849, 0.61706, 1.08849, 0.38293, 0.73452, 0.45334],\n\t[0.73452, 0.45334, 1.08849, 0.38293, 0.99884, 0.16665, 0.69881, 0.36715],\n\t[0.69881, 0.36715, 0.99884, 0.16665, 0.83331, 0.0011, 0.63284, 0.30118],\n\t[0.63284, 0.30118, 0.83334, 0.00114, 0.61702, -0.08845, 0.54665, 0.26546],\n\t[0.54665, 0.26546, 0.54666, 0.26546, 0.54667, 0.26546, 0.54668, 0.26546],\n]);\n\nconst softBurstShape = createShape([\n\t[0.45359, 0.0247, 0.47494, -0.00823, 0.52506, -0.00823, 0.54641, 0.0247],\n\t[0.54641, 0.0247, 0.56348, 0.05101, 0.58055, 0.07733, 0.59763, 0.10364],\n\t[0.59763, 0.10364, 0.61166, 0.12529, 0.64, 0.1341, 0.66466, 0.12447],\n\t[0.66466, 0.12447, 0.69464, 0.11278, 0.72462, 0.10108, 0.7546, 0.08939],\n\t[0.7546, 0.08939, 0.79213, 0.07475, 0.83266, 0.10291, 0.82972, 0.14156],\n\t[0.82972, 0.14156, 0.82736, 0.17245, 0.82499, 0.20334, 0.82263, 0.23422],\n\t[0.82263, 0.23422, 0.82066, 0.25963, 0.83816, 0.28266, 0.86403, 0.28875],\n\t[0.86403, 0.28875, 0.89548, 0.29614, 0.92693, 0.30352, 0.95838, 0.31091],\n\t[0.95838, 0.31091, 0.99772, 0.32016, 1.01322, 0.36572, 0.98707, 0.39535],\n\t[0.98707, 0.39535, 0.96617, 0.41899, 0.94527, 0.44264, 0.92438, 0.46629],\n\t[0.92438, 0.46629, 0.90719, 0.48575, 0.90719, 0.51425, 0.92438, 0.53372],\n\t[0.92438, 0.53372, 0.94527, 0.55737, 0.96617, 0.58102, 0.98707, 0.60466],\n\t[0.98707, 0.60466, 1.01322, 0.63429, 0.99772, 0.67985, 0.95838, 0.6891],\n\t[0.95838, 0.6891, 0.92693, 0.69648, 0.89548, 0.70387, 0.86403, 0.71126],\n\t[0.86403, 0.71126, 0.83816, 0.71735, 0.82066, 0.74038, 0.82263, 0.76579],\n\t[0.82263, 0.76579, 0.82499, 0.79667, 0.82736, 0.82756, 0.82972, 0.85844],\n\t[0.82972, 0.85844, 0.83266, 0.8971, 0.79213, 0.92526, 0.7546, 0.91063],\n\t[0.7546, 0.91063, 0.72462, 0.89893, 0.69464, 0.88724, 0.66466, 0.87554],\n\t[0.66466, 0.87554, 0.64, 0.86591, 0.61166, 0.87473, 0.59763, 0.89638],\n\t[0.59763, 0.89638, 0.58055, 0.92269, 0.56348, 0.94901, 0.54641, 0.97532],\n\t[0.54641, 0.97532, 0.52506, 1.00823, 0.47494, 1.00823, 0.45359, 0.97532],\n\t[0.45359, 0.97532, 0.43652, 0.94901, 0.41945, 0.92269, 0.40237, 0.89638],\n\t[0.40237, 0.89638, 0.38834, 0.87473, 0.36, 0.86591, 0.33534, 0.87554],\n\t[0.33534, 0.87554, 0.30536, 0.88724, 0.27538, 0.89893, 0.2454, 0.91063],\n\t[0.2454, 0.91063, 0.20787, 0.92526, 0.16734, 0.8971, 0.17028, 0.85844],\n\t[0.17028, 0.85844, 0.17264, 0.82756, 0.17501, 0.79667, 0.17737, 0.76579],\n\t[0.17737, 0.76579, 0.17934, 0.74038, 0.16184, 0.71735, 0.13597, 0.71126],\n\t[0.13597, 0.71126, 0.10452, 0.70387, 0.07307, 0.69648, 0.04162, 0.6891],\n\t[0.04162, 0.6891, 0.00228, 0.67985, -0.01322, 0.63429, 0.01293, 0.60466],\n\t[0.01293, 0.60466, 0.03383, 0.58102, 0.05473, 0.55737, 0.07562, 0.53372],\n\t[0.07562, 0.53372, 0.09281, 0.51425, 0.09281, 0.48575, 0.07562, 0.46629],\n\t[0.07562, 0.46629, 0.05473, 0.44264, 0.03383, 0.41899, 0.01293, 0.39535],\n\t[0.01293, 0.39535, -0.01322, 0.36572, 0.00228, 0.32016, 0.04162, 0.31091],\n\t[0.04162, 0.31091, 0.07307, 0.30352, 0.10452, 0.29614, 0.13597, 0.28875],\n\t[0.13597, 0.28875, 0.16184, 0.28266, 0.17934, 0.25963, 0.17737, 0.23422],\n\t[0.17737, 0.23422, 0.17501, 0.20334, 0.17264, 0.17245, 0.17028, 0.14156],\n\t[0.17028, 0.14156, 0.16734, 0.10291, 0.20787, 0.07475, 0.2454, 0.08939],\n\t[0.2454, 0.08939, 0.27538, 0.10108, 0.30536, 0.11278, 0.33534, 0.12447],\n\t[0.33534, 0.12447, 0.36, 0.1341, 0.38834, 0.12529, 0.40237, 0.10364],\n\t[0.40237, 0.10364, 0.41945, 0.07733, 0.43652, 0.05101, 0.45359, 0.0247],\n]);\n\nconst squareShape = createShape([\n\t[1, 0.5375, 1, 0.67725, 1, 0.74712, 0.97806, 0.80253],\n\t[0.97806, 0.80253, 0.94628, 0.88278, 0.88278, 0.94628, 0.80253, 0.97806],\n\t[0.80253, 0.97806, 0.74713, 1, 0.67725, 1, 0.5375, 1],\n\t[0.5375, 1, 0.5125, 1, 0.4875, 1, 0.4625, 1],\n\t[0.4625, 1, 0.32275, 1, 0.25288, 1, 0.19747, 0.97806],\n\t[0.19747, 0.97806, 0.11722, 0.94628, 0.05372, 0.88278, 0.02194, 0.80253],\n\t[0.02194, 0.80253, 0, 0.74713, 0, 0.67725, 0, 0.5375],\n\t[0, 0.5375, 0, 0.5125, 0, 0.4875, 0, 0.4625],\n\t[0, 0.4625, 0, 0.32275, 0, 0.25288, 0.02194, 0.19747],\n\t[0.02194, 0.19747, 0.0537, 0.11723, 0.11723, 0.05371, 0.19747, 0.02194],\n\t[0.19747, 0.02194, 0.25288, 0, 0.32275, 0, 0.4625, 0],\n\t[0.4625, 0, 0.4875, 0, 0.5125, 0, 0.5375, 0],\n\t[0.5375, 0, 0.67725, 0, 0.74712, 0, 0.80253, 0.02194],\n\t[0.80253, 0.02194, 0.88277, 0.05371, 0.9463, 0.11723, 0.97806, 0.19747],\n\t[0.97806, 0.19747, 1, 0.25288, 1, 0.32275, 1, 0.4625],\n\t[1, 0.4625, 1, 0.4875, 1, 0.5125, 1, 0.5375],\n]);\n\nconst sunnyShape = createShape([\n\t[0.77016, 0.1213, 0.80126, 0.12342, 0.81681, 0.12448, 0.82938, 0.12995],\n\t[0.82938, 0.12995, 0.84756, 0.13791, 0.86208, 0.15244, 0.87004, 0.17062],\n\t[0.87004, 0.17062, 0.87554, 0.18318, 0.8766, 0.19874, 0.87871, 0.22983],\n\t[0.87871, 0.22983, 0.88031, 0.25348, 0.88192, 0.27714, 0.88353, 0.3008],\n\t[0.88353, 0.3008, 0.88439, 0.31338, 0.88481, 0.31968, 0.88618, 0.32568],\n\t[0.88618, 0.32568, 0.88816, 0.33436, 0.89159, 0.34264, 0.89633, 0.35018],\n\t[0.89633, 0.35018, 0.89961, 0.35541, 0.90376, 0.36015, 0.91204, 0.36965],\n\t[0.91204, 0.36965, 0.92764, 0.38751, 0.94323, 0.40537, 0.95882, 0.42324],\n\t[0.95882, 0.42324, 0.97932, 0.44674, 0.98957, 0.45847, 0.99457, 0.47124],\n\t[0.99457, 0.47124, 1.0018, 0.48973, 1.0018, 0.51027, 0.99457, 0.52876],\n\t[0.99457, 0.52876, 0.98957, 0.54153, 0.97932, 0.55326, 0.95882, 0.57676],\n\t[0.95882, 0.57676, 0.94323, 0.59463, 0.92764, 0.61249, 0.91204, 0.63035],\n\t[0.91204, 0.63035, 0.90376, 0.63985, 0.89961, 0.64459, 0.89633, 0.64982],\n\t[0.89633, 0.64982, 0.89159, 0.65736, 0.88816, 0.66564, 0.88618, 0.67432],\n\t[0.88618, 0.67432, 0.88481, 0.68032, 0.88439, 0.68662, 0.88353, 0.6992],\n\t[0.88353, 0.6992, 0.88192, 0.72286, 0.88031, 0.74652, 0.87871, 0.77017],\n\t[0.87871, 0.77017, 0.8766, 0.80126, 0.87554, 0.81682, 0.87004, 0.82938],\n\t[0.87004, 0.82938, 0.86208, 0.84756, 0.84756, 0.86209, 0.82938, 0.87005],\n\t[0.82938, 0.87005, 0.81681, 0.87552, 0.80126, 0.87658, 0.77016, 0.8787],\n\t[0.77016, 0.8787, 0.7465, 0.88031, 0.72285, 0.88192, 0.69919, 0.88352],\n\t[0.69919, 0.88352, 0.68661, 0.88438, 0.68032, 0.88482, 0.67431, 0.88617],\n\t[0.67431, 0.88617, 0.66563, 0.88815, 0.65735, 0.89158, 0.64981, 0.89632],\n\t[0.64981, 0.89632, 0.6446, 0.89961, 0.63985, 0.90376, 0.63035, 0.91205],\n\t[0.63035, 0.91205, 0.61248, 0.92764, 0.59462, 0.94323, 0.57675, 0.95882],\n\t[0.57675, 0.95882, 0.55327, 0.97932, 0.54153, 0.98955, 0.52875, 0.99455],\n\t[0.52875, 0.99455, 0.51027, 1.00182, 0.48973, 1.00182, 0.47125, 0.99455],\n\t[0.47125, 0.99455, 0.45847, 0.98955, 0.44673, 0.97932, 0.42325, 0.95882],\n\t[0.42325, 0.95882, 0.40538, 0.94323, 0.38752, 0.92764, 0.36965, 0.91205],\n\t[0.36965, 0.91205, 0.36015, 0.90376, 0.3554, 0.89961, 0.35019, 0.89632],\n\t[0.35019, 0.89632, 0.34265, 0.89158, 0.33437, 0.88815, 0.32569, 0.88617],\n\t[0.32569, 0.88617, 0.31968, 0.88482, 0.31339, 0.88438, 0.30081, 0.88352],\n\t[0.30081, 0.88352, 0.27715, 0.88192, 0.2535, 0.88031, 0.22984, 0.8787],\n\t[0.22984, 0.8787, 0.19874, 0.87658, 0.18319, 0.87552, 0.17062, 0.87005],\n\t[0.17062, 0.87005, 0.15244, 0.86209, 0.13792, 0.84756, 0.12996, 0.82938],\n\t[0.12996, 0.82938, 0.12446, 0.81682, 0.1234, 0.80126, 0.12129, 0.77017],\n\t[0.12129, 0.77017, 0.11968, 0.74652, 0.11807, 0.72286, 0.11647, 0.6992],\n\t[0.11647, 0.6992, 0.11561, 0.68662, 0.11519, 0.68032, 0.11382, 0.67432],\n\t[0.11382, 0.67432, 0.11185, 0.66564, 0.10841, 0.65736, 0.10367, 0.64982],\n\t[0.10367, 0.64982, 0.10039, 0.64459, 0.09624, 0.63985, 0.08796, 0.63035],\n\t[0.08796, 0.63035, 0.07236, 0.61249, 0.05677, 0.59463, 0.04118, 0.57676],\n\t[0.04118, 0.57676, 0.02068, 0.55326, 0.01043, 0.54153, 0.00543, 0.52876],\n\t[0.00543, 0.52876, -0.0018, 0.51027, -0.0018, 0.48973, 0.00543, 0.47124],\n\t[0.00543, 0.47124, 0.01043, 0.45847, 0.02068, 0.44674, 0.04118, 0.42324],\n\t[0.04118, 0.42324, 0.05677, 0.40537, 0.07236, 0.38751, 0.08796, 0.36965],\n\t[0.08796, 0.36965, 0.09624, 0.36015, 0.10039, 0.35541, 0.10367, 0.35018],\n\t[0.10367, 0.35018, 0.10841, 0.34264, 0.11184, 0.33436, 0.11382, 0.32568],\n\t[0.11382, 0.32568, 0.11519, 0.31968, 0.11561, 0.31338, 0.11647, 0.3008],\n\t[0.11647, 0.3008, 0.11808, 0.27714, 0.11969, 0.25348, 0.12129, 0.22983],\n\t[0.12129, 0.22983, 0.1234, 0.19874, 0.12446, 0.18318, 0.12996, 0.17062],\n\t[0.12996, 0.17062, 0.13792, 0.15244, 0.15244, 0.13791, 0.17062, 0.12995],\n\t[0.17062, 0.12995, 0.18319, 0.12448, 0.19874, 0.12342, 0.22984, 0.1213],\n\t[0.22984, 0.1213, 0.2535, 0.11969, 0.27716, 0.11808, 0.30081, 0.11648],\n\t[0.30081, 0.11648, 0.31339, 0.11562, 0.31968, 0.11518, 0.32569, 0.11383],\n\t[0.32569, 0.11383, 0.33437, 0.11185, 0.34266, 0.10842, 0.35019, 0.10368],\n\t[0.35019, 0.10368, 0.3554, 0.10039, 0.36015, 0.09624, 0.36965, 0.08795],\n\t[0.36965, 0.08795, 0.38752, 0.07236, 0.40538, 0.05677, 0.42325, 0.04118],\n\t[0.42325, 0.04118, 0.44673, 0.02068, 0.45847, 0.01045, 0.47125, 0.00545],\n\t[0.47125, 0.00545, 0.48973, -0.00182, 0.51027, -0.00182, 0.52875, 0.00545],\n\t[0.52875, 0.00545, 0.54153, 0.01045, 0.55327, 0.02068, 0.57675, 0.04118],\n\t[0.57675, 0.04118, 0.59462, 0.05677, 0.61248, 0.07236, 0.63035, 0.08795],\n\t[0.63035, 0.08795, 0.63985, 0.09624, 0.6446, 0.10039, 0.64981, 0.10368],\n\t[0.64981, 0.10368, 0.65735, 0.10842, 0.66563, 0.11185, 0.67431, 0.11383],\n\t[0.67431, 0.11383, 0.68032, 0.11518, 0.68661, 0.11562, 0.69919, 0.11648],\n\t[0.69919, 0.11648, 0.72285, 0.11808, 0.7465, 0.11969, 0.77016, 0.1213],\n]);\n\nconst triangleShape = createShape([\n\t[0.33058, 0.2095, 0.37847, 0.12601, 0.40242, 0.08427, 0.43146, 0.06665],\n\t[0.43146, 0.06665, 0.47358, 0.04108, 0.52643, 0.04108, 0.56854, 0.06665],\n\t[0.56854, 0.06665, 0.59758, 0.08427, 0.62153, 0.12601, 0.66943, 0.2095],\n\t[0.66943, 0.2095, 0.75568, 0.35983, 0.84194, 0.51017, 0.92819, 0.66051],\n\t[0.92819, 0.66051, 0.97563, 0.7432, 0.99935, 0.78452, 0.99998, 0.81829],\n\t[0.99998, 0.81829, 1.00088, 0.86728, 0.97451, 0.91273, 0.93153, 0.93626],\n\t[0.93153, 0.93626, 0.90188, 0.95253, 0.85417, 0.95253, 0.75877, 0.95253],\n\t[0.75877, 0.95253, 0.58626, 0.95253, 0.41375, 0.95253, 0.24124, 0.95253],\n\t[0.24124, 0.95253, 0.14583, 0.95253, 0.09812, 0.95253, 0.06847, 0.93626],\n\t[0.06847, 0.93626, 0.02548, 0.91274, -0.00089, 0.86729, 0.00002, 0.81829],\n\t[0.00002, 0.81829, 0.00065, 0.78452, 0.02437, 0.7432, 0.07181, 0.66051],\n\t[0.07181, 0.66051, 0.15807, 0.51017, 0.24432, 0.35983, 0.33058, 0.2095],\n]);\n\nconst verySunnyShape = createShape([\n\t[0.42725, 0.04123, 0.46018, -0.01374, 0.53981, -0.01374, 0.57275, 0.04123],\n\t[0.57275, 0.04123, 0.58508, 0.06182, 0.59741, 0.08241, 0.60974, 0.10301],\n\t[0.60974, 0.10301, 0.62896, 0.13504, 0.66687, 0.15076, 0.70309, 0.14166],\n\t[0.70309, 0.14166, 0.72638, 0.13583, 0.74967, 0.13, 0.77296, 0.12416],\n\t[0.77296, 0.12416, 0.83512, 0.1086, 0.8914, 0.16488, 0.87583, 0.22704],\n\t[0.87583, 0.22704, 0.87, 0.25033, 0.86417, 0.27362, 0.85833, 0.29691],\n\t[0.85833, 0.29691, 0.84924, 0.33313, 0.86496, 0.37103, 0.89699, 0.39025],\n\t[0.89699, 0.39025, 0.91758, 0.40258, 0.93818, 0.41492, 0.95877, 0.42725],\n\t[0.95877, 0.42725, 1.01374, 0.46019, 1.01374, 0.53981, 0.95877, 0.57275],\n\t[0.95877, 0.57275, 0.93818, 0.58508, 0.91758, 0.59742, 0.89699, 0.60975],\n\t[0.89699, 0.60975, 0.86496, 0.62897, 0.84924, 0.66687, 0.85833, 0.70309],\n\t[0.85833, 0.70309, 0.86417, 0.72638, 0.87, 0.74967, 0.87583, 0.77296],\n\t[0.87583, 0.77296, 0.8914, 0.83512, 0.83512, 0.8914, 0.77296, 0.87584],\n\t[0.77296, 0.87584, 0.74967, 0.87, 0.72638, 0.86417, 0.70309, 0.85834],\n\t[0.70309, 0.85834, 0.66687, 0.84924, 0.62896, 0.86496, 0.60974, 0.89699],\n\t[0.60974, 0.89699, 0.59741, 0.91759, 0.58508, 0.93818, 0.57275, 0.95877],\n\t[0.57275, 0.95877, 0.53981, 1.01374, 0.46018, 1.01374, 0.42725, 0.95877],\n\t[0.42725, 0.95877, 0.41491, 0.93818, 0.40258, 0.91759, 0.39025, 0.89699],\n\t[0.39025, 0.89699, 0.37103, 0.86496, 0.33312, 0.84924, 0.29691, 0.85834],\n\t[0.29691, 0.85834, 0.27361, 0.86417, 0.25031, 0.87, 0.22702, 0.87584],\n\t[0.22702, 0.87584, 0.16489, 0.8914, 0.10859, 0.83512, 0.12416, 0.77296],\n\t[0.12416, 0.77296, 0.12999, 0.74967, 0.13583, 0.72638, 0.14167, 0.70309],\n\t[0.14167, 0.70309, 0.15075, 0.66687, 0.13505, 0.62897, 0.103, 0.60975],\n\t[0.103, 0.60975, 0.08241, 0.59742, 0.06181, 0.58508, 0.04121, 0.57275],\n\t[0.04121, 0.57275, -0.01373, 0.53981, -0.01373, 0.46019, 0.04121, 0.42725],\n\t[0.04121, 0.42725, 0.06181, 0.41492, 0.08241, 0.40258, 0.103, 0.39025],\n\t[0.103, 0.39025, 0.13505, 0.37103, 0.15075, 0.33313, 0.14167, 0.29691],\n\t[0.14167, 0.29691, 0.13583, 0.27362, 0.12999, 0.25033, 0.12416, 0.22704],\n\t[0.12416, 0.22704, 0.10859, 0.16488, 0.16489, 0.1086, 0.22702, 0.12416],\n\t[0.22702, 0.12416, 0.25031, 0.13, 0.27361, 0.13583, 0.29691, 0.14166],\n\t[0.29691, 0.14166, 0.33312, 0.15076, 0.37103, 0.13504, 0.39025, 0.10301],\n\t[0.39025, 0.10301, 0.40258, 0.08241, 0.41491, 0.06182, 0.42725, 0.04123],\n]);\n\nfunction reversePolygon(polygon: RoundedPolygon): RoundedPolygon {\n\tconst reversedFeatures: Feature[] = polygon.features\n\t\t.map((f) => {\n\t\t\tconst reversedCubics = f.cubics.map((c) => c.reverse()).reverse();\n\t\t\tif (f.type === \"corner\") {\n\t\t\t\treturn cornerFeature(reversedCubics, f.convex);\n\t\t\t} else {\n\t\t\t\treturn edgeFeature(reversedCubics);\n\t\t\t}\n\t\t})\n\t\t.reverse();\n\treturn RoundedPolygon.fromFeatures(\n\t\treversedFeatures,\n\t\tpolygon.centerX,\n\t\tpolygon.centerY,\n\t);\n}\n\nfunction rotate180(polygon: RoundedPolygon): RoundedPolygon {\n\treturn polygon.transformed((x, y) => [1 - x, 1 - y]);\n}\n\nfunction flipV(polygon: RoundedPolygon): RoundedPolygon {\n\tconst flipped = polygon.transformed((x, y) => [x, 1 - y]);\n\treturn reversePolygon(flipped);\n}\n\nfunction _flipH(polygon: RoundedPolygon): RoundedPolygon {\n\tconst flipped = polygon.transformed((x, y) => [1 - x, y]);\n\treturn reversePolygon(flipped);\n}\n\n// ─── MD3Shapes Catalog ────────────────────────────────────────────────────────\n\nexport const MD3Shapes = {\n\tarch: flipV(archShape),\n\tarrow: flipV(arrowShape),\n\tboom: boomShape,\n\tbun: bunShape,\n\tburst: burstShape,\n\tcircle: circleShape,\n\tclamshell: clamshellShape,\n\tdiamond: diamondShape,\n\tfan: rotate180(fanShape),\n\tflower: flowerShape,\n\tgem: flipV(gemShape),\n\tghostish: flipV(ghostishShape),\n\theart: flipV(heartShape),\n\tclover4Leaf: clover4LeafShape,\n\tclover8Leaf: clover8LeafShape,\n\toval: flipV(ovalShape),\n\tpentagon: flipV(pentagonShape),\n\tpill: flipV(pillShape),\n\tpixelCircle: pixelCircleShape,\n\tpixelTriangle: pixelTriangleShape,\n\tpuffyDiamond: puffyDiamondShape,\n\tpuffy: puffyShape,\n\tsemiCircle: flipV(semiCircleShape),\n\tcookie12Sided: cookie12SidedShape,\n\tcookie4Sided: cookie4SidedShape,\n\tcookie6Sided: cookie6SidedShape,\n\tcookie7Sided: cookie7SidedShape,\n\tcookie9Sided: cookie9SidedShape,\n\tslanted: flipV(slantedShape),\n\tsoftBoom: softBoomShape,\n\tsoftBurst: softBurstShape,\n\tsquare: squareShape,\n\tsunny: sunnyShape,\n\ttriangle: flipV(triangleShape),\n\tverySunny: verySunnyShape,\n} as const;\n\nexport type MD3ShapeName = keyof typeof MD3Shapes;\n\n/**\n * Resolves a ShapeRef (either a named MD3 shape or a RoundedPolygon instance) to a RoundedPolygon.\n * @param ref - The shape name or RoundedPolygon instance\n * @returns The resolved RoundedPolygon\n */\nexport function resolveShape(\n\tref: MD3ShapeName | RoundedPolygon,\n): RoundedPolygon {\n\tif (ref instanceof RoundedPolygon) return ref;\n\tconst shape = MD3Shapes[ref];\n\tif (!shape) throw new Error(`Unknown shape: \"${ref}\"`);\n\treturn shape;\n}\n","/**\n * MD3 Corner Radius Token Scale.\n * Ported from MD3 spec: https://m3.material.io/styles/shape/corner-radius-scale\n *\n * The Material 3 shape system uses a 10-step size-based scale.\n * All values are in density-independent pixels (dp).\n *\n * @example\n * import { MD3CornerRadius } from \"@bug-on/m3-expressive\";\n *\n * // Use a token name\n * const rounding = { radius: MD3CornerRadius.large, smoothing: 0 };\n *\n * // Use with ShapeMedia\n * <ShapeMedia shape=\"pill\" cornerRadius=\"extraLarge\" ... />\n */\nexport const MD3CornerRadius = {\n\t/** 0dp — Sharp corners */\n\tnone: 0,\n\t/** 4dp */\n\textraSmall: 4,\n\t/** 8dp */\n\tsmall: 8,\n\t/** 12dp */\n\tmedium: 12,\n\t/** 16dp */\n\tlarge: 16,\n\t/** 20dp (new in M3 Expressive) */\n\tlargeIncreased: 20,\n\t/** 28dp */\n\textraLarge: 28,\n\t/** 32dp (new in M3 Expressive) */\n\textraLargeIncreased: 32,\n\t/** 48dp (new in M3 Expressive) */\n\textraExtraLarge: 48,\n\t/** 9999dp — Fully rounded (pill/circle) */\n\tfull: 9999,\n} as const;\n\n/** Token name for MD3 corner radius scale. */\nexport type MD3CornerRadiusToken = keyof typeof MD3CornerRadius;\n","/**\n * Shape factory functions for the MD3 Expressive Shape Engine.\n * Ported from androidx.graphics.shapes.Shapes.kt\n *\n * These functions create basic geometric shapes as RoundedPolygon instances.\n * All shapes default to being centered at (0,0) with radius 1.\n */\n\nimport { RoundedPolygon } from \"../core/rounded-polygon\";\nimport {\n\ttype CornerRounding,\n\tcornerRounding,\n\tUNROUNDED,\n} from \"../math/corner-rounding\";\nimport { distance, FLOAT_PI, radialToCartesian } from \"../utils/utils\";\n\n/**\n * Creates a circular shape approximated by a rounded polygon.\n *\n * @param numVertices - Number of polygon vertices (≥ 3, default: 8)\n * @param radius - Circle radius (default: 1)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n * @returns A RoundedPolygon approximating a circle\n *\n * @example\n * const myCircle = circle(8, 100, 0, 0);\n */\nexport function circle(\n\tnumVertices = 8,\n\tradius = 1,\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (numVertices < 3) throw new Error(\"Circle must have at least 3 vertices\");\n\t// The polygon radius must be larger so that after rounding, the result matches desired radius\n\tconst theta = FLOAT_PI / numVertices;\n\tconst polygonRadius = radius / Math.cos(theta);\n\treturn RoundedPolygon.fromNumVertices(\n\t\tnumVertices,\n\t\tpolygonRadius,\n\t\tcenterX,\n\t\tcenterY,\n\t\tcornerRounding(radius),\n\t);\n}\n\n/**\n * Creates a rectangular shape with optional rounding.\n *\n * @param width - Rectangle width (default: 2)\n * @param height - Rectangle height (default: 2)\n * @param rounding - Corner rounding for all corners (default: none)\n * @param perVertexRounding - Per-corner rounding overrides (length must be 4)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n *\n * @example\n * // Rounded rectangle\n * const roundedRect = rectangle(2, 1, { radius: 0.25, smoothing: 0 });\n */\nexport function rectangle(\n\twidth = 2,\n\theight = 2,\n\trounding: CornerRounding = UNROUNDED,\n\tperVertexRounding?: CornerRounding[],\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tconst left = centerX - width / 2;\n\tconst top = centerY - height / 2;\n\tconst right = centerX + width / 2;\n\tconst bottom = centerY + height / 2;\n\t// Vertices in clockwise order: bottom-right, bottom-left, top-left, top-right\n\treturn RoundedPolygon.fromVertices(\n\t\t[right, bottom, left, bottom, left, top, right, top],\n\t\trounding,\n\t\tperVertexRounding,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n/**\n * Creates a star-shaped polygon with inner and outer radii.\n *\n * If innerRadius equals radius, the result is a regular polygon with\n * 2 × numVerticesPerRadius vertices.\n *\n * @param numVerticesPerRadius - Vertices per radius (outer + inner)\n * @param radius - Outer radius (default: 1)\n * @param innerRadius - Inner radius (default: 0.5)\n * @param rounding - Corner rounding for outer vertices (default: none)\n * @param innerRounding - Corner rounding for inner vertices (default: uses rounding)\n * @param perVertexRounding - Full per-vertex rounding list\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n *\n * @example\n * // 8-pointed star\n * const star8 = star(8, 1, 0.4);\n *\n * @example\n * // Rounded sunny shape\n * const sunny = star(8, 1, 0.75, { radius: 0.15, smoothing: 0 }, { radius: 0.05, smoothing: 0 });\n */\nexport function star(\n\tnumVerticesPerRadius: number,\n\tradius = 1,\n\tinnerRadius = 0.5,\n\trounding: CornerRounding = UNROUNDED,\n\tinnerRounding?: CornerRounding,\n\tperVertexRounding?: CornerRounding[],\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (radius <= 0 || innerRadius <= 0)\n\t\tthrow new Error(\"Star radii must be greater than 0\");\n\tif (innerRadius >= radius)\n\t\tthrow new Error(\"innerRadius must be less than radius\");\n\n\tlet pvRounding = perVertexRounding;\n\tif (!pvRounding && innerRounding) {\n\t\tconst resolvedInnerRounding = innerRounding;\n\t\tpvRounding = Array.from({ length: numVerticesPerRadius }, (_, i) =>\n\t\t\ti % 2 === 0 ? rounding : resolvedInnerRounding,\n\t\t);\n\t\t// Flatten: alternating outer/inner for 2*n vertices\n\t\tpvRounding = [];\n\t\tfor (let i = 0; i < numVerticesPerRadius; i++) {\n\t\t\tpvRounding.push(rounding, resolvedInnerRounding);\n\t\t}\n\t}\n\n\tconst vertices = starVertices(\n\t\tnumVerticesPerRadius,\n\t\tradius,\n\t\tinnerRadius,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n\treturn RoundedPolygon.fromVertices(\n\t\tvertices,\n\t\trounding,\n\t\tpvRounding,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n/**\n * Creates a pill shape: rectangle with fully-rounded short ends.\n *\n * @param width - Width of the pill (default: 2)\n * @param height - Height of the pill (default: 1)\n * @param smoothing - Corner smoothing factor [0,1] (default: 0)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n *\n * @example\n * const pillShape = pill(3, 1);\n */\nexport function pill(\n\twidth = 2,\n\theight = 1,\n\tsmoothing = 0,\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (width <= 0 || height <= 0)\n\t\tthrow new Error(\"Pill must have positive width and height\");\n\tconst wHalf = width / 2;\n\tconst hHalf = height / 2;\n\tconst r = Math.min(wHalf, hHalf);\n\treturn RoundedPolygon.fromVertices(\n\t\t[\n\t\t\twHalf + centerX,\n\t\t\thHalf + centerY,\n\t\t\t-wHalf + centerX,\n\t\t\thHalf + centerY,\n\t\t\t-wHalf + centerX,\n\t\t\t-hHalf + centerY,\n\t\t\twHalf + centerX,\n\t\t\t-hHalf + centerY,\n\t\t],\n\t\tcornerRounding(r, smoothing),\n\t\tundefined,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n/**\n * Creates a pill-star shape: like a pill but with star-like inner/outer vertices.\n *\n * @param width - Width (default: 2)\n * @param height - Height (default: 1)\n * @param numVerticesPerRadius - Number of point pairs per radius\n * @param innerRadiusRatio - Inner radius as fraction of outer (default: 0.5)\n * @param rounding - Outer vertex rounding (default: none)\n * @param innerRounding - Inner vertex rounding (default: uses rounding)\n * @param perVertexRounding - Full per-vertex rounding list\n * @param vertexSpacing - Spacing factor [0,1] (default: 0.5)\n * @param centerX - Center X (default: 0)\n * @param centerY - Center Y (default: 0)\n */\nexport function pillStar(\n\twidth = 2,\n\theight = 1,\n\tnumVerticesPerRadius = 8,\n\tinnerRadiusRatio = 0.5,\n\trounding: CornerRounding = UNROUNDED,\n\tinnerRounding?: CornerRounding,\n\tperVertexRounding?: CornerRounding[],\n\tvertexSpacing = 0.5,\n\tcenterX = 0,\n\tcenterY = 0,\n): RoundedPolygon {\n\tif (innerRadiusRatio <= 0 || innerRadiusRatio >= 1) {\n\t\tthrow new Error(\"innerRadiusRatio must be between 0 and 1 (exclusive)\");\n\t}\n\n\t// Generate pill-star vertices by arranging inner/outer points on a pill outline\n\tconst vertices = pillStarVertices(\n\t\twidth,\n\t\theight,\n\t\tnumVerticesPerRadius,\n\t\tinnerRadiusRatio,\n\t\tvertexSpacing,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n\n\tlet pvRounding = perVertexRounding;\n\tif (!pvRounding && innerRounding) {\n\t\tconst resolvedInnerRounding = innerRounding;\n\t\tpvRounding = [];\n\t\tfor (let i = 0; i < numVerticesPerRadius * 2; i++) {\n\t\t\tpvRounding.push(i % 2 === 0 ? rounding : resolvedInnerRounding);\n\t\t}\n\t}\n\n\treturn RoundedPolygon.fromVertices(\n\t\tvertices,\n\t\trounding,\n\t\tpvRounding,\n\t\tcenterX,\n\t\tcenterY,\n\t);\n}\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction starVertices(\n\tnumVerticesPerRadius: number,\n\tradius: number,\n\tinnerRadius: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst result: number[] = [];\n\tconst total = numVerticesPerRadius * 2;\n\tfor (let i = 0; i < total; i++) {\n\t\tconst r = i % 2 === 0 ? radius : innerRadius;\n\t\tconst angle = (FLOAT_PI / numVerticesPerRadius) * i;\n\t\tconst [rx, ry] = radialToCartesian(r, angle);\n\t\tresult.push(cx + rx, cy + ry);\n\t}\n\treturn result;\n}\n\nfunction pillStarVertices(\n\twidth: number,\n\theight: number,\n\tnumVerticesPerRadius: number,\n\tinnerRadiusRatio: number,\n\tvertexSpacing: number,\n\tcx: number,\n\tcy: number,\n): number[] {\n\tconst wHalf = width / 2;\n\tconst hHalf = height / 2;\n\tconst r = Math.min(wHalf, hHalf);\n\tconst result: number[] = [];\n\tconst total = numVerticesPerRadius * 2;\n\n\tfor (let i = 0; i < total; i++) {\n\t\tconst angle = (FLOAT_PI / numVerticesPerRadius) * i;\n\t\tconst isOuter = i % 2 === 0;\n\t\tconst _radiusScale = isOuter ? 1 : innerRadiusRatio;\n\n\t\t// Project angle onto pill outline\n\t\tconst cos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle);\n\t\tconst baseR = isOuter ? r : r * innerRadiusRatio;\n\n\t\t// Interpolate between circle and rectangle based on aspect ratio\n\t\tconst rx = cos * wHalf;\n\t\tconst ry = sin * hHalf;\n\t\tconst pillR = distance(rx, ry);\n\t\tconst finalR = baseR * vertexSpacing + pillR * (1 - vertexSpacing);\n\n\t\tresult.push(cx + cos * finalR, cy + sin * finalR);\n\t}\n\treturn result;\n}\n","/**\n * Bidirectional float mapping utilities for the Morph engine.\n * Ported from androidx.graphics.shapes.FloatMapping.kt\n *\n * Used to map outline progress values between two shapes that have\n * different feature distributions.\n */\n\nimport { interpolate, positiveModulo } from \"../utils/utils\";\n\n/**\n * A segment in a piecewise-linear mapping.\n * Maps [fromStart, fromEnd] → [toStart, toEnd].\n */\nexport interface Segment {\n\treadonly fromStart: number;\n\treadonly fromEnd: number;\n\treadonly toStart: number;\n\treadonly toEnd: number;\n}\n\n/**\n * Maps a value from the \"from\" domain to the \"to\" domain using a segment list.\n * @param value - Input value in the from domain\n * @param segments - Sorted segment list\n * @returns Mapped value in the to domain\n */\nexport function mapSegments(value: number, segments: Segment[]): number {\n\tfor (const seg of segments) {\n\t\tif (value <= seg.fromEnd) {\n\t\t\tif (seg.fromEnd === seg.fromStart) return seg.toStart;\n\t\t\tconst t = (value - seg.fromStart) / (seg.fromEnd - seg.fromStart);\n\t\t\treturn interpolate(seg.toStart, seg.toEnd, t);\n\t\t}\n\t}\n\t// Past the end — use last segment\n\tconst last = segments[segments.length - 1];\n\treturn last.toEnd;\n}\n\n/**\n * DoubleMapper: bidirectional mapper used in the Morph matching algorithm.\n * Maps progress values from polygon1 space → polygon2 space and vice versa.\n */\nexport interface DoubleMapper {\n\t/** Maps a progress value from the start polygon to the end polygon. */\n\tmap(progress: number): number;\n\t/** Maps a progress value from the end polygon back to the start polygon. */\n\tmapBack(progress: number): number;\n}\n\n/**\n * Creates a DoubleMapper from two parallel arrays of mapped progress values.\n * Used internally by featureMapper.\n *\n * @param fromValues - Progress values in polygon1 space [0..1]\n * @param toValues - Corresponding progress values in polygon2 space [0..1]\n */\nexport function createDoubleMapper(\n\tfromValues: number[],\n\ttoValues: number[],\n): DoubleMapper {\n\tif (fromValues.length !== toValues.length || fromValues.length === 0) {\n\t\t// Identity mapper for degenerate cases\n\t\treturn { map: (v) => v, mapBack: (v) => v };\n\t}\n\n\tconst n = fromValues.length;\n\n\t// Build forward segments: from1 → to2\n\tconst forwardSegs: Segment[] = [];\n\tfor (let i = 0; i < n; i++) {\n\t\tconst next = (i + 1) % n;\n\t\tconst fromStart = fromValues[i];\n\t\tlet fromEnd = fromValues[next];\n\t\tconst toStart = toValues[i];\n\t\tlet toEnd = toValues[next];\n\t\t// Handle wrap-around\n\t\tif (fromEnd < fromStart) fromEnd += 1;\n\t\tif (toEnd < toStart) toEnd += 1;\n\t\tforwardSegs.push({ fromStart, fromEnd, toStart, toEnd });\n\t}\n\n\t// Build reverse segments: to2 → from1\n\tconst reverseSegs: Segment[] = [];\n\tfor (const seg of forwardSegs) {\n\t\treverseSegs.push({\n\t\t\tfromStart: seg.toStart,\n\t\t\tfromEnd: seg.toEnd,\n\t\t\ttoStart: seg.fromStart,\n\t\t\ttoEnd: seg.fromEnd,\n\t\t});\n\t}\n\treverseSegs.sort((a, b) => a.fromStart - b.fromStart);\n\n\treturn {\n\t\tmap: (v) =>\n\t\t\tpositiveModulo(mapSegments(positiveModulo(v, 1), forwardSegs), 1),\n\t\tmapBack: (v) =>\n\t\t\tpositiveModulo(mapSegments(positiveModulo(v, 1), reverseSegs), 1),\n\t};\n}\n","/**\n * Feature mapping for the Morph engine.\n * Ported from androidx.graphics.shapes.FeatureMapping.kt\n *\n * Maps corners between two polygons by proximity, enabling the Morph engine\n * to create smooth transitions between shapes with different vertex counts.\n */\n\nimport { createDoubleMapper, type DoubleMapper } from \"./float-mapping\";\nimport type { MeasuredFeature } from \"./polygon-measure\";\n\n/**\n * Creates a DoubleMapper that maps progress values between two polygons\n * based on matching their convex corners by proximity.\n *\n * The algorithm:\n * 1. Extract convex corner progress values from both polygons\n * 2. Match each corner in polygon1 to the closest corner of the same type in polygon2\n * 3. Build a piecewise-linear bidirectional mapper\n *\n * @param features1 - Measured features from polygon 1\n * @param features2 - Measured features from polygon 2\n * @returns A DoubleMapper for bidirectional progress mapping\n */\nexport function featureMapper(\n\tfeatures1: MeasuredFeature[],\n\tfeatures2: MeasuredFeature[],\n): DoubleMapper {\n\tconst convex1 = features1.filter((f) => f.convex);\n\tconst convex2 = features2.filter((f) => f.convex);\n\n\tif (convex1.length === 0 || convex2.length === 0) {\n\t\t// No convex corners to match — use identity mapping\n\t\treturn createDoubleMapper([], []);\n\t}\n\n\t// Map each convex corner in polygon1 to the closest in polygon2\n\tconst fromValues: number[] = [];\n\tconst toValues: number[] = [];\n\n\tfor (const f1 of convex1) {\n\t\tlet bestDist = Number.MAX_VALUE;\n\t\tlet bestProgress = 0;\n\t\tfor (const f2 of convex2) {\n\t\t\tconst diff = Math.abs(f1.progress - f2.progress);\n\t\t\tconst dist = Math.min(diff, 1 - diff); // circular distance\n\t\t\tif (dist < bestDist) {\n\t\t\t\tbestDist = dist;\n\t\t\t\tbestProgress = f2.progress;\n\t\t\t}\n\t\t}\n\t\tfromValues.push(f1.progress);\n\t\ttoValues.push(bestProgress);\n\t}\n\n\treturn createDoubleMapper(fromValues, toValues);\n}\n","/**\n * Polygon measurement utilities for the Morph engine.\n * Ported from androidx.graphics.shapes.PolygonMeasure.kt\n *\n * Measures the outline of a RoundedPolygon by arc length, normalizing\n * progress values to [0, 1]. Used by Morph to match curves between polygons.\n */\n\nimport type { RoundedPolygon } from \"../core/rounded-polygon\";\nimport type { Cubic } from \"../math/cubic\";\nimport { distance } from \"../utils/utils\";\n\n/** A Cubic with its start/end outline progress values normalized to [0, 1]. */\nexport interface MeasuredCubic {\n\treadonly cubic: Cubic;\n\treadonly startOutlineProgress: number;\n\treadonly endOutlineProgress: number;\n}\n\n/** Feature info extracted from a measured polygon (for featureMapper). */\nexport interface MeasuredFeature {\n\t/** Progress at the midpoint of this feature's central arc */\n\treadonly progress: number;\n\t/** Whether this corner is convex */\n\treadonly convex: boolean;\n}\n\n/**\n * A list of MeasuredCubics covering the full outline of a polygon.\n * Provides methods to cut and shift the polygon at a given progress point.\n */\nexport class MeasuredPolygon {\n\tprivate constructor(\n\t\treadonly measuredCubics: MeasuredCubic[],\n\t\treadonly features: MeasuredFeature[],\n\t) {}\n\n\tget size(): number {\n\t\treturn this.measuredCubics.length;\n\t}\n\n\tgetOrNull(index: number): MeasuredCubic | null {\n\t\treturn index >= 0 && index < this.measuredCubics.length\n\t\t\t? this.measuredCubics[index]\n\t\t\t: null;\n\t}\n\n\t/**\n\t * Cuts the polygon at cutPoint and rotates so that cutPoint becomes progress=0.\n\t * Returns a new MeasuredPolygon with adjusted progress values.\n\t * @param cutPoint - Progress value [0, 1] at which to cut\n\t */\n\tcutAndShift(cutPoint: number): MeasuredPolygon {\n\t\tif (cutPoint <= 0 || cutPoint >= 1) return this;\n\n\t\tconst result: MeasuredCubic[] = [];\n\n\t\t// Find which cubic contains the cut point\n\t\tlet cutCubicIdx = -1;\n\t\tfor (let i = 0; i < this.measuredCubics.length; i++) {\n\t\t\tif (this.measuredCubics[i].endOutlineProgress >= cutPoint) {\n\t\t\t\tcutCubicIdx = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (cutCubicIdx === -1) cutCubicIdx = this.measuredCubics.length - 1;\n\n\t\tconst cutCubic = this.measuredCubics[cutCubicIdx];\n\t\tconst segLen = cutCubic.endOutlineProgress - cutCubic.startOutlineProgress;\n\t\tconst t =\n\t\t\tsegLen > 0 ? (cutPoint - cutCubic.startOutlineProgress) / segLen : 0;\n\n\t\t// Split the cut cubic\n\t\tconst [left, right] = cutCubic.cubic.split(t);\n\n\t\t// Build shifted list starting from the right part of the cut cubic\n\t\tconst shift = (p: number) => {\n\t\t\tlet s = p - cutPoint;\n\t\t\tif (s < 0) s += 1;\n\t\t\treturn s;\n\t\t};\n\n\t\t// Right part of cut cubic\n\t\tif (!right.zeroLength()) {\n\t\t\tresult.push({\n\t\t\t\tcubic: right,\n\t\t\t\tstartOutlineProgress: 0,\n\t\t\t\tendOutlineProgress: shift(cutCubic.endOutlineProgress),\n\t\t\t});\n\t\t}\n\n\t\t// Remaining cubics after cut point (wrapping around)\n\t\tfor (let i = 1; i < this.measuredCubics.length; i++) {\n\t\t\tconst idx = (cutCubicIdx + i) % this.measuredCubics.length;\n\t\t\tconst mc = this.measuredCubics[idx];\n\t\t\tif (!mc.cubic.zeroLength()) {\n\t\t\t\tresult.push({\n\t\t\t\t\tcubic: mc.cubic,\n\t\t\t\t\tstartOutlineProgress: shift(mc.startOutlineProgress),\n\t\t\t\t\tendOutlineProgress: shift(mc.endOutlineProgress),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Left part of cut cubic\n\t\tif (!left.zeroLength()) {\n\t\t\tresult.push({\n\t\t\t\tcubic: left,\n\t\t\t\tstartOutlineProgress: shift(cutCubic.startOutlineProgress),\n\t\t\t\tendOutlineProgress: 1,\n\t\t\t});\n\t\t}\n\n\t\treturn new MeasuredPolygon(result, this.features);\n\t}\n\n\t/**\n\t * Cuts a MeasuredCubic at a given outline progress, returning [segment, rest].\n\t */\n\tcutAtProgress(\n\t\tmeasuredCubic: MeasuredCubic,\n\t\tprogress: number,\n\t): [MeasuredCubic, MeasuredCubic] {\n\t\tconst segLen =\n\t\t\tmeasuredCubic.endOutlineProgress - measuredCubic.startOutlineProgress;\n\t\tconst t =\n\t\t\tsegLen > 0 ? (progress - measuredCubic.startOutlineProgress) / segLen : 0;\n\t\tconst [left, right] = measuredCubic.cubic.split(\n\t\t\tMath.max(0, Math.min(1, t)),\n\t\t);\n\t\treturn [\n\t\t\t{\n\t\t\t\tcubic: left,\n\t\t\t\tstartOutlineProgress: measuredCubic.startOutlineProgress,\n\t\t\t\tendOutlineProgress: progress,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcubic: right,\n\t\t\t\tstartOutlineProgress: progress,\n\t\t\t\tendOutlineProgress: measuredCubic.endOutlineProgress,\n\t\t\t},\n\t\t];\n\t}\n\n\t/**\n\t * Measures a RoundedPolygon's outline by arc length.\n\t * Returns a MeasuredPolygon with normalized progress in [0, 1].\n\t */\n\tstatic measurePolygon(polygon: RoundedPolygon): MeasuredPolygon {\n\t\tconst cubics = polygon.cubics;\n\n\t\t// Calculate total arc length (approximate by chord lengths)\n\t\tlet totalLength = 0;\n\t\tconst lengths: number[] = cubics.map((c) => {\n\t\t\tconst len = approximateLength(c);\n\t\t\ttotalLength += len;\n\t\t\treturn len;\n\t\t});\n\n\t\tif (totalLength === 0) {\n\t\t\treturn new MeasuredPolygon(\n\t\t\t\tcubics.map((c) => ({\n\t\t\t\t\tcubic: c,\n\t\t\t\t\tstartOutlineProgress: 0,\n\t\t\t\t\tendOutlineProgress: 0,\n\t\t\t\t})),\n\t\t\t\t[],\n\t\t\t);\n\t\t}\n\n\t\t// Assign normalized progress values\n\t\tconst measured: MeasuredCubic[] = [];\n\t\tlet accumulated = 0;\n\t\tfor (let i = 0; i < cubics.length; i++) {\n\t\t\tconst startP = accumulated / totalLength;\n\t\t\taccumulated += lengths[i];\n\t\t\tconst endP = accumulated / totalLength;\n\t\t\tmeasured.push({\n\t\t\t\tcubic: cubics[i],\n\t\t\t\tstartOutlineProgress: startP,\n\t\t\t\tendOutlineProgress: endP,\n\t\t\t});\n\t\t}\n\n\t\t// Extract feature progress values (midpoint of each corner's central arc)\n\t\tconst featureList: MeasuredFeature[] = [];\n\t\tlet cubicIdx = 0;\n\t\tfor (const feature of polygon.features) {\n\t\t\tif (feature.type === \"corner\" && feature.cubics.length > 0) {\n\t\t\t\t// For rounded corners with 3 cubics, the arc is the middle one\n\t\t\t\t// Find progress at midpoint of corner\n\t\t\t\tconst middleCubicIdx = feature.cubics.length > 1 ? 1 : 0;\n\t\t\t\t// Map feature cubic back to global cubic index\n\t\t\t\tconst mc =\n\t\t\t\t\tmeasured[Math.min(cubicIdx + middleCubicIdx, measured.length - 1)];\n\t\t\t\tif (mc) {\n\t\t\t\t\tconst midProgress =\n\t\t\t\t\t\t(mc.startOutlineProgress + mc.endOutlineProgress) / 2;\n\t\t\t\t\tfeatureList.push({ progress: midProgress, convex: feature.convex });\n\t\t\t\t}\n\t\t\t}\n\t\t\tcubicIdx += feature.cubics.length;\n\t\t}\n\n\t\treturn new MeasuredPolygon(measured, featureList);\n\t}\n}\n\n/** Approximate cubic length using the chord from anchor0 to anchor1. */\nfunction approximateLength(cubic: Cubic): number {\n\t// More accurate: sample a few points\n\tlet len = 0;\n\tlet prevX = cubic.anchor0X,\n\t\tprevY = cubic.anchor0Y;\n\tconst steps = 4;\n\tfor (let i = 1; i <= steps; i++) {\n\t\tconst p = cubic.pointOnCurve(i / steps);\n\t\tlen += distance(p.x - prevX, p.y - prevY);\n\t\tprevX = p.x;\n\t\tprevY = p.y;\n\t}\n\treturn len;\n}\n","/**\n * Morph — animates between two RoundedPolygon shapes.\n * Ported from androidx.graphics.shapes.Morph.kt\n *\n * The Morph class pre-computes a list of matched cubic pairs at construction time.\n * Animating between shapes is then a simple per-pair linear interpolation.\n *\n * @example\n * const morph = new Morph(MD3Shapes.circle, MD3Shapes.flower);\n * const cubics = morph.asCubics(0.5); // halfway between circle and flower\n *\n * @example\n * // Zero-allocation iteration (for animation loops)\n * morph.forEachCubic(progress, (c) => {\n *   ctx.bezierCurveTo(c.control0X, c.control0Y, c.control1X, c.control1Y, c.anchor1X, c.anchor1Y);\n * });\n */\n\nimport type { RoundedPolygon } from \"../core/rounded-polygon\";\nimport { Cubic, MutableCubic } from \"../math/cubic\";\nimport { ANGLE_EPSILON, interpolate, positiveModulo } from \"../utils/utils\";\nimport { featureMapper } from \"./feature-mapping\";\nimport { MeasuredPolygon } from \"./polygon-measure\";\n\n/** A matched pair of cubics (start shape, end shape). */\nexport type CubicPair = readonly [Cubic, Cubic];\n\n/**\n * Animates between two RoundedPolygon shapes.\n *\n * At construction time, Morph matches the cubic curves of both shapes using\n * the featureMapper algorithm. This produces a list of CubicPairs, which can\n * then be interpolated at any progress value.\n */\nexport class Morph {\n\t/** Pre-computed list of matched cubic pairs. @internal */\n\tprivate readonly morphMatch: CubicPair[];\n\n\t/**\n\t * Creates a Morph between two shapes.\n\t * @param start - Starting shape\n\t * @param end - Ending shape\n\t */\n\tconstructor(\n\t\tprivate readonly start: RoundedPolygon,\n\t\tprivate readonly end: RoundedPolygon,\n\t) {\n\t\tthis.morphMatch = Morph.match(start, end);\n\t}\n\n\t/**\n\t * Returns the interpolated shape at the given progress as a list of Cubics.\n\t *\n\t * Note: This allocates a new list. For performance-critical animation loops,\n\t * use {@link forEachCubic} instead.\n\t *\n\t * @param progress - Value in [0, 1]. 0 = start shape, 1 = end shape.\n\t *   Values outside [0, 1] produce exaggerated shapes (useful for bounce/overshoot).\n\t * @returns List of interpolated Cubic curves forming the morphed shape\n\t */\n\tasCubics(progress: number): Cubic[] {\n\t\tconst result: Cubic[] = [];\n\n\t\tfor (const [c1, c2] of this.morphMatch) {\n\t\t\tresult.push(\n\t\t\t\tnew Cubic(\n\t\t\t\t\tc1.points.map((v, i) => interpolate(v, c2.points[i], progress)),\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Iterates over the morphed cubics without allocating new Cubic instances.\n\t * Reuses a single MutableCubic for each callback invocation.\n\t *\n\t * @param progress - Value in [0, 1]\n\t * @param callback - Called for each interpolated cubic\n\t *\n\t * @example\n\t * const mutable = new MutableCubic();\n\t * morph.forEachCubic(progress, mutable, (c) => {\n\t *   path.bezierCurveTo(c.control0X, c.control0Y, c.control1X, c.control1Y, c.anchor1X, c.anchor1Y);\n\t * });\n\t */\n\tforEachCubic(\n\t\tprogress: number,\n\t\tmutableOrCallback: MutableCubic | ((c: MutableCubic) => void),\n\t\tcallback?: (c: MutableCubic) => void,\n\t): void {\n\t\tlet mutable: MutableCubic;\n\t\tlet cb: (c: MutableCubic) => void;\n\n\t\tif (typeof mutableOrCallback === \"function\") {\n\t\t\tmutable = new MutableCubic();\n\t\t\tcb = mutableOrCallback;\n\t\t} else {\n\t\t\tmutable = mutableOrCallback;\n\t\t\tif (!callback) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Callback must be provided when passing a mutable cubic\",\n\t\t\t\t);\n\t\t\t}\n\t\t\tcb = callback;\n\t\t}\n\n\t\tfor (const [c1, c2] of this.morphMatch) {\n\t\t\tmutable.interpolate(c1, c2, progress);\n\t\t\tcb(mutable);\n\t\t}\n\t}\n\n\t/**\n\t * Calculates the axis-aligned bounding box of the morph (union of start + end bounds).\n\t * @param approximate - Use faster approximate bounds (default: true)\n\t */\n\tcalculateBounds(approximate = true): [number, number, number, number] {\n\t\tconst [s0, s1, s2, s3] = this.start.calculateBounds(approximate);\n\t\tconst [e0, e1, e2, e3] = this.end.calculateBounds(approximate);\n\t\treturn [\n\t\t\tMath.min(s0, e0),\n\t\t\tMath.min(s1, e1),\n\t\t\tMath.max(s2, e2),\n\t\t\tMath.max(s3, e3),\n\t\t];\n\t}\n\n\t/**\n\t * Calculates the max bounding square (union of start + end max bounds).\n\t */\n\tcalculateMaxBounds(): [number, number, number, number] {\n\t\tconst [s0, s1, s2, s3] = this.start.calculateMaxBounds();\n\t\tconst [e0, e1, e2, e3] = this.end.calculateMaxBounds();\n\t\treturn [\n\t\t\tMath.min(s0, e0),\n\t\t\tMath.min(s1, e1),\n\t\t\tMath.max(s2, e2),\n\t\t\tMath.max(s3, e3),\n\t\t];\n\t}\n\n\t// ─── Internal: matching algorithm ──────────────────────────────────────\n\n\t/**\n\t * Matches cubic curves between two polygons.\n\t *\n\t * Algorithm:\n\t * 1. Measure both polygons (arc-length normalized progress)\n\t * 2. Use featureMapper to determine correspondence between features\n\t * 3. Cut and shift polygon2 so both start at the same logical point\n\t * 4. Walk both lists together, splitting curves when one extends past the other\n\t *\n\t * @internal\n\t */\n\tprivate static match(p1: RoundedPolygon, p2: RoundedPolygon): CubicPair[] {\n\t\tconst measured1 = MeasuredPolygon.measurePolygon(p1);\n\t\tconst measured2 = MeasuredPolygon.measurePolygon(p2);\n\n\t\tconst doubleMapper = featureMapper(measured1.features, measured2.features);\n\t\tconst polygon2CutPoint = doubleMapper.map(0);\n\n\t\tconst bs1 = measured1;\n\t\tconst bs2 = measured2.cutAndShift(polygon2CutPoint);\n\n\t\tconst result: CubicPair[] = [];\n\t\tlet i1 = 0,\n\t\t\ti2 = 0;\n\t\tlet b1 = bs1.getOrNull(i1++);\n\t\tlet b2 = bs2.getOrNull(i2++);\n\n\t\twhile (b1 !== null && b2 !== null) {\n\t\t\tconst b1a = i1 >= bs1.size ? 1 : b1.endOutlineProgress;\n\t\t\tconst b2aRaw =\n\t\t\t\ti2 >= bs2.size\n\t\t\t\t\t? 1\n\t\t\t\t\t: positiveModulo(b2.endOutlineProgress + polygon2CutPoint, 1);\n\t\t\tconst b2a = doubleMapper.mapBack(b2aRaw);\n\n\t\t\tconst minb = Math.min(b1a, b2a);\n\n\t\t\tlet seg1 = b1,\n\t\t\t\tnewb1 = bs1.getOrNull(i1);\n\t\t\tlet seg2 = b2,\n\t\t\t\tnewb2 = bs2.getOrNull(i2);\n\n\t\t\tif (b1a > minb + ANGLE_EPSILON) {\n\t\t\t\tconst [cut, rest] = bs1.cutAtProgress(b1, minb);\n\t\t\t\tseg1 = cut;\n\t\t\t\tnewb1 = rest;\n\t\t\t} else {\n\t\t\t\ti1++;\n\t\t\t}\n\n\t\t\tif (b2a > minb + ANGLE_EPSILON) {\n\t\t\t\tconst targetProgress = positiveModulo(\n\t\t\t\t\tdoubleMapper.map(minb) - polygon2CutPoint,\n\t\t\t\t\t1,\n\t\t\t\t);\n\t\t\t\tconst [cut, rest] = bs2.cutAtProgress(b2, targetProgress);\n\t\t\t\tseg2 = cut;\n\t\t\t\tnewb2 = rest;\n\t\t\t} else {\n\t\t\t\ti2++;\n\t\t\t}\n\n\t\t\tresult.push([seg1.cubic, seg2.cubic]);\n\t\t\tb1 = newb1;\n\t\t\tb2 = newb2;\n\t\t}\n\n\t\treturn result;\n\t}\n}\n","/**\n * Rendering utilities: convert RoundedPolygon / Cubic[] to SVG paths and CSS clip-paths.\n *\n * All output paths use absolute coordinates relative to the shape's natural\n * normalized space ([0,1]×[0,1]) or scaled to pixel dimensions.\n */\n\nimport type { RoundedPolygon } from \"../core/rounded-polygon\";\nimport type { Cubic } from \"../math/cubic\";\nimport type { Morph } from \"../morph/morph\";\n\n// ─── toSvgPath ─────────────────────────────────────────────────────────────\n\n/**\n * Converts a list of Cubic Bézier curves to an SVG path string.\n *\n * @param cubics - Array of Cubic curves (must be contiguous, closed)\n * @param width - Width in pixels to scale x coordinates (default: 1 = normalized)\n * @param height - Height in pixels to scale y coordinates (default: 1 = normalized)\n * @returns SVG path data string, e.g. \"M 0.5 0 C 1 0 1 1 0.5 1 Z\"\n *\n * @example\n * const path = toSvgPath(MD3Shapes.circle.cubics, 200, 200);\n * // Use in <path d={path} />\n */\nexport function toSvgPath(cubics: Cubic[], width = 1, height = 1): string {\n\tif (cubics.length === 0) return \"\";\n\n\t// Add 1.5% padding on all sides to prevent browser clip-path boundary cutoff\n\tconst paddingX = width * 0.015;\n\tconst paddingY = height * 0.015;\n\tconst sx = width - 2 * paddingX;\n\tconst sy = height - 2 * paddingY;\n\n\tconst flipY = (y: number) => paddingY + sy * (1 - y);\n\n\tconst parts: string[] = [\n\t\t`M ${fmt(paddingX + cubics[0].anchor0X * sx)} ${fmt(flipY(cubics[0].anchor0Y))}`,\n\t];\n\n\tfor (const c of cubics) {\n\t\tparts.push(\n\t\t\t`C ${fmt(paddingX + c.control0X * sx)} ${fmt(flipY(c.control0Y))},${fmt(paddingX + c.control1X * sx)} ${fmt(flipY(c.control1Y))},${fmt(paddingX + c.anchor1X * sx)} ${fmt(flipY(c.anchor1Y))}`,\n\t\t);\n\t}\n\n\tparts.push(\"Z\");\n\treturn parts.join(\" \");\n}\n\n// ─── toClipPath ────────────────────────────────────────────────────────────\n\n/**\n * Converts a RoundedPolygon to a CSS `clip-path: path(...)` value.\n *\n * @param polygon - Normalized RoundedPolygon (values in [0,1])\n * @param width - Element width in pixels\n * @param height - Element height in pixels\n * @returns CSS clip-path value, e.g. \"path('M ...')\"\n *\n * @example\n * const clipPath = toClipPath(MD3Shapes.sunny, 200, 200);\n * element.style.clipPath = clipPath;\n */\nexport function toClipPath(\n\tpolygon: RoundedPolygon,\n\twidth: number,\n\theight: number,\n): string {\n\tconst pathData = toSvgPath(polygon.cubics, width, height);\n\treturn `path('${pathData}')`;\n}\n\n// ─── interpolatePath ───────────────────────────────────────────────────────\n\n/**\n * Returns a CSS clip-path for a morphed shape at the given progress.\n *\n * @param morph - A pre-constructed Morph instance\n * @param progress - Interpolation factor in [0, 1]\n * @param width - Element width in pixels\n * @param height - Element height in pixels\n * @returns CSS clip-path value\n *\n * @example\n * const morph = new Morph(MD3Shapes.circle, MD3Shapes.flower);\n * element.style.clipPath = interpolatePath(morph, 0.5, 200, 200);\n */\nexport function interpolatePath(\n\tmorph: Morph,\n\tprogress: number,\n\twidth: number,\n\theight: number,\n): string {\n\tconst cubics = morph.asCubics(progress);\n\treturn toClipPath({ cubics } as RoundedPolygon, width, height);\n}\n\n// ─── Internal formatting ───────────────────────────────────────────────────\n\n/** Format a float to at most 4 decimal places. */\nfunction fmt(v: number): string {\n\t// toFixed(4) then strip trailing zeros\n\treturn Number(v.toFixed(4)).toString();\n}\n","/**\n * @file fading-blur-mask.tsx\n * MD3 Expressive Fading Edge & Backdrop Blur Mask Primitive Component.\n *\n * Provides a hardware-accelerated linear gradient backdrop blur + surface tint overlay.\n */\n\nimport { useReducedMotion } from \"motion/react\";\nimport type * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { FadingBlurMaskProps } from \"./fading-blur-mask.types\";\n\n/**\n * Gets the CSS linear-gradient string for the mask image based on direction.\n */\nfunction getMaskGradient(direction: FadingBlurMaskProps[\"direction\"]): string {\n\tswitch (direction) {\n\t\tcase \"bottom\":\n\t\t\treturn \"linear-gradient(to top, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 1) 45%, rgba(0, 0, 0, 0.7) 75%, rgba(0, 0, 0, 0) 100%)\";\n\t\tcase \"both\":\n\t\t\treturn \"linear-gradient(to bottom, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 20%, rgba(0, 0, 0, 1) 40%, rgba(0, 0, 0, 1) 60%, rgba(0, 0, 0, 0.7) 80%, rgba(0, 0, 0, 0) 100%)\";\n\t\tdefault:\n\t\t\treturn \"linear-gradient(to bottom, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 1) 45%, rgba(0, 0, 0, 0.7) 75%, rgba(0, 0, 0, 0) 100%)\";\n\t}\n}\n\n/**\n * `<FadingBlurMask>` component renders a smooth gradient fading backdrop blur overlay.\n *\n * @example\n * ```tsx\n * <FadingBlurMask direction=\"top\" blurIntensity={16} />\n * ```\n */\nexport function FadingBlurMask({\n\tdirection = \"top\",\n\tblurIntensity = 12,\n\tblurHeight = \"100%\",\n\tcolor = \"var(--md-sys-color-surface)\",\n\tclassName,\n\tstyle,\n\tchildren,\n}: FadingBlurMaskProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst activeBlur = shouldReduceMotion ? 0 : blurIntensity;\n\n\tconst maskGradient = getMaskGradient(direction);\n\n\tconst maskStyle: React.CSSProperties = {\n\t\tposition: \"absolute\",\n\t\tinset: 0,\n\t\tpointerEvents: \"none\",\n\t\theight: typeof blurHeight === \"number\" ? `${blurHeight}px` : blurHeight,\n\t\tbackdropFilter: activeBlur > 0 ? `blur(${activeBlur}px)` : undefined,\n\t\tWebkitBackdropFilter: activeBlur > 0 ? `blur(${activeBlur}px)` : undefined,\n\t\tmaskImage: maskGradient,\n\t\tWebkitMaskImage: maskGradient,\n\t\tbackgroundColor: color,\n\t\t...style,\n\t};\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute inset-0 pointer-events-none z-0 rounded-[inherit]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={maskStyle}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * @file ui/shared/motion-tokens.ts\n *\n * Framer Motion spring presets derived from the official MD3 Expressive\n * motion physics system (May 2025).\n *\n * Usage hierarchy:\n *   1. Import a named preset (e.g. `FAST_SPATIAL_SPRING`) for convenience.\n *   2. Call `getMotionSpring(speed, type)` when you need to pick dynamically.\n *   3. Call `getMotionTransitionCSS(speed, type, scheme?)` for pure-CSS contexts.\n *\n * @see https://m3.material.io/styles/motion/overview/how-it-works\n * @see https://m3.material.io/styles/motion/overview/specs\n */\n\nimport type { Transition } from \"motion/react\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 Spring Token Structure\n//\n// MD3 defines springs as dampingRatio (0–1) + stiffness.\n// Framer Motion uses absolute `damping` coefficient.\n//\n// Conversion (with Framer's default mass = 1):\n//   damping = 2 × dampingRatio × √stiffness\n//\n// Computed values (rounded to 2 decimal places):\n//\n//   fast  spatial:  2 × 0.6 × √800   = 2 × 0.6 × 28.28  ≈ 33.94\n//   fast  effects:  2 × 1.0 × √3800  = 2 × 61.64         ≈ 123.29\n//   default spatial: 2 × 0.8 × √380  = 2 × 0.8 × 19.49  ≈ 31.19\n//   default effects: 2 × 1.0 × √1600 = 2 × 40            = 80\n//   slow  spatial:  2 × 0.8 × √200   = 2 × 0.8 × 14.14  ≈ 22.63\n//   slow  effects:  2 × 1.0 × √800   = 2 × 28.28         ≈ 56.57\n// ─────────────────────────────────────────────────────────────────────────────\n\n// ── Spatial springs — use for position, size, border-radius, rotation, scale ─\n\n/**\n * MD3 Expressive — Fast Spatial Spring\n * `md.sys.motion.spring.fast.spatial` (dampingRatio: 0.6, stiffness: 800)\n *\n * Use for: small components (buttons, switches, chips).\n * Has notable bounce/overshoot — feels snappy and expressive.\n */\nexport const FAST_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 33.94,\n} as const;\n\n/**\n * MD3 Expressive — Default Spatial Spring\n * `md.sys.motion.spring.default.spatial` (dampingRatio: 0.8, stiffness: 380)\n *\n * Use for: medium elements (bottom sheets, menus, navigation rail).\n * Gentle overshoot — the go-to spring for most UI animations.\n */\nexport const DEFAULT_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 380,\n\tdamping: 31.19,\n} as const;\n\n/**\n * MD3 Expressive — Slow Spatial Spring\n * `md.sys.motion.spring.slow.spatial` (dampingRatio: 0.8, stiffness: 200)\n *\n * Use for: full-screen transitions and large layout shifts.\n * Subtle, slow overshoot.\n */\nexport const SLOW_SPATIAL_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 22.63,\n} as const;\n\n// ── Effects springs — use for color, opacity (critically damped, no bounce) ──\n\n/**\n * MD3 Expressive — Fast Effects Spring\n * `md.sys.motion.spring.fast.effects` (dampingRatio: 1.0, stiffness: 3800)\n *\n * Use for: color changes on switches, icon swaps, badge counts.\n * Critically damped — very fast, no overshoot.\n */\nexport const FAST_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 3800,\n\tdamping: 123.29,\n} as const;\n\n/**\n * MD3 Expressive — Default Effects Spring\n * `md.sys.motion.spring.default.effects` (dampingRatio: 1.0, stiffness: 1600)\n *\n * Use for: opacity fades, color transitions for medium-sized elements.\n * Critically damped — smooth with no overshoot.\n */\nexport const DEFAULT_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 1600,\n\tdamping: 80,\n} as const;\n\n/**\n * MD3 Expressive — Slow Effects Spring\n * `md.sys.motion.spring.slow.effects` (dampingRatio: 1.0, stiffness: 800)\n *\n * Use for: full-screen opacity/color transitions.\n * Critically damped — slow and smooth.\n */\nexport const SLOW_EFFECTS_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 800,\n\tdamping: 56.57,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Dynamic helper\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type SpringSpeed = \"fast\" | \"default\" | \"slow\";\nexport type SpringAnimationType = \"spatial\" | \"effects\";\n\nconst springMap = {\n\tfast: { spatial: FAST_SPATIAL_SPRING, effects: FAST_EFFECTS_SPRING },\n\tdefault: { spatial: DEFAULT_SPATIAL_SPRING, effects: DEFAULT_EFFECTS_SPRING },\n\tslow: { spatial: SLOW_SPATIAL_SPRING, effects: SLOW_EFFECTS_SPRING },\n} as const;\n\n/**\n * Pick a Framer Motion spring by speed and type.\n *\n * @example\n * ```tsx\n * transition={getMotionSpring(\"fast\", \"spatial\")}\n * ```\n */\nexport function getMotionSpring(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n): Transition {\n\treturn springMap[speed][type];\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CSS transition strings\n// For contexts where Framer Motion is not used (plain CSS / Tailwind).\n// Uses official Web spring → CSS cubic-bezier conversion table.\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst CSS_CURVES = {\n\texpressive: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.42, 1.67, 0.21, 0.90)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.38, 1.21, 0.22, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.39, 1.29, 0.35, 0.98)\",\n\t\t\t\tdurationMs: 650,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n\tstandard: {\n\t\tfast: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 350,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.31, 0.94, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 150,\n\t\t\t},\n\t\t},\n\t\tdefault: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 500,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.80, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 200,\n\t\t\t},\n\t\t},\n\t\tslow: {\n\t\t\tspatial: {\n\t\t\t\tcurve: \"cubic-bezier(0.27, 1.06, 0.18, 1.00)\",\n\t\t\t\tdurationMs: 750,\n\t\t\t},\n\t\t\teffects: {\n\t\t\t\tcurve: \"cubic-bezier(0.34, 0.88, 0.34, 1.00)\",\n\t\t\t\tdurationMs: 300,\n\t\t\t},\n\t\t},\n\t},\n} as const;\n\nexport type MotionScheme = \"expressive\" | \"standard\";\n\n/**\n * Returns a CSS `transition` value string using the official MD3 web curve\n * conversion, e.g. `\"500ms cubic-bezier(0.38, 1.21, 0.22, 1.00)\"`.\n *\n * @example\n * ```ts\n * element.style.transition = `border-radius ${getMotionTransitionCSS(\"default\", \"spatial\")}`;\n * ```\n */\nexport function getMotionTransitionCSS(\n\tspeed: SpringSpeed,\n\ttype: SpringAnimationType,\n\tscheme: MotionScheme = \"expressive\",\n): string {\n\tconst { curve, durationMs } = CSS_CURVES[scheme][speed][type];\n\treturn `${durationMs}ms ${curve}`;\n}\n","/**\n * @file app-bar.tokens.ts\n * MD3 Expressive App Bar — Design tokens ported from:\n *   - AppBarTokens.kt (shared tokens)\n *   - AppBarSmallTokens.kt\n *   - AppBarMediumFlexibleTokens.kt\n *   - AppBarLargeFlexibleTokens.kt\n *   - BottomAppBarTokens.kt\n *   - DockedToolbarTokens.kt\n *   - FabSecondaryContainerTokens.kt\n *\n * All dimensional values are in px (dp equivalents for web at 1dp = 1px).\n * Colors reference CSS custom properties — do NOT hardcode hex.\n * @see docs/m3/app-bars/\n */\n\nimport { DEFAULT_SPATIAL_SPRING } from \"../shared/motion-tokens\";\n\n// ─── Dimensional Tokens ───────────────────────────────────────────────────────\n\n/**\n * Height and spacing tokens for all App Bar variants.\n * Maps directly from MD3 Kotlin token files.\n */\nexport const AppBarTokens = {\n\t// ── Heights ─────────────────────────────────────────────────────────────\n\theights: {\n\t\t/** SmallAppBar height. AppBarSmallTokens.ContainerHeight = 64dp */\n\t\tsmall: 64,\n\t\t/** Collapsed height for flexible variants. = SmallAppBar height. */\n\t\tflexibleCollapsed: 64,\n\t\t/** MediumFlexibleAppBar expanded height (without subtitle). AppBarMediumFlexibleTokens */\n\t\tmediumFlexExpanded: 112,\n\t\t/** MediumFlexibleAppBar expanded height (with subtitle). */\n\t\tmediumFlexWithSubtitleExpanded: 136,\n\t\t/** LargeFlexibleAppBar expanded height (without subtitle). AppBarLargeFlexibleTokens */\n\t\tlargeFlexExpanded: 120,\n\t\t/** LargeFlexibleAppBar expanded height (with subtitle). */\n\t\tlargeFlexWithSubtitleExpanded: 152,\n\t\t/** BottomAppBar height. BottomAppBarTokens.ContainerHeight = 80dp */\n\t\tbottom: 80,\n\t\t/** DockedToolbar height. DockedToolbarTokens.ContainerHeight = 64dp */\n\t\tdockedToolbar: 64,\n\t},\n\n\t// ── Icon and Avatar sizes ──────────────────────────────────────────────\n\t/** AppBarTokens.IconSize = 24dp */\n\ticonSize: 24,\n\t/** AppBarTokens.AvatarSize = 32dp */\n\tavatarSize: 32,\n\n\t// ── Spacing ──────────────────────────────────────────────────────────────\n\t/** AppBarTokens.LeadingSpace = 4dp */\n\tleadingSpace: 4,\n\t/** AppBarTokens.TrailingSpace = 4dp */\n\ttrailingSpace: 4,\n\t/** AppBarTokens.IconButtonSpace = 0dp (no gap between icon buttons) */\n\ticonButtonSpace: 0,\n\n\t// ── Docked Toolbar spacing ────────────────────────────────────────────\n\tdockedToolbar: {\n\t\t/** DockedToolbarTokens.ContainerLeadingSpace = 16dp */\n\t\tleadingSpace: 16,\n\t\t/** DockedToolbarTokens.ContainerTrailingSpace = 16dp */\n\t\ttrailingSpace: 16,\n\t\t/** DockedToolbarTokens.ContainerMinSpacing = 4dp */\n\t\tminSpacing: 4,\n\t\t/** DockedToolbarTokens.ContainerMaxSpacing = 32dp */\n\t\tmaxSpacing: 32,\n\t},\n\n\t// ── Touch targets ─────────────────────────────────────────────────────\n\t/** Minimum 48px touch target for icon buttons per MD3 accessibility spec. */\n\ticonButtonTouchTarget: 48,\n} as const;\n\n// ─── Typography Tokens ────────────────────────────────────────────────────────\n\n/**\n * MD3 type scale values mapped to Tailwind CSS class strings.\n * Used across App Bar variants for consistent typography.\n *\n * Values derived from MD3 Material Type Scale specification.\n */\nexport const appBarTypography = {\n\t/**\n\t * SmallAppBar title (collapsed state for flexible variants).\n\t * AppBarSmallTokens.TitleFont = TitleLarge\n\t * Spec: 22sp / 28sp line-height / medium weight\n\t */\n\ttitleLarge: \"text-[22px] leading-[28px] font-medium tracking-[0px]\",\n\n\t/**\n\t * SmallAppBar subtitle.\n\t * AppBarSmallTokens.SubtitleFont = LabelMedium\n\t * Spec: 12sp / 16sp line-height / medium weight / 0.5px tracking\n\t */\n\tlabelMedium: \"text-[12px] leading-[16px] font-medium tracking-[0.5px]\",\n\n\t/**\n\t * MediumFlexibleAppBar expanded title.\n\t * AppBarMediumFlexibleTokens.TitleFont = HeadlineMedium\n\t * Spec: 28sp / 36sp line-height / normal weight\n\t */\n\theadlineMedium: \"text-[28px] leading-[36px] font-normal tracking-[0px]\",\n\n\t/**\n\t * MediumFlexibleAppBar subtitle.\n\t * AppBarMediumFlexibleTokens.SubtitleFont = LabelLarge\n\t * Spec: 14sp / 20sp line-height / medium weight / 0.1px tracking\n\t */\n\tlabelLarge: \"text-[14px] leading-[20px] font-medium tracking-[0.1px]\",\n\n\t/**\n\t * LargeFlexibleAppBar expanded title.\n\t * AppBarLargeFlexibleTokens.TitleFont = DisplaySmall\n\t * Spec: 36sp / 44sp line-height / normal weight / -0.25px tracking\n\t */\n\tdisplaySmall: \"text-[36px] leading-[44px] font-normal tracking-[-0.25px]\",\n\n\t/**\n\t * LargeFlexibleAppBar subtitle.\n\t * AppBarLargeFlexibleTokens.SubtitleFont = TitleMedium\n\t * Spec: 16sp / 24sp line-height / medium weight / 0.15px tracking\n\t */\n\ttitleMedium: \"text-[16px] leading-6 font-medium tracking-[0.15px]\",\n} as const;\n\n// ─── Color Tokens ─────────────────────────────────────────────────────────────\n\n/**\n * CSS custom property references for App Bar colors.\n * Maps to --md-sys-color-* tokens in the MD3 theme system.\n *\n * IMPORTANT: Never hardcode hex/rgba values here — these references\n * automatically adapt to light/dark theme via the MD3ThemeProvider.\n *\n * AppBarTokens.kt spec:\n * - ContainerColor → md-sys-color-surface\n * - OnScrollContainerColor → md-sys-color-surface-container\n */\nexport const APP_BAR_COLORS = {\n\t// ── Container ────────────────────────────────────────────────────────────\n\t/** Default background. AppBarTokens.ContainerColor → surface */\n\tcontainer: \"var(--md-sys-color-surface)\",\n\t/** Background when content is scrolled. AppBarTokens.OnScrollContainerColor → surface-container */\n\tscrolledContainer: \"var(--md-sys-color-surface-container)\",\n\n\t// ── Content ──────────────────────────────────────────────────────────────\n\t/** Title color. AppBarTokens.TitleColor → on-surface */\n\ttitle: \"var(--md-sys-color-on-surface)\",\n\t/** Subtitle color. AppBarTokens.SubtitleColor → on-surface-variant */\n\tsubtitle: \"var(--md-sys-color-on-surface-variant)\",\n\t/** Navigation icon color. AppBarTokens.LeadingIconColor → on-surface */\n\tnavigationIcon: \"var(--md-sys-color-on-surface)\",\n\t/** Action icon color. AppBarTokens.TrailingIconColor → on-surface-variant */\n\tactionIcon: \"var(--md-sys-color-on-surface-variant)\",\n\n\t// ── Search Bar ───────────────────────────────────────────────────────────\n\t/** Search bar pill background. → surface-container-high */\n\tsearchBarBg: \"var(--md-sys-color-surface-container-high)\",\n\t/** Search bar text/icon color. */\n\tsearchBarContent: \"var(--md-sys-color-on-surface-variant)\",\n\n\t// ── Bottom App Bar ───────────────────────────────────────────────────────\n\t/** BottomAppBarTokens.ContainerColor → surface-container */\n\tbottomContainer: \"var(--md-sys-color-surface-container)\",\n\n\t// ── FAB on Bottom App Bar ────────────────────────────────────────────────\n\t/** FabSecondaryContainerTokens.ContainerColor → secondary-container */\n\tfabContainer: \"var(--md-sys-color-secondary-container)\",\n\t/** FabSecondaryContainerTokens.IconColor → on-secondary-container */\n\tfabIcon: \"var(--md-sys-color-on-secondary-container)\",\n} as const;\n\n// ─── Animation Constants ──────────────────────────────────────────────────────\n\n/**\n * Color transition when App Bar background changes on scroll.\n * MD3 Standard easing: cubic-bezier(0.2, 0, 0, 1), 200ms.\n */\nexport const APP_BAR_COLOR_TRANSITION = {\n\tduration: 0.2,\n\tease: [0.2, 0, 0, 1] as [number, number, number, number],\n} as const;\n\n/**\n * Spring animation for enterAlways behavior (hide/show on scroll direction).\n * Equivalent to MD3 FastSpatial motion scheme.\n */\nexport const APP_BAR_ENTER_ALWAYS_SPRING = DEFAULT_SPATIAL_SPRING;\n\nexport const APP_BAR_BOTTOM_SPRING = DEFAULT_SPATIAL_SPRING;\n\nexport const SEARCH_VIEW_SPRING = DEFAULT_SPATIAL_SPRING;\n\n/**\n * Title crossfade transition for flexible App Bars.\n * Short duration keeps the collapse feeling snappy.\n */\nexport const APP_BAR_TITLE_FADE = {\n\tduration: 0.15,\n\tease: \"easeInOut\",\n} as const;\n","/**\n * @file app-bar-item-button.tsx\n * Shared icon button renderer for AppBarRow and AppBarColumn items.\n *\n * Extracted from duplicate RowItem/ColumnItem implementations.\n */\n\nimport { cn } from \"../../lib/utils\";\nimport { APP_BAR_COLORS, AppBarTokens } from \"./app-bar.tokens\";\nimport type { AppBarItem } from \"./app-bar.types\";\n\ninterface AppBarItemButtonProps {\n\titem: AppBarItem;\n}\n\n/**\n * Renders a single App Bar action item as an icon button.\n * Handles clickable, toggleable, and custom item types.\n */\nexport function AppBarItemButton({ item }: AppBarItemButtonProps) {\n\tconst isDisabled = item.enabled === false;\n\n\tif (item.type === \"custom\" && item.appBarContent) {\n\t\treturn <>{item.appBarContent}</>;\n\t}\n\n\tconst buttonClassName = cn(\n\t\t\"flex items-center justify-center rounded-full\",\n\t\t\"focus-visible:outline-none focus-visible:ring-2\",\n\t\tisDisabled && \"opacity-38 pointer-events-none\",\n\t);\n\n\tconst buttonStyle = {\n\t\twidth: AppBarTokens.iconButtonTouchTarget,\n\t\theight: AppBarTokens.iconButtonTouchTarget,\n\t};\n\n\tif (item.type === \"toggleable\") {\n\t\treturn (\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={buttonClassName}\n\t\t\t\tstyle={{\n\t\t\t\t\t...buttonStyle,\n\t\t\t\t\tcolor: item.checked\n\t\t\t\t\t\t? APP_BAR_COLORS.navigationIcon\n\t\t\t\t\t\t: APP_BAR_COLORS.actionIcon,\n\t\t\t\t}}\n\t\t\t\taria-label={item.label}\n\t\t\t\taria-pressed={item.checked}\n\t\t\t\tdisabled={isDisabled}\n\t\t\t\tonClick={() => item.onCheckedChange?.(!item.checked)}\n\t\t\t>\n\t\t\t\t{item.icon}\n\t\t\t</button>\n\t\t);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tclassName={buttonClassName}\n\t\t\tstyle={{ ...buttonStyle, color: APP_BAR_COLORS.actionIcon }}\n\t\t\taria-label={item.label}\n\t\t\tdisabled={isDisabled}\n\t\t\tonClick={item.onClick}\n\t\t>\n\t\t\t{item.icon}\n\t\t</button>\n\t);\n}\n","\"use client\";\n\nimport * as RadixScrollArea from \"@radix-ui/react-scroll-area\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n/** Radix accepts hover/scroll/always/auto. We add 'none' as a UI-only hide. */\nexport type ScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"none\";\ntype RadixScrollAreaType = \"hover\" | \"scroll\" | \"always\" | \"auto\";\nexport type ScrollAreaOrientation = \"vertical\" | \"horizontal\" | \"both\";\n\nexport interface ScrollAreaProps\n\textends Omit<\n\t\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Root>,\n\t\t\"type\"\n\t> {\n\t/**\n\t * Controls when the scrollbars are visible.\n\t * - `hover`: Show on hover (default, recommended for desktop)\n\t * - `scroll`: Show only while scrolling (recommended for mobile)\n\t * - `always`: Always visible\n\t * - `none`: Never visible\n\t */\n\ttype?: ScrollAreaType;\n\t/**\n\t * The scrollbar orientation to render.\n\t * @default \"vertical\"\n\t */\n\torientation?: ScrollAreaOrientation;\n\t/** Delay in ms before scrollbars hide when `type` is `hover` or `scroll`. */\n\tscrollHideDelay?: number;\n\t/** Extra classes applied to the inner viewport element. */\n\tviewportClassName?: string;\n\t/** Ref to the scrolling viewport element. */\n\tviewportRef?: React.Ref<HTMLDivElement>;\n\t/** Extra props applied to the viewport element. */\n\tviewportProps?: React.ComponentPropsWithoutRef<\n\t\ttypeof RadixScrollArea.Viewport\n\t>;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\nconst ScrollArea = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Root>,\n\tScrollAreaProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tviewportClassName,\n\t\t\tchildren,\n\t\t\ttype = \"hover\",\n\t\t\torientation = \"vertical\",\n\t\t\tscrollHideDelay = 600,\n\t\t\tviewportRef,\n\t\t\tviewportProps,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [isTouchDevice, setIsTouchDevice] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\tsetIsTouchDevice(\n\t\t\t\t\t\"ontouchstart\" in window || navigator.maxTouchPoints > 0,\n\t\t\t\t);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst resolvedType = React.useMemo(() => {\n\t\t\tif (type === \"hover\" && isTouchDevice) {\n\t\t\t\treturn \"scroll\";\n\t\t\t}\n\t\t\treturn type;\n\t\t}, [type, isTouchDevice]);\n\n\t\tconst radixType: RadixScrollAreaType =\n\t\t\tresolvedType === \"none\" ? \"always\" : resolvedType;\n\n\t\treturn (\n\t\t\t<RadixScrollArea.Root\n\t\t\t\tref={ref}\n\t\t\t\ttype={radixType}\n\t\t\t\tscrollHideDelay={scrollHideDelay}\n\t\t\t\tclassName={cn(\"relative overflow-hidden flex flex-col\", className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<RadixScrollArea.Viewport\n\t\t\t\t\tref={viewportRef}\n\t\t\t\t\t{...viewportProps}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"h-full w-full flex-1 min-h-0 min-w-0 rounded-[inherit]\",\n\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1\",\n\t\t\t\t\t\tviewportClassName,\n\t\t\t\t\t\tviewportProps?.className,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</RadixScrollArea.Viewport>\n\n\t\t\t\t{(orientation === \"vertical\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"vertical\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{(orientation === \"horizontal\" || orientation === \"both\") && (\n\t\t\t\t\t<ScrollAreaScrollbar\n\t\t\t\t\t\torientation=\"horizontal\"\n\t\t\t\t\t\tclassName={resolvedType === \"none\" ? \"hidden\" : undefined}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t<RadixScrollArea.Corner className=\"bg-m3-surface-container\" />\n\t\t\t</RadixScrollArea.Root>\n\t\t);\n\t},\n);\nScrollArea.displayName = \"ScrollArea\";\n\n// ─── Scrollbar ────────────────────────────────────────────────────────────────\nconst ScrollAreaScrollbar = React.forwardRef<\n\tReact.ElementRef<typeof RadixScrollArea.Scrollbar>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Scrollbar>\n>(({ className, orientation = \"vertical\", ...props }, ref) => (\n\t<RadixScrollArea.Scrollbar\n\t\tref={ref}\n\t\torientation={orientation}\n\t\tclassName={cn(\n\t\t\t\"flex touch-none select-none transition-all duration-300 ease-in-out\",\n\t\t\t\"absolute z-50\",\n\t\t\torientation === \"vertical\" &&\n\t\t\t\t\"right-0 top-0 bottom-0 w-2.5 border-l border-l-transparent p-px\",\n\t\t\torientation === \"horizontal\" &&\n\t\t\t\t\"bottom-0 left-0 right-0 h-2.5 flex-col border-t border-t-transparent p-px\",\n\t\t\t\"data-[state=hidden]:opacity-0 data-[state=visible]:opacity-100\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t>\n\t\t<RadixScrollArea.Thumb\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex-1 rounded-full bg-m3-on-surface/25 transition-colors duration-200\",\n\t\t\t\t\"hover:bg-m3-on-surface/40 active:bg-m3-on-surface/55\",\n\t\t\t\t\"before:absolute before:left-1/2 before:top-1/2 before:min-h-11 before:min-w-11 before:-translate-x-1/2 before:-translate-y-1/2\",\n\t\t\t)}\n\t\t/>\n\t</RadixScrollArea.Scrollbar>\n));\nScrollAreaScrollbar.displayName = RadixScrollArea.Scrollbar.displayName;\n\n// ─── Corner ───────────────────────────────────────────────────────────────────\nconst ScrollAreaCorner = React.forwardRef<\n\tReact.ComponentRef<typeof RadixScrollArea.Corner>,\n\tReact.ComponentPropsWithoutRef<typeof RadixScrollArea.Corner>\n>(({ className, ...props }, ref) => (\n\t<RadixScrollArea.Corner\n\t\tref={ref}\n\t\tclassName={cn(\"bg-m3-surface-container\", className)}\n\t\t{...props}\n\t/>\n));\nScrollAreaCorner.displayName = \"ScrollAreaCorner\";\n\nexport { ScrollArea, ScrollAreaScrollbar };\n","// ─── MD3 Expressive Menu — Framer Motion Animation Variants ──────────────────\n// FastSpatial: md.sys.motion.spring.fast.spatial\n//   MD3: stiffness=800, dampingRatio=0.6 → Framer damping ≈ 33.94\n// FastEffects: md.sys.motion.spring.fast.effects (CSS fallback used for exit)\n//   MD3: duration=150ms, cubic-bezier(0.31, 0.94, 0.34, 1.00)\n\nimport type { Variants } from \"motion/react\";\nimport {\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../shared/motion-tokens\";\n\nexport { FAST_EFFECTS_SPRING, FAST_SPATIAL_SPRING };\n\n/** FastEffects CSS-fallback transition — used for opacity/exit animations */\nexport const FAST_EFFECTS_TRANSITION = {\n\tduration: 0.15,\n\tease: [0.31, 0.94, 0.34, 1.0] as [number, number, number, number],\n} as const;\n\n// ─── Menu popup container ─────────────────────────────────────────────────────\n\n/**\n * Enter/exit animation for the menu popup container.\n * Scale from 0.8→1.0 with FastSpatial spring.\n * Transform-origin is driven by the Radix CSS variable\n * `--radix-dropdown-menu-content-transform-origin`.\n */\nexport const MENU_CONTAINER_VARIANTS: Variants = {\n\thidden: {\n\t\topacity: 0,\n\t\tscale: 0.8,\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ttransition: FAST_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.8,\n\t\ttransition: FAST_EFFECTS_TRANSITION,\n\t},\n};\n\n// ─── Selected check icon ──────────────────────────────────────────────────────\n\n/** Size of the check icon in px (20dp per SegmentedMenuTokens.ItemLeadingIconSize) */\nexport const MENU_CHECK_ICON_SIZE = 20;\n\n/**\n * Expand/collapse animation for the check icon that appears when a MenuItem is\n * selected. Uses horizontal expansion (width + marginInlineEnd) with FastSpatial.\n *\n * ONLY used for the animated check ↔ selectedIcon swap in selectable items.\n * Regular (static) leading icons should NOT use these variants.\n */\nexport const CHECK_ICON_VARIANTS: Variants = {\n\thidden: {\n\t\topacity: 0,\n\t\twidth: 0,\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\twidth: MENU_CHECK_ICON_SIZE,\n\t\ttransition: FAST_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\twidth: 0,\n\t\ttransition: FAST_EFFECTS_TRANSITION,\n\t},\n};\n\n// ─── SubMenu content ──────────────────────────────────────────────────────────\n\n/** SubMenu popup uses the same FastSpatial/FastEffects pattern as root menu */\nexport const SUBMENU_CONTAINER_VARIANTS: Variants = {\n\thidden: {\n\t\topacity: 0,\n\t\tscale: 0.9,\n\t\tx: -4,\n\t},\n\tvisible: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\tx: 0,\n\t\ttransition: FAST_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.9,\n\t\tx: -4,\n\t\ttransition: FAST_EFFECTS_TRANSITION,\n\t},\n};\n","// ─── MD3 Expressive Menu — React Context ──────────────────────────────────────\nimport * as React from \"react\";\nimport type {\n\tMenuColorVariant,\n\tMenuDensity,\n\tMenuPrimitive,\n\tMenuVariant,\n} from \"./menu-types\";\n\n// ─── Context shape ────────────────────────────────────────────────────────────\n\ninterface MenuContextValue {\n\t/** Visual variant: baseline (M3 standard) or expressive (shape-morphing) */\n\tvariant: MenuVariant;\n\t/** Color variant inherited by all children unless overridden */\n\tcolorVariant: MenuColorVariant;\n\t/** Density of menu items: 0, -2, -4 */\n\tdensity: MenuDensity;\n\t/**\n\t * Which Radix primitive family drives this menu:\n\t * - \"dropdown\" → @radix-ui/react-dropdown-menu (button/field trigger)\n\t * - \"context\"  → @radix-ui/react-context-menu (right-click trigger)\n\t * - \"static\"   → plain HTML via Slot (VerticalMenu, always-visible)\n\t */\n\tmenuPrimitive: MenuPrimitive;\n\t/**\n\t * Whether the menu popup is currently open.\n\t * Used by MenuContent to drive AnimatePresence for exit animations.\n\t */\n\topen: boolean;\n\t/** Setter forwarded from Menu root — kept in sync with Radix Root open state */\n\tonOpenChange: (open: boolean) => void;\n}\n\n// ─── Backward-compat derived getter ───────────────────────────────────────────\n// Components that still reference `isStatic` (MenuGroup, etc.) use this helper\n// during the incremental migration period.\nexport function isStaticPrimitive(primitive: MenuPrimitive): boolean {\n\treturn primitive === \"static\";\n}\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\nconst MenuContext = React.createContext<MenuContextValue>({\n\tvariant: \"baseline\",\n\tcolorVariant: \"standard\",\n\tdensity: 0,\n\tmenuPrimitive: \"dropdown\",\n\topen: false,\n\tonOpenChange: () => {},\n});\n\n// ─── Provider ─────────────────────────────────────────────────────────────────\n\nexport interface MenuProviderProps {\n\tvariant?: MenuVariant;\n\tcolorVariant?: MenuColorVariant;\n\tdensity?: MenuDensity;\n\tmenuPrimitive?: MenuPrimitive;\n\topen: boolean;\n\tonOpenChange: (open: boolean) => void;\n\tchildren: React.ReactNode;\n}\n\nexport function MenuProvider({\n\tvariant = \"baseline\",\n\tcolorVariant = \"standard\",\n\tdensity = 0,\n\tmenuPrimitive = \"dropdown\",\n\topen,\n\tonOpenChange,\n\tchildren,\n}: MenuProviderProps) {\n\tconst value = React.useMemo<MenuContextValue>(\n\t\t() => ({\n\t\t\tvariant,\n\t\t\tcolorVariant,\n\t\t\tdensity,\n\t\t\tmenuPrimitive,\n\t\t\topen,\n\t\t\tonOpenChange,\n\t\t}),\n\t\t[variant, colorVariant, density, menuPrimitive, open, onOpenChange],\n\t);\n\n\treturn <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\n/**\n * Returns the nearest MenuContext value.\n * Safe to use outside a MenuProvider (returns default: baseline, dropdown, closed).\n *\n * Includes backward-compat shims:\n * - `menuVariant` → alias for `variant` (deprecated, will be removed)\n * - `isStatic`    → `menuPrimitive === \"static\"`\n */\nexport function useMenuContext(): MenuContextValue & {\n\tisStatic: boolean;\n\tmenuVariant: MenuVariant;\n} {\n\tconst ctx = React.useContext(MenuContext);\n\t// Return ctx reference directly — avoids creating a new object every render.\n\t// Shims are computed as getters so they don't need a wrapper object.\n\treturn React.useMemo(\n\t\t() =>\n\t\t\tObject.assign(ctx, {\n\t\t\t\tget isStatic() {\n\t\t\t\t\treturn ctx.menuPrimitive === \"static\";\n\t\t\t\t},\n\t\t\t\tget menuVariant() {\n\t\t\t\t\treturn ctx.variant;\n\t\t\t\t},\n\t\t\t}),\n\t\t[ctx],\n\t);\n}\n","// ─── MD3 Expressive Menu — Design Token Constants ─────────────────────────────\n// Sourced from: SegmentedMenuTokens.kt, StandardMenuTokens.kt, VibrantMenuTokens.kt,\n//               MenuTokens.kt, MenuDefaults.kt, ListTokens.kt\n\nimport { cornerRadius } from \"@bug-on/m3-tokens\";\n\n// ─── Spacing (px → dp) ────────────────────────────────────────────────────────\n\n/** Horizontal padding for menu items: 16dp (ItemLeadingSpace / ItemTrailingSpace) */\nexport const MENU_ITEM_HORIZONTAL_PADDING = \"px-4\"; // 16dp\n\n/** Horizontal padding for baseline menu items: 12dp */\nexport const MENU_BASELINE_ITEM_HORIZONTAL_PADDING = \"px-3\"; // 12dp\n\n/** Min height for selectable items: 44dp (SegmentedMenuTokens.Item) */\nexport const MENU_ITEM_MIN_HEIGHT = \"min-h-11\"; // 44dp = 11 * 4px\n\n/** Min height for standard list items: 48dp (MenuListItemContainerHeight) */\nexport const MENU_LIST_ITEM_MIN_HEIGHT = \"min-h-12\"; // 48dp\n\n/** Min height classes mapped by density: 0 → 48dp, -2 → 40dp, -4 → 32dp */\nexport const DENSITY_MIN_HEIGHT: Record<0 | -2 | -4, string> = {\n\t0: \"min-h-12\",\n\t\"-2\": \"min-h-10\",\n\t\"-4\": \"min-h-8\",\n} as const;\n\n/** Min width of menu container: 112dp (DropdownMenuItemDefaultMinWidth) */\nexport const MENU_MIN_WIDTH = \"min-w-28\"; // 112dp\n\n/** Max width of menu container: 280dp (DropdownMenuItemDefaultMaxWidth) */\nexport const MENU_MAX_WIDTH = \"max-w-70\"; // 280dp\n\n/** Gap between MenuGroup segments: 2dp (SegmentedMenuTokens.SegmentedGap) */\nexport const MENU_GROUP_GAP = \"gap-0.5\"; // 2dp\n\n/** Internal group vertical padding: 4dp (DropdownMenuGroupVerticalPadding) */\nexport const MENU_GROUP_PADDING_Y = \"py-1\"; // 4dp\n\n/** Popup container vertical padding: 8dp (DropdownMenuVerticalPadding) */\nexport const MENU_POPUP_PADDING_Y = \"py-2\"; // 8dp\n\n/** Leading icon size: 20dp (SegmentedMenuTokens.ItemLeadingIconSize) */\nexport const MENU_ICON_SIZE = 20;\n\n// ─── Container Shape ──────────────────────────────────────────────────────────\n\n/**\n * Menu popup container shape: CornerExtraSmall = 4px.\n * Source: MenuTokens.ContainerShape = ShapeKeyTokens.CornerExtraSmall\n */\nexport const MENU_CONTAINER_SHAPE = \"rounded-[4px]\"; // CornerExtraSmall\n\n/**\n * Shape for Baseline menu item (no shape morphing, edge-to-edge state layer).\n */\nexport const BASELINE_ITEM_SHAPE = \"rounded-none\";\n\n// ─── Shape: CSS border-radius values (used with motion/react `animate`) ────────\n// These are used for animated shape morphing via Framer Motion's `borderRadius`\n// property — NOT as Tailwind classes (Tailwind cannot animate between values).\n\n/**\n * Shape values for MenuGroup container (borderRadius CSS shorthand string).\n * Format: \"topLeft topRight bottomRight bottomLeft\"\n *\n * Source: MenuDefaults.kt groupShape() + SegmentedMenuTokens/ShapeTokens\n * - ContainerShape (standalone) = CornerLarge (16px) all corners\n * - InactiveContainerShape = CornerSmall (8px) all corners\n * - Leading group: topStart=CornerLarge, topEnd=CornerLarge, bottomStart=CornerSmall, bottomEnd=CornerSmall\n * - Middle group: GroupShape = CornerSmall (8px)\n * - Trailing group: topStart=CornerSmall, topEnd=CornerSmall, bottomStart=CornerLarge, bottomEnd=CornerLarge\n */\nexport const GROUP_SHAPES = {\n\t/** Active standalone group shape: CornerLarge all corners (16px) */\n\tstandaloneActive: `${cornerRadius.large}px`,\n\t/**\n\t * Active leading group shape: top=CornerLarge(16px), bottom=CornerSmall(8px)\n\t * Source: SegmentedMenuTokens — LeadingContainerShape:\n\t * topStart=CornerLarge, topEnd=CornerLarge, bottomStart=CornerSmall, bottomEnd=CornerSmall\n\t */\n\tleadingActive: `${cornerRadius.large}px ${cornerRadius.large}px ${cornerRadius.small}px ${cornerRadius.small}px`,\n\t/** Active middle group shape: CornerExtraSmall all corners (4px) */\n\tmiddleActive: `${cornerRadius.extraSmall}px`,\n\t/**\n\t * Active trailing group shape: top=CornerSmall(8px), bottom=CornerLarge(16px)\n\t * Source: SegmentedMenuTokens — TrailingContainerShape:\n\t * topStart=CornerSmall, topEnd=CornerSmall, bottomStart=CornerLarge, bottomEnd=CornerLarge\n\t */\n\ttrailingActive: `${cornerRadius.small}px ${cornerRadius.small}px ${cornerRadius.large}px ${cornerRadius.large}px`,\n\t/** Inactive (default, pre-hover) shape for all groups: CornerExtraSmall (4px) */\n\tinactive: `${cornerRadius.extraSmall}px`,\n} as const;\n\n/**\n * Shape values for MenuItem (borderRadius CSS shorthand string).\n * Used as Tailwind classes via arbitrary values for static rendering.\n * Animated shape (selected ↔ unselected) is handled via `transition-[border-radius]`.\n *\n * Source: MenuDefaults.kt itemShape() + SegmentedMenuTokens/ShapeTokens\n * - leading item: topStart/topEnd=CornerMedium(12px), bottomStart/bottomEnd=CornerExtraSmall(4px)\n * - middle item: CornerExtraSmall all (ItemShape = 4px)\n * - trailing item: topStart/topEnd=CornerExtraSmall(4px), bottomStart/bottomEnd=CornerMedium(12px)\n * - standalone item: same as middle (ItemShape = 4px)\n * - selected (all positions): CornerMedium all (ItemSelectedShape = 12px)\n */\nexport const ITEM_SHAPE_CLASSES = {\n\tleading: \"rounded-t-[12px] rounded-b-[4px]\",\n\tmiddle: \"rounded-[4px]\",\n\ttrailing: \"rounded-t-[4px] rounded-b-[12px]\",\n\tstandalone: \"rounded-[12px]\",\n\tselected: \"rounded-[12px]\",\n} as const;\n\n// ─── Color token Tailwind classes ─────────────────────────────────────────────\n\n/**\n * Standard color variant tokens (SurfaceContainerLow-based).\n * Source: StandardMenuTokens.kt\n *\n * Container: SurfaceContainerLow\n * Text: OnSurface\n * Icons: OnSurfaceVariant\n * Selected container: TertiaryContainer\n * Selected text/icons: OnTertiaryContainer\n */\nexport const STANDARD_COLORS = {\n\t/** Group/popup container background (StandardMenuTokens.ContainerColor) */\n\tcontainerBg: \"bg-m3-surface-container-low\",\n\t/** Label text color (StandardMenuTokens.ItemLabelTextColor) */\n\tlabelText: \"text-m3-on-surface\",\n\t/** Leading/trailing icon color (StandardMenuTokens.ItemLeadingIconColor) */\n\ticonColor: \"text-m3-on-surface-variant\",\n\t/** Supporting text below label (StandardMenuTokens.ItemSupportingTextColor) */\n\tsupportingTextColor: \"text-m3-on-surface-variant\",\n\t/** Trailing supporting text (StandardMenuTokens.ItemTrailingSupportingTextColor) */\n\ttrailingSupportingTextColor: \"text-m3-on-surface-variant\",\n\t/** Trailing icon color (StandardMenuTokens.ItemTrailingIconColor) */\n\ttrailingIconColor: \"text-m3-on-surface-variant\",\n\t/** Hover state layer (OnSurface @ 8% opacity) */\n\thoverLayer: \"hover:bg-m3-on-surface/8 data-[highlighted]:bg-m3-on-surface/8\",\n\t/** Focus state layer (OnSurface @ 12% opacity) */\n\tfocusLayer: \"focus:bg-m3-on-surface/12 data-[highlighted]:bg-m3-on-surface/8\",\n\t/** Selected item background (StandardMenuTokens.ItemSelectedContainerColor) */\n\tselectedBg: \"bg-m3-tertiary-container\",\n\t/** Selected item text (StandardMenuTokens.ItemSelectedLabelTextColor) */\n\tselectedText: \"text-m3-on-tertiary-container\",\n\t/** Selected item icon (StandardMenuTokens.ItemSelectedLeadingIconColor) */\n\tselectedIcon: \"text-m3-on-tertiary-container\",\n\t/** Disabled opacity: 38% (StandardMenuTokens.ItemDisabledLabelTextOpacity) */\n\tdisabledOpacity: \"data-disabled:opacity-[0.38]\",\n} as const;\n\n/**\n * Baseline color variant tokens.\n * Container uses SurfaceContainer, Selected uses SecondaryContainer.\n */\nexport const BASELINE_COLORS = {\n\tcontainerBg: \"bg-m3-surface-container\",\n\tlabelText: \"text-m3-on-surface\",\n\ticonColor: \"text-m3-on-surface-variant\",\n\tsupportingTextColor: \"text-m3-on-surface-variant\",\n\ttrailingSupportingTextColor: \"text-m3-on-surface-variant\",\n\ttrailingIconColor: \"text-m3-on-surface-variant\",\n\thoverLayer: \"hover:bg-m3-on-surface/8 data-[highlighted]:bg-m3-on-surface/8\",\n\tfocusLayer: \"focus:bg-m3-on-surface/12 data-[highlighted]:bg-m3-on-surface/8\",\n\tselectedBg: \"bg-m3-secondary-container\",\n\tselectedText: \"text-m3-on-secondary-container\",\n\tselectedIcon: \"text-m3-on-secondary-container\",\n\tdisabledOpacity: \"data-disabled:opacity-[0.38]\",\n} as const;\n\n/**\n * Vibrant color variant tokens (TertiaryContainer-based).\n * Source: VibrantMenuTokens.kt\n *\n * Container: TertiaryContainer\n * Text: OnTertiaryContainer\n * Icons: OnTertiaryContainer\n * Selected container: Tertiary\n * Selected text/icons: OnTertiary\n */\nexport const VIBRANT_COLORS = {\n\t/** Group/popup container background (VibrantMenuTokens.ContainerColor) */\n\tcontainerBg: \"bg-m3-tertiary-container\",\n\t/** Label text color (VibrantMenuTokens.ItemLabelTextColor) */\n\tlabelText: \"text-m3-on-tertiary-container\",\n\t/** Leading/trailing icon color (VibrantMenuTokens.ItemLeadingIconColor) */\n\ticonColor: \"text-m3-on-tertiary-container\",\n\t/** Supporting text below label (VibrantMenuTokens.ItemSupportingTextColor) */\n\tsupportingTextColor: \"text-m3-on-tertiary-container\",\n\t/** Trailing supporting text (VibrantMenuTokens.ItemTrailingSupportingTextColor) */\n\ttrailingSupportingTextColor: \"text-m3-on-tertiary-container\",\n\t/** Trailing icon color (VibrantMenuTokens.ItemTrailingIconColor) */\n\ttrailingIconColor: \"text-m3-on-tertiary-container\",\n\t/** Hover state layer (OnTertiaryContainer @ 8% opacity) */\n\thoverLayer:\n\t\t\"hover:bg-m3-on-tertiary-container/8 data-[highlighted]:bg-m3-on-tertiary-container/8\",\n\t/** Focus state layer (OnTertiaryContainer @ 12% opacity) */\n\tfocusLayer:\n\t\t\"focus:bg-m3-on-tertiary-container/12 data-[highlighted]:bg-m3-on-tertiary-container/8\",\n\t/** Selected item background (VibrantMenuTokens.ItemSelectedContainerColor = Tertiary) */\n\tselectedBg: \"bg-m3-tertiary\",\n\t/** Selected item text (VibrantMenuTokens.ItemSelectedLabelTextColor = OnTertiary) */\n\tselectedText: \"text-m3-on-tertiary\",\n\t/** Selected item icon (VibrantMenuTokens.ItemSelectedLeadingIconColor = OnTertiary) */\n\tselectedIcon: \"text-m3-on-tertiary\",\n\t/** Disabled opacity: 38% (VibrantMenuTokens.ItemDisabledLabelTextOpacity) */\n\tdisabledOpacity: \"data-disabled:opacity-[0.38]\",\n} as const;\n\n// ─── Divider ──────────────────────────────────────────────────────────────────\n\n/**\n * HorizontalDivider padding: horizontal=12dp, vertical=2dp.\n * Source: MenuDefaults.HorizontalDividerPadding\n */\nexport const DIVIDER_PADDING = \"mx-3 my-0.5\"; // 12dp horizontal, 2dp vertical\nexport const DIVIDER_COLOR = \"bg-m3-outline-variant\";\n","// ─── MD3 Expressive Menu — Shared Utilities ──────────────────────────────────\nimport * as React from \"react\";\n\n/**\n * Recursively flattens React.Fragment nodes and collects valid React elements.\n * Required before using `React.cloneElement`, which cannot be called on Fragment.\n */\nexport function flattenChildren(nodes: React.ReactNode): React.ReactElement[] {\n\treturn React.Children.toArray(nodes).reduce(\n\t\t(acc: React.ReactElement[], child) => {\n\t\t\tif (!React.isValidElement(child)) return acc;\n\t\t\tif (child.type === React.Fragment) {\n\t\t\t\treturn acc.concat(\n\t\t\t\t\tflattenChildren(\n\t\t\t\t\t\t(child as React.ReactElement<{ children?: React.ReactNode }>).props\n\t\t\t\t\t\t\t.children,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tacc.push(child as React.ReactElement);\n\t\t\treturn acc;\n\t\t},\n\t\t[],\n\t);\n}\n","// ─── MD3 Expressive Menu — ContextMenu (right-click / long-press) ─────────────\n// Wraps @radix-ui/react-context-menu and provides MenuContext with\n// menuPrimitive=\"context\" so MenuItem automatically selects ContextMenu primitives.\n//\n// Visual styling is identical to Menu — baseline or expressive variant.\n// Positioning, scroll lock, and outside click are all handled by Radix.\nimport * as RxContextMenu from \"@radix-ui/react-context-menu\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { FAST_SPATIAL_SPRING } from \"./menu-animations\";\nimport { MenuProvider, useMenuContext } from \"./menu-context\";\nimport {\n\tBASELINE_COLORS,\n\tMENU_CONTAINER_SHAPE,\n\tMENU_GROUP_GAP,\n\tMENU_MAX_WIDTH,\n\tMENU_MIN_WIDTH,\n\tMENU_POPUP_PADDING_Y,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tContextMenuContentProps,\n\tContextMenuProps,\n\tContextMenuTriggerProps,\n} from \"./menu-types\";\nimport { flattenChildren } from \"./menu-utils\";\n\n// ─── ContextMenu (Root) ───────────────────────────────────────────────────────\n\n/**\n * Root of a context menu (right-click / long-press triggered popup).\n *\n * Wraps `@radix-ui/react-context-menu` Root and provides `MenuContext` with\n * `menuPrimitive=\"context\"` so nested `MenuItem` components automatically use\n * ContextMenu Radix primitives for correct accessibility and keyboard navigation.\n *\n * @example\n * // Baseline context menu\n * <ContextMenu variant=\"baseline\">\n *   <ContextMenuTrigger asChild>\n *     <div>Right-click me</div>\n *   </ContextMenuTrigger>\n *   <ContextMenuContent>\n *     <MenuItem>Copy</MenuItem>\n *     <MenuItem>Paste</MenuItem>\n *   </ContextMenuContent>\n * </ContextMenu>\n *\n * @example\n * // Expressive context menu with groups\n * <ContextMenu variant=\"expressive\">\n *   <ContextMenuTrigger asChild><canvas /></ContextMenuTrigger>\n *   <ContextMenuContent>\n *     <MenuGroup>\n *       <MenuItem>Cut</MenuItem>\n *       <MenuItem>Copy</MenuItem>\n *     </MenuGroup>\n *     <MenuGroup>\n *       <MenuItem>Paste</MenuItem>\n *     </MenuGroup>\n *   </ContextMenuContent>\n * </ContextMenu>\n */\nexport function ContextMenu({\n\tchildren,\n\tvariant = \"baseline\",\n\tcolorVariant = \"standard\",\n}: ContextMenuProps) {\n\tconst [open, setOpen] = React.useState(false);\n\n\treturn (\n\t\t<MenuProvider\n\t\t\tvariant={variant}\n\t\t\tcolorVariant={colorVariant}\n\t\t\tmenuPrimitive=\"context\"\n\t\t\topen={open}\n\t\t\tonOpenChange={setOpen}\n\t\t>\n\t\t\t<RxContextMenu.Root onOpenChange={setOpen}>{children}</RxContextMenu.Root>\n\t\t</MenuProvider>\n\t);\n}\nContextMenu.displayName = \"ContextMenu\";\n\n// ─── ContextMenuTrigger ───────────────────────────────────────────────────────\n\n/**\n * The trigger area for a ContextMenu. Right-click (or long-press on touch)\n * within this area opens the context menu.\n *\n * Use `asChild` to apply trigger behavior to your own element without an\n * extra wrapper `<span>`.\n */\nexport const ContextMenuTrigger = React.forwardRef<\n\tReact.ComponentRef<typeof RxContextMenu.Trigger>,\n\tContextMenuTriggerProps &\n\t\tReact.ComponentPropsWithoutRef<typeof RxContextMenu.Trigger>\n>(({ children, asChild = true, ...props }, ref) => (\n\t<RxContextMenu.Trigger ref={ref} asChild={asChild} {...props}>\n\t\t{children}\n\t</RxContextMenu.Trigger>\n));\nContextMenuTrigger.displayName = \"ContextMenuTrigger\";\n\n// ─── ContextMenuContent (popup panel) ─────────────────────────────────────────\n\n/**\n * The popup container for the context menu's contents.\n *\n * Renders into a portal via Radix. Uses Framer Motion `AnimatePresence` for\n * smooth enter/exit animations. Transform-origin is automatically set by\n * Radix via `--radix-context-menu-content-transform-origin`.\n *\n * Visual styling follows `variant` from `ContextMenuContext`:\n * - `baseline`   → CornerExtraSmall (4px), standard M3 styling\n * - `expressive` → rounded-2xl, shape-morphing groups, elevation-2\n *\n * @param hasOverflow - Set true when using SubMenu to prevent clipping\n */\nexport const ContextMenuContent = React.forwardRef<\n\tReact.ComponentRef<typeof RxContextMenu.Content>,\n\tContextMenuContentProps &\n\t\tOmit<\n\t\t\tReact.ComponentPropsWithoutRef<typeof RxContextMenu.Content>,\n\t\t\t\"asChild\"\n\t\t>\n>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\thasOverflow = false,\n\t\t\tcolorVariant: propColorVariant,\n\t\t\tseparatorStyle = \"gap\",\n\t\t\tmaxHeight = \"360px\",\n\t\t\tviewportRef,\n\t\t\tonViewportRef,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\topen,\n\t\t\tvariant,\n\t\t\tcolorVariant: contextColorVariant,\n\t\t} = useMenuContext();\n\t\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\n\t\tconst colors =\n\t\t\tvariant === \"baseline\"\n\t\t\t\t? BASELINE_COLORS\n\t\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t\t? VIBRANT_COLORS\n\t\t\t\t\t: STANDARD_COLORS;\n\n\t\tconst isExpressiveGap =\n\t\t\tvariant === \"expressive\" && separatorStyle === \"gap\";\n\n\t\tconst setViewportNode = React.useCallback(\n\t\t\t(node: HTMLDivElement | null) => {\n\t\t\t\tif (typeof viewportRef === \"function\") {\n\t\t\t\t\tviewportRef(node);\n\t\t\t\t} else if (viewportRef && typeof viewportRef === \"object\") {\n\t\t\t\t\t(\n\t\t\t\t\t\tviewportRef as React.MutableRefObject<HTMLDivElement | null>\n\t\t\t\t\t).current = node;\n\t\t\t\t}\n\t\t\t\tonViewportRef?.(node);\n\t\t\t},\n\t\t\t[viewportRef, onViewportRef],\n\t\t);\n\n\t\t// Memoize containerClassName — cn() is expensive and inputs rarely change\n\t\tconst containerClassName = React.useMemo(\n\t\t\t() =>\n\t\t\t\tvariant === \"expressive\"\n\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\"z-50 flex flex-col w-full\",\n\t\t\t\t\t\t\tMENU_MIN_WIDTH,\n\t\t\t\t\t\t\tMENU_MAX_WIDTH,\n\t\t\t\t\t\t\tisExpressiveGap ? MENU_GROUP_GAP : \"\",\n\t\t\t\t\t\t\tisExpressiveGap ? \"bg-transparent\" : colors.containerBg,\n\t\t\t\t\t\t\tisExpressiveGap ? \"\" : \"rounded-2xl\",\n\t\t\t\t\t\t\tisExpressiveGap ? \"\" : \"elevation-2\",\n\t\t\t\t\t\t\thasOverflow || isExpressiveGap\n\t\t\t\t\t\t\t\t? \"overflow-visible\"\n\t\t\t\t\t\t\t\t: \"overflow-hidden\",\n\t\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)\n\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\"z-50 flex flex-col\",\n\t\t\t\t\t\t\tMENU_MIN_WIDTH,\n\t\t\t\t\t\t\tMENU_MAX_WIDTH,\n\t\t\t\t\t\t\tMENU_POPUP_PADDING_Y,\n\t\t\t\t\t\t\tMENU_GROUP_GAP,\n\t\t\t\t\t\t\tcolors.containerBg,\n\t\t\t\t\t\t\tMENU_CONTAINER_SHAPE,\n\t\t\t\t\t\t\t\"elevation-2\",\n\t\t\t\t\t\t\thasOverflow ? \"overflow-visible\" : \"overflow-hidden\",\n\t\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t),\n\t\t\t[variant, isExpressiveGap, hasOverflow, className, colors.containerBg],\n\t\t);\n\n\t\t// Memoize child processing\n\t\tconst renderedChildren = React.useMemo(() => {\n\t\t\tif (variant !== \"expressive\") return children;\n\n\t\t\tconst validChildren = flattenChildren(children);\n\t\t\tconst groupCount = validChildren.length;\n\n\t\t\tconst enhanced = validChildren.map((child, i) =>\n\t\t\t\tReact.cloneElement(\n\t\t\t\t\tchild as React.ReactElement<{\n\t\t\t\t\t\tindex?: number;\n\t\t\t\t\t\tcount?: number;\n\t\t\t\t\t\tisGapVariant?: boolean;\n\t\t\t\t\t\tclassName?: string;\n\t\t\t\t\t}>,\n\t\t\t\t\t{ index: i, count: groupCount, isGapVariant: isExpressiveGap },\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tif (separatorStyle !== \"divider\") return enhanced;\n\n\t\t\treturn enhanced.reduce<React.ReactNode[]>((acc, child, i) => {\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tacc.push(\n\t\t\t\t\t\t<hr\n\t\t\t\t\t\t\tkey={`divider-${(child as React.ReactElement).key || i}`}\n\t\t\t\t\t\t\tclassName={cn(\"mx-3 my-0.5 h-px border-0 bg-m3-outline-variant\")}\n\t\t\t\t\t\t/>,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tacc.push(child);\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\t\t}, [children, variant, isExpressiveGap, separatorStyle]);\n\n\t\treturn (\n\t\t\t<AnimatePresence>\n\t\t\t\t{open && (\n\t\t\t\t\t<RxContextMenu.Portal forceMount>\n\t\t\t\t\t\t<RxContextMenu.Content ref={ref} asChild forceMount {...props}>\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0, scale: 0.95, y: -4 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1, y: 0 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0, scale: 0.95, y: -4 }}\n\t\t\t\t\t\t\t\ttransition={FAST_SPATIAL_SPRING}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(props.style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\t\t\t\"var(--radix-context-menu-content-transform-origin)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hasOverflow || !maxHeight ? (\n\t\t\t\t\t\t\t\t\trenderedChildren\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\t\t\t\tstyle={{ maxHeight }}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full flex-1 min-h-0\"\n\t\t\t\t\t\t\t\t\t\tviewportRef={setViewportNode}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderedChildren}\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t</RxContextMenu.Content>\n\t\t\t\t\t</RxContextMenu.Portal>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\t},\n);\nContextMenuContent.displayName = \"ContextMenuContent\";\n","// ─── MD3 Expressive Menu — Root (Menu, MenuTrigger, MenuContent) ─────────────\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { MENU_CONTAINER_VARIANTS } from \"./menu-animations\";\nimport { MenuProvider, useMenuContext } from \"./menu-context\";\nimport {\n\tBASELINE_COLORS,\n\tMENU_CONTAINER_SHAPE,\n\tMENU_GROUP_GAP,\n\tMENU_MAX_WIDTH,\n\tMENU_MIN_WIDTH,\n\tMENU_POPUP_PADDING_Y,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tMenuContentProps,\n\tMenuGroupProps,\n\tMenuItemPosition,\n\tMenuItemProps,\n\tMenuProps,\n\tMenuTriggerProps,\n} from \"./menu-types\";\nimport { flattenChildren } from \"./menu-utils\";\n\n// ─── Menu (Root) ──────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Menu root component.\n *\n * Wraps Radix `DropdownMenu.Root` and provides `MenuContext` with `colorVariant`\n * and `open` state to all descendant MenuItem and MenuGroup components.\n *\n * @example\n * <Menu colorVariant=\"standard\">\n *   <MenuTrigger asChild>\n *     <IconButton name=\"more_vert\" />\n *   </MenuTrigger>\n *   <MenuContent>\n *     <MenuGroup index={0} count={2}>\n *       <MenuItem>Cut</MenuItem>\n *       <MenuItem>Copy</MenuItem>\n *     </MenuGroup>\n *     <MenuGroup index={1} count={2}>\n *       <MenuItem>Paste</MenuItem>\n *     </MenuGroup>\n *   </MenuContent>\n * </Menu>\n */\nexport function Menu({\n\tchildren,\n\tvariant,\n\tmenuVariant,\n\tcolorVariant = \"standard\",\n\tdensity = 0,\n\topen: controlledOpen,\n\tonOpenChange: controlledOnOpenChange,\n\tdefaultOpen,\n\t...props\n}: MenuProps &\n\tOmit<React.ComponentPropsWithoutRef<typeof DropdownMenu.Root>, \"children\">) {\n\t// Support deprecated menuVariant prop\n\tconst resolvedVariant = variant ?? menuVariant ?? \"baseline\";\n\n\t// Support both controlled and uncontrolled open state.\n\t// Initialize internalOpen from defaultOpen so that `defaultOpen={true}` works.\n\tconst [internalOpen, setInternalOpen] = React.useState(\n\t\t() => defaultOpen ?? false,\n\t);\n\tconst isControlled = controlledOpen !== undefined;\n\tconst open = isControlled ? controlledOpen : internalOpen;\n\n\tconst handleOpenChange = React.useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (!isControlled) setInternalOpen(next);\n\t\t\tcontrolledOnOpenChange?.(next);\n\t\t},\n\t\t[isControlled, controlledOnOpenChange],\n\t);\n\n\treturn (\n\t\t<MenuProvider\n\t\t\tvariant={resolvedVariant}\n\t\t\tcolorVariant={colorVariant}\n\t\t\tdensity={density}\n\t\t\topen={open}\n\t\t\tonOpenChange={handleOpenChange}\n\t\t>\n\t\t\t<DropdownMenu.Root\n\t\t\t\t{...props}\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\topen={isControlled ? open : undefined}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</DropdownMenu.Root>\n\t\t</MenuProvider>\n\t);\n}\nMenu.displayName = \"Menu\";\n\n// ─── MenuTrigger ──────────────────────────────────────────────────────────────\n\n/**\n * The trigger element that opens/closes the Menu.\n *\n * Use `asChild` to merge trigger behavior with your own element (e.g. a Button or IconButton).\n */\nexport const MenuTrigger = React.forwardRef<\n\tReact.ComponentRef<typeof DropdownMenu.Trigger>,\n\tMenuTriggerProps & React.ComponentPropsWithoutRef<typeof DropdownMenu.Trigger>\n>(({ children, asChild = true, ...props }, ref) => (\n\t<DropdownMenu.Trigger ref={ref} asChild={asChild} {...props}>\n\t\t{children}\n\t</DropdownMenu.Trigger>\n));\nMenuTrigger.displayName = \"MenuTrigger\";\n\n// ─── MenuContent (popup panel) ────────────────────────────────────────────────\n\n/**\n * The popup container for the menu's contents.\n *\n * Renders into a portal. Uses Radix `forceMount` + Framer Motion `AnimatePresence`\n * so the exit animation (scale + opacity via FastEffects) plays before the portal\n * unmounts. The `open` state is read from `MenuContext`.\n *\n * Transform-origin is automatically set via the Radix CSS variable\n * `--radix-dropdown-menu-content-transform-origin`.\n *\n * @param hasOverflow - Set true when using SubMenu to prevent clipping\n */\nexport const MenuContent = React.forwardRef<\n\tReact.ComponentRef<typeof DropdownMenu.Content>,\n\tMenuContentProps &\n\t\tOmit<React.ComponentPropsWithoutRef<typeof DropdownMenu.Content>, \"asChild\">\n>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tsideOffset = 6,\n\t\t\tside = \"bottom\",\n\t\t\talign = \"start\",\n\t\t\thasOverflow = false,\n\t\t\tcolorVariant: propColorVariant,\n\t\t\tseparatorStyle = \"gap\",\n\t\t\tmatchTriggerWidth = false,\n\t\t\tmaxHeight = \"360px\",\n\t\t\tviewportRef,\n\t\t\tonViewportRef,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\topen,\n\t\t\tvariant,\n\t\t\tcolorVariant: contextColorVariant,\n\t\t} = useMenuContext();\n\t\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\n\t\t// Baseline always uses baseline colors; expressive uses colorVariant\n\t\tconst colors =\n\t\t\tvariant === \"baseline\"\n\t\t\t\t? BASELINE_COLORS\n\t\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t\t? VIBRANT_COLORS\n\t\t\t\t\t: STANDARD_COLORS;\n\n\t\tconst isExpressiveGap =\n\t\t\tvariant === \"expressive\" && separatorStyle === \"gap\";\n\n\t\tconst setViewportNode = React.useCallback(\n\t\t\t(node: HTMLDivElement | null) => {\n\t\t\t\tif (typeof viewportRef === \"function\") {\n\t\t\t\t\tviewportRef(node);\n\t\t\t\t} else if (viewportRef && typeof viewportRef === \"object\") {\n\t\t\t\t\t(\n\t\t\t\t\t\tviewportRef as React.MutableRefObject<HTMLDivElement | null>\n\t\t\t\t\t).current = node;\n\t\t\t\t}\n\t\t\t\tonViewportRef?.(node);\n\t\t\t},\n\t\t\t[viewportRef, onViewportRef],\n\t\t);\n\n\t\t// Memoize containerClassName — cn() is expensive and inputs rarely change\n\t\tconst containerClassName = React.useMemo(() => {\n\t\t\tconst widthClass = matchTriggerWidth\n\t\t\t\t? \"w-[var(--radix-dropdown-menu-trigger-width)]\"\n\t\t\t\t: cn(MENU_MIN_WIDTH, MENU_MAX_WIDTH);\n\n\t\t\treturn variant === \"expressive\"\n\t\t\t\t? cn(\n\t\t\t\t\t\t\"z-50 flex flex-col\",\n\t\t\t\t\t\twidthClass,\n\t\t\t\t\t\tisExpressiveGap ? MENU_GROUP_GAP : \"\",\n\t\t\t\t\t\tisExpressiveGap ? \"bg-transparent\" : colors.containerBg,\n\t\t\t\t\t\tisExpressiveGap ? \"\" : \"p-1\",\n\t\t\t\t\t\tisExpressiveGap ? \"\" : \"rounded-2xl\",\n\t\t\t\t\t\tisExpressiveGap ? \"\" : \"elevation-2\",\n\t\t\t\t\t\thasOverflow || isExpressiveGap\n\t\t\t\t\t\t\t? \"overflow-visible\"\n\t\t\t\t\t\t\t: \"overflow-hidden\",\n\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)\n\t\t\t\t: cn(\n\t\t\t\t\t\t\"z-50 flex flex-col\",\n\t\t\t\t\t\twidthClass,\n\t\t\t\t\t\tMENU_POPUP_PADDING_Y,\n\t\t\t\t\t\tMENU_GROUP_GAP,\n\t\t\t\t\t\tcolors.containerBg,\n\t\t\t\t\t\tMENU_CONTAINER_SHAPE,\n\t\t\t\t\t\t\"elevation-2\",\n\t\t\t\t\t\thasOverflow ? \"overflow-visible\" : \"overflow-hidden\",\n\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t);\n\t\t}, [\n\t\t\tvariant,\n\t\t\tisExpressiveGap,\n\t\t\thasOverflow,\n\t\t\tmatchTriggerWidth,\n\t\t\tclassName,\n\t\t\tcolors.containerBg,\n\t\t]);\n\n\t\t// Memoize child processing — flattenChildren + cloneElement + optional reduce\n\t\tconst renderedChildren = React.useMemo(() => {\n\t\t\tif (variant !== \"expressive\") return children;\n\n\t\t\tconst validChildren = flattenChildren(children);\n\t\t\tconst groupCount = validChildren.length;\n\n\t\t\tconst enhanced = validChildren.map((child, i) => {\n\t\t\t\tif (typeof child.type === \"string\") return child;\n\n\t\t\t\tconst defaultItemPosition: MenuItemPosition =\n\t\t\t\t\tgroupCount === 1\n\t\t\t\t\t\t? \"standalone\"\n\t\t\t\t\t\t: i === 0\n\t\t\t\t\t\t\t? \"leading\"\n\t\t\t\t\t\t\t: i === groupCount - 1\n\t\t\t\t\t\t\t\t? \"trailing\"\n\t\t\t\t\t\t\t\t: \"middle\";\n\n\t\t\t\tconst itemPosition =\n\t\t\t\t\t(child.props as MenuItemProps).itemPosition ?? defaultItemPosition;\n\n\t\t\t\treturn React.cloneElement(\n\t\t\t\t\tchild as React.ReactElement<MenuGroupProps & MenuItemProps>,\n\t\t\t\t\t{\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tcount: groupCount,\n\t\t\t\t\t\titemPosition,\n\t\t\t\t\t\tisGapVariant: isExpressiveGap,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tif (separatorStyle !== \"divider\") return enhanced;\n\n\t\t\treturn enhanced.reduce<React.ReactNode[]>((acc, child, i) => {\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tacc.push(\n\t\t\t\t\t\t<hr\n\t\t\t\t\t\t\tkey={`divider-${(child as React.ReactElement).key || i}`}\n\t\t\t\t\t\t\tclassName={cn(\"mx-3 my-0.5 h-px border-0 bg-m3-outline-variant\")}\n\t\t\t\t\t\t/>,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tacc.push(child);\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\t\t}, [children, variant, isExpressiveGap, separatorStyle]);\n\n\t\treturn (\n\t\t\t<AnimatePresence>\n\t\t\t\t{open && (\n\t\t\t\t\t<DropdownMenu.Portal forceMount>\n\t\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsideOffset={sideOffset}\n\t\t\t\t\t\t\tside={side}\n\t\t\t\t\t\t\talign={align}\n\t\t\t\t\t\t\tasChild\n\t\t\t\t\t\t\tforceMount\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\trole=\"menu\"\n\t\t\t\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\tvariants={MENU_CONTAINER_VARIANTS}\n\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(props.style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\t\t\t\"var(--radix-dropdown-menu-content-transform-origin)\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{hasOverflow || !maxHeight ? (\n\t\t\t\t\t\t\t\t\trenderedChildren\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\t\t\t\tstyle={{ maxHeight }}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full flex-1 min-h-0\"\n\t\t\t\t\t\t\t\t\t\tviewportRef={setViewportNode}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderedChildren}\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\t},\n);\nMenuContent.displayName = \"MenuContent\";\n","// ─── MD3 Expressive Menu — MenuDivider ───────────────────────────────────────\n// Spec: HorizontalDividerPadding = PaddingValues(horizontal = 12.dp, vertical = 2.dp)\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useMenuContext } from \"./menu-context\";\nimport type { MenuDividerProps } from \"./menu-types\";\n\n/**\n * A horizontal divider for use between MenuItems or MenuGroups.\n *\n * Uses traditional line-based separation (as opposed to the gap-based\n * separation in MenuGroup, which is the Expressive default).\n *\n * Spec: horizontal=12dp padding, vertical=2dp padding, `outline-variant` color.\n *\n * @example\n * <MenuContent>\n *   <MenuItem>Cut</MenuItem>\n *   <MenuDivider />\n *   <MenuItem>Paste</MenuItem>\n * </MenuContent>\n */\nexport const MenuDivider = React.forwardRef<HTMLHRElement, MenuDividerProps>(\n\t({ className, isGapVariant: _isGapVariant, ...props }, ref) => {\n\t\tconst { menuVariant } = useMenuContext();\n\n\t\treturn (\n\t\t\t<DropdownMenu.Separator asChild>\n\t\t\t\t<hr\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// Baseline: 8dp vertical margin, 0 horizontal. Expressive: 12dp horizontal, 2dp vertical\n\t\t\t\t\t\tmenuVariant === \"baseline\" ? \"my-2 mx-0\" : \"mx-3 my-0.5\",\n\t\t\t\t\t\t// 1px height line\n\t\t\t\t\t\t\"h-px border-0\",\n\t\t\t\t\t\t// outline-variant color\n\t\t\t\t\t\t\"bg-m3-outline-variant\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</DropdownMenu.Separator>\n\t\t);\n\t},\n);\nMenuDivider.displayName = \"MenuDivider\";\n","// ─── MD3 Expressive Menu — MenuGroup ────────────────────────────────────────\n// Gap-based grouping with shape morphing on hover (core Expressive feature)\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { FAST_SPATIAL_SPRING } from \"./menu-animations\";\nimport { useMenuContext } from \"./menu-context\";\nimport {\n\tBASELINE_COLORS,\n\tGROUP_SHAPES,\n\tMENU_GROUP_PADDING_Y,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tMenuGroupPosition,\n\tMenuGroupProps,\n\tMenuItemPosition,\n\tMenuItemProps,\n} from \"./menu-types\";\nimport { flattenChildren } from \"./menu-utils\";\n\n// Extend MenuGroupProps with data-* attributes for testing and aria- attributes\ntype MenuGroupDivProps = MenuGroupProps & {\n\t[key: `data-${string}`]: string | undefined;\n\tid?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n};\n\n// ─── Position helper ──────────────────────────────────────────────────────────\n\nfunction getGroupPosition(index: number, count: number): MenuGroupPosition {\n\tif (count === 1) return \"standalone\";\n\tif (index === 0) return \"leading\";\n\tif (index === count - 1) return \"trailing\";\n\treturn \"middle\";\n}\n\nfunction getGroupActiveShape(position: MenuGroupPosition): string {\n\treturn GROUP_SHAPES[\n\t\t`${position}Active` as keyof typeof GROUP_SHAPES\n\t] as string;\n}\n\n// ─── MenuGroup ────────────────────────────────────────────────────────────────\n\n/**\n * A container that groups MenuItem elements with gap-based visual separation —\n * the defining feature of MD3 Expressive menus.\n *\n * Shape morphing: on hover, the container's border-radius transitions from the\n * \"inactive\" small shape to the \"active\" large shape via a FastSpatial spring.\n * The shape depends on the group's position (leading/middle/trailing/standalone).\n *\n * MenuItem children automatically receive `itemPosition` props based on their\n * index within the group.\n *\n * @example\n * <MenuContent>\n *   <MenuGroup>\n *     <MenuItem>Cut</MenuItem>\n *     <MenuItem>Copy</MenuItem>\n *     <MenuItem>Paste</MenuItem>\n *   </MenuGroup>\n *   <MenuGroup>\n *     <MenuItem>Select All</MenuItem>\n *   </MenuGroup>\n * </MenuContent>\n */\nexport const MenuGroup = React.forwardRef<HTMLDivElement, MenuGroupDivProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tlabel,\n\t\t\tindex = 0,\n\t\t\tcount = 1,\n\t\t\tcolorVariant: propColorVariant,\n\t\t\tisGapVariant,\n\t\t\titemPosition,\n\t\t\tclassName,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst { menuVariant, colorVariant: contextColorVariant } = useMenuContext();\n\t\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\t\tconst colors =\n\t\t\tmenuVariant === \"baseline\"\n\t\t\t\t? BASELINE_COLORS\n\t\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t\t? VIBRANT_COLORS\n\t\t\t\t\t: STANDARD_COLORS;\n\n\t\tconst position = getGroupPosition(index, count);\n\t\tconst currentShape = getGroupActiveShape(position);\n\n\t\tconst enhancedChildren = React.useMemo(() => {\n\t\t\tconst valid = flattenChildren(children);\n\t\t\tconst itemCount = valid.length;\n\t\t\treturn valid.map((child, i) => {\n\t\t\t\tif (typeof child.type === \"string\") return child;\n\t\t\t\tconst defaultItemPosition: MenuItemPosition =\n\t\t\t\t\titemCount === 1\n\t\t\t\t\t\t? \"standalone\"\n\t\t\t\t\t\t: i === 0\n\t\t\t\t\t\t\t? \"leading\"\n\t\t\t\t\t\t\t: i === itemCount - 1\n\t\t\t\t\t\t\t\t? \"trailing\"\n\t\t\t\t\t\t\t\t: \"middle\";\n\t\t\t\tconst itemPosition =\n\t\t\t\t\t(child.props as MenuItemProps).itemPosition ?? defaultItemPosition;\n\t\t\t\treturn React.cloneElement(child as React.ReactElement<MenuItemProps>, {\n\t\t\t\t\titemPosition,\n\t\t\t\t\tcolorVariant,\n\t\t\t\t});\n\t\t\t});\n\t\t}, [children, colorVariant]);\n\n\t\treturn (\n\t\t\t<m.div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"group\"\n\t\t\t\taria-label={label}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative\",\n\t\t\t\t\t// In baseline variant, MenuGroup is transparent so it shouldn't clip.\n\t\t\t\t\t// In expressive variant, it needs overflow-hidden to clip hover states to its morphing shape.\n\t\t\t\t\tmenuVariant === \"baseline\" ? \"\" : \"overflow-hidden\",\n\t\t\t\t\t// Padding: uniform 4dp (p-1) for expressive menus (matches 12px inner item corners inside 16px outer corners)\n\t\t\t\t\tmenuVariant === \"expressive\" ? \"p-1\" : MENU_GROUP_PADDING_Y,\n\t\t\t\t\t// Gap variant has floating segments, so each group manages its own shadow\n\t\t\t\t\tisGapVariant ? \"elevation-2\" : \"\",\n\t\t\t\t\t// Background based on color variant (transparent for baseline to avoid double-layering)\n\t\t\t\t\tmenuVariant === \"baseline\" ? \"bg-transparent\" : colors.containerBg,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tanimate={{ borderRadius: currentShape }}\n\t\t\t\ttransition={FAST_SPATIAL_SPRING}\n\t\t\t\t{...rest}\n\t\t\t>\n\t\t\t\t{/* Optional group label: labelSmall typography, 12dp horizontal padding */}\n\t\t\t\t{label && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t// Padding: 12dp top, 12dp horizontal, 8dp bottom (MD3 spec)\n\t\t\t\t\t\t\t\"block pt-3 px-3 pb-2\",\n\t\t\t\t\t\t\t\"text-label-small\",\n\t\t\t\t\t\t\tmenuVariant === \"baseline\"\n\t\t\t\t\t\t\t\t? \"text-m3-on-surface-variant\"\n\t\t\t\t\t\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t\t\t\t\t\t? \"text-m3-on-tertiary-container\"\n\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{enhancedChildren}\n\t\t\t</m.div>\n\t\t);\n\t},\n);\nMenuGroup.displayName = \"MenuGroup\";\n","/**\n * @file shared/constants.ts\n *\n * Shared animation constants for MD3 Expressive UI components.\n * Centralises spring transition configs and motion variant objects to avoid\n * duplication across button, icon-button, FAB, and other interactive components.\n *\n * @see https://m3.material.io/foundations/animation/overview\n */\n\nimport type { Target, TargetAndTransition, Transition } from \"motion/react\";\nimport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n} from \"./motion-tokens\";\n\nexport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n\tgetMotionSpring,\n\tgetMotionTransitionCSS,\n\tSLOW_EFFECTS_SPRING,\n\tSLOW_SPATIAL_SPRING,\n} from \"./motion-tokens\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Spring Transitions\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Fast spring — used for border-radius morphing, icon swaps.\n * Maps to MD3 `fast.effects` (critically damped, stiffness 3800).\n *\n * @example\n * ```tsx\n * <m.button transition={{ borderRadius: SPRING_TRANSITION_FAST }}>...</m.button>\n * ```\n */\nexport const SPRING_TRANSITION_FAST: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Standard spring — used for icon/content scale animations.\n * Maps to MD3 `default.effects` (critically damped, stiffness 1600).\n *\n * @example\n * ```tsx\n * <m.span transition={SPRING_TRANSITION}>...</m.span>\n * ```\n */\nexport const SPRING_TRANSITION: Transition = DEFAULT_EFFECTS_SPRING;\n\n/**\n * MD3 Expressive spring — active indicator expand/collapse.\n * Maps to MD3 `default.spatial` (dampingRatio: 0.8, stiffness: 380).\n * Gentle bounce for the \"pop\" effect per MD3 Expressive spec.\n */\nexport const SPRING_TRANSITION_EXPRESSIVE: Transition = DEFAULT_SPATIAL_SPRING;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Icon Span Motion Variants\n// Used for icon/loading indicator swap animation inside FAB and IconButton.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Framer Motion variants for animating icon spans in/out.\n *\n * Scale from near-zero → 1 on enter; back to near-zero on exit.\n * The near-zero value (0.01) avoids the SMIL freeze bug on Chromium\n * that occurs when an element starts at exactly `scale(0)`.\n *\n * @example\n * ```tsx\n * <AnimatePresence mode=\"wait\">\n *   {loading ? (\n *     <m.span key=\"loading\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n *       <LoadingIndicator />\n *     </m.span>\n *   ) : (\n *     <m.span key=\"icon\" {...ICON_SPAN_VARIANTS} transition={SPRING_TRANSITION}>\n *       {icon}\n *     </m.span>\n *   )}\n * </AnimatePresence>\n * ```\n */\nexport const ICON_SPAN_VARIANTS: {\n\tinitial: Target;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { scale: 0.01 },\n\tanimate: { scale: 1 },\n\texit: { scale: 0.01 },\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// MD3 TextField Animation Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Standard easing curve — used for label float, active indicator expand.\n * cubic-bezier(0.2, 0, 0, 1)\n *\n * @see https://m3.material.io/foundations/animation/easing-and-duration\n */\nexport const MD3_STANDARD_EASING: [number, number, number, number] = [\n\t0.2, 0, 0, 1,\n];\n\n/**\n * Duration for floating label transition: 150ms.\n * Used when label moves between inline position ↔ floated position.\n */\nexport const MD3_LABEL_FLOAT_DURATION = 0.15;\n\n/**\n * Duration for active indicator expand/collapse: 200ms.\n * Used for the bottom border (filled) and outline (outlined) on focus.\n */\nexport const MD3_INDICATOR_DURATION = 0.2;\n\n/**\n * Duration for supporting text / error text appear/disappear: 120ms.\n */\nexport const MD3_SUPPORTING_DURATION = 0.12;\n\n/**\n * Duration for trailing icon appear/disappear (clear button, password toggle): 100ms.\n */\nexport const MD3_ICON_SWAP_DURATION = 0.1;\n","import { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { SPRING_TRANSITION_FAST } from \"./shared/constants\";\n\n// @internal — font must be loaded via '@bug-on/m3-expressive/material-symbols.css'\nconst VARIANT_FONT: Record<NonNullable<IconProps[\"variant\"]>, string> = {\n\toutlined: \"'Material Symbols Outlined'\",\n\trounded: \"'Material Symbols Rounded'\",\n\tsharp: \"'Material Symbols Sharp'\",\n};\n\n/**\n * Props cho component {@link Icon}.\n *\n * All variable font axes are mapped directly to `font-variation-settings`.\n */\nexport interface IconProps extends React.HTMLAttributes<HTMLSpanElement> {\n\t/**\n\t * Name of the Material Symbol in snake_case format.\n\t * @example \"home\", \"arrow_forward\", \"settings\"\n\t * @see https://fonts.google.com/icons\n\t */\n\tname: string;\n\n\t/**\n\t * Geometric style variant — maps to font family.\n\t * @default \"outlined\"\n\t */\n\tvariant?: \"outlined\" | \"rounded\" | \"sharp\";\n\n\t/**\n\t * `FILL` axis. `0` = outlined, `1` = filled.\n\t * Features spring animation when `animateFill` is true.\n\t * @default 0\n\t */\n\tfill?: 0 | 1;\n\n\t/**\n\t * `wght` axis — stroke weight. Should match surrounding text weight.\n\t * @default 400\n\t */\n\tweight?: 100 | 200 | 300 | 400 | 500 | 600 | 700;\n\n\t/**\n\t * `GRAD` axis — fine-tunes visual weight without affecting layout dimensions.\n\t * Use `-25` on dark backgrounds to offset light halation effects.\n\t * @default 0\n\t */\n\tgrade?: -50 | -25 | 0 | 100 | 200;\n\n\t/**\n\t * `opsz` axis — optical size in dp. Used to set `font-size` if `size` is not specified.\n\t * Match rendered pixel size for best quality.\n\t * @default 24\n\t */\n\topticalSize?: 20 | 24 | 40 | 48;\n\n\t/**\n\t * Direct `font-size` override in px. `opsz` axis still respects `opticalSize`.\n\t * @example size={18} opticalSize={20}\n\t */\n\tsize?: number | \"inherit\";\n\n\t/**\n\t * Enables smooth spring animation when toggling FILL axis (uses `SPRING_TRANSITION_FAST`).\n\t * Requires `motion` dependency.\n\t * @default false\n\t * @example <Icon name=\"favorite\" fill={isLiked ? 1 : 0} animateFill />\n\t */\n\tanimateFill?: boolean;\n}\n\nconst IconComponent = React.forwardRef<HTMLSpanElement, IconProps>(\n\t(\n\t\t{\n\t\t\tname,\n\t\t\tvariant = \"outlined\",\n\t\t\tfill = 0,\n\t\t\tweight = 400,\n\t\t\tgrade = 0,\n\t\t\topticalSize = 24,\n\t\t\tsize,\n\t\t\tanimateFill = false,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst fontVariationSettings = `'FILL' ${fill}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opticalSize}`;\n\n\t\tconst computedStyle: React.CSSProperties = {\n\t\t\tfontFamily: VARIANT_FONT[variant],\n\t\t\tfontSize:\n\t\t\t\tsize === \"inherit\"\n\t\t\t\t\t? \"inherit\"\n\t\t\t\t\t: size != null\n\t\t\t\t\t\t? `${size}px`\n\t\t\t\t\t\t: `${opticalSize}px`,\n\t\t\tfontVariationSettings,\n\t\t\t...style,\n\t\t};\n\n\t\tif (animateFill) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tanimate={{ fontVariationSettings }}\n\t\t\t\t\t\ttransition={SPRING_TRANSITION_FAST}\n\t\t\t\t\t\tstyle={computedStyle}\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: motion v12 HTMLMotionProps conflicts with React's event types\n\t\t\t\t\t\t{...(restProps as any)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{name}\n\t\t\t\t\t</m.span>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<span\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"md-icon inline-flex items-center justify-center shrink-0 select-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={computedStyle}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{name}\n\t\t\t</span>\n\t\t);\n\t},\n);\n\nIconComponent.displayName = \"Icon\";\n\n/**\n * Material Symbols (variable font) Icon component.\n *\n * Make sure to import the icon font CSS before usage:\n * ```ts\n * import '@bug-on/m3-expressive/material-symbols-cdn.css';\n * ```\n *\n * @remarks\n * - Use snake_case for icon names: `\"arrow_forward\"`, NOT `\"ArrowForward\"`.\n * - `aria-hidden=\"true\"` is attached automatically — provide screen reader labels on parent elements.\n *\n * @example\n * ```tsx\n * // Basic Icon\n * <Icon name=\"home\" />\n *\n * // Visual customization (filled, heavy weight)\n * <Icon name=\"favorite\" variant=\"rounded\" fill={1} weight={300} />\n *\n * // Animated transition on state change\n * <Icon name=\"bookmark\" fill={saved ? 1 : 0} animateFill />\n *\n * // Custom size override\n * <Icon name=\"close\" size={18} opticalSize={20} />\n *\n * // Combination with other components\n * <Button icon={<Icon name=\"add\" />}>Add to cart</Button>\n * ```\n *\n * @see https://fonts.google.com/icons\n * @see https://m3.material.io/styles/icons/overview\n */\nexport const Icon = React.memo(IconComponent);\n","// ─── MD3 Expressive Menu — MenuItem ─────────────────────────────────────────\n// Shape morphing + Standard/Vibrant color variants + selection state\n// Animation: only selectable items animate the leading icon slot\nimport * as ContextMenu from \"@radix-ui/react-context-menu\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../icon\";\nimport { CHECK_ICON_VARIANTS, MENU_CHECK_ICON_SIZE } from \"./menu-animations\";\nimport { useMenuContext } from \"./menu-context\";\nimport {\n\tBASELINE_COLORS,\n\tBASELINE_ITEM_SHAPE,\n\tDENSITY_MIN_HEIGHT,\n\tITEM_SHAPE_CLASSES,\n\tMENU_BASELINE_ITEM_HORIZONTAL_PADDING,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tMenuItemPosition,\n\tMenuItemProps,\n\tMenuVariant,\n} from \"./menu-types\";\n\n// ─── Shape helper ─────────────────────────────────────────────────────────────\n\nfunction getItemShapeClass(\n\tposition: MenuItemPosition,\n\tselected: boolean,\n\tisStatic: boolean = false,\n\tmenuVariant: MenuVariant = \"expressive\",\n): string {\n\tif (menuVariant === \"baseline\") return BASELINE_ITEM_SHAPE;\n\tif (selected) return ITEM_SHAPE_CLASSES.selected;\n\t// Vertical Menu standalone items have 12px border radius\n\tif (isStatic && position === \"standalone\") return \"rounded-[12px]\";\n\treturn ITEM_SHAPE_CLASSES[position];\n}\n\n// ─── MenuItem ─────────────────────────────────────────────────────────────────\n\n/**\n * An interactive item within a Menu or MenuGroup.\n *\n * ### Shape morphing\n * `itemPosition` (auto-set by MenuGroup) controls border-radius. When `selected=true`,\n * shape overrides to `CornerMedium (12px)` with a CSS transition.\n *\n * ### Leading icon animation\n * - **Selectable items** (`selected` prop defined): `AnimatePresence` swaps between\n *   a check icon and the user `leadingIcon` using FastSpatial expand + FastEffects fade.\n * - **Static items** (`selected` prop undefined): `leadingIcon` renders at fixed width\n *   with no enter/exit animation (matches Android's static rendering).\n *\n * ### Selected state\n * Container color transitions with `transition-colors duration-150` (maps to\n * Android's `animateColorAsState` with `FastEffects` spec).\n */\nexport const MenuItem = React.forwardRef<HTMLDivElement, MenuItemProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tleadingIcon,\n\t\t\ttrailingIcon,\n\t\t\tsupportingText,\n\t\t\ttrailingText,\n\t\t\tselected,\n\t\t\tdisabled = false,\n\t\t\titemPosition = \"standalone\",\n\t\t\tcolorVariant: propColorVariant,\n\t\t\tdensity: propDensity,\n\t\t\tkeepOpen = false,\n\t\t\tclassName,\n\t\t\tisSubTrigger,\n\t\t\tvalue,\n\t\t\trole,\n\t\t\tisGapVariant: _isGapVariant,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tmenuVariant,\n\t\t\tcolorVariant: contextColorVariant,\n\t\t\tdensity: contextDensity,\n\t\t\tmenuPrimitive,\n\t\t} = useMenuContext();\n\t\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\t\tconst density = propDensity ?? contextDensity ?? 0;\n\t\tconst minHeightClass = DENSITY_MIN_HEIGHT[density];\n\n\t\tconst colors =\n\t\t\tmenuVariant === \"baseline\"\n\t\t\t\t? BASELINE_COLORS\n\t\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t\t? VIBRANT_COLORS\n\t\t\t\t\t: STANDARD_COLORS;\n\n\t\tconst isStaticMenu = menuPrimitive === \"static\";\n\t\tconst shapeClass = getItemShapeClass(\n\t\t\titemPosition,\n\t\t\t!!selected,\n\t\t\tisStaticMenu,\n\t\t\tmenuVariant,\n\t\t);\n\n\t\t// A selectable item is one where `selected` prop is explicitly passed\n\t\t// (even if false). Non-selectable items do not animate the leading slot.\n\t\tconst isSelectable = selected !== undefined && !isSubTrigger;\n\n\t\t// Determine which Radix primitive to use based on selection state and role\n\t\tconst isCheckbox =\n\t\t\trole === \"menuitemcheckbox\" ||\n\t\t\t(selected !== undefined && !role && !isSubTrigger);\n\t\tconst isRadio = role === \"menuitemradio\";\n\n\t\t// Select the correct Radix primitive based on which menu family is active.\n\t\t// static  → Slot (plain HTML, manages own ARIA)\n\t\t// context → @radix-ui/react-context-menu primitives\n\t\t// dropdown (default) → @radix-ui/react-dropdown-menu primitives\n\t\tconst ItemPrimitive =\n\t\t\tisStaticMenu || isSubTrigger\n\t\t\t\t? Slot\n\t\t\t\t: menuPrimitive === \"context\"\n\t\t\t\t\t? ((isCheckbox\n\t\t\t\t\t\t\t? ContextMenu.CheckboxItem\n\t\t\t\t\t\t\t: isRadio\n\t\t\t\t\t\t\t\t? ContextMenu.RadioItem\n\t\t\t\t\t\t\t\t: ContextMenu.Item) as React.ElementType)\n\t\t\t\t\t: ((isCheckbox\n\t\t\t\t\t\t\t? DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t: isRadio\n\t\t\t\t\t\t\t\t? DropdownMenu.RadioItem\n\t\t\t\t\t\t\t\t: DropdownMenu.Item) as React.ElementType);\n\n\t\treturn (\n\t\t\t<ItemPrimitive\n\t\t\t\tref={ref}\n\t\t\t\t{...(isStaticMenu || isSubTrigger\n\t\t\t\t\t? {\n\t\t\t\t\t\t\trole:\n\t\t\t\t\t\t\t\trole ||\n\t\t\t\t\t\t\t\t(isCheckbox\n\t\t\t\t\t\t\t\t\t? \"menuitemcheckbox\"\n\t\t\t\t\t\t\t\t\t: isRadio\n\t\t\t\t\t\t\t\t\t\t? \"menuitemradio\"\n\t\t\t\t\t\t\t\t\t\t: \"menuitem\"),\n\t\t\t\t\t\t\t\"aria-checked\": isCheckbox || isRadio ? !!selected : undefined,\n\t\t\t\t\t\t\t\"aria-disabled\": disabled ? true : undefined,\n\t\t\t\t\t\t\ttabIndex: disabled ? -1 : 0,\n\t\t\t\t\t\t\tonKeyDown: (e: React.KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\tonClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tonClick,\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t\tonSelect: keepOpen ? (e: Event) => e.preventDefault() : undefined,\n\t\t\t\t\t\t\tonClick,\n\t\t\t\t\t\t\t...(isCheckbox || isRadio ? { checked: !!selected } : {}),\n\t\t\t\t\t\t\t...(isRadio ? { value: value ?? \"\" } : {}),\n\t\t\t\t\t\t\tasChild: true,\n\t\t\t\t\t\t})}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\t// Role provided by Radix primitives via asChild, or manually set when static\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// Layout\n\t\t\t\t\t\t\"relative flex w-full cursor-pointer select-none items-center outline-none\",\n\t\t\t\t\t\t// Sizing: min-h based on density (48dp, 40dp, 32dp), min-w 112dp\n\t\t\t\t\t\tminHeightClass,\n\t\t\t\t\t\t\"min-w-28\",\n\t\t\t\t\t\t// Horizontal padding\n\t\t\t\t\t\tmenuVariant === \"baseline\"\n\t\t\t\t\t\t\t? MENU_BASELINE_ITEM_HORIZONTAL_PADDING\n\t\t\t\t\t\t\t: \"px-4\",\n\t\t\t\t\t\t// Shape morphing (position-based + selected override)\n\t\t\t\t\t\tshapeClass,\n\t\t\t\t\t\t// Animate border-radius AND background-color together (FastEffects: 150ms)\n\t\t\t\t\t\t\"transition-[border-radius,background-color] duration-150 ease-in\",\n\t\t\t\t\t\t// Colors based on variant + selection\n\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t? cn(colors.selectedBg, colors.selectedText)\n\t\t\t\t\t\t\t: cn(colors.labelText),\n\t\t\t\t\t\t// State layers (only on unselected items)\n\t\t\t\t\t\t!selected && colors.hoverLayer,\n\t\t\t\t\t\t!selected && colors.focusLayer,\n\t\t\t\t\t\t// Focus visible ring (WCAG 2.4.11 — visible focus indicator)\n\t\t\t\t\t\t// Uses ring-inset so the ring doesn't overflow the item bounds.\n\t\t\t\t\t\t\"focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-m3-secondary data-highlighted:ring-0\",\n\t\t\t\t\t\t// Disabled\n\t\t\t\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...rest}\n\t\t\t\t>\n\t\t\t\t\t{/* ── Leading slot ── */}\n\t\t\t\t\t{(isSelectable || leadingIcon) && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"flex h-5 w-5 shrink-0 items-center justify-center mr-3\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isSelectable ? (\n\t\t\t\t\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t\t\t\t\t{selected ? (\n\t\t\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"check\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex h-full w-full items-center justify-center overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolors.selectedIcon,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tvariants={CHECK_ICON_VARIANTS}\n\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<Icon name=\"check\" fill={1} size={MENU_CHECK_ICON_SIZE} />\n\t\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t\t) : leadingIcon ? (\n\t\t\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex h-full w-full items-center justify-center overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\tcolors.iconColor,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tvariants={CHECK_ICON_VARIANTS}\n\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{leadingIcon}\n\t\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t// Spacer for selectable items with no icon, to keep text aligned\n\t\t\t\t\t\t\t\t\t\t<div className=\"w-5\" />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t// Static icon for non-selectable items\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex h-full w-full items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\tcolors.iconColor,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{leadingIcon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* ── Label + Supporting Text ── */}\n\t\t\t\t\t<span className=\"flex flex-1 flex-col\">\n\t\t\t\t\t\t<span className=\"text-body-large leading-snug\">{children}</span>\n\t\t\t\t\t\t{supportingText && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-body-medium leading-snug\",\n\t\t\t\t\t\t\t\t\t// Source: StandardMenuTokens.ItemSupportingTextColor / VibrantMenuTokens\n\t\t\t\t\t\t\t\t\tselected ? colors.selectedText : colors.supportingTextColor,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{supportingText}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t{/* ── Trailing: shortcut text OR trailing icon ── */}\n\t\t\t\t\t{(trailingText || trailingIcon) && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t// Minimum 12dp gap from label column (ListTokens)\n\t\t\t\t\t\t\t\t\"ml-3 flex shrink-0 items-center\",\n\t\t\t\t\t\t\t\t// Source: StandardMenuTokens.ItemTrailingIconColor / VibrantMenuTokens\n\t\t\t\t\t\t\t\tselected ? colors.selectedText : colors.trailingIconColor,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\taria-hidden={trailingIcon ? \"true\" : undefined}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingText ? (\n\t\t\t\t\t\t\t\t<span className=\"text-label-small tracking-wider\">\n\t\t\t\t\t\t\t\t\t{trailingText}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\ttrailingIcon\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</ItemPrimitive>\n\t\t);\n\t},\n);\nMenuItem.displayName = \"MenuItem\";\n","// ─── MD3 Expressive Menu — SubMenu ───────────────────────────────────────────\n// Nested sub-menu triggered by hover/keyboard on a MenuItem\nimport * as ContextMenu from \"@radix-ui/react-context-menu\";\nimport * as DropdownMenu from \"@radix-ui/react-dropdown-menu\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../icon\";\nimport { SUBMENU_CONTAINER_VARIANTS } from \"./menu-animations\";\nimport { useMenuContext } from \"./menu-context\";\nimport {\n\tBASELINE_COLORS,\n\tMENU_CONTAINER_SHAPE,\n\tMENU_GROUP_GAP,\n\tMENU_MAX_WIDTH,\n\tMENU_MIN_WIDTH,\n\tMENU_POPUP_PADDING_Y,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tMenuColorVariant,\n\tMenuItemProps,\n\tSubMenuProps,\n} from \"./menu-types\";\n\n/**\n * A nested SubMenu that opens from a trigger MenuItem.\n *\n * Keyboard: ArrowRight opens, ArrowLeft/Escape closes (handled by Radix).\n * The parent MenuContent should set `hasOverflow={true}` when SubMenus are used.\n *\n * ### Hover delays\n * `hoverOpenDelay` (default: 200ms) — time before the submenu opens on hover.\n * `hoverCloseDelay` (default: 300ms) — time before the submenu closes after pointer-leave.\n * These delays allow the user to safely move diagonally from trigger to submenu content\n * without accidental close (safe polygon behavior from Radix still applies).\n *\n * @example\n * <MenuContent hasOverflow>\n *   <SubMenu\n *     trigger={\n *       <MenuItem trailingIcon={<Icon name=\"chevron_right\" size={20} />}>\n *         Share\n *       </MenuItem>\n *     }\n *   >\n *     <MenuItem>Via Email</MenuItem>\n *     <MenuItem>Via Link</MenuItem>\n *   </SubMenu>\n * </MenuContent>\n */\nexport function SubMenu({\n\tchildren,\n\ttrigger,\n\tside = \"right\",\n\tcolorVariant: propColorVariant,\n\thoverOpenDelay = 200,\n\thoverCloseDelay = 300,\n}: SubMenuProps) {\n\tconst { colorVariant: contextColorVariant, menuPrimitive } = useMenuContext();\n\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\n\t// Controlled open state for hover delay support.\n\t// Note: We use Radix's controlled mode carefully — Radix still handles keyboard\n\t// and the safe polygon logic internally when we pass open/onOpenChange.\n\tconst [open, setOpen] = React.useState(false);\n\tconst openTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst closeTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(\n\t\tnull,\n\t);\n\n\tconst clearTimers = React.useCallback(() => {\n\t\tif (openTimerRef.current) clearTimeout(openTimerRef.current);\n\t\tif (closeTimerRef.current) clearTimeout(closeTimerRef.current);\n\t}, []);\n\n\tconst handleTriggerPointerEnter = React.useCallback(() => {\n\t\tclearTimers();\n\t\topenTimerRef.current = setTimeout(() => setOpen(true), hoverOpenDelay);\n\t}, [hoverOpenDelay, clearTimers]);\n\n\tconst handleTriggerPointerLeave = React.useCallback(() => {\n\t\tclearTimers();\n\t\tcloseTimerRef.current = setTimeout(() => setOpen(false), hoverCloseDelay);\n\t}, [hoverCloseDelay, clearTimers]);\n\n\tconst handleContentPointerEnter = React.useCallback(() => {\n\t\t// Keep open when pointer moves into the submenu content\n\t\tclearTimers();\n\t}, [clearTimers]);\n\n\tconst handleContentPointerLeave = React.useCallback(() => {\n\t\tclearTimers();\n\t\tcloseTimerRef.current = setTimeout(() => setOpen(false), hoverCloseDelay);\n\t}, [hoverCloseDelay, clearTimers]);\n\n\t// Cleanup timers on unmount\n\tReact.useEffect(() => () => clearTimers(), [clearTimers]);\n\n\t// Select the correct Radix Sub primitives based on which menu family is active.\n\tconst Sub = menuPrimitive === \"context\" ? ContextMenu.Sub : DropdownMenu.Sub;\n\tconst SubTrigger =\n\t\tmenuPrimitive === \"context\"\n\t\t\t? ContextMenu.SubTrigger\n\t\t\t: DropdownMenu.SubTrigger;\n\tconst SubContent =\n\t\tmenuPrimitive === \"context\"\n\t\t\t? ContextMenu.SubContent\n\t\t\t: DropdownMenu.SubContent;\n\tconst Portal =\n\t\tmenuPrimitive === \"context\" ? ContextMenu.Portal : DropdownMenu.Portal;\n\n\treturn (\n\t\t<Sub open={open} onOpenChange={setOpen}>\n\t\t\t{/* SubTrigger renders its own element (no asChild) so it can correctly\n\t\t\t * compute the bounding box for SubContent positioning. */}\n\t\t\t<SubTrigger\n\t\t\t\tclassName=\"w-full outline-none\"\n\t\t\t\tonPointerEnter={handleTriggerPointerEnter}\n\t\t\t\tonPointerLeave={handleTriggerPointerLeave}\n\t\t\t>\n\t\t\t\t{React.isValidElement(trigger)\n\t\t\t\t\t? React.cloneElement(trigger as React.ReactElement<MenuItemProps>, {\n\t\t\t\t\t\t\tisSubTrigger: true,\n\t\t\t\t\t\t\t// Auto-add chevron if missing\n\t\t\t\t\t\t\ttrailingIcon: (trigger.props as MenuItemProps).trailingIcon || (\n\t\t\t\t\t\t\t\t<Icon name=\"chevron_right\" size={20} />\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t})\n\t\t\t\t\t: trigger}\n\t\t\t</SubTrigger>\n\n\t\t\t{/* SubMenu popup */}\n\t\t\t<AnimatePresence>\n\t\t\t\t{open && (\n\t\t\t\t\t<Portal forceMount>\n\t\t\t\t\t\t<SubContent\n\t\t\t\t\t\t\tsideOffset={4}\n\t\t\t\t\t\t\talignOffset={-4}\n\t\t\t\t\t\t\tforceMount\n\t\t\t\t\t\t\tclassName=\"outline-none\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SubMenuContent\n\t\t\t\t\t\t\t\tside={side}\n\t\t\t\t\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\t\t\t\t\tonPointerEnter={handleContentPointerEnter}\n\t\t\t\t\t\t\t\tonPointerLeave={handleContentPointerLeave}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t</SubMenuContent>\n\t\t\t\t\t\t</SubContent>\n\t\t\t\t\t</Portal>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</Sub>\n\t);\n}\nSubMenu.displayName = \"SubMenu\";\n\n/**\n * Inner wrapper to handle animations.\n */\nfunction SubMenuContent({\n\tchildren,\n\tside,\n\tcolorVariant: propColorVariant,\n\tonPointerEnter,\n\tonPointerLeave,\n}: {\n\tchildren: React.ReactNode;\n\tside: \"left\" | \"right\";\n\tcolorVariant?: MenuColorVariant;\n\tonPointerEnter?: React.PointerEventHandler<HTMLDivElement>;\n\tonPointerLeave?: React.PointerEventHandler<HTMLDivElement>;\n}) {\n\tconst { menuVariant, colorVariant: contextColorVariant } = useMenuContext();\n\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\tconst colors =\n\t\tmenuVariant === \"baseline\"\n\t\t\t? BASELINE_COLORS\n\t\t\t: colorVariant === \"vibrant\"\n\t\t\t\t? VIBRANT_COLORS\n\t\t\t\t: STANDARD_COLORS;\n\n\treturn (\n\t\t<m.div\n\t\t\trole=\"menu\"\n\t\t\taria-orientation=\"vertical\"\n\t\t\tonPointerEnter={onPointerEnter}\n\t\t\tonPointerLeave={onPointerLeave}\n\t\t\tclassName={cn(\n\t\t\t\t\"z-50 flex flex-col\",\n\t\t\t\t// Width constraints\n\t\t\t\tMENU_MIN_WIDTH,\n\t\t\t\tMENU_MAX_WIDTH,\n\t\t\t\t// Vertical padding: 8dp\n\t\t\t\tMENU_POPUP_PADDING_Y,\n\t\t\t\t// Gap between groups: 2dp\n\t\t\t\tMENU_GROUP_GAP,\n\t\t\t\t// Container background\n\t\t\t\tcolors.containerBg,\n\t\t\t\t// Container shape: CornerExtraSmall (4px)\n\t\t\t\tMENU_CONTAINER_SHAPE,\n\t\t\t\t// Elevation-2 shadow\n\t\t\t\t\"elevation-2\",\n\t\t\t\t// Overflow clip\n\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\"outline-none\",\n\t\t\t)}\n\t\t\tvariants={SUBMENU_CONTAINER_VARIANTS}\n\t\t\tinitial=\"hidden\"\n\t\t\tanimate=\"visible\"\n\t\t\texit=\"exit\"\n\t\t\tstyle={{\n\t\t\t\ttransformOrigin: side === \"right\" ? \"top left\" : \"top right\",\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</m.div>\n\t);\n}\nSubMenuContent.displayName = \"SubMenuContent\";\n","// ─── MD3 Expressive Menu — Vertical Menu (always-visible static variant) ──────\n// Spec: SegmentedMenuTokens + MenuDefaults — two sub-variants:\n//   • Gap     → gap-0.5 (2dp) between groups, no divider line\n//   • Divider → outline-variant <hr> between groups\n//\n// Key difference from Menu (baseline):\n//   • No portal, no popup animation, no trigger\n//   • Always rendered (static)\n//   • Shape morphing on hover works identically (reuses MenuGroup)\n//   • Still provides MenuContext with isStatic=true so MenuItems know to use Slot\n//\n// Vertical Menu Gap architecture:\n//   • Outer container: NO overflow-hidden (would clip group shape morphing!)\n//     Instead, elevation shadow is applied here, bg is transparent.\n//   • Each MenuGroup manages its own background + border-radius via Framer Motion.\n//   • The 2dp gap between groups is transparent — page background shows through.\n//\n// Vertical Menu Divider architecture:\n//   • Outer container applies containerBg + overflow-hidden + rounded-2xl\n//     (groups inside all stay flush, no shape morph needed for divider variant).\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { MenuProvider, useMenuContext } from \"./menu-context\";\nimport { MenuGroup } from \"./menu-group\";\nimport {\n\tMENU_GROUP_GAP,\n\tMENU_MAX_WIDTH,\n\tMENU_MIN_WIDTH,\n\tSTANDARD_COLORS,\n\tVIBRANT_COLORS,\n} from \"./menu-tokens\";\nimport type {\n\tMenuGroupProps,\n\tMenuItemPosition,\n\tMenuItemProps,\n\tVerticalMenuContentProps,\n\tVerticalMenuDividerProps,\n\tVerticalMenuProps,\n\tVerticalMenuSeparatorStyle,\n} from \"./menu-types\";\nimport { flattenChildren } from \"./menu-utils\";\n\n// ─── VerticalMenuDivider ──────────────────────────────────────────────────────\n\n/**\n * A plain horizontal divider for use between groups in a VerticalMenuContent\n * with `separatorStyle=\"divider\"`.\n *\n * Uses the same visual spec as MenuDivider (outline-variant color, 12dp\n * horizontal padding, 2dp vertical padding) but is a plain `<hr>` — no Radix\n * dependency, safe inside static (non-popup) contexts.\n *\n * @example\n * <VerticalMenuContent separatorStyle=\"divider\">\n *   <VerticalMenuGroup>...</VerticalMenuGroup>\n *   <VerticalMenuDivider />\n *   <VerticalMenuGroup>...</VerticalMenuGroup>\n * </VerticalMenuContent>\n */\nexport const VerticalMenuDivider = React.forwardRef<\n\tHTMLHRElement,\n\tVerticalMenuDividerProps & React.HTMLAttributes<HTMLHRElement>\n>(({ className, index, count, isGapVariant, ...props }, ref) => (\n\t<hr\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t// HorizontalDividerPadding: horizontal=12dp, vertical=2dp\n\t\t\t\"mx-3 my-0.5\",\n\t\t\t// 1px height, no default border\n\t\t\t\"h-px border-0\",\n\t\t\t// Source: MenuDefaults.HorizontalDividerPadding / outline-variant\n\t\t\t\"bg-m3-outline-variant\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n));\nVerticalMenuDivider.displayName = \"VerticalMenuDivider\";\n\n// ─── VerticalMenuGroup ────────────────────────────────────────────────────────\n\n/**\n * A group within a VerticalMenu.\n *\n * Functionally identical to `MenuGroup` — shape morphing on hover, auto-injected\n * `itemPosition` into MenuItem children, `colorVariant` from context.\n *\n * This component is a named re-export of `MenuGroup` so consumers of Vertical\n * Menu have a semantically clear API without any code duplication.\n */\nexport const VerticalMenuGroup = MenuGroup;\n\n// ─── VerticalMenuContent ──────────────────────────────────────────────────────\n\n/**\n * Renders a vertical list of VerticalMenuGroup children.\n *\n * Handles two separation styles:\n * - `gap`     → 2dp (`gap-0.5`) visual gap between groups (default)\n * - `divider` → auto-inserts a `VerticalMenuDivider` between each pair of groups\n *\n * Auto-injects `index` and `count` props into VerticalMenuGroup children so\n * that position-based shape morphing (leading/middle/trailing) works correctly.\n *\n * @example\n * // Gap variant (default)\n * <VerticalMenuContent separatorStyle=\"gap\">\n *   <VerticalMenuGroup>...</VerticalMenuGroup>\n *   <VerticalMenuGroup>...</VerticalMenuGroup>\n * </VerticalMenuContent>\n *\n * @example\n * // Divider variant\n * <VerticalMenuContent separatorStyle=\"divider\">\n *   <VerticalMenuGroup>...</VerticalMenuGroup>\n *   <VerticalMenuGroup>...</VerticalMenuGroup>\n * </VerticalMenuContent>\n */\nexport const VerticalMenuContent = React.forwardRef<\n\tHTMLDivElement,\n\tVerticalMenuContentProps & React.HTMLAttributes<HTMLDivElement>\n>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tseparatorStyle = \"gap\",\n\t\t\tcolorVariant: propColorVariant,\n\t\t\tclassName,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst { colorVariant: contextColorVariant } = useMenuContext();\n\t\tconst colorVariant = propColorVariant ?? contextColorVariant;\n\t\tconst colors =\n\t\t\tcolorVariant === \"vibrant\" ? VIBRANT_COLORS : STANDARD_COLORS;\n\n\t\tconst renderedChildren = React.useMemo(() => {\n\t\t\tconst valid = flattenChildren(children);\n\t\t\tconst groupCount = valid.length;\n\n\t\t\tconst enhanced = valid.map((child, i) => {\n\t\t\t\tif (typeof child.type === \"string\") return child;\n\n\t\t\t\tconst defaultItemPosition: MenuItemPosition =\n\t\t\t\t\tgroupCount === 1\n\t\t\t\t\t\t? \"standalone\"\n\t\t\t\t\t\t: i === 0\n\t\t\t\t\t\t\t? \"leading\"\n\t\t\t\t\t\t\t: i === groupCount - 1\n\t\t\t\t\t\t\t\t? \"trailing\"\n\t\t\t\t\t\t\t\t: \"middle\";\n\n\t\t\t\tconst itemPosition =\n\t\t\t\t\t(child.props as MenuItemProps).itemPosition ?? defaultItemPosition;\n\n\t\t\t\treturn React.cloneElement(\n\t\t\t\t\tchild as React.ReactElement<MenuGroupProps & MenuItemProps>,\n\t\t\t\t\t{\n\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\tcount: groupCount,\n\t\t\t\t\t\titemPosition,\n\t\t\t\t\t\tisGapVariant: separatorStyle === \"gap\",\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tif (separatorStyle !== \"divider\") return enhanced;\n\n\t\t\treturn enhanced.reduce<React.ReactNode[]>((acc, child, i) => {\n\t\t\t\tif (i > 0) {\n\t\t\t\t\tacc.push(\n\t\t\t\t\t\t<VerticalMenuDivider\n\t\t\t\t\t\t\tkey={`divider-${(child as React.ReactElement).key || i}`}\n\t\t\t\t\t\t/>,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tacc.push(child);\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\t\t}, [children, separatorStyle]);\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col w-full\",\n\t\t\t\t\t// Gap variant: transparent background + 2dp gap — page bg shows through gaps.\n\t\t\t\t\t// Divider variant: solid container background behind all groups.\n\t\t\t\t\tseparatorStyle === \"gap\"\n\t\t\t\t\t\t? cn(\"bg-transparent\", MENU_GROUP_GAP)\n\t\t\t\t\t\t: colors.containerBg,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{renderedChildren}\n\t\t\t</div>\n\t\t);\n\t},\n);\nVerticalMenuContent.displayName = \"VerticalMenuContent\";\n\n// ─── VerticalMenu (Root) ──────────────────────────────────────────────────────\n\n/**\n * Root of an always-visible vertical menu.\n *\n * Wraps children in `MenuProvider` (always `open={true}`) so MenuItem and\n * MenuGroup components receive the correct `colorVariant` from context.\n *\n * Unlike the popup `Menu` component, there is no Radix DropdownMenu, no portal,\n * and no enter/exit animation — the list is statically rendered at all times.\n *\n * ### Shape morphing\n * For the **gap variant**, the outer container has NO `overflow-hidden` — this is\n * intentional! Each `VerticalMenuGroup` manages its own shape via Framer Motion's\n * `animate.borderRadius`. `overflow-hidden` on the parent would clip these\n * morphing corners. The 2dp transparent gap lets page background show through.\n *\n * For the **divider variant**, the outer container applies `overflow-hidden` +\n * `rounded-2xl` + background — groups sit flush inside without morphing.\n *\n * @example\n * // Vertical Menu with Gap (floating segments)\n * <VerticalMenu colorVariant=\"standard\">\n *   <VerticalMenuContent separatorStyle=\"gap\">\n *     <VerticalMenuGroup>\n *       <MenuItem leadingIcon={<Icon name=\"visibility\" size={20} />}>Item 1</MenuItem>\n *       <MenuItem leadingIcon={<Icon name=\"content_copy\" size={20} />} trailingText=\"⌘C\">Item 2</MenuItem>\n *       <MenuItem selected leadingIcon={<Icon name=\"edit\" size={20} />}>Item 3</MenuItem>\n *     </VerticalMenuGroup>\n *     <VerticalMenuGroup>\n *       <MenuItem trailingIcon={<Icon name=\"chevron_right\" size={20} />}>Item 4</MenuItem>\n *     </VerticalMenuGroup>\n *   </VerticalMenuContent>\n * </VerticalMenu>\n *\n * @example\n * // Vertical Menu with Divider\n * <VerticalMenu colorVariant=\"standard\">\n *   <VerticalMenuContent separatorStyle=\"divider\">\n *     <VerticalMenuGroup>...</VerticalMenuGroup>\n *     <VerticalMenuGroup>...</VerticalMenuGroup>\n *   </VerticalMenuContent>\n * </VerticalMenu>\n */\nexport const VerticalMenu = React.forwardRef<\n\tHTMLDivElement,\n\tVerticalMenuProps & React.HTMLAttributes<HTMLDivElement>\n>(({ children, colorVariant = \"standard\", className, ...props }, ref) => {\n\t// Vertical menus are always visible — `open` is a permanent true.\n\t// onOpenChange is a no-op (no controlled/uncontrolled toggle needed).\n\tconst noop = React.useCallback(() => {}, []);\n\n\tconst colors = colorVariant === \"vibrant\" ? VIBRANT_COLORS : STANDARD_COLORS;\n\n\t// Internal ref for keyboard navigation — merged with forwarded ref.\n\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\tconst mergedRef = React.useCallback(\n\t\t(node: HTMLDivElement | null) => {\n\t\t\t(containerRef as React.MutableRefObject<HTMLDivElement | null>).current =\n\t\t\t\tnode;\n\t\t\tif (typeof ref === \"function\") ref(node);\n\t\t\telse if (ref)\n\t\t\t\t(ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n\t\t},\n\t\t[ref],\n\t);\n\n\t// Arrow key navigation: WAI-ARIA composite widget pattern.\n\t// Moves focus among menuitem elements, skipping disabled ones.\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (!containerRef.current) return;\n\t\t\tconst items = Array.from(\n\t\t\t\tcontainerRef.current.querySelectorAll<HTMLElement>(\n\t\t\t\t\t'[role=\"menuitem\"]:not([aria-disabled=\"true\"]):not([tabindex=\"-1\"]),' +\n\t\t\t\t\t\t'[role=\"menuitemcheckbox\"]:not([aria-disabled=\"true\"]):not([tabindex=\"-1\"]),' +\n\t\t\t\t\t\t'[role=\"menuitemradio\"]:not([aria-disabled=\"true\"]):not([tabindex=\"-1\"])',\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (!items.length) return;\n\t\t\tconst idx = items.indexOf(document.activeElement as HTMLElement);\n\t\t\tlet next: number | null = null;\n\t\t\tswitch (e.key) {\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tnext = idx < items.length - 1 ? idx + 1 : 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tnext = idx > 0 ? idx - 1 : items.length - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"Home\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tnext = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"End\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tnext = items.length - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (next !== null) items[next]?.focus();\n\t\t},\n\t\t[],\n\t);\n\n\t// Detect separator style from VerticalMenuContent child to decide container styling.\n\tconst separatorStyle = detectSeparatorStyle(children);\n\tconst isGapVariant = separatorStyle !== \"divider\";\n\n\treturn (\n\t\t<MenuProvider\n\t\t\tvariant=\"expressive\"\n\t\t\tcolorVariant={colorVariant}\n\t\t\tmenuPrimitive=\"static\"\n\t\t\topen={true}\n\t\t\tonOpenChange={noop}\n\t\t>\n\t\t\t<div\n\t\t\t\tref={mergedRef}\n\t\t\t\trole=\"menu\"\n\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Width constraints: 112dp min, 280dp max (MenuTokens)\n\t\t\t\t\tMENU_MIN_WIDTH,\n\t\t\t\t\tMENU_MAX_WIDTH,\n\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\tisGapVariant\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t// GAP VARIANT: NO overflow-hidden — groups must morph freely.\n\t\t\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\t\t\t// NO background — transparent between segments.\n\t\t\t\t\t\t\t\t// NO rounded corners — each group manages its own shape.\n\t\t\t\t\t\t\t\t// Elevation is managed by each individual group.\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t// DIVIDER VARIANT: Container clips the content.\n\t\t\t\t\t\t\t\t\"rounded-2xl\",\n\t\t\t\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\t\t\t\tcolors.containerBg,\n\t\t\t\t\t\t\t\t\"elevation-2\",\n\t\t\t\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t\t\t],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</MenuProvider>\n\t);\n});\nVerticalMenu.displayName = \"VerticalMenu\";\n\n// ─── Helper ───────────────────────────────────────────────────────────────────\n\n/**\n * Inspects the `separatorStyle` prop from the first VerticalMenuContent child.\n * Used by VerticalMenu root to decide container styling.\n */\nfunction detectSeparatorStyle(\n\tchildren: React.ReactNode,\n): VerticalMenuSeparatorStyle {\n\tconst child = React.Children.toArray(children).find(React.isValidElement);\n\tif (child) {\n\t\tconst style = (\n\t\t\tchild.props as { separatorStyle?: VerticalMenuSeparatorStyle }\n\t\t).separatorStyle;\n\t\tif (style) return style;\n\t}\n\treturn \"gap\";\n}\n","/**\n * @file app-bar-overflow-indicator.tsx\n * MD3 Expressive App Bar Overflow Indicator.\n *\n * Renders a \"More\" (more_vert) icon button that opens a Radix UI\n * DropdownMenu containing overflow App Bar items.\n *\n * Used internally by <AppBarRow> and <AppBarColumn> when items exceed\n * the visible count.\n */\n\nimport { cn } from \"../../lib/utils\";\nimport { Menu, MenuContent, MenuItem, MenuTrigger } from \"../menu\";\nimport { APP_BAR_COLORS, AppBarTokens } from \"./app-bar.tokens\";\nimport type { AppBarItem, AppBarOverflowIndicatorProps } from \"./app-bar.types\";\n\n/** More vert icon for the overflow trigger button. */\nfunction MoreVertIcon() {\n\treturn (\n\t\t<span\n\t\t\tclassName=\"material-symbols-rounded text-[24px] leading-none select-none\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\tmore_vert\n\t\t</span>\n\t);\n}\n\n/**\n * Renders a single overflow item in the dropdown based on its type.\n */\nfunction OverflowItem({ item }: { item: AppBarItem }) {\n\tif (item.type === \"toggleable\") {\n\t\treturn (\n\t\t\t<MenuItem\n\t\t\t\trole=\"menuitemcheckbox\"\n\t\t\t\tselected={item.checked ?? false}\n\t\t\t\tonClick={() => item.onCheckedChange?.(!item.checked)}\n\t\t\t\tdisabled={item.enabled === false}\n\t\t\t>\n\t\t\t\t{item.label}\n\t\t\t</MenuItem>\n\t\t);\n\t}\n\n\tif (item.type === \"custom\" && item.menuContent) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{item.menuContent({\n\t\t\t\t\tisOpen: true,\n\t\t\t\t\topen: () => {},\n\t\t\t\t\tclose: () => {},\n\t\t\t\t})}\n\t\t\t</>\n\t\t);\n\t}\n\n\t// Default: clickable\n\treturn (\n\t\t<MenuItem onClick={item.onClick} disabled={item.enabled === false}>\n\t\t\t{item.label}\n\t\t</MenuItem>\n\t);\n}\n\n/**\n * MD3 App Bar Overflow Indicator.\n *\n * Renders a \"more_vert\" button that opens a dropdown menu\n * with overflow action items.\n */\nexport function AppBarOverflowIndicator({\n\titems,\n\tclassName,\n}: AppBarOverflowIndicatorProps) {\n\tif (items.length === 0) return null;\n\n\treturn (\n\t\t<Menu>\n\t\t\t<MenuTrigger asChild>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex items-center justify-center rounded-full\",\n\t\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2\",\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\twidth: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\theight: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\tcolor: APP_BAR_COLORS.actionIcon,\n\t\t\t\t\t}}\n\t\t\t\t\taria-label=\"More actions\"\n\t\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\t>\n\t\t\t\t\t<MoreVertIcon />\n\t\t\t\t</button>\n\t\t\t</MenuTrigger>\n\n\t\t\t<MenuContent align=\"end\" sideOffset={4}>\n\t\t\t\t{items.map((item, index) => (\n\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: static list from props\n\t\t\t\t\t<OverflowItem key={index} item={item} />\n\t\t\t\t))}\n\t\t\t</MenuContent>\n\t\t</Menu>\n\t);\n}\n","/**\n * @file app-bar-column.tsx\n * MD3 Expressive App Bar Column DSL.\n *\n * Displays App Bar action items in a vertical column.\n * Overflow items collapse into a dropdown menu.\n *\n * @see docs/m3/app-bars/AppBarColumn.kt\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { AppBarTokens } from \"./app-bar.tokens\";\nimport type { AppBarColumnProps } from \"./app-bar.types\";\nimport { AppBarItemButton } from \"./app-bar-item-button\";\nimport { AppBarOverflowIndicator } from \"./app-bar-overflow-indicator\";\n\n/**\n * MD3 Expressive App Bar Column.\n *\n * Renders action items in a vertical column. Commonly used in\n * side navigation or rail-style App Bars.\n *\n * @example\n * ```tsx\n * <AppBarColumn\n *   maxItemCount={3}\n *   items={[\n *     { type: 'clickable', icon: <Icon>edit</Icon>, label: 'Edit', onClick: handleEdit },\n *     { type: 'clickable', icon: <Icon>delete</Icon>, label: 'Delete', onClick: handleDelete },\n *   ]}\n * />\n * ```\n */\nexport function AppBarColumn({\n\titems,\n\tmaxItemCount,\n\tclassName,\n}: AppBarColumnProps) {\n\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\tconst [visibleCount, setVisibleCount] = React.useState(\n\t\tmaxItemCount ?? items.length,\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (maxItemCount !== undefined) {\n\t\t\tsetVisibleCount(Math.min(maxItemCount, items.length));\n\t\t\treturn;\n\t\t}\n\n\t\tconst container = containerRef.current;\n\t\tif (!container) return;\n\n\t\tlet debounceTimer: ReturnType<typeof setTimeout>;\n\n\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\tclearTimeout(debounceTimer);\n\t\t\tdebounceTimer = setTimeout(() => {\n\t\t\t\tconst entry = entries[0];\n\t\t\t\tif (!entry) return;\n\n\t\t\t\tconst available = entry.contentRect.height;\n\t\t\t\tconst itemHeight = AppBarTokens.iconButtonTouchTarget;\n\t\t\t\tconst hasOverflow = items.length > Math.floor(available / itemHeight);\n\t\t\t\tconst reservedHeight = hasOverflow ? itemHeight : 0;\n\t\t\t\tconst count = Math.max(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.floor((available - reservedHeight) / itemHeight),\n\t\t\t\t);\n\t\t\t\tsetVisibleCount(Math.min(count, items.length));\n\t\t\t}, 100);\n\t\t});\n\n\t\tobserver.observe(container);\n\t\treturn () => {\n\t\t\tclearTimeout(debounceTimer);\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [items.length, maxItemCount]);\n\n\tconst visibleItems = items.slice(0, visibleCount);\n\tconst overflowItems = items.slice(visibleCount);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"flex flex-col items-center\", className)}\n\t\t>\n\t\t\t{visibleItems.map((item, index) => (\n\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: static list from props\n\t\t\t\t<AppBarItemButton key={index} item={item} />\n\t\t\t))}\n\n\t\t\t{overflowItems.length > 0 && (\n\t\t\t\t<AppBarOverflowIndicator items={overflowItems} />\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/**\n * @file app-bar-row.tsx\n * MD3 Expressive App Bar Row DSL.\n *\n * Displays App Bar action items in a horizontal row.\n * Items that exceed `maxItemCount` or available width collapse into a\n * dropdown menu via <AppBarOverflowIndicator>.\n *\n * Translated from OverflowMeasurePolicy / AppBarRow.kt in Jetpack Compose M3.\n *\n * @see docs/m3/app-bars/AppBarRow.kt\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { AppBarTokens } from \"./app-bar.tokens\";\nimport type { AppBarRowProps } from \"./app-bar.types\";\nimport { AppBarItemButton } from \"./app-bar-item-button\";\nimport { AppBarOverflowIndicator } from \"./app-bar-overflow-indicator\";\n\n/**\n * MD3 Expressive App Bar Row.\n *\n * Renders action items in a row. Compatible with the `actions` prop of any App Bar.\n *\n * @example\n * ```tsx\n * <SmallAppBar\n *   title=\"Messages\"\n *   actions={\n *     <AppBarRow\n *       maxItemCount={2}\n *       items={[\n *         { type: 'clickable', icon: <Icon>search</Icon>, label: 'Search', onClick: handleSearch },\n *         { type: 'clickable', icon: <Icon>bookmark</Icon>, label: 'Bookmarks', onClick: handleBookmark },\n *         { type: 'clickable', icon: <Icon>settings</Icon>, label: 'Settings', onClick: handleSettings },\n *       ]}\n *     />\n *   }\n * />\n * ```\n */\nexport function AppBarRow({ items, maxItemCount, className }: AppBarRowProps) {\n\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\tconst [visibleCount, setVisibleCount] = React.useState(\n\t\tmaxItemCount ?? items.length,\n\t);\n\n\tReact.useEffect(() => {\n\t\tif (maxItemCount !== undefined) {\n\t\t\tsetVisibleCount(Math.min(maxItemCount, items.length));\n\t\t\treturn;\n\t\t}\n\n\t\tconst container = containerRef.current;\n\t\tif (!container) return;\n\n\t\tlet debounceTimer: ReturnType<typeof setTimeout>;\n\n\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\tclearTimeout(debounceTimer);\n\t\t\tdebounceTimer = setTimeout(() => {\n\t\t\t\tconst entry = entries[0];\n\t\t\t\tif (!entry) return;\n\n\t\t\t\tconst available = entry.contentRect.width;\n\t\t\t\tconst itemWidth = AppBarTokens.iconButtonTouchTarget;\n\t\t\t\tconst hasOverflow = items.length > Math.floor(available / itemWidth);\n\t\t\t\tconst reservedWidth = hasOverflow ? itemWidth : 0;\n\t\t\t\tconst count = Math.max(\n\t\t\t\t\t0,\n\t\t\t\t\tMath.floor((available - reservedWidth) / itemWidth),\n\t\t\t\t);\n\t\t\t\tsetVisibleCount(Math.min(count, items.length));\n\t\t\t}, 100);\n\t\t});\n\n\t\tobserver.observe(container);\n\t\treturn () => {\n\t\t\tclearTimeout(debounceTimer);\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [items.length, maxItemCount]);\n\n\tconst visibleItems = items.slice(0, visibleCount);\n\tconst overflowItems = items.slice(visibleCount);\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"flex items-center\", className)}\n\t\t\tstyle={{ gap: AppBarTokens.iconButtonSpace }}\n\t\t>\n\t\t\t{visibleItems.map((item, index) => (\n\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: items are static from props\n\t\t\t\t<AppBarItemButton key={index} item={item} />\n\t\t\t))}\n\n\t\t\t{overflowItems.length > 0 && (\n\t\t\t\t<AppBarOverflowIndicator items={overflowItems} />\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/**\n * @file use-app-bar-scroll.ts\n * MD3 Expressive App Bar — Scroll behavior hook.\n *\n * Tracks scroll state for App Bar behaviors:\n * - `pinned`: background color change only\n * - `enterAlways`: hide/show based on scroll direction\n * - `exitUntilCollapsed`: drives collapse fraction (0 = expanded, 1 = collapsed)\n */\n\nimport * as React from \"react\";\nimport type {\n\tAppBarScrollBehavior,\n\tUseAppBarScrollReturn,\n} from \"../app-bar.types\";\n\ninterface UseAppBarScrollOptions {\n\t/** Ref to the scrollable container. Defaults to `window`. */\n\tscrollElement?: React.RefObject<HTMLElement | null>;\n\t/** Scroll behavior mode. @default \"pinned\" */\n\tbehavior?: AppBarScrollBehavior;\n\t/** Collapsed height in px — used for `exitUntilCollapsed`. @default 64 */\n\tcollapsedHeight?: number;\n\t/** Expanded height in px — used for `exitUntilCollapsed`. @default 112 */\n\texpandedHeight?: number;\n}\n\n/**\n * Tracks scroll position and derives App Bar state for all three behaviors.\n *\n * @example\n * ```tsx\n * // pinned (color change only)\n * const { isScrolled } = useAppBarScroll({ behavior: 'pinned' });\n *\n * // enterAlways (hide/show)\n * const { isHidden } = useAppBarScroll({ behavior: 'enterAlways' });\n *\n * // exitUntilCollapsed (collapse animation)\n * const { collapsedFraction } = useAppBarScroll({\n *   behavior: 'exitUntilCollapsed',\n *   collapsedHeight: 64,\n *   expandedHeight: 112,\n * });\n * ```\n */\nexport function useAppBarScroll({\n\tscrollElement,\n\tbehavior = \"pinned\",\n\tcollapsedHeight = 64,\n\texpandedHeight = 112,\n}: UseAppBarScrollOptions = {}): UseAppBarScrollReturn {\n\tconst [isScrolled, setIsScrolled] = React.useState(false);\n\tconst [collapsedFraction, setCollapsedFraction] = React.useState(0);\n\tconst [isHidden, setIsHidden] = React.useState(false);\n\n\t// Track previous scroll position for direction detection\n\tconst prevScrollYRef = React.useRef(0);\n\t// Hysteresis to prevent rapid toggling on enterAlways\n\tconst hideThreshold = 64;\n\n\tReact.useEffect(() => {\n\t\tconst scrollDistance = expandedHeight - collapsedHeight;\n\n\t\tconst getScrollY = (): number => {\n\t\t\tconst el = scrollElement?.current;\n\t\t\treturn el ? el.scrollTop : window.scrollY;\n\t\t};\n\n\t\tconst handleScroll = () => {\n\t\t\tconst currentY = getScrollY();\n\t\t\tconst prevY = prevScrollYRef.current;\n\t\t\tconst delta = currentY - prevY;\n\t\t\tprevScrollYRef.current = currentY;\n\n\t\t\t// Pinned: only toggle background color\n\t\t\tsetIsScrolled(currentY > 0);\n\n\t\t\tif (behavior === \"exitUntilCollapsed\") {\n\t\t\t\tconst fraction =\n\t\t\t\t\tscrollDistance > 0\n\t\t\t\t\t\t? Math.min(1, Math.max(0, currentY / scrollDistance))\n\t\t\t\t\t\t: 0;\n\t\t\t\tsetCollapsedFraction(fraction);\n\t\t\t}\n\n\t\t\tif (behavior === \"enterAlways\") {\n\t\t\t\tif (delta > 0 && currentY > hideThreshold) {\n\t\t\t\t\t// Scrolling down — hide\n\t\t\t\t\tsetIsHidden(true);\n\t\t\t\t} else if (delta < 0) {\n\t\t\t\t\t// Scrolling up — show\n\t\t\t\t\tsetIsHidden(false);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst target = scrollElement?.current ?? window;\n\t\ttarget.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n\t\t// Sync initial state\n\t\thandleScroll();\n\n\t\treturn () => {\n\t\t\ttarget.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, [scrollElement, behavior, collapsedHeight, expandedHeight]);\n\n\treturn { isScrolled, collapsedFraction, isHidden };\n}\n","/**\n * @file bottom-app-bar.tsx\n * MD3 Expressive Bottom App Bar.\n *\n * Fixed to bottom of screen. Contains action icons and optional FAB.\n * Height: 80px | Background: surface-container | Elevation: Level2 (always)\n *\n * @see docs/m3/app-bars/BottomAppBarTokens.kt\n */\n\nimport { m, useReducedMotion } from \"motion/react\";\nimport { cn } from \"../../lib/utils\";\nimport { FadingBlurMask } from \"../shared/fading-blur-mask\";\nimport { APP_BAR_BOTTOM_SPRING, AppBarTokens } from \"./app-bar.tokens\";\nimport type { BottomAppBarProps } from \"./app-bar.types\";\nimport { useAppBarScroll } from \"./hooks/use-app-bar-scroll\";\n\n/**\n * MD3 Expressive Bottom App Bar.\n *\n * @example\n * ```tsx\n * // With FAB\n * <BottomAppBar\n *   actions={\n *     <>\n *       <IconButton aria-label=\"Check\"><Icon>check_box</Icon></IconButton>\n *       <IconButton aria-label=\"Brush\"><Icon>brush</Icon></IconButton>\n *     </>\n *   }\n *   floatingActionButton={<FAB aria-label=\"Compose\">...</FAB>}\n * />\n *\n * // Auto-hide on scroll\n * <BottomAppBar scrollBehavior=\"hidden\" actions={...} />\n * ```\n */\nexport function BottomAppBar({\n\tactions,\n\tfloatingActionButton,\n\tscrollBehavior = \"visible\",\n\tscrollElement,\n\tclassName,\n\tenableFadingBlur,\n\tblurIntensity,\n\tblurHeight,\n}: BottomAppBarProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\n\tconst { isHidden } = useAppBarScroll({\n\t\tscrollElement,\n\t\tbehavior: scrollBehavior === \"hidden\" ? \"enterAlways\" : \"pinned\",\n\t});\n\n\tconst hideTransition = shouldReduceMotion\n\t\t? { duration: 0 }\n\t\t: APP_BAR_BOTTOM_SPRING;\n\n\tconst translateY = scrollBehavior === \"hidden\" && isHidden ? \"100%\" : \"0%\";\n\n\treturn (\n\t\t<m.nav\n\t\t\trole=\"navigation\"\n\t\t\taria-label=\"Bottom app bar\"\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed bottom-0 inset-x-0 z-50 overflow-hidden rounded-[inherit]\",\n\t\t\t\t\"flex items-center\",\n\t\t\t\t!enableFadingBlur && \"bg-m3-surface-container\",\n\t\t\t\t\"px-2\", // minimal horizontal padding, icon buttons provide spacing\n\t\t\t\t\"elevation-2\", // BottomAppBarTokens.ContainerElevation = Level2 (always)\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight: AppBarTokens.heights.bottom,\n\t\t\t}}\n\t\t\tanimate={{ y: translateY }}\n\t\t\ttransition={hideTransition}\n\t\t>\n\t\t\t{enableFadingBlur && (\n\t\t\t\t<FadingBlurMask\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tblurIntensity={blurIntensity}\n\t\t\t\t\tblurHeight={blurHeight}\n\t\t\t\t\tcolor=\"var(--md-sys-color-surface-container)\"\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div className=\"relative z-10 flex items-center w-full h-full\">\n\t\t\t\t{/* Actions — leading end */}\n\t\t\t\t{actions && <div className=\"flex items-center flex-1\">{actions}</div>}\n\n\t\t\t\t{/* FAB — trailing end */}\n\t\t\t\t{floatingActionButton && (\n\t\t\t\t\t<div className=\"shrink-0 ml-auto mr-2\">{floatingActionButton}</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</m.nav>\n\t);\n}\n","/**\n * @file docked-toolbar.tsx\n * MD3 Expressive Docked Toolbar.\n *\n * Secondary navigation component. NOT an App Bar.\n * Usually appears directly below the main App Bar.\n * Height: 64px | Background: surface-container\n * Typical content: chips, segmented buttons, filter actions.\n *\n * @see docs/m3/app-bars/DockedToolbarTokens.kt\n */\n\nimport { cn } from \"../../lib/utils\";\nimport { AppBarTokens } from \"./app-bar.tokens\";\nimport type { DockedToolbarProps } from \"./app-bar.types\";\n\n/**\n * MD3 Expressive Docked Toolbar.\n *\n * @example\n * ```tsx\n * <DockedToolbar aria-label=\"Filter options\">\n *   <Chip label=\"All\" selected onClick={() => setFilter('all')} />\n *   <Chip label=\"Unread\" onClick={() => setFilter('unread')} />\n *   <Chip label=\"Starred\" onClick={() => setFilter('starred')} />\n * </DockedToolbar>\n * ```\n */\nexport function DockedToolbar({\n\tchildren,\n\t\"aria-label\": ariaLabel,\n\tclassName,\n}: DockedToolbarProps) {\n\treturn (\n\t\t<div\n\t\t\trole=\"toolbar\"\n\t\t\taria-label={ariaLabel}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center w-full overflow-x-auto bg-m3-surface-container\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight: AppBarTokens.heights.dockedToolbar,\n\t\t\t\t// DockedToolbarTokens: LeadingSpace = 16dp, TrailingSpace = 16dp\n\t\t\t\tpaddingLeft: AppBarTokens.dockedToolbar.leadingSpace,\n\t\t\t\tpaddingRight: AppBarTokens.dockedToolbar.trailingSpace,\n\t\t\t\t// MinSpacing = 4dp (gap between items)\n\t\t\t\tgap: AppBarTokens.dockedToolbar.minSpacing,\n\t\t\t}}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * @file use-flexible-app-bar.ts\n * Shared animation hook for MediumFlexibleAppBar and LargeFlexibleAppBar.\n *\n * Extracts common scroll-driven animation state to avoid duplication.\n */\n\nimport type { MotionValue } from \"motion/react\";\nimport { useMotionValue, useReducedMotion, useTransform } from \"motion/react\";\nimport type { RefObject } from \"react\";\nimport * as React from \"react\";\nimport { APP_BAR_COLOR_TRANSITION, APP_BAR_COLORS } from \"../app-bar.tokens\";\nimport type { AppBarColors } from \"../app-bar.types\";\nimport { useAppBarScroll } from \"./use-app-bar-scroll\";\n\ninterface UseFlexibleAppBarOptions {\n\tcollapsedHeight: number;\n\texpandedHeight: number;\n\tscrollElement?: RefObject<HTMLElement | null>;\n\tcolors?: AppBarColors;\n\t/** [start, end] progress range where large title fades from 1 → 0 */\n\tlargeTitleFadeRange: [number, number];\n\t/** [start, end] progress range where small title fades from 0 → 1 */\n\tsmallTitleFadeRange: [number, number];\n\t/** [start, end] progress range where subtitle fades from 1 → 0 */\n\tsubtitleFadeRange: [number, number];\n\t/** [start, end] progress range where headerContent fades from 1 → 0 */\n\theaderContentFadeRange: [number, number];\n\t/** [expanded, collapsed] Y offset for large title */\n\tlargeTitleYRange: [number, number];\n}\n\nexport interface FlexibleAppBarAnimationState {\n\theight: MotionValue<number>;\n\tcurrentBg: string;\n\tcssTransition: string | undefined;\n\tlargeTitleOpacity: MotionValue<number>;\n\tlargeTitleY: MotionValue<number>;\n\tsmallTitleOpacity: MotionValue<number>;\n\tsubtitleOpacity: MotionValue<number>;\n\theaderContentOpacity: MotionValue<number>;\n}\n\nexport function useFlexibleAppBar({\n\tcollapsedHeight,\n\texpandedHeight,\n\tscrollElement,\n\tcolors,\n\tlargeTitleFadeRange,\n\tsmallTitleFadeRange,\n\tsubtitleFadeRange,\n\theaderContentFadeRange,\n\tlargeTitleYRange,\n}: UseFlexibleAppBarOptions): FlexibleAppBarAnimationState {\n\tconst shouldReduceMotion = useReducedMotion();\n\n\tconst { collapsedFraction } = useAppBarScroll({\n\t\tscrollElement,\n\t\tbehavior: \"exitUntilCollapsed\",\n\t\tcollapsedHeight,\n\t\texpandedHeight,\n\t});\n\n\tconst scrollProgress = useMotionValue(0);\n\n\tReact.useEffect(() => {\n\t\tscrollProgress.set(\n\t\t\tshouldReduceMotion\n\t\t\t\t? collapsedFraction > 0.5\n\t\t\t\t\t? 1\n\t\t\t\t\t: 0\n\t\t\t\t: collapsedFraction,\n\t\t);\n\t}, [collapsedFraction, scrollProgress, shouldReduceMotion]);\n\n\tconst height = useTransform(\n\t\tscrollProgress,\n\t\t[0, 1],\n\t\t[expandedHeight, collapsedHeight],\n\t);\n\n\tconst containerBg = colors?.containerColor ?? APP_BAR_COLORS.container;\n\tconst scrolledBg =\n\t\tcolors?.scrolledContainerColor ?? APP_BAR_COLORS.scrolledContainer;\n\tconst currentBg = collapsedFraction > 0 ? scrolledBg : containerBg;\n\n\tconst cssTransition = shouldReduceMotion\n\t\t? undefined\n\t\t: `background-color ${APP_BAR_COLOR_TRANSITION.duration}s cubic-bezier(${APP_BAR_COLOR_TRANSITION.ease.join(\",\")})`;\n\n\tconst largeTitleOpacity = useTransform(\n\t\tscrollProgress,\n\t\t[largeTitleFadeRange[0], largeTitleFadeRange[1]],\n\t\t[1, 0],\n\t);\n\tconst largeTitleY = useTransform(scrollProgress, [0, 1], largeTitleYRange);\n\tconst smallTitleOpacity = useTransform(\n\t\tscrollProgress,\n\t\t[smallTitleFadeRange[0], smallTitleFadeRange[1]],\n\t\t[0, 1],\n\t);\n\tconst subtitleOpacity = useTransform(\n\t\tscrollProgress,\n\t\t[subtitleFadeRange[0], subtitleFadeRange[1]],\n\t\t[1, 0],\n\t);\n\tconst headerContentOpacity = useTransform(\n\t\tscrollProgress,\n\t\t[headerContentFadeRange[0], headerContentFadeRange[1]],\n\t\t[1, 0],\n\t);\n\n\treturn {\n\t\theight,\n\t\tcurrentBg,\n\t\tcssTransition,\n\t\tlargeTitleOpacity,\n\t\tlargeTitleY,\n\t\tsmallTitleOpacity,\n\t\tsubtitleOpacity,\n\t\theaderContentOpacity,\n\t};\n}\n","/**\n * @file large-flexible-app-bar.tsx\n * MD3 Expressive Large Flexible App Bar.\n *\n * Like MediumFlexibleAppBar but with larger typography.\n * Expanded height: 120px (no subtitle) / 152px (with subtitle)\n * Collapsed height: 64px\n * Title crossfade: DisplaySmall (expanded) ↔ TitleLarge (collapsed)\n *\n * @see docs/m3/app-bars/AppBarLargeFlexibleTokens.kt\n */\n\nimport { m } from \"motion/react\";\nimport { cn } from \"../../lib/utils\";\nimport { FadingBlurMask } from \"../shared/fading-blur-mask\";\nimport {\n\tAPP_BAR_COLORS,\n\tAppBarTokens,\n\tappBarTypography,\n} from \"./app-bar.tokens\";\nimport type { FlexibleAppBarProps } from \"./app-bar.types\";\nimport { useFlexibleAppBar } from \"./hooks/use-flexible-app-bar\";\n\n/**\n * MD3 Expressive Large Flexible App Bar.\n *\n * @example\n * ```tsx\n * <LargeFlexibleAppBar\n *   title=\"Discover\"\n *   subtitle=\"Trending today\"\n *   navigationIcon={<IconButton aria-label=\"Open menu\"><Icon>menu</Icon></IconButton>}\n *   headerContent={<img src=\"/banner.jpg\" alt=\"\" className=\"rounded-xl h-20 w-full object-cover\" />}\n * />\n * ```\n */\nexport function LargeFlexibleAppBar({\n\ttitle,\n\tsubtitle,\n\ttitleAlignment = \"start\",\n\tnavigationIcon,\n\tactions,\n\tcolors,\n\tscrollElement,\n\theaderContent,\n\tcollapsedHeight = AppBarTokens.heights.flexibleCollapsed,\n\texpandedHeight,\n\tclassName,\n\tenableFadingBlur,\n\tblurIntensity,\n\tblurHeight,\n}: FlexibleAppBarProps) {\n\tconst resolvedExpandedHeight =\n\t\texpandedHeight ??\n\t\t(subtitle\n\t\t\t? AppBarTokens.heights.largeFlexWithSubtitleExpanded\n\t\t\t: AppBarTokens.heights.largeFlexExpanded);\n\n\tconst {\n\t\theight,\n\t\tcurrentBg,\n\t\tcssTransition,\n\t\tlargeTitleOpacity,\n\t\tlargeTitleY,\n\t\tsmallTitleOpacity,\n\t\tsubtitleOpacity,\n\t\theaderContentOpacity,\n\t} = useFlexibleAppBar({\n\t\tcollapsedHeight,\n\t\texpandedHeight: resolvedExpandedHeight,\n\t\tscrollElement,\n\t\tcolors,\n\t\tlargeTitleFadeRange: [0, 0.35],\n\t\tsmallTitleFadeRange: [0.55, 0.95],\n\t\tsubtitleFadeRange: [0, 0.25],\n\t\theaderContentFadeRange: [0, 0.2],\n\t\tlargeTitleYRange: [0, 12],\n\t});\n\n\tconst isCentered = titleAlignment === \"center\";\n\n\treturn (\n\t\t<m.header\n\t\t\trole=\"banner\"\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed top-0 inset-x-0 z-50 flex flex-col overflow-hidden rounded-[inherit]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight,\n\t\t\t\tbackgroundColor: enableFadingBlur ? \"transparent\" : currentBg,\n\t\t\t\ttransition: cssTransition,\n\t\t\t}}\n\t\t>\n\t\t\t{enableFadingBlur && (\n\t\t\t\t<FadingBlurMask\n\t\t\t\t\tdirection=\"top\"\n\t\t\t\t\tblurIntensity={blurIntensity}\n\t\t\t\t\tblurHeight={blurHeight}\n\t\t\t\t\tcolor={currentBg}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tclassName=\"relative z-10 flex items-center px-1 shrink-0\"\n\t\t\t\tstyle={{ height: collapsedHeight }}\n\t\t\t>\n\t\t\t\t{navigationIcon && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"shrink-0 flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t\theight: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{navigationIcon}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<m.div\n\t\t\t\t\tclassName={cn(\"flex-1 min-w-0\", !navigationIcon && \"pl-4\")}\n\t\t\t\t\tstyle={{ opacity: smallTitleOpacity }}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tappBarTypography.titleLarge,\n\t\t\t\t\t\t\t\"truncate block\",\n\t\t\t\t\t\t\tisCentered && \"text-center\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ color: colors?.titleColor ?? APP_BAR_COLORS.title }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</span>\n\t\t\t\t</m.div>\n\n\t\t\t\t{actions && <div className=\"flex items-center shrink-0\">{actions}</div>}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative z-10 flex flex-col flex-1 px-4 pb-3 justify-end\",\n\t\t\t\t\tisCentered ? \"items-center\" : \"items-start\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<m.span\n\t\t\t\t\tclassName={cn(appBarTypography.displaySmall, \"truncate w-full\")}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\topacity: largeTitleOpacity,\n\t\t\t\t\t\ty: largeTitleY,\n\t\t\t\t\t\tcolor: colors?.titleColor ?? APP_BAR_COLORS.title,\n\t\t\t\t\t\t...(isCentered && { textAlign: \"center\" }),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</m.span>\n\n\t\t\t\t{subtitle && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tclassName={cn(appBarTypography.titleMedium, \"truncate w-full\")}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\topacity: subtitleOpacity,\n\t\t\t\t\t\t\tcolor: colors?.subtitleColor ?? APP_BAR_COLORS.subtitle,\n\t\t\t\t\t\t\t...(isCentered && { textAlign: \"center\" }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t{headerContent && (\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"mt-3 w-full\"\n\t\t\t\t\t\tstyle={{ opacity: headerContentOpacity }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{headerContent}\n\t\t\t\t\t</m.div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</m.header>\n\t);\n}\n","/**\n * @file medium-flexible-app-bar.tsx\n * MD3 Expressive Medium Flexible App Bar.\n *\n * Two-row layout in expanded state, collapses to single row on scroll.\n * Expanded height: 112px (no subtitle) / 136px (with subtitle)\n * Collapsed height: 64px\n * Title crossfade: HeadlineMedium (expanded) ↔ TitleLarge (collapsed)\n *\n * Supports `exitUntilCollapsed` scroll behavior only.\n *\n * @see docs/m3/app-bars/AppBarMediumFlexibleTokens.kt\n */\n\nimport { m } from \"motion/react\";\nimport { cn } from \"../../lib/utils\";\nimport { FadingBlurMask } from \"../shared/fading-blur-mask\";\nimport {\n\tAPP_BAR_COLORS,\n\tAppBarTokens,\n\tappBarTypography,\n} from \"./app-bar.tokens\";\nimport type { FlexibleAppBarProps } from \"./app-bar.types\";\nimport { useFlexibleAppBar } from \"./hooks/use-flexible-app-bar\";\n\n/**\n * MD3 Expressive Medium Flexible App Bar.\n *\n * @example\n * ```tsx\n * <MediumFlexibleAppBar\n *   title=\"Settings\"\n *   subtitle=\"Manage your preferences\"\n *   navigationIcon={<IconButton aria-label=\"Go back\"><Icon>arrow_back</Icon></IconButton>}\n *   actions={<IconButton aria-label=\"More options\"><Icon>more_vert</Icon></IconButton>}\n * />\n * ```\n */\nexport function MediumFlexibleAppBar({\n\ttitle,\n\tsubtitle,\n\ttitleAlignment = \"start\",\n\tnavigationIcon,\n\tactions,\n\tcolors,\n\tscrollElement,\n\theaderContent,\n\tcollapsedHeight = AppBarTokens.heights.flexibleCollapsed,\n\texpandedHeight,\n\tclassName,\n\tenableFadingBlur,\n\tblurIntensity,\n\tblurHeight,\n}: FlexibleAppBarProps) {\n\tconst resolvedExpandedHeight =\n\t\texpandedHeight ??\n\t\t(subtitle\n\t\t\t? AppBarTokens.heights.mediumFlexWithSubtitleExpanded\n\t\t\t: AppBarTokens.heights.mediumFlexExpanded);\n\n\tconst {\n\t\theight,\n\t\tcurrentBg,\n\t\tcssTransition,\n\t\tlargeTitleOpacity,\n\t\tlargeTitleY,\n\t\tsmallTitleOpacity,\n\t\tsubtitleOpacity,\n\t\theaderContentOpacity,\n\t} = useFlexibleAppBar({\n\t\tcollapsedHeight,\n\t\texpandedHeight: resolvedExpandedHeight,\n\t\tscrollElement,\n\t\tcolors,\n\t\tlargeTitleFadeRange: [0, 0.4],\n\t\tsmallTitleFadeRange: [0.5, 0.9],\n\t\tsubtitleFadeRange: [0, 0.3],\n\t\theaderContentFadeRange: [0, 0.25],\n\t\tlargeTitleYRange: [0, 8],\n\t});\n\n\tconst isCentered = titleAlignment === \"center\";\n\n\treturn (\n\t\t<m.header\n\t\t\trole=\"banner\"\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed top-0 inset-x-0 z-50 flex flex-col overflow-hidden rounded-[inherit]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight,\n\t\t\t\tbackgroundColor: enableFadingBlur ? \"transparent\" : currentBg,\n\t\t\t\ttransition: cssTransition,\n\t\t\t}}\n\t\t>\n\t\t\t{enableFadingBlur && (\n\t\t\t\t<FadingBlurMask\n\t\t\t\t\tdirection=\"top\"\n\t\t\t\t\tblurIntensity={blurIntensity}\n\t\t\t\t\tblurHeight={blurHeight}\n\t\t\t\t\tcolor={currentBg}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div\n\t\t\t\tclassName=\"relative z-10 flex items-center px-1 shrink-0\"\n\t\t\t\tstyle={{ height: collapsedHeight }}\n\t\t\t>\n\t\t\t\t{navigationIcon && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"shrink-0 flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t\theight: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{navigationIcon}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<m.div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex-1 min-w-0\",\n\t\t\t\t\t\tisCentered ? \"text-center\" : \"text-start\",\n\t\t\t\t\t\t!navigationIcon && \"pl-4\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ opacity: smallTitleOpacity }}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cn(appBarTypography.titleLarge, \"truncate block\")}\n\t\t\t\t\t\tstyle={{ color: colors?.titleColor ?? APP_BAR_COLORS.title }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</span>\n\t\t\t\t</m.div>\n\n\t\t\t\t{actions && <div className=\"flex items-center shrink-0\">{actions}</div>}\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative z-10 flex flex-col flex-1 px-4 pb-3 justify-end\",\n\t\t\t\t\tisCentered ? \"items-center\" : \"items-start\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<m.span\n\t\t\t\t\tclassName={cn(appBarTypography.headlineMedium, \"truncate w-full\")}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\topacity: largeTitleOpacity,\n\t\t\t\t\t\ty: largeTitleY,\n\t\t\t\t\t\tcolor: colors?.titleColor ?? APP_BAR_COLORS.title,\n\t\t\t\t\t\t...(isCentered && { textAlign: \"center\" }),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</m.span>\n\n\t\t\t\t{subtitle && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tclassName={cn(appBarTypography.labelLarge, \"truncate w-full\")}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\topacity: subtitleOpacity,\n\t\t\t\t\t\t\tcolor: colors?.subtitleColor ?? APP_BAR_COLORS.subtitle,\n\t\t\t\t\t\t\t...(isCentered && { textAlign: \"center\" }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t{headerContent && (\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"mt-2 w-full\"\n\t\t\t\t\t\tstyle={{ opacity: headerContentOpacity }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{headerContent}\n\t\t\t\t\t</m.div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</m.header>\n\t);\n}\n","/**\n * @file search-app-bar.tsx\n * MD3 Expressive Search App Bar.\n *\n * New variant in MD3 Expressive (May 2025).\n * Replaces the title area with a pill-shaped search bar.\n * Uses Framer Motion layoutId to enable shared element transition with <SearchView>.\n *\n * Search bar height: 56dp (MD3 spec). Override via `searchBarHeight` prop.\n * On-scroll: search bar bg switches to surface-container-highest (Figma On-scroll state).\n * Variant:\n *   - \"filled\"   → filled pill bg (default, matches Figma)\n *   - \"outlined\" → transparent pill with border-outline stroke\n *\n * @see docs/m3/app-bars/AppBar.kt — SearchAppBar\n */\n\nimport { m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { FadingBlurMask } from \"../shared/fading-blur-mask\";\nimport {\n\tAPP_BAR_COLOR_TRANSITION,\n\tAPP_BAR_COLORS,\n\tAppBarTokens,\n} from \"./app-bar.tokens\";\nimport type { SearchAppBarProps } from \"./app-bar.types\";\nimport { useAppBarScroll } from \"./hooks/use-app-bar-scroll\";\n\n/** Built-in search icon (Material Symbols) used as default. */\nfunction SearchIcon({ className }: { className?: string }) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn(\n\t\t\t\t\"material-symbols-rounded text-[20px] leading-none select-none flex items-center justify-center\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\tsearch\n\t\t</span>\n\t);\n}\n\n/**\n * MD3 Expressive Search App Bar.\n *\n * When the search bar is clicked, callers should open a `<SearchView>` overlay.\n * Uses Framer Motion `layoutId` (via `searchBarId`) for a smooth shared-element\n * transition between this bar and the search view.\n *\n * @example\n * ```tsx\n * const [searchOpen, setSearchOpen] = useState(false);\n *\n * <SearchAppBar\n *   searchBarId=\"main-search\"\n *   searchPlaceholder=\"Search messages...\"\n *   onSearchFocus={() => setSearchOpen(true)}\n *   trailingSearchActions={\n *     <IconButton aria-label=\"Voice search\"><Icon>mic</Icon></IconButton>\n *   }\n *   externalActions={<Avatar src={user.avatar} />}\n * />\n *\n * <AnimatePresence>\n *   {searchOpen && (\n *     <SearchView\n *       searchBarId=\"main-search\"\n *       onClose={() => setSearchOpen(false)}\n *     />\n *   )}\n * </AnimatePresence>\n * ```\n */\nexport function SearchAppBar({\n\tsearchPlaceholder = \"Search\",\n\tsearchValue,\n\tonSearchFocus,\n\tleadingSearchIcon,\n\ttrailingSearchActions,\n\texternalActions,\n\tnavigationIcon,\n\tcolors,\n\tscrollBehavior = \"pinned\",\n\tscrollElement,\n\tsearchBarId = \"search-bar\",\n\tsearchBarVariant = \"filled\",\n\tsearchBarHeight = 56,\n\tclassName,\n\tenableFadingBlur,\n\tblurIntensity,\n\tblurHeight,\n}: SearchAppBarProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst [isSearchOpen, setIsSearchOpen] = React.useState(false);\n\n\tconst { isScrolled } = useAppBarScroll({\n\t\tscrollElement,\n\t\tbehavior:\n\t\t\tscrollBehavior === \"exitUntilCollapsed\" ? \"pinned\" : scrollBehavior,\n\t});\n\n\tconst containerBg = colors?.containerColor ?? APP_BAR_COLORS.container;\n\tconst scrolledBg =\n\t\tcolors?.scrolledContainerColor ?? APP_BAR_COLORS.scrolledContainer;\n\tconst currentBg = isScrolled ? scrolledBg : containerBg;\n\n\tconst cssTransition = shouldReduceMotion\n\t\t? undefined\n\t\t: `background-color ${APP_BAR_COLOR_TRANSITION.duration}s cubic-bezier(${APP_BAR_COLOR_TRANSITION.ease.join(\",\")})`;\n\n\tconst handleSearchClick = () => {\n\t\tsetIsSearchOpen(true);\n\t\tonSearchFocus?.();\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\te.preventDefault();\n\t\t\thandleSearchClick();\n\t\t}\n\t};\n\n\t/**\n\t * Search bar pill background.\n\t * Flat:      surface-container-high  (Figma: Elevation=Flat)\n\t * On-scroll: surface-container-highest (Figma: Elevation=On-scroll)\n\t */\n\tconst searchBarBg = isScrolled\n\t\t? \"var(--md-sys-color-surface-container-highest)\"\n\t\t: APP_BAR_COLORS.searchBarBg;\n\n\tconst isOutlined = searchBarVariant === \"outlined\";\n\n\treturn (\n\t\t<m.header\n\t\t\trole=\"banner\"\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed top-0 inset-x-0 z-50 flex items-center gap-2 px-4 overflow-hidden rounded-[inherit]\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight: AppBarTokens.heights.small,\n\t\t\t\tbackgroundColor: enableFadingBlur ? \"transparent\" : currentBg,\n\t\t\t\ttransition: cssTransition,\n\t\t\t}}\n\t\t>\n\t\t\t{/* Fading blur overlay — same pattern as SmallAppBar / FlexibleAppBars */}\n\t\t\t{enableFadingBlur && (\n\t\t\t\t<FadingBlurMask\n\t\t\t\t\tdirection=\"top\"\n\t\t\t\t\tblurIntensity={blurIntensity}\n\t\t\t\t\tblurHeight={blurHeight}\n\t\t\t\t\tcolor={currentBg}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* All content sits above the blur mask via z-10 */}\n\t\t\t<div className=\"relative z-10 flex items-center gap-2 w-full h-full\">\n\t\t\t\t{/* Optional navigation icon — leading edge */}\n\t\t\t\t{navigationIcon && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"shrink-0 flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t\theight: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{navigationIcon}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Search bar pill */}\n\t\t\t\t<m.div\n\t\t\t\t\tlayoutId={shouldReduceMotion ? undefined : searchBarId}\n\t\t\t\t\trole=\"search\"\n\t\t\t\t\taria-label={searchPlaceholder}\n\t\t\t\t\taria-expanded={isSearchOpen}\n\t\t\t\t\ttabIndex={0}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex flex-1 items-center gap-2 rounded-full cursor-text px-4\",\n\t\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2\",\n\t\t\t\t\t\tisOutlined && \"border border-(--md-sys-color-outline)\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: searchBarHeight }}\n\t\t\t\t\tonClick={handleSearchClick}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t>\n\t\t\t\t\t{/* Pill background — transparent for outlined, colored for filled */}\n\t\t\t\t\t{!isOutlined && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"absolute inset-0 rounded-full -z-10 transition-colors\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackgroundColor: searchBarBg,\n\t\t\t\t\t\t\t\ttransition: cssTransition,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Leading search icon */}\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"shrink-0 flex items-center justify-center h-full\"\n\t\t\t\t\t\tstyle={{ color: APP_BAR_COLORS.searchBarContent }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{leadingSearchIcon ?? <SearchIcon />}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t{/* Placeholder / value text */}\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"flex-1 text-[16px] leading-6 truncate select-none\"\n\t\t\t\t\t\tstyle={{ color: APP_BAR_COLORS.searchBarContent }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{searchValue ?? searchPlaceholder}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t{/* Trailing actions inside pill */}\n\t\t\t\t\t{trailingSearchActions && (\n\t\t\t\t\t\t<div className=\"flex items-center shrink-0\">\n\t\t\t\t\t\t\t{trailingSearchActions}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</m.div>\n\n\t\t\t\t{/* External actions — trailing edge of bar, outside pill */}\n\t\t\t\t{externalActions && (\n\t\t\t\t\t<div className=\"flex items-center shrink-0\">{externalActions}</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</m.header>\n\t);\n}\n","/**\n * @file search-view.tsx\n * MD3 Expressive Search View.\n *\n * Full-screen overlay activated when a SearchAppBar's search bar is clicked.\n * Shares a Framer Motion `layoutId` with the SearchAppBar search bar for a\n * smooth shared element transition.\n *\n * Usage pattern:\n * ```tsx\n * const [open, setOpen] = useState(false);\n *\n * // In render:\n * <SearchAppBar searchBarId=\"main\" onSearchFocus={() => setOpen(true)} />\n * <AnimatePresence>\n *   {open && <SearchView searchBarId=\"main\" onClose={() => setOpen(false)} />}\n * </AnimatePresence>\n * ```\n *\n * Design notes:\n * - The SearchView is intentionally separate from SearchAppBar to allow consumers\n *   to customize the results/suggestions content without coupling.\n * - The `searchBarId` prop must match between SearchAppBar and SearchView to\n *   enable the shared element transition.\n * - Focus is moved to the search input when the view opens.\n * - Escape key closes the view and returns focus to the search bar.\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport {\n\tAPP_BAR_COLORS,\n\tAppBarTokens,\n\tSEARCH_VIEW_SPRING,\n} from \"./app-bar.tokens\";\nimport type { SearchViewProps } from \"./app-bar.types\";\n\n/** Built-in back arrow icon. */\nfunction ArrowBackIcon() {\n\treturn (\n\t\t<span\n\t\t\tclassName=\"material-symbols-rounded text-[24px] leading-none select-none\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\tarrow_back\n\t\t</span>\n\t);\n}\n\n/** Built-in clear icon. */\nfunction CloseIcon() {\n\treturn (\n\t\t<span\n\t\t\tclassName=\"material-symbols-rounded text-[24px] leading-none select-none\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\tclose\n\t\t</span>\n\t);\n}\n\n/**\n * MD3 Expressive Search View.\n *\n * Renders a full-screen search overlay with a shared element transition\n * from the triggering `<SearchAppBar>` search bar.\n *\n * Mount/unmount this component via `<AnimatePresence>` in the consumer.\n */\nexport function SearchView({\n\tsearchBarId = \"search-bar\",\n\tvalue = \"\",\n\tonChange,\n\tonClose,\n\tplaceholder = \"Search\",\n\tchildren,\n\tleadingIcon,\n\ttrailingAction,\n\tclassName,\n}: SearchViewProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\n\t// Move focus to the search input when the view opens\n\tReact.useEffect(() => {\n\t\tconst timer = window.setTimeout(() => {\n\t\t\tinputRef.current?.focus();\n\t\t}, 50);\n\t\treturn () => window.clearTimeout(timer);\n\t}, []);\n\n\t// Close on Escape key\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (e.key === \"Escape\") {\n\t\t\tonClose();\n\t\t}\n\t};\n\n\tconst viewTransition = shouldReduceMotion\n\t\t? { duration: 0 }\n\t\t: SEARCH_VIEW_SPRING;\n\n\treturn (\n\t\t<m.div\n\t\t\trole=\"dialog\"\n\t\t\taria-modal=\"true\"\n\t\t\taria-label=\"Search\"\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed inset-0 z-60 flex flex-col bg-m3-surface\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tinitial={shouldReduceMotion ? {} : { opacity: 0 }}\n\t\t\tanimate={{ opacity: 1 }}\n\t\t\texit={shouldReduceMotion ? {} : { opacity: 0 }}\n\t\t\ttransition={viewTransition}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t>\n\t\t\t{/* Search Bar — matches layoutId of SearchAppBar search bar */}\n\t\t\t<m.div\n\t\t\t\tlayoutId={shouldReduceMotion ? undefined : searchBarId}\n\t\t\t\tclassName=\"flex items-center gap-2 px-4 shrink-0 bg-m3-surface\"\n\t\t\t\tstyle={{\n\t\t\t\t\theight: AppBarTokens.heights.small,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/* Leading: back button or custom icon */}\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"shrink-0 flex items-center justify-center rounded-full\",\n\t\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\theight: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\tcolor: APP_BAR_COLORS.navigationIcon,\n\t\t\t\t\t}}\n\t\t\t\t\taria-label=\"Close search\"\n\t\t\t\t\tonClick={onClose}\n\t\t\t\t>\n\t\t\t\t\t{leadingIcon ?? <ArrowBackIcon />}\n\t\t\t\t</button>\n\n\t\t\t\t{/* Search input */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"relative flex flex-1 items-center rounded-full px-4 gap-2\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\theight: 40,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{/* Background Layer */}\n\t\t\t\t\t<div className=\"absolute inset-0 rounded-full bg-m3-surface-container-high -z-10\" />\n\t\t\t\t\t<input\n\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\taria-label={placeholder}\n\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={(e) => onChange?.(e.target.value)}\n\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex-1 bg-transparent border-none outline-none\",\n\t\t\t\t\t\t\t\"text-[16px] leading-6\",\n\t\t\t\t\t\t\t\"placeholder:text-m3-on-surface-variant\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ color: APP_BAR_COLORS.title }}\n\t\t\t\t\t/>\n\n\t\t\t\t\t{/* Clear button — show when there's a value */}\n\t\t\t\t\t{value && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"shrink-0 flex items-center justify-center rounded-full\",\n\t\t\t\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: 40,\n\t\t\t\t\t\t\t\theight: 40,\n\t\t\t\t\t\t\t\tcolor: APP_BAR_COLORS.searchBarContent,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\taria-label=\"Clear search\"\n\t\t\t\t\t\t\tonClick={() => onChange?.(\"\")}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingAction ?? <CloseIcon />}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</m.div>\n\n\t\t\t{/* Results / suggestions area */}\n\t\t\t{children && (\n\t\t\t\t<m.div\n\t\t\t\t\tclassName=\"flex-1 overflow-y-auto\"\n\t\t\t\t\tinitial={shouldReduceMotion ? {} : { opacity: 0, y: -8 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\ttransition={{ delay: 0.1, duration: 0.15 }}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</m.div>\n\t\t\t)}\n\t\t</m.div>\n\t);\n}\n\n/**\n * Convenience wrapper that handles the AnimatePresence + open state.\n *\n * @example\n * ```tsx\n * <SearchBar\n *   isOpen={searchOpen}\n *   onClose={() => setSearchOpen(false)}\n *   searchBarId=\"main-search\"\n * >\n *   <SearchResultsList results={results} />\n * </SearchBar>\n * ```\n */\nexport function SearchViewContainer({\n\tisOpen,\n\t...props\n}: SearchViewProps & { isOpen: boolean }) {\n\treturn (\n\t\t<AnimatePresence>{isOpen && <SearchView {...props} />}</AnimatePresence>\n\t);\n}\n","/**\n * @file small-app-bar.tsx\n * MD3 Expressive Small App Bar.\n *\n * Single-row layout: [navigationIcon][title + subtitle][actions]\n * Height: 64px | Title: TitleLarge (22sp) | Subtitle: LabelMedium (12sp)\n *\n * Scroll behaviors:\n * - pinned: changes background color surface → surface-container\n * - enterAlways: slides up when scrolling down, slides down when scrolling up\n *\n * @see docs/m3/app-bars/AppBarSmallTokens.kt\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport { cn } from \"../../lib/utils\";\nimport { FadingBlurMask } from \"../shared/fading-blur-mask\";\nimport {\n\tAPP_BAR_COLOR_TRANSITION,\n\tAPP_BAR_COLORS,\n\tAPP_BAR_ENTER_ALWAYS_SPRING,\n\tAppBarTokens,\n\tappBarTypography,\n} from \"./app-bar.tokens\";\nimport type { SmallAppBarProps } from \"./app-bar.types\";\nimport { useAppBarScroll } from \"./hooks/use-app-bar-scroll\";\n\ninterface SmallAppBarInnerProps\n\textends Pick<\n\t\tSmallAppBarProps,\n\t\t| \"title\"\n\t\t| \"subtitle\"\n\t\t| \"titleAlignment\"\n\t\t| \"navigationIcon\"\n\t\t| \"actions\"\n\t\t| \"colors\"\n\t\t| \"enableFadingBlur\"\n\t\t| \"blurIntensity\"\n\t\t| \"blurHeight\"\n\t> {\n\tcurrentBg: string;\n\tcssTransition: string | undefined;\n}\n\n/** Inner content shared between pinned and enterAlways variants. */\nfunction SmallAppBarInner({\n\ttitle,\n\tsubtitle,\n\ttitleAlignment = \"start\",\n\tnavigationIcon,\n\tactions,\n\tcolors,\n\tcurrentBg,\n\tcssTransition,\n\tenableFadingBlur,\n\tblurIntensity,\n\tblurHeight,\n}: SmallAppBarInnerProps) {\n\tconst isCentered = titleAlignment === \"center\";\n\n\treturn (\n\t\t<m.header\n\t\t\trole=\"banner\"\n\t\t\tclassName=\"relative flex items-center px-1 h-full w-full overflow-hidden rounded-[inherit]\"\n\t\t\tstyle={{\n\t\t\t\tbackgroundColor: enableFadingBlur ? \"transparent\" : currentBg,\n\t\t\t\ttransition: cssTransition,\n\t\t\t}}\n\t\t>\n\t\t\t{enableFadingBlur && (\n\t\t\t\t<FadingBlurMask\n\t\t\t\t\tdirection=\"top\"\n\t\t\t\t\tblurIntensity={blurIntensity}\n\t\t\t\t\tblurHeight={blurHeight}\n\t\t\t\t\tcolor={currentBg}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t<div className=\"relative z-10 flex items-center w-full h-full\">\n\t\t\t\t{navigationIcon && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"shrink-0 flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t\theight: AppBarTokens.iconButtonTouchTarget,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{navigationIcon}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex-1 flex flex-col justify-center min-w-0\",\n\t\t\t\t\t\tisCentered ? \"items-center\" : \"items-start\",\n\t\t\t\t\t\t!navigationIcon && !isCentered && \"pl-4\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tappBarTypography.titleLarge,\n\t\t\t\t\t\t\t\"truncate w-full\",\n\t\t\t\t\t\t\tisCentered && \"text-center\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ color: colors?.titleColor ?? APP_BAR_COLORS.title }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</span>\n\t\t\t\t\t{subtitle && (\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\tappBarTypography.labelMedium,\n\t\t\t\t\t\t\t\t\"truncate w-full\",\n\t\t\t\t\t\t\t\tisCentered && \"text-center\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tcolor: colors?.subtitleColor ?? APP_BAR_COLORS.subtitle,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{subtitle}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Center mode: trailing spacer mirrors leading nav icon width for true symmetry */}\n\t\t\t\t{isCentered && !actions && navigationIcon && (\n\t\t\t\t\t<div\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{ width: AppBarTokens.iconButtonTouchTarget }}\n\t\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{actions && <div className=\"flex items-center shrink-0\">{actions}</div>}\n\t\t\t</div>\n\t\t</m.header>\n\t);\n}\n\n/**\n * MD3 Expressive Small App Bar.\n *\n * @example\n * ```tsx\n * // Left-aligned (default)\n * <SmallAppBar\n *   title=\"Inbox\"\n *   navigationIcon={<IconButton aria-label=\"Go back\"><Icon>arrow_back</Icon></IconButton>}\n *   actions={<IconButton aria-label=\"Search\"><Icon>search</Icon></IconButton>}\n *   scrollBehavior=\"pinned\"\n * />\n *\n * // Center-aligned with subtitle\n * <SmallAppBar\n *   title=\"Profile\"\n *   subtitle=\"@username\"\n *   titleAlignment=\"center\"\n *   scrollBehavior=\"enterAlways\"\n * />\n * ```\n */\nexport function SmallAppBar({\n\ttitle,\n\tsubtitle,\n\ttitleAlignment = \"start\",\n\tnavigationIcon,\n\tactions,\n\tcolors,\n\tscrollBehavior = \"pinned\",\n\tscrollElement,\n\tclassName,\n\tenableFadingBlur,\n\tblurIntensity,\n\tblurHeight,\n}: SmallAppBarProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\n\tconst { isScrolled, isHidden } = useAppBarScroll({\n\t\tscrollElement,\n\t\tbehavior:\n\t\t\tscrollBehavior === \"exitUntilCollapsed\" ? \"pinned\" : scrollBehavior,\n\t});\n\n\tconst containerBg = colors?.containerColor ?? APP_BAR_COLORS.container;\n\tconst scrolledBg =\n\t\tcolors?.scrolledContainerColor ?? APP_BAR_COLORS.scrolledContainer;\n\tconst currentBg = isScrolled ? scrolledBg : containerBg;\n\n\tconst cssTransition = shouldReduceMotion\n\t\t? undefined\n\t\t: `background-color ${APP_BAR_COLOR_TRANSITION.duration}s cubic-bezier(${APP_BAR_COLOR_TRANSITION.ease.join(\",\")})`;\n\n\t// className is scoped to wrapper only — not forwarded into SmallAppBarInner\n\tconst innerProps: SmallAppBarInnerProps = {\n\t\ttitle,\n\t\tsubtitle,\n\t\ttitleAlignment,\n\t\tnavigationIcon,\n\t\tactions,\n\t\tcolors,\n\t\tcurrentBg,\n\t\tcssTransition,\n\t\tenableFadingBlur,\n\t\tblurIntensity,\n\t\tblurHeight,\n\t};\n\n\tconst barHeight = AppBarTokens.heights.small;\n\n\tif (scrollBehavior !== \"enterAlways\") {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\"fixed top-0 inset-x-0 z-50 overflow-hidden\", className)}\n\t\t\t\tstyle={{ height: barHeight }}\n\t\t\t>\n\t\t\t\t<SmallAppBarInner {...innerProps} />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<AnimatePresence initial={false}>\n\t\t\t{!isHidden && (\n\t\t\t\t<m.div\n\t\t\t\t\tkey=\"small-app-bar\"\n\t\t\t\t\tinitial={{ y: \"-100%\" }}\n\t\t\t\t\tanimate={{ y: 0 }}\n\t\t\t\t\texit={{ y: \"-100%\" }}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tshouldReduceMotion ? { duration: 0 } : APP_BAR_ENTER_ALWAYS_SPRING\n\t\t\t\t\t}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed top-0 inset-x-0 z-50 overflow-hidden\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: barHeight }}\n\t\t\t\t>\n\t\t\t\t\t<SmallAppBarInner {...innerProps} />\n\t\t\t\t</m.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","/**\n * @file badge.tsx\n *\n * MD3 Expressive Badge component.\n *\n * - `Badge`      → A small status indicator. Can be a dot (no content) or labeled (with content).\n * - `BadgedBox`  → Positions a Badge at the top-trailing corner of an anchor element.\n *\n * @remarks\n * Token references (Kotlin source):\n * BadgeTokens — Size=6dp (→ 6px), LargeSize=16dp (→ 16px), Shape=CornerFull, Color=Error,\n * LargeLabelTextFont=LabelSmall, LargeLabelTextColor=OnError\n *\n * BadgedBox offsets:\n * - Small (dot):  BadgeOffset = 6dp             → translate(50%, -50%)\n * - Large (text): HOffset=12dp, VOffset=14dp   → translate(35%, -35%)\n *\n * Architecture:\n * - Styling: `cn` (clsx/tailwind-merge) + static Tailwind classes\n * - Animation: Framer Motion (`LazyMotion` + `domMax`) spring mount/unmount\n * - A11y: `role=\"status\"` with `aria-label`, decorative dots use `aria-hidden=\"true\"`\n *\n * @see https://m3.material.io/components/badge/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 { FAST_SPATIAL_SPRING } from \"./shared/motion-tokens\";\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 SafeHTMLSpanAttrs = Omit<\n\tReact.HTMLAttributes<HTMLSpanElement>,\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 BadgeProps extends SafeHTMLSpanAttrs {\n\t/**\n\t * The content to display inside the badge.\n\t * - Omitted / undefined → renders as a small 6×6px dot (decorative).\n\t * - string | number    → renders as a large badge (min 16px height) with label.\n\t *\n\t * Numbers exceeding `max` are displayed as `{max}+`.\n\t * Strings longer than 4 characters are truncated to 4.\n\t */\n\tchildren?: React.ReactNode;\n\n\t/**\n\t * Maximum numeric value to display before appending \"+\".\n\t * Only applies when `children` is a number.\n\t * @example max={99} + children={150} → \"99+\"\n\t */\n\tmax?: number;\n\n\t/**\n\t * Override the background (container) color.\n\t * Accepts any valid CSS color value.\n\t * Defaults to MD3 `error` token — `bg-m3-error`.\n\t */\n\tcontainerColor?: string;\n\n\t/**\n\t * Override the text/content color.\n\t * Accepts any valid CSS color value.\n\t * Defaults to MD3 `on-error` token — `text-m3-on-error`.\n\t */\n\tcontentColor?: string;\n}\n\nexport interface BadgedBoxProps {\n\t/**\n\t * The badge element to overlay on the anchor.\n\t * Typically a `<Badge />`.\n\t */\n\tbadge: React.ReactNode;\n\n\t/**\n\t * The anchor content that the badge is attached to.\n\t */\n\tchildren: React.ReactNode;\n\n\t/**\n\t * Additional className applied to the outer wrapper `span`.\n\t */\n\tclassName?: string;\n\n\t/**\n\t/**\n\t * Explicitly override size detection for badge positioning per MD3 specification.\n\t * - `'sm'` → Small badge (dot): BadgeOffset = 6dp → translate(50%, -50%)\n\t * - `'lg'` → Large badge (text): HOffset=12dp/VOffset=14dp → translate(35%, -35%)\n\t * When omitted, BadgedBox auto-detects by inspecting `badge` children prop.\n\t * @default auto-detected\n\t */\n\tsize?: \"sm\" | \"lg\";\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction formatBadgeLabel(children: React.ReactNode, max?: number): string {\n\tif (typeof children === \"number\") {\n\t\treturn max !== undefined && children > max ? `${max}+` : String(children);\n\t}\n\tif (typeof children === \"string\") {\n\t\tif (max !== undefined) {\n\t\t\tconst asNum = Number(children);\n\t\t\tif (!Number.isNaN(asNum) && asNum > max) return `${max}+`;\n\t\t}\n\t\treturn children.length > 4 ? children.slice(0, 4) : children;\n\t}\n\treturn \"\";\n}\n\nfunction detectBadgeHasContent(badge: React.ReactNode): boolean {\n\treturn (\n\t\tReact.isValidElement<{ children?: React.ReactNode }>(badge) &&\n\t\tbadge.props.children != null\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Badge\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst BadgeImpl = React.forwardRef<HTMLSpanElement, BadgeProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tmax,\n\t\t\tcontainerColor,\n\t\t\tcontentColor,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst hasContent = children != null;\n\t\tconst label = hasContent ? formatBadgeLabel(children, max) : \"\";\n\t\tconst reducedMotion = useReducedMotion();\n\t\tconst isDecorative = !hasContent && !ariaLabel;\n\n\t\tconst springTransition = reducedMotion\n\t\t\t? { duration: 0 }\n\t\t\t: FAST_SPATIAL_SPRING;\n\n\t\tconst colorStyle: React.CSSProperties = {\n\t\t\t...(containerColor && { backgroundColor: containerColor }),\n\t\t\t...(contentColor && { color: contentColor }),\n\t\t\t...style,\n\t\t};\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.span\n\t\t\t\t\tref={ref}\n\t\t\t\t\trole={isDecorative ? undefined : \"status\"}\n\t\t\t\t\taria-hidden={isDecorative ? \"true\" : undefined}\n\t\t\t\t\taria-label={hasContent ? (ariaLabel ?? label) : ariaLabel}\n\t\t\t\t\tinitial={{ scale: 0, opacity: 0 }}\n\t\t\t\t\tanimate={{ scale: 1, opacity: 1 }}\n\t\t\t\t\texit={{ scale: 0, opacity: 0 }}\n\t\t\t\t\ttransition={springTransition}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rounded-full ring-[1.5px] ring-m3-surface shrink-0\",\n\t\t\t\t\t\t!containerColor && \"bg-m3-error\",\n\t\t\t\t\t\thasContent\n\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\"inline-flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\t\"min-w-4 h-4 px-1 text-[11px] font-medium leading-none\",\n\t\t\t\t\t\t\t\t\t!contentColor && \"text-m3-on-error\",\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: \"inline-block w-1.5 h-1.5\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={colorStyle}\n\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: spread safe subset of HTML attrs\n\t\t\t\t\t{...(props as any)}\n\t\t\t\t>\n\t\t\t\t\t{hasContent && label}\n\t\t\t\t</m.span>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nBadgeImpl.displayName = \"Badge\";\n\n/**\n * MD3 Expressive Badge — dynamic status indicator.\n *\n * @example\n * ```tsx\n * // Small dot badge (no content) — decorative\n * <Badge />\n *\n * // Large badge with number (truncated at max)\n * <Badge max={99}>150</Badge>\n * // → displays \"99+\"\n *\n * // Large badge with text label\n * <Badge>NEW</Badge>\n *\n * // Custom colors\n * <Badge containerColor=\"#6750A4\" contentColor=\"#FFFFFF\">3</Badge>\n * ```\n *\n * @see https://m3.material.io/components/badge/overview\n */\nexport const Badge = React.memo(BadgeImpl);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// BadgedBox\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 BadgedBox — positions a Badge at the top-trailing corner of an anchor.\n *\n * Implements MD3 offset specs from Badge.kt:\n * - Small badge (dot): `BadgeOffset = 6dp` → translate(50%, -50%)\n * - Large badge (text): `BadgeWithContentHorizontalOffset = 12dp` / `VerticalOffset = 14dp`\n *   → translate(35%, -35%)\n *\n * Auto-detects badge size by inspecting the badge element's children prop,\n * or accepts an explicit `size` override.\n *\n * @example\n * ```tsx\n * // Small dot on mail icon\n * <BadgedBox badge={<Badge />}>\n *   <Icon name=\"mail\" />\n * </BadgedBox>\n *\n * // Count badge on notification icon\n * <BadgedBox badge={<Badge max={99}>{count}</Badge>}>\n *   <Icon name=\"notifications\" />\n * </BadgedBox>\n * ```\n */\nexport function BadgedBox({\n\tbadge,\n\tchildren,\n\tclassName,\n\tsize,\n}: BadgedBoxProps) {\n\tconst isLarge = size ? size === \"lg\" : detectBadgeHasContent(badge);\n\n\tconst badgePositionClass = isLarge\n\t\t? \"translate-x-[35%] -translate-y-[35%]\"\n\t\t: \"translate-x-[50%] -translate-y-[50%]\";\n\n\treturn (\n\t\t<span className={cn(\"relative inline-flex\", className)}>\n\t\t\t{children}\n\t\t\t<span\n\t\t\t\tclassName={cn(\"absolute right-0 top-0\", badgePositionClass)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t<AnimatePresence mode=\"wait\">{badge}</AnimatePresence>\n\t\t\t</span>\n\t\t</span>\n\t);\n}\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\tphase = 0,\n): string {\n\tconst circumference = 2 * Math.PI * radius;\n\tconst numWaves = Math.max(\n\t\t3,\n\t\tMath.round(circumference / Math.max(1, wavelength)),\n\t);\n\tconst steps = numWaves * 4;\n\tconst dt = (2 * Math.PI) / steps;\n\n\tconst rAt = (t: number) =>\n\t\tradius + amplitude * Math.sin(numWaves * t + phase);\n\tconst drAt = (t: number) =>\n\t\tamplitude * numWaves * Math.cos(numWaves * t + phase);\n\tconst xAt = (t: number) => center + rAt(t) * Math.cos(t);\n\tconst yAt = (t: number) => center + rAt(t) * Math.sin(t);\n\tconst dxAt = (t: number) => drAt(t) * Math.cos(t) - rAt(t) * Math.sin(t);\n\tconst dyAt = (t: number) => drAt(t) * Math.sin(t) + rAt(t) * Math.cos(t);\n\n\tlet d = \"\";\n\tconst tStart = 0;\n\n\tfor (let i = 0; i < steps; i++) {\n\t\tconst t0 = tStart + i * dt;\n\t\tconst t1 = tStart + (i + 1) * dt;\n\n\t\tconst scale = dt / 3;\n\t\tconst cp1x = xAt(t0) + scale * dxAt(t0);\n\t\tconst cp1y = yAt(t0) + scale * dyAt(t0);\n\t\tconst cp2x = xAt(t1) - scale * dxAt(t1);\n\t\tconst cp2y = yAt(t1) - scale * dyAt(t1);\n\n\t\tif (i === 0) d += `M ${xAt(t0).toFixed(2)} ${yAt(t0).toFixed(2)}`;\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${xAt(t1).toFixed(2)} ${yAt(t1).toFixed(2)}`;\n\t}\n\treturn `${d} Z`;\n}\n\nexport function getSinePath(\n\tstartX: number,\n\tendX: number,\n\tphase: number,\n\twl: number,\n\tamp: number,\n): string {\n\tif (startX >= endX) return \"\";\n\tif (amp <= 0.01) {\n\t\treturn `M ${startX.toFixed(2)} 0 L ${endX.toFixed(2)} 0`;\n\t}\n\n\tconst safeWl = Math.max(1, wl);\n\tconst k = (2 * Math.PI) / safeWl;\n\tconst phi = (phase / safeWl) * 2 * Math.PI;\n\n\tconst yAt = (x: number) => amp * Math.sin(k * x + phi);\n\tconst dyAt = (x: number) => amp * k * Math.cos(k * x + phi);\n\n\tconst step = safeWl / 4; // 4 segments per wavelength for accurate sine wave\n\tlet d = `M ${startX.toFixed(2)} ${yAt(startX).toFixed(2)}`;\n\n\tlet currentX = startX;\n\twhile (currentX < endX) {\n\t\tconst nextX = Math.min(endX, currentX + step);\n\t\tconst dx = nextX - currentX;\n\t\tconst scale = dx / 3;\n\n\t\tconst y0 = yAt(currentX);\n\t\tconst dy0 = dyAt(currentX);\n\t\tconst y1 = yAt(nextX);\n\t\tconst dy1 = dyAt(nextX);\n\n\t\tconst cp1x = currentX + scale;\n\t\tconst cp1y = y0 + scale * dy0;\n\t\tconst cp2x = nextX - scale;\n\t\tconst cp2y = y1 - scale * dy1;\n\n\t\td += ` C ${cp1x.toFixed(2)} ${cp1y.toFixed(2)}, ${cp2x.toFixed(2)} ${cp2y.toFixed(2)}, ${nextX.toFixed(2)} ${y1.toFixed(2)}`;\n\t\tcurrentX = nextX;\n\t}\n\n\treturn d;\n}\n","import {\n\tanimate,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseAnimationFrame,\n\tuseMotionValue,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CircularProgressProps } from \"./types\";\nimport { easeInOutCubic, generateWavyCircularPath } from \"./utils\";\n\n// --- M3 Kotlin Constants (from ProgressIndicator.kt) ---\n// Global rotation: 1080° (3 full turns) over 6 seconds, linear\nconst GLOBAL_ROTATION_DURATION = 6000;\nconst GLOBAL_ROTATION_TARGET = 1080;\n\n// Additional rotation: 90° stepped increments, 1.5s per cycle\n// Each cycle: ease during first 500ms, then hold for remaining 1000ms\nconst ADDITIONAL_ROTATION_CYCLE = 1500;\nconst ADDITIONAL_ROTATION_STEP = 90;\nconst ADDITIONAL_ROTATION_EASE_DURATION = 500;\n\n// Progress oscillation: arc fraction oscillates between min and max\nconst DEFAULT_MIN_PROGRESS = 0.1; // 36°\nconst DEFAULT_MAX_PROGRESS = 0.8; // 288°\nconst PROGRESS_CYCLE_DURATION = 1500; // 1.5s per half-cycle (grow or shrink)\n\nexport const CircularProgress = React.forwardRef<\n\tHTMLDivElement,\n\tCircularProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tsize = 48,\n\t\t\ttrackHeight = 4,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape = \"flat\",\n\t\t\tamplitude,\n\t\t\twavelength,\n\t\t\tgapSize = 4,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tshowTrack = \"auto\",\n\t\t\tminProgress = DEFAULT_MIN_PROGRESS,\n\t\t\tmaxProgress = DEFAULT_MAX_PROGRESS,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tamplitudeRange,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst radius = (size - trackHeight) / 2;\n\t\tconst center = size / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst isWavy = shape === \"wavy\";\n\n\t\t// Resolve track visibility\n\t\tconst shouldShowIndeterminateTrack =\n\t\t\tshowTrack === \"auto\" ? isWavy : showTrack;\n\t\tconst shouldShowDeterminateTrack = showTrack === \"auto\" ? true : showTrack;\n\n\t\tconst BASELINE_SIZE = 48;\n\t\tconst scaleFactor = size / BASELINE_SIZE;\n\t\tconst effectiveAmplitude = React.useMemo(\n\t\t\t() => amplitude ?? 1.6 * scaleFactor,\n\t\t\t[amplitude, scaleFactor],\n\t\t);\n\t\tconst effectiveWavelength = React.useMemo(\n\t\t\t() => wavelength ?? 15 * scaleFactor,\n\t\t\t[wavelength, scaleFactor],\n\t\t);\n\n\t\t// Resolved amplitude range for wavy indeterminate\n\t\tconst resolvedAmplitudeRange = React.useMemo<[number, number]>(\n\t\t\t() => amplitudeRange ?? [0, effectiveAmplitude],\n\t\t\t[amplitudeRange, effectiveAmplitude],\n\t\t);\n\n\t\t// Static wavy path for initial layout/SSR\n\t\tconst wavyActivePath = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisWavy\n\t\t\t\t\t? generateWavyCircularPath(\n\t\t\t\t\t\t\tcenter,\n\t\t\t\t\t\t\tradius,\n\t\t\t\t\t\t\teffectiveAmplitude,\n\t\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\t)\n\t\t\t\t\t: null,\n\t\t\t[isWavy, center, radius, effectiveAmplitude, effectiveWavelength],\n\t\t);\n\n\t\tconst circumference = React.useMemo(() => 2 * Math.PI * radius, [radius]);\n\t\tconst gapForTrack = React.useMemo(\n\t\t\t() => (gapSize + trackHeight) / circumference,\n\t\t\t[gapSize, trackHeight, circumference],\n\t\t);\n\t\tconst activeAngularFraction = isDeterminate ? clampedValue / 100 : 0;\n\n\t\tconst trackOffset = isDeterminate ? activeAngularFraction + gapForTrack : 0;\n\t\tconst trackLength = isDeterminate\n\t\t\t? Math.max(0.001, 1 - activeAngularFraction - 2 * gapForTrack)\n\t\t\t: 1;\n\n\t\tconst ActiveCircleElem = m.circle;\n\n\t\tconst indeterminateSvgRef = React.useRef<SVGSVGElement>(null);\n\t\tconst indeterminateTrackRef = React.useRef<SVGElement>(null);\n\t\tconst indeterminateActiveRef = React.useRef<SVGElement>(null);\n\t\tconst indeterminateWavyTrackPathRef = React.useRef<SVGPathElement>(null);\n\t\tconst indeterminateWavyActivePathRef = React.useRef<SVGPathElement>(null);\n\t\tconst determinateWavyActivePathRef = React.useRef<SVGPathElement>(null);\n\t\tconst determinateWavyTrackPathRef = React.useRef<SVGPathElement>(null);\n\t\tconst cachedPathLengthRef = React.useRef<number>(0);\n\n\t\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 0);\n\t\tconst amplitudeMV = useMotionValue(isWavy ? effectiveAmplitude : 0);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (isDeterminate) {\n\t\t\t\tanimate(fractionMV, clampedValue / 100, {\n\t\t\t\t\tduration: 0.4,\n\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t});\n\t\t\t}\n\t\t}, [clampedValue, isDeterminate, fractionMV]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!isDeterminate || !isWavy) return;\n\t\t\tconst fraction = clampedValue / 100;\n\t\t\tlet targetAmp = effectiveAmplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp =\n\t\t\t\t\tfraction <= 0.1 || fraction >= 0.95 ? 0 : effectiveAmplitude;\n\t\t\t}\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t}, [\n\t\t\tclampedValue,\n\t\t\tisDeterminate,\n\t\t\tisWavy,\n\t\t\teffectiveAmplitude,\n\t\t\tamplitudeMV,\n\t\t\tdeterminateAnimation,\n\t\t]);\n\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (!isWavy || !wavyActivePath) {\n\t\t\t\tcachedPathLengthRef.current = circumference;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst el = (indeterminateActiveRef.current ||\n\t\t\t\tdeterminateWavyActivePathRef.current) as SVGPathElement | null;\n\t\t\tif (el && \"getTotalLength\" in el) {\n\t\t\t\ttry {\n\t\t\t\t\tconst len = el.getTotalLength();\n\t\t\t\t\tif (len > 0) {\n\t\t\t\t\t\tcachedPathLengthRef.current = len;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// Fallback below\n\t\t\t\t}\n\t\t\t}\n\t\t\tcachedPathLengthRef.current = circumference;\n\t\t}, [isWavy, circumference, wavyActivePath]);\n\n\t\tuseAnimationFrame((time) => {\n\t\t\tconst safeWaveSpeed = Math.max(0.1, waveSpeed);\n\t\t\tconst wavePhase = (time / 1000) * safeWaveSpeed * 2 * Math.PI;\n\n\t\t\tif (isDeterminate) {\n\t\t\t\tif (isWavy) {\n\t\t\t\t\tconst currentAmp = amplitudeMV.get();\n\t\t\t\t\tconst dynamicPath = generateWavyCircularPath(\n\t\t\t\t\t\tcenter,\n\t\t\t\t\t\tradius,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\t\twavePhase,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (determinateWavyActivePathRef.current) {\n\t\t\t\t\t\tdeterminateWavyActivePathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t\t}\n\t\t\t\t\tif (trackShape === \"wavy\" && determinateWavyTrackPathRef.current) {\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst pathEl = determinateWavyActivePathRef.current;\n\t\t\t\t\tlet totalLen = cachedPathLengthRef.current || circumference;\n\t\t\t\t\tif (pathEl) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst len = pathEl.getTotalLength();\n\t\t\t\t\t\t\tif (len > 0) totalLen = len;\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Fallback\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst activeFrac = Math.max(0, Math.min(1, fractionMV.get()));\n\t\t\t\t\tconst activeLen = totalLen * activeFrac;\n\n\t\t\t\t\tif (determinateWavyActivePathRef.current) {\n\t\t\t\t\t\tdeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t\t`${activeLen} ${totalLen}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t\t\"0\",\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tshouldShowDeterminateTrack &&\n\t\t\t\t\t\ttrackShape === \"wavy\" &&\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst gapFrac = (gapSize + trackHeight) / totalLen;\n\t\t\t\t\t\tconst trackStartFrac = activeFrac + gapFrac;\n\t\t\t\t\t\tconst trackLen = Math.max(\n\t\t\t\t\t\t\t0.001,\n\t\t\t\t\t\t\ttotalLen * (1 - activeFrac - 2 * gapFrac),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst trackOff = -totalLen * trackStartFrac;\n\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t\t`${trackLen} ${totalLen}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t\t`${trackOff}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst scaledTime = time * safeCrawlerSpeed;\n\n\t\t\t// --- 1. ROTATION (M3 Kotlin dual-rotation system) ---\n\n\t\t\t// Global rotation: linear 1080° over 6s\n\t\t\tconst globalCycle = scaledTime % GLOBAL_ROTATION_DURATION;\n\t\t\tconst globalAngle =\n\t\t\t\t(globalCycle / GLOBAL_ROTATION_DURATION) * GLOBAL_ROTATION_TARGET;\n\n\t\t\t// Additional rotation: stepped 90° per 1.5s cycle\n\t\t\t// Each cycle: eases in first 500ms, then holds for 1000ms\n\t\t\tconst additionalFullCycles = Math.floor(\n\t\t\t\tscaledTime / ADDITIONAL_ROTATION_CYCLE,\n\t\t\t);\n\t\t\tconst additionalCycleTime = scaledTime % ADDITIONAL_ROTATION_CYCLE;\n\t\t\tconst additionalEaseT = Math.min(\n\t\t\t\t1,\n\t\t\t\tadditionalCycleTime / ADDITIONAL_ROTATION_EASE_DURATION,\n\t\t\t);\n\t\t\tconst additionalAngle =\n\t\t\t\t(additionalFullCycles + easeInOutCubic(additionalEaseT)) *\n\t\t\t\tADDITIONAL_ROTATION_STEP;\n\n\t\t\tconst totalRotation = globalAngle + additionalAngle;\n\n\t\t\tif (indeterminateSvgRef.current) {\n\t\t\t\tindeterminateSvgRef.current.style.transform = `rotate(${totalRotation - 90}deg)`;\n\t\t\t}\n\n\t\t\t// --- 2. ARC PROGRESS (M3 Kotlin oscillation) ---\n\n\t\t\t// Full cycle = grow (1.5s) + shrink (1.5s) = 3s\n\t\t\tconst progressFullCycle = PROGRESS_CYCLE_DURATION * 2;\n\t\t\tconst progressCycleTime = scaledTime % progressFullCycle;\n\n\t\t\tlet progress: number;\n\t\t\tif (progressCycleTime < PROGRESS_CYCLE_DURATION) {\n\t\t\t\t// Growing phase: MIN → MAX\n\t\t\t\tconst t = progressCycleTime / PROGRESS_CYCLE_DURATION;\n\t\t\t\tprogress =\n\t\t\t\t\tminProgress + (maxProgress - minProgress) * easeInOutCubic(t);\n\t\t\t} else {\n\t\t\t\t// Shrinking phase: MAX → MIN\n\t\t\t\tconst t =\n\t\t\t\t\t(progressCycleTime - PROGRESS_CYCLE_DURATION) /\n\t\t\t\t\tPROGRESS_CYCLE_DURATION;\n\t\t\t\tprogress =\n\t\t\t\t\tmaxProgress - (maxProgress - minProgress) * easeInOutCubic(t);\n\t\t\t}\n\n\t\t\t// --- 3. WAVY AMPLITUDE MODULATION ---\n\n\t\t\tif (isWavy) {\n\t\t\t\t// Amplitude scales with progress:\n\t\t\t\t// short arc (min) → amplitude approaches amplitudeRange[0] (flat)\n\t\t\t\t// long arc (max) → amplitude approaches amplitudeRange[1] (full wave)\n\t\t\t\tconst amplitudeT =\n\t\t\t\t\t(progress - minProgress) / (maxProgress - minProgress);\n\t\t\t\tconst currentAmplitude =\n\t\t\t\t\tresolvedAmplitudeRange[0] +\n\t\t\t\t\t(resolvedAmplitudeRange[1] - resolvedAmplitudeRange[0]) * amplitudeT;\n\n\t\t\t\t// Regenerate wavy path with current amplitude and wavePhase\n\t\t\t\tconst dynamicPath = generateWavyCircularPath(\n\t\t\t\t\tcenter,\n\t\t\t\t\tradius,\n\t\t\t\t\tcurrentAmplitude,\n\t\t\t\t\teffectiveWavelength,\n\t\t\t\t\twavePhase,\n\t\t\t\t);\n\n\t\t\t\t// Update both track and active indicator paths\n\t\t\t\tif (indeterminateWavyActivePathRef.current) {\n\t\t\t\t\tindeterminateWavyActivePathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t}\n\t\t\t\tif (indeterminateWavyTrackPathRef.current) {\n\t\t\t\t\tindeterminateWavyTrackPathRef.current.setAttribute(\"d\", dynamicPath);\n\t\t\t\t}\n\n\t\t\t\t// Get path length for dasharray calculation\n\t\t\t\tconst pathEl = indeterminateWavyActivePathRef.current;\n\t\t\t\tlet totalLen = cachedPathLengthRef.current || circumference;\n\t\t\t\tif (pathEl) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst len = pathEl.getTotalLength();\n\t\t\t\t\t\tif (len > 0) totalLen = len;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// use cached\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// --- 4. STROKE-DASHARRAY for wavy (with gap) ---\n\t\t\t\tconst gapFrac = (gapSize + trackHeight) / totalLen;\n\t\t\t\tconst activeLen = totalLen * progress;\n\t\t\t\tconst activeOff = 0; // Arc starts at 0 (rotation handles positioning)\n\n\t\t\t\tif (indeterminateWavyActivePathRef.current) {\n\t\t\t\t\tindeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${activeLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateWavyActivePathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${activeOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tshouldShowIndeterminateTrack &&\n\t\t\t\t\tindeterminateWavyTrackPathRef.current\n\t\t\t\t) {\n\t\t\t\t\tconst trackStartFrac = progress + gapFrac;\n\t\t\t\t\tconst trackLen = Math.max(\n\t\t\t\t\t\t0.001,\n\t\t\t\t\t\ttotalLen * (1 - progress - 2 * gapFrac),\n\t\t\t\t\t);\n\t\t\t\t\tconst trackOff = -totalLen * trackStartFrac;\n\n\t\t\t\t\tindeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${trackLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateWavyTrackPathRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${trackOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// --- 5. FLAT CIRCLE (stroke-dasharray on circle element) ---\n\t\t\t\tconst totalLen = circumference;\n\t\t\t\tconst activeLen = totalLen * progress;\n\t\t\t\tconst activeOff = 0;\n\n\t\t\t\tif (indeterminateActiveRef.current) {\n\t\t\t\t\tindeterminateActiveRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${activeLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateActiveRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${activeOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (shouldShowIndeterminateTrack && indeterminateTrackRef.current) {\n\t\t\t\t\tconst gapFrac = (gapSize + trackHeight) / totalLen;\n\t\t\t\t\tconst trackStartFrac = progress + gapFrac;\n\t\t\t\t\tconst trackLen = Math.max(\n\t\t\t\t\t\t0.001,\n\t\t\t\t\t\ttotalLen * (1 - progress - 2 * gapFrac),\n\t\t\t\t\t);\n\t\t\t\t\tconst trackOff = -totalLen * trackStartFrac;\n\n\t\t\t\t\tindeterminateTrackRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dasharray\",\n\t\t\t\t\t\t`${trackLen} ${totalLen}`,\n\t\t\t\t\t);\n\t\t\t\t\tindeterminateTrackRef.current.setAttribute(\n\t\t\t\t\t\t\"stroke-dashoffset\",\n\t\t\t\t\t\t`${trackOff}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"progressbar\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\taria-valuemin={0}\n\t\t\t\taria-valuemax={100}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ width: size, height: size }}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<svg\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{ transform: \"rotate(-90deg)\", overflow: \"visible\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isDeterminate ? (\n\t\t\t\t\t\t\tisWavy ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{shouldShowDeterminateTrack &&\n\t\t\t\t\t\t\t\t\t\t(trackShape === \"wavy\" ? (\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\tref={determinateWavyTrackPathRef}\n\t\t\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tref={determinateWavyActivePathRef}\n\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<m.circle\n\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\t\t\tpathLength: trackLength,\n\t\t\t\t\t\t\t\t\t\t\tpathOffset: trackOffset,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<ActiveCircleElem\n\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ pathLength: clampedValue / 100 }}\n\t\t\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\t\t\tduration: 0.4,\n\t\t\t\t\t\t\t\t\t\t\tease: [0.2, 0, 0, 1],\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</svg>\n\n\t\t\t\t\t{!isDeterminate && (\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\tref={indeterminateSvgRef}\n\t\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\t\theight={size}\n\t\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\tinset: 0,\n\t\t\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\t\t\ttransformOrigin: \"center\",\n\t\t\t\t\t\t\t\ttransform: \"rotate(-90deg)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isWavy ? (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{shouldShowIndeterminateTrack && (\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\tref={indeterminateWavyTrackPathRef}\n\t\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tref={indeterminateWavyActivePathRef}\n\t\t\t\t\t\t\t\t\t\td={wavyActivePath ?? \"\"}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t{shouldShowIndeterminateTrack && (\n\t\t\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\t\t\tref={\n\t\t\t\t\t\t\t\t\t\t\t\tindeterminateTrackRef as React.RefObject<SVGCircleElement>\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\tstroke={bgTrackColor}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\t\t\t\tref={\n\t\t\t\t\t\t\t\t\t\t\tindeterminateActiveRef as React.RefObject<SVGCircleElement>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tcx={center}\n\t\t\t\t\t\t\t\t\t\tcy={center}\n\t\t\t\t\t\t\t\t\t\tr={radius}\n\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</LazyMotion>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCircularProgress.displayName = \"CircularProgress\";\n","import * as React from \"react\";\n\nexport function useContainerWidth() {\n\tconst [width, setWidth] = React.useState(0);\n\tconst observerRef = React.useRef<ResizeObserver | null>(null);\n\n\tconst ref = React.useCallback((node: HTMLDivElement | null) => {\n\t\tif (observerRef.current) {\n\t\t\tobserverRef.current.disconnect();\n\t\t\tobserverRef.current = null;\n\t\t}\n\n\t\tif (node) {\n\t\t\tconst obs = new ResizeObserver((entries) => {\n\t\t\t\tconst contentRect = entries[0].contentRect;\n\t\t\t\tsetWidth(contentRect.width);\n\t\t\t});\n\t\t\tobs.observe(node);\n\t\t\tobserverRef.current = obs;\n\t\t}\n\t}, []);\n\n\t// Cleanup on unmount\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (observerRef.current) {\n\t\t\t\tobserverRef.current.disconnect();\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn [ref, width] as const;\n}\n\nexport function useMergedRef<T>(\n\t...refs: (React.Ref<T> | undefined | null)[]\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t\t(ref as React.MutableRefObject<T | null>).current = node;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t[refs],\n\t);\n}\n","import { m } from \"motion/react\";\nimport * as React from \"react\";\n\nexport const FlatLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\tcrawlerSpeed: number;\n}>(function FlatLinearTrack({\n\ttrackHeight,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\tcrawlerSpeed,\n}) {\n\tconst isDeterminate = value !== undefined;\n\tconst radius = trackHeight / 2;\n\tconst minActiveWidth = trackHeight;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"relative w-full overflow-hidden\"\n\t\t\tstyle={{ height: trackHeight, borderRadius: radius }}\n\t\t>\n\t\t\t{isDeterminate ? (\n\t\t\t\t<>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: trackColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, 0%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t[isRtl ? \"right\" : \"left\"]:\n\t\t\t\t\t\t\t\t`calc(max(${minActiveWidth}px, ${value}%) + ${gapSize}px)`,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\tborderRadius: radius,\n\t\t\t\t\t\t\tminWidth: minActiveWidth,\n\t\t\t\t\t\t\t...(isRtl ? { right: 0 } : { left: 0 }),\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tinitial={{ width: `${minActiveWidth}px` }}\n\t\t\t\t\t\tanimate={{ width: `${value}%` }}\n\t\t\t\t\t\ttransition={{ duration: 0.4, ease: [0.2, 0, 0, 1] }}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: trackColor, borderRadius: radius }}\n\t\t\t\t\t/>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tclassName=\"absolute inset-y-0\"\n\t\t\t\t\t\tstyle={{ backgroundColor: activeColor, borderRadius: radius }}\n\t\t\t\t\t\tinitial={{ left: \"-40%\", width: \"40%\" }}\n\t\t\t\t\t\tanimate={{ left: [\"-40%\", \"100%\"], width: [\"40%\", \"20%\", \"40%\"] }}\n\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\tduration: 2 / Math.max(0.1, crawlerSpeed),\n\t\t\t\t\t\t\trepeat: Number.POSITIVE_INFINITY,\n\t\t\t\t\t\t\tease: \"easeInOut\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { animate, useAnimationFrame, useMotionValue } from \"motion/react\";\nimport * as React from \"react\";\nimport { useContainerWidth } from \"./hooks\";\nimport { easeInOutCubic, getSinePath } from \"./utils\";\n\nexport const WavyLinearTrack = React.memo<{\n\ttrackHeight: number;\n\tsvgHeight: number;\n\tamplitude: number;\n\twavelength: number;\n\tindeterminateWavelength: number;\n\tactiveColor: string;\n\ttrackColor: string;\n\tvalue?: number;\n\tisRtl: boolean;\n\tgapSize: number;\n\twaveSpeed: number;\n\tcrawlerSpeed: number;\n\tdeterminateAnimation: \"md3\" | \"continuous\";\n\tindeterminateAnimation: \"md3\" | \"continuous\";\n\ttrackShape: \"flat\" | \"wavy\";\n}>(function WavyLinearTrack({\n\ttrackHeight,\n\tsvgHeight,\n\tamplitude,\n\twavelength,\n\tindeterminateWavelength,\n\tactiveColor,\n\ttrackColor,\n\tvalue,\n\tisRtl,\n\tgapSize,\n\twaveSpeed,\n\tcrawlerSpeed,\n\tdeterminateAnimation,\n\tindeterminateAnimation,\n\ttrackShape,\n}) {\n\tconst isDeterminate = typeof value === \"number\";\n\tconst clampedValue = isDeterminate ? Math.max(0, Math.min(100, value)) : 100;\n\tconst titleId = React.useId();\n\n\tconst [containerRef, width] = useContainerWidth();\n\n\tconst activePathRef = React.useRef<SVGPathElement>(null);\n\tconst trackPathRef = React.useRef<SVGPathElement>(null);\n\n\tconst amplitudeMV = useMotionValue(amplitude);\n\tconst fractionMV = useMotionValue(isDeterminate ? clampedValue / 100 : 1);\n\n\tReact.useEffect(() => {\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = clampedValue / 100;\n\n\t\t\t// Handle Flattening Logic based on determinateAnimation prop\n\t\t\tlet targetAmp = amplitude;\n\t\t\tif (determinateAnimation === \"md3\") {\n\t\t\t\ttargetAmp = fraction <= 0.1 || fraction >= 0.95 ? 0 : amplitude;\n\t\t\t}\n\n\t\t\tanimate(amplitudeMV, targetAmp, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t\tanimate(fractionMV, fraction, { duration: 0.4, ease: [0.2, 0, 0, 1] });\n\t\t} else {\n\t\t\tanimate(amplitudeMV, amplitude, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tbounce: 0,\n\t\t\t\tduration: 0.5,\n\t\t\t});\n\t\t}\n\t}, [\n\t\tclampedValue,\n\t\tisDeterminate,\n\t\tamplitude,\n\t\tamplitudeMV,\n\t\tfractionMV,\n\t\tdeterminateAnimation,\n\t]);\n\n\tconst activeWavelength = Math.max(\n\t\t1,\n\t\tisDeterminate ? wavelength : indeterminateWavelength,\n\t);\n\n\tuseAnimationFrame((time) => {\n\t\tif (width === 0) return;\n\n\t\tconst currentAmp = amplitudeMV.get();\n\t\tconst trackAmp = trackShape === \"wavy\" ? amplitude : 0;\n\t\tconst phase = (time / 1000) * waveSpeed * activeWavelength;\n\t\tconst capWidth = trackHeight / 2;\n\n\t\tlet activePathD = \"\";\n\t\tlet trackD = \"\";\n\t\tconst totalGap = gapSize + trackHeight;\n\n\t\t// 1. DETERMINATE MODE\n\t\tif (isDeterminate) {\n\t\t\tconst fraction = fractionMV.get();\n\t\t\tconst barHead = fraction * width;\n\n\t\t\tconst adjHead = Math.max(capWidth, Math.min(width - capWidth, barHead));\n\t\t\tconst adjTail = capWidth;\n\n\t\t\tif (fraction > 0 && adjHead - adjTail > 0.1) {\n\t\t\t\tactivePathD = getSinePath(\n\t\t\t\t\tadjTail,\n\t\t\t\t\tadjHead,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\tcurrentAmp,\n\t\t\t\t);\n\t\t\t} else if (fraction === 0) {\n\t\t\t\tactivePathD = \"\";\n\t\t\t}\n\n\t\t\tconst trackStart = adjHead + totalGap;\n\t\t\tif (trackStart < width - capWidth) {\n\t\t\t\ttrackD = getSinePath(\n\t\t\t\t\ttrackStart,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\t// 2. INDETERMINATE MODE\n\t\telse {\n\t\t\tconst safeCrawlerSpeed = Math.max(0.1, crawlerSpeed);\n\t\t\tconst activeLines: { tail: number; head: number }[] = [];\n\n\t\t\tif (indeterminateAnimation === \"continuous\") {\n\t\t\t\tconst cycle = 2000 / safeCrawlerSpeed;\n\t\t\t\tconst fraction = (time % cycle) / cycle;\n\t\t\t\tactiveLines.push({\n\t\t\t\t\ttail: easeInOutCubic(Math.max(0, fraction * 1.5 - 0.5)),\n\t\t\t\t\thead: easeInOutCubic(Math.min(1, fraction * 1.5)),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst cycle = 1750 / safeCrawlerSpeed;\n\t\t\t\tconst t = (time % cycle) * safeCrawlerSpeed;\n\n\t\t\t\tconst l1H = easeInOutCubic(Math.max(0, Math.min(1, t / 1000)));\n\t\t\t\tconst l1T = easeInOutCubic(Math.max(0, Math.min(1, (t - 250) / 1000)));\n\t\t\t\tconst l2H = easeInOutCubic(Math.max(0, Math.min(1, (t - 650) / 850)));\n\t\t\t\tconst l2T = easeInOutCubic(Math.max(0, Math.min(1, (t - 900) / 850)));\n\n\t\t\t\tactiveLines.push({ tail: l1T, head: l1H });\n\t\t\t\tactiveLines.push({ tail: l2T, head: l2H });\n\t\t\t}\n\n\t\t\tconst activeSegments = activeLines\n\t\t\t\t.map((line) => {\n\t\t\t\t\tconst rawTail = line.tail * width;\n\t\t\t\t\tconst rawHead = line.head * width;\n\t\t\t\t\tconst adjTail = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, rawTail),\n\t\t\t\t\t);\n\t\t\t\t\tconst adjHead = Math.max(\n\t\t\t\t\t\tcapWidth,\n\t\t\t\t\t\tMath.min(width - capWidth, rawHead),\n\t\t\t\t\t);\n\t\t\t\t\treturn { adjTail, adjHead };\n\t\t\t\t})\n\t\t\t\t.filter((seg) => seg.adjHead - seg.adjTail > 0.1);\n\n\t\t\tactivePathD = activeSegments\n\t\t\t\t.map((seg) =>\n\t\t\t\t\tgetSinePath(\n\t\t\t\t\t\tseg.adjTail,\n\t\t\t\t\t\tseg.adjHead,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\tcurrentAmp,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.join(\" \");\n\n\t\t\tconst validActiveLines = activeLines\n\t\t\t\t.filter(\n\t\t\t\t\t(line) =>\n\t\t\t\t\t\tline.head > line.tail &&\n\t\t\t\t\t\tline.head * width > 0 &&\n\t\t\t\t\t\tline.tail * width < width,\n\t\t\t\t)\n\t\t\t\t.sort((a, b) => a.tail - b.tail);\n\n\t\t\tlet currentTrackX = capWidth;\n\t\t\tfor (const line of validActiveLines) {\n\t\t\t\tconst blockStart = line.tail * width - totalGap;\n\t\t\t\tconst blockEnd = line.head * width + totalGap;\n\n\t\t\t\tconst trackEnd = Math.min(width - capWidth, blockStart);\n\t\t\t\tif (trackEnd > currentTrackX) {\n\t\t\t\t\ttrackD += `${getSinePath(\n\t\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\t\ttrackEnd,\n\t\t\t\t\t\tphase,\n\t\t\t\t\t\tactiveWavelength,\n\t\t\t\t\t\ttrackAmp,\n\t\t\t\t\t)} `;\n\t\t\t\t}\n\t\t\t\tcurrentTrackX = Math.max(currentTrackX, blockEnd);\n\t\t\t}\n\n\t\t\tif (currentTrackX < width - capWidth) {\n\t\t\t\ttrackD += getSinePath(\n\t\t\t\t\tcurrentTrackX,\n\t\t\t\t\twidth - capWidth,\n\t\t\t\t\tphase,\n\t\t\t\t\tactiveWavelength,\n\t\t\t\t\ttrackAmp,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (activePathRef.current)\n\t\t\tactivePathRef.current.setAttribute(\"d\", activePathD || \"\");\n\t\tif (trackPathRef.current)\n\t\t\ttrackPathRef.current.setAttribute(\"d\", trackD.trim() || \"\");\n\t});\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName=\"relative w-full\"\n\t\t\tstyle={{ height: svgHeight }}\n\t\t>\n\t\t\t{width > 0 && (\n\t\t\t\t<svg\n\t\t\t\t\tclassName=\"absolute inset-0 w-full h-full\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\toverflow: \"visible\",\n\t\t\t\t\t\ttransform: isRtl ? \"scaleX(-1)\" : undefined,\n\t\t\t\t\t}}\n\t\t\t\t\taria-labelledby={titleId}\n\t\t\t\t>\n\t\t\t\t\t<title id={titleId}>\n\t\t\t\t\t\t{isDeterminate\n\t\t\t\t\t\t\t? `Progress: ${clampedValue}%`\n\t\t\t\t\t\t\t: \"Indeterminate loading progress\"}\n\t\t\t\t\t</title>\n\t\t\t\t\t<g transform={`translate(0, ${svgHeight / 2})`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={trackPathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={trackColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tref={activePathRef}\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke={activeColor}\n\t\t\t\t\t\t\tstrokeWidth={trackHeight}\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</g>\n\t\t\t\t</svg>\n\t\t\t)}\n\t\t</div>\n\t);\n});\n","import { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useMergedRef } from \"./hooks\";\nimport { FlatLinearTrack } from \"./linear-flat\";\nimport { WavyLinearTrack } from \"./linear-wavy\";\nimport type { LinearProgressProps } from \"./types\";\n\nexport const LinearProgress = React.forwardRef<\n\tHTMLDivElement,\n\tLinearProgressProps\n>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\tshape = \"flat\",\n\t\t\ttrackShape,\n\t\t\ttrackHeight = 4,\n\t\t\tamplitude,\n\t\t\twavelength = 40,\n\t\t\tindeterminateWavelength = 20,\n\t\t\twaveSpeed = 1,\n\t\t\tcrawlerSpeed = 1,\n\t\t\tdeterminateAnimation = \"md3\",\n\t\t\tindeterminateAnimation = \"md3\",\n\t\t\tgapSize = 4,\n\t\t\tshowStopIndicator = \"auto\",\n\t\t\tcolor,\n\t\t\ttrackColor,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isDeterminate = value !== undefined;\n\t\tconst clampedValue = isDeterminate ? Math.min(100, Math.max(0, value)) : 0;\n\n\t\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, containerRef);\n\t\tconst [isRtl, setIsRtl] = React.useState(false);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (containerRef.current) {\n\t\t\t\tconst dir = getComputedStyle(containerRef.current).direction;\n\t\t\t\tsetIsRtl(dir === \"rtl\");\n\t\t\t}\n\t\t}, []);\n\n\t\tconst resolvedTrackShape = trackShape ?? shape;\n\t\tconst isWavy = shape === \"wavy\" || resolvedTrackShape === \"wavy\";\n\n\t\tconst effectiveAmplitude = React.useMemo(() => amplitude ?? 3, [amplitude]);\n\t\tconst svgHeight = React.useMemo(\n\t\t\t() => (isWavy ? trackHeight + effectiveAmplitude * 2 : trackHeight),\n\t\t\t[isWavy, trackHeight, effectiveAmplitude],\n\t\t);\n\n\t\tconst shouldShowStop = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisDeterminate &&\n\t\t\t\tresolvedTrackShape === \"flat\" &&\n\t\t\t\tshowStopIndicator !== false,\n\t\t\t[isDeterminate, resolvedTrackShape, showStopIndicator],\n\t\t);\n\n\t\tconst stopSize = React.useMemo(\n\t\t\t() => Math.max(2, trackHeight > 4 ? 4 : trackHeight / 2),\n\t\t\t[trackHeight],\n\t\t);\n\n\t\tconst stopOffset = (trackHeight - stopSize) / 2;\n\n\t\tconst activeColor = color || \"var(--md-sys-color-indicator-active)\";\n\t\tconst bgTrackColor = trackColor || \"var(--md-sys-color-indicator-track)\";\n\n\t\tconst useWavyTrack = isWavy || !isDeterminate;\n\t\tconst trackAmp = isWavy ? effectiveAmplitude : 0;\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\trole=\"progressbar\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-valuenow={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\taria-valuemin={0}\n\t\t\t\t\taria-valuemax={100}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex w-full flex-col justify-center\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: svgHeight }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{useWavyTrack ? (\n\t\t\t\t\t\t<WavyLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tsvgHeight={svgHeight}\n\t\t\t\t\t\t\tamplitude={trackAmp}\n\t\t\t\t\t\t\twavelength={wavelength}\n\t\t\t\t\t\t\tindeterminateWavelength={indeterminateWavelength}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\twaveSpeed={waveSpeed}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t\tdeterminateAnimation={determinateAnimation}\n\t\t\t\t\t\t\tindeterminateAnimation={indeterminateAnimation}\n\t\t\t\t\t\t\ttrackShape={resolvedTrackShape}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<FlatLinearTrack\n\t\t\t\t\t\t\ttrackHeight={trackHeight}\n\t\t\t\t\t\t\tactiveColor={activeColor}\n\t\t\t\t\t\t\ttrackColor={bgTrackColor}\n\t\t\t\t\t\t\tvalue={isDeterminate ? clampedValue : undefined}\n\t\t\t\t\t\t\tisRtl={isRtl}\n\t\t\t\t\t\t\tgapSize={gapSize}\n\t\t\t\t\t\t\tcrawlerSpeed={crawlerSpeed}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{shouldShowStop && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute rounded-full\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: stopSize,\n\t\t\t\t\t\t\t\theight: stopSize,\n\t\t\t\t\t\t\t\tbackgroundColor: \"var(--md-sys-color-indicator-stop)\",\n\t\t\t\t\t\t\t\ttop: svgHeight / 2 - stopSize / 2,\n\t\t\t\t\t\t\t\t...(isRtl ? { left: stopOffset } : { right: stopOffset }),\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nLinearProgress.displayName = \"LinearProgress\";\n","import * as React from \"react\";\nimport { CircularProgress } from \"./circular\";\nimport { LinearProgress } from \"./linear\";\nimport type { ProgressIndicatorProps } from \"./types\";\n\n/**\n * Progress Indicator component based on Material Design 3 Expressive guidelines.\n * Flexible support for 2 presentation variants: Linear and Circular,\n * with smooth dynamic Wavy shape profiles.\n *\n * @example\n * ```tsx\n * // Determinate Flat Linear\n * <ProgressIndicator variant=\"linear\" value={60} aria-label=\"Loading profile...\" />\n *\n * // Indeterminate Wavy Linear\n * <ProgressIndicator variant=\"linear\" shape=\"wavy\" aria-label=\"Connecting to server...\" />\n *\n * // Determinate Flat Circular\n * <ProgressIndicator variant=\"circular\" value={45} size={48} aria-label=\"Syncing...\" />\n * ```\n */\n\nexport const ProgressIndicator = React.forwardRef<\n\tHTMLDivElement,\n\tProgressIndicatorProps\n>((props, ref) => {\n\tif (props.variant === \"circular\") {\n\t\treturn <CircularProgress ref={ref} {...props} />;\n\t}\n\treturn <LinearProgress ref={ref} {...props} />;\n});\n\nProgressIndicator.displayName = \"ProgressIndicator\";\n\nexport type {\n\tCircularProgressProps,\n\tLinearProgressProps,\n\tProgressIndicatorProps,\n} from \"./types\";\n","import { 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 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: ROUND_SHAPE_RADIUS,\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: ROUND_SHAPE_RADIUS,\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: ROUND_SHAPE_RADIUS,\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: ROUND_SHAPE_RADIUS,\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: ROUND_SHAPE_RADIUS,\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\tfullWidth = 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 inline-flex flex-row items-center justify-center\",\n\t\t\tfullWidth ? \"w-full\" : \"w-fit shrink-0\",\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\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 type { Transition } from \"motion/react\";\nimport type { MD3Size } from \"../../../types/md3\";\n\n/**\n * Spring motion specification for ButtonDistribute.\n * Per spec: framer-motion spring config (stiffness: 300, damping: 30) or 300ms - 450ms cubic-bezier.\n */\nexport const DISTRIBUTE_SPRING_TRANSITION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 300,\n\tdamping: 30,\n\tmass: 0.8,\n};\n\nexport const DISTRIBUTE_EASING_BEZIER = \"cubic-bezier(0.2, 0.0, 0.0, 1.0)\";\nexport const DISTRIBUTE_DURATION_MS = 350;\n\n/** Default expand ratio added to active weight in dynamic mode */\nexport const DEFAULT_EXPAND_RATIO = 0.3;\n\n/** Default fixed size for leading/trailing buttons in mixed mode */\nexport const DEFAULT_FIXED_SIZE = 48;\n\n/** Default gap between buttons */\nexport const DEFAULT_GAP = \"0.5rem\";\n\n/**\n * Circle / Pill radius values per MD3 size token for dynamic morphing.\n */\nexport const DISTRIBUTE_RADIUS_TOKENS: Record<\n\tMD3Size,\n\t{ circleRadius: number; pillRadius: number; pressedRadius: number }\n> = {\n\txs: { circleRadius: 16, pillRadius: 16, pressedRadius: 8 },\n\tsm: { circleRadius: 20, pillRadius: 20, pressedRadius: 10 },\n\tmd: { circleRadius: 28, pillRadius: 28, pressedRadius: 16 },\n\tlg: { circleRadius: 48, pillRadius: 48, pressedRadius: 28 },\n\txl: { circleRadius: 68, pillRadius: 68, pressedRadius: 40 },\n};\n\n/**\n * Container height per MD3 size token for ButtonDistribute.\n */\nexport const DISTRIBUTE_HEIGHT_TOKENS: Record<MD3Size, string> = {\n\txs: \"h-8\",\n\tsm: \"h-10\",\n\tmd: \"h-14\",\n\tlg: \"h-24\",\n\txl: \"h-[8.5rem]\",\n};\n","import * as React from \"react\";\nimport { DEFAULT_EXPAND_RATIO } from \"./button-distribute-tokens\";\n\nimport type { DistributeMode } from \"./types\";\n\ninterface UseDistributeWeightsOptions {\n\tcount: number;\n\tweights?: number[];\n\tactiveIndex: number | null;\n\texpandRatio?: number;\n\tmode?: DistributeMode;\n\tisTextItem?: boolean[];\n}\n\n/**\n * Calculates normalized flexGrow weights for ButtonDistribute items.\n *\n * Preserves the total sum of weights when an item is expanded so that\n * the total container width stays strictly at 100%.\n * Non-active items with text labels are protected with a higher min-weight\n * floor to prevent label truncation.\n */\nexport function useDistributeWeights({\n\tcount,\n\tweights,\n\tactiveIndex,\n\texpandRatio = DEFAULT_EXPAND_RATIO,\n\tmode = \"dynamic\",\n\tisTextItem,\n}: UseDistributeWeightsOptions): number[] {\n\treturn React.useMemo(() => {\n\t\tif (count <= 0) return [];\n\n\t\tif (mode === \"mixed\") {\n\t\t\tconst baseWeights = new Array(count).fill(0).map((_, idx) => {\n\t\t\t\tif (idx === 0 || idx === count - 1) return 0;\n\t\t\t\treturn weights && weights[idx] !== undefined ? weights[idx] : 1;\n\t\t\t});\n\n\t\t\tif (\n\t\t\t\tactiveIndex === null ||\n\t\t\t\tactiveIndex < 0 ||\n\t\t\t\tactiveIndex >= count ||\n\t\t\t\tcount === 1\n\t\t\t) {\n\t\t\t\treturn baseWeights;\n\t\t\t}\n\n\t\t\tconst result = [...baseWeights];\n\t\t\tconst expandAmount = expandRatio * 1.5;\n\n\t\t\tif (activeIndex === 0) {\n\t\t\t\t// Leading item active\n\t\t\t\tresult[0] = expandAmount;\n\t\t\t\tfor (let i = 1; i < count - 1; i++) {\n\t\t\t\t\tresult[i] = Math.max(0.5, baseWeights[i] - expandRatio * 0.4);\n\t\t\t\t}\n\t\t\t} else if (activeIndex === count - 1) {\n\t\t\t\t// Trailing item active\n\t\t\t\tresult[count - 1] = expandAmount;\n\t\t\t\tfor (let i = 1; i < count - 1; i++) {\n\t\t\t\t\tresult[i] = Math.max(0.5, baseWeights[i] - expandRatio * 0.4);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Center item active\n\t\t\t\tresult[activeIndex] = baseWeights[activeIndex] + expandRatio;\n\t\t\t\tfor (let i = 1; i < count - 1; i++) {\n\t\t\t\t\tif (i !== activeIndex) {\n\t\t\t\t\t\tresult[i] = Math.max(0.5, baseWeights[i] - expandRatio * 0.5);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\t// Determine base weights for dynamic and fixed modes\n\t\tlet baseWeights: number[];\n\t\tif (weights && weights.length === count) {\n\t\t\tbaseWeights = [...weights];\n\t\t} else if (mode === \"dynamic\" && count === 3) {\n\t\t\t// Spec default: 1 : 2 : 1 for Prev : Play : Next in dynamic mode\n\t\t\tbaseWeights = [1, 2, 1];\n\t\t} else {\n\t\t\t// Fixed mode or equal weights default: 1 : 1 : ... : 1\n\t\t\tbaseWeights = new Array(count).fill(1);\n\t\t}\n\n\t\tif (\n\t\t\tactiveIndex === null ||\n\t\t\tactiveIndex < 0 ||\n\t\t\tactiveIndex >= count ||\n\t\t\tcount === 1\n\t\t) {\n\t\t\treturn baseWeights;\n\t\t}\n\n\t\tconst totalWeight = baseWeights.reduce((acc, w) => acc + w, 0);\n\t\tconst activeBaseWeight = baseWeights[activeIndex];\n\t\tconst expandAmount = expandRatio * totalWeight;\n\n\t\t// Minimum weight floor per item to prevent content truncation\n\t\tconst minWeights = baseWeights.map((w, idx) => {\n\t\t\tif (isTextItem?.[idx]) {\n\t\t\t\t// Text items need higher floor so label isn't clipped\n\t\t\t\treturn Math.max(0.75, w * 0.65);\n\t\t\t}\n\t\t\treturn 0.4; // Icon buttons can shrink to compact circle\n\t\t});\n\n\t\t// Available shrink capacity for non-active items\n\t\tconst shrinkCapacity = baseWeights.map((w, idx) =>\n\t\t\tidx === activeIndex ? 0 : Math.max(0, w - minWeights[idx]),\n\t\t);\n\t\tconst totalCapacity = shrinkCapacity.reduce((acc, cap) => acc + cap, 0);\n\n\t\tconst result = [...baseWeights];\n\n\t\tif (totalCapacity > 0) {\n\t\t\tconst actualExpand = Math.min(expandAmount, totalCapacity);\n\t\t\tresult[activeIndex] = activeBaseWeight + actualExpand;\n\n\t\t\tfor (let i = 0; i < count; i++) {\n\t\t\t\tif (i !== activeIndex) {\n\t\t\t\t\tconst shrinkAmount =\n\t\t\t\t\t\tactualExpand * (shrinkCapacity[i] / totalCapacity);\n\t\t\t\t\tresult[i] = Math.max(minWeights[i], baseWeights[i] - shrinkAmount);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}, [count, weights, activeIndex, expandRatio, mode, isTextItem]);\n}\n","/**\n * @file button-distribute.tsx\n *\n * MD3 Expressive ButtonDistribute component.\n * Flexible Button Group with Expressive Motion & Size Distribution (Fixed, Dynamic, Mixed).\n */\n\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { BUTTON_RADIUS_SPRING } from \"../button/button-tokens\";\nimport {\n\tDISTRIBUTE_HEIGHT_TOKENS,\n\tDISTRIBUTE_RADIUS_TOKENS,\n\tDISTRIBUTE_SPRING_TRANSITION,\n} from \"./button-distribute-tokens\";\nimport type { ButtonDistributeProps } from \"./types\";\nimport { useDistributeWeights } from \"./use-distribute-weights\";\n\nexport const ButtonDistribute = React.forwardRef<\n\tHTMLFieldSetElement,\n\tButtonDistributeProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tmode = \"dynamic\",\n\t\t\tweights,\n\t\t\texpandRatio = 0.3,\n\t\t\texpandOnHover = false,\n\t\t\tfixedSize = 48,\n\t\t\tleadingSize,\n\t\t\ttrailingSize,\n\t\t\tgap = \"0.5rem\",\n\t\t\tsize = \"sm\",\n\t\t\titemClassName,\n\t\t\tchildren,\n\t\t\tonMouseLeave,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [activeIndex, setActiveIndex] = React.useState<number | null>(null);\n\t\tconst [pressedIndex, setPressedIndex] = React.useState<number | null>(null);\n\n\t\tconst childrenArray = React.useMemo(\n\t\t\t() => React.Children.toArray(children).filter(React.isValidElement),\n\t\t\t[children],\n\t\t);\n\t\tconst count = childrenArray.length;\n\n\t\tconst isTextItem = React.useMemo(() => {\n\t\t\treturn childrenArray.map((child) => {\n\t\t\t\tconst childEl = child as React.ReactElement<{\n\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t}>;\n\t\t\t\tif (typeof childEl.props.children === \"string\") return true;\n\t\t\t\tif (Array.isArray(childEl.props.children)) {\n\t\t\t\t\treturn childEl.props.children.some(\n\t\t\t\t\t\t(c) => typeof c === \"string\" && c.trim().length > 0,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\t\t}, [childrenArray]);\n\n\t\tconst calculatedWeights = useDistributeWeights({\n\t\t\tcount,\n\t\t\tweights,\n\t\t\tactiveIndex,\n\t\t\texpandRatio,\n\t\t\tmode,\n\t\t\tisTextItem,\n\t\t});\n\n\t\tconst handleGroupMouseLeave = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLFieldSetElement>) => {\n\t\t\t\tsetActiveIndex(null);\n\t\t\t\tsetPressedIndex(null);\n\t\t\t\tonMouseLeave?.(e);\n\t\t\t},\n\t\t\t[onMouseLeave],\n\t\t);\n\n\t\tconst resolvedGap = typeof gap === \"number\" ? `${gap}px` : gap;\n\t\tconst effectiveLeadingSize =\n\t\t\ttypeof (leadingSize ?? fixedSize) === \"number\"\n\t\t\t\t? `${leadingSize ?? fixedSize}px`\n\t\t\t\t: (leadingSize ?? fixedSize);\n\t\tconst effectiveTrailingSize =\n\t\t\ttypeof (trailingSize ?? fixedSize) === \"number\"\n\t\t\t\t? `${trailingSize ?? fixedSize}px`\n\t\t\t\t: (trailingSize ?? fixedSize);\n\n\t\tconst radiusTokens =\n\t\t\tDISTRIBUTE_RADIUS_TOKENS[size] ?? DISTRIBUTE_RADIUS_TOKENS.sm;\n\t\tconst heightClass =\n\t\t\tDISTRIBUTE_HEIGHT_TOKENS[size] ?? DISTRIBUTE_HEIGHT_TOKENS.sm;\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<fieldset\n\t\t\t\t\tref={ref}\n\t\t\t\t\tonMouseLeave={handleGroupMouseLeave}\n\t\t\t\t\tonPointerCancel={() => setPressedIndex(null)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"inline-flex flex-row items-center border-none p-0 m-0 box-border overflow-hidden select-none w-full\",\n\t\t\t\t\t\theightClass,\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\tgap: resolvedGap,\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{childrenArray.map((child, index) => {\n\t\t\t\t\t\tconst isFirst = index === 0;\n\t\t\t\t\t\tconst isLast = index === count - 1;\n\t\t\t\t\t\tconst childElement = child as React.ReactElement<{\n\t\t\t\t\t\t\tsize?: string;\n\t\t\t\t\t\t\tclassName?: string;\n\t\t\t\t\t\t\tstyle?: React.CSSProperties;\n\t\t\t\t\t\t\tonMouseEnter?: React.MouseEventHandler;\n\t\t\t\t\t\t\tonFocus?: React.FocusEventHandler;\n\t\t\t\t\t\t\tonPointerDown?: React.PointerEventHandler;\n\t\t\t\t\t\t\tonPointerUp?: React.PointerEventHandler;\n\t\t\t\t\t\t\tonClick?: React.MouseEventHandler;\n\t\t\t\t\t\t}>;\n\n\t\t\t\t\t\tconst isActive = activeIndex === index;\n\t\t\t\t\t\tconst isPressed = pressedIndex === index;\n\t\t\t\t\t\tconst isSquish = isActive || isPressed;\n\n\t\t\t\t\t\tlet flexStyle: React.CSSProperties = {};\n\t\t\t\t\t\tlet targetFlexBasis: string | number = 0;\n\n\t\t\t\t\t\tconst parsePx = (val: string | number): number => {\n\t\t\t\t\t\t\tif (typeof val === \"number\") return val;\n\t\t\t\t\t\t\tconst parsed = Number.parseFloat(val);\n\t\t\t\t\t\t\treturn Number.isNaN(parsed) ? 48 : parsed;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst leadingPx = parsePx(effectiveLeadingSize);\n\t\t\t\t\t\tconst trailingPx = parsePx(effectiveTrailingSize);\n\t\t\t\t\t\tconst leadingCompressedPx = Math.max(\n\t\t\t\t\t\t\t40,\n\t\t\t\t\t\t\tMath.round(leadingPx * (1 - expandRatio)),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst trailingCompressedPx = Math.max(\n\t\t\t\t\t\t\t40,\n\t\t\t\t\t\t\tMath.round(trailingPx * (1 - expandRatio)),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tif (mode === \"dynamic\" || mode === \"fixed\") {\n\t\t\t\t\t\t\tconst currentWeight = calculatedWeights[index] ?? 1;\n\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\tflexGrow: currentWeight,\n\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\tflexBasis: 0,\n\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\ttargetFlexBasis = 0;\n\t\t\t\t\t\t} else if (mode === \"mixed\") {\n\t\t\t\t\t\t\tconst currentWeight = calculatedWeights[index] ?? 0;\n\t\t\t\t\t\t\tif (isFirst) {\n\t\t\t\t\t\t\t\ttargetFlexBasis =\n\t\t\t\t\t\t\t\t\tactiveIndex !== null && activeIndex > 0\n\t\t\t\t\t\t\t\t\t\t? `${leadingCompressedPx}px`\n\t\t\t\t\t\t\t\t\t\t: effectiveLeadingSize;\n\t\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\t\tflexBasis: targetFlexBasis,\n\t\t\t\t\t\t\t\t\tflexGrow: currentWeight,\n\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else if (isLast) {\n\t\t\t\t\t\t\t\ttargetFlexBasis =\n\t\t\t\t\t\t\t\t\tactiveIndex !== null && activeIndex < count - 1\n\t\t\t\t\t\t\t\t\t\t? `${trailingCompressedPx}px`\n\t\t\t\t\t\t\t\t\t\t: effectiveTrailingSize;\n\t\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\t\tflexBasis: targetFlexBasis,\n\t\t\t\t\t\t\t\t\tflexGrow: currentWeight,\n\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttargetFlexBasis = 0;\n\t\t\t\t\t\t\t\tflexStyle = {\n\t\t\t\t\t\t\t\t\tflexBasis: 0,\n\t\t\t\t\t\t\t\t\tflexGrow: calculatedWeights[index] ?? 1,\n\t\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst handleMouseEnter = (e: React.MouseEvent) => {\n\t\t\t\t\t\t\tif (expandOnHover) {\n\t\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchildElement.props.onMouseEnter?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handleFocus = (e: React.FocusEvent) => {\n\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\tchildElement.props.onFocus?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handlePointerDown = (e: React.PointerEvent) => {\n\t\t\t\t\t\t\tsetPressedIndex(index);\n\t\t\t\t\t\t\tsetActiveIndex(index);\n\t\t\t\t\t\t\tchildElement.props.onPointerDown?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handlePointerUp = (e: React.PointerEvent) => {\n\t\t\t\t\t\t\tsetPressedIndex(null);\n\t\t\t\t\t\t\tif (!expandOnHover) {\n\t\t\t\t\t\t\t\tsetActiveIndex(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchildElement.props.onPointerUp?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst handleClick = (e: React.MouseEvent) => {\n\t\t\t\t\t\t\tsetPressedIndex(null);\n\t\t\t\t\t\t\tif (!expandOnHover) {\n\t\t\t\t\t\t\t\tsetActiveIndex(null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tchildElement.props.onClick?.(e);\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tconst clonedChild = React.cloneElement(childElement, {\n\t\t\t\t\t\t\tsize: childElement.props.size ?? size,\n\t\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\t\t\"w-full! h-full! justify-center items-center flex-1 rounded-[inherit]! px-3! sm:px-4!\",\n\t\t\t\t\t\t\t\tchildElement.props.className,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\tkey={childElement.key ?? index}\n\t\t\t\t\t\t\t\tlayout\n\t\t\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tflexGrow: (flexStyle.flexGrow as number) ?? 1,\n\t\t\t\t\t\t\t\t\tflexBasis: targetFlexBasis,\n\t\t\t\t\t\t\t\t\tborderRadius: isSquish\n\t\t\t\t\t\t\t\t\t\t? radiusTokens.pressedRadius\n\t\t\t\t\t\t\t\t\t\t: radiusTokens.pillRadius,\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\t...DISTRIBUTE_SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"relative inline-flex items-center justify-center shrink-0 min-w-0 overflow-hidden h-full\",\n\t\t\t\t\t\t\t\t\titemClassName,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={flexStyle}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{clonedChild}\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</fieldset>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nButtonDistribute.displayName = \"ButtonDistribute\";\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\n\n/**\n * MD3 Expressive Button Group Tokens\n * Ported from ButtonGroupSmallTokens.kt and ConnectedButtonGroupSmallTokens.kt\n */\nexport const BUTTON_GROUP_TOKENS = {\n\tstandard: {\n\t\tbetweenSpace: 12, // 12dp / 0.75rem / gap-3\n\t\tcontainerHeight: 40, // 40dp / 2.5rem\n\t},\n\tconnected: {\n\t\tbetweenSpace: 2, // 2dp / 0.125rem / gap-0.5\n\t\tcontainerHeight: 40, // 40dp / 2.5rem\n\t\tcontainerShape: cornerRadius.full, // 9999px\n\t\tinnerCorner: cornerRadius.small, // 8dp\n\t\tpressedInnerCorner: cornerRadius.extraSmall, // 4dp\n\t\tselectedCornerPercent: 50, // 50% -> full pill\n\t},\n} as const;\n","import type { MD3Size } from \"../../../types/md3\";\nimport { BUTTON_GROUP_TOKENS } from \"./button-group-tokens\";\n\n/** Pill radius (height / 2) per size. */\nexport const PILL_RADIUS_MAP: Record<MD3Size, number> = {\n\txs: 16,\n\tsm: 20,\n\tmd: 28,\n\tlg: 48,\n\txl: 68,\n};\n\n/** Morphing target radius when a standard button is pressed. */\nexport const PRESSED_RADIUS_MAP: Record<MD3Size, number> = {\n\txs: 8,\n\tsm: 10,\n\tmd: 16,\n\tlg: 28,\n\txl: 40,\n};\n\nexport interface Corners {\n\ttl: number;\n\ttr: number;\n\tbr: number;\n\tbl: number;\n}\n\nexport interface ShapeSet {\n\tdefault: Corners;\n\tpressed: Corners;\n\tchecked: Corners;\n}\n\nconst PILL_CORNERS = {\n\ttl: 9999,\n\ttr: 9999,\n\tbr: 9999,\n\tbl: 9999,\n} as const satisfies Corners;\n\nfunction buildConnectedShapes(\n\tsize: MD3Size,\n\tdefaultCorners: (outer: number, inner: number) => Corners,\n\tpressedCorners: (outer: number, pressedInner: number) => Corners,\n): ShapeSet {\n\tconst outer = PILL_RADIUS_MAP[size];\n\tconst inner = BUTTON_GROUP_TOKENS.connected.innerCorner;\n\tconst pressedInner = BUTTON_GROUP_TOKENS.connected.pressedInnerCorner;\n\treturn {\n\t\tdefault: defaultCorners(outer, inner),\n\t\tpressed: pressedCorners(outer, pressedInner),\n\t\tchecked: { ...PILL_CORNERS },\n\t};\n}\n\nexport const ButtonGroupDefaults = {\n\tconnectedLeadingButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: o, tr: i, br: i, bl: o }),\n\t\t\t(o, pi) => ({ tl: o, tr: pi, br: pi, bl: o }),\n\t\t),\n\n\tconnectedMiddleButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(_o, i) => ({ tl: i, tr: i, br: i, bl: i }),\n\t\t\t(_o, pi) => ({ tl: pi, tr: pi, br: pi, bl: pi }),\n\t\t),\n\n\tconnectedTrailingButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: i, tr: o, br: o, bl: i }),\n\t\t\t(o, pi) => ({ tl: pi, tr: o, br: o, bl: pi }),\n\t\t),\n\n\t/** For orientation=\"vertical\". */\n\tconnectedTopButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: o, tr: o, br: i, bl: i }),\n\t\t\t(o, pi) => ({ tl: o, tr: o, br: pi, bl: pi }),\n\t\t),\n\n\tconnectedBottomButtonShapes: (size: MD3Size): ShapeSet =>\n\t\tbuildConnectedShapes(\n\t\t\tsize,\n\t\t\t(o, i) => ({ tl: i, tr: i, br: o, bl: o }),\n\t\t\t(o, pi) => ({ tl: pi, tr: pi, br: o, bl: o }),\n\t\t),\n};\n","import {\n\tAnimatePresence,\n\tm,\n\ttype TargetAndTransition,\n\ttype Transition,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { MD3Size } from \"../../../types/md3\";\nimport { Icon } from \"../../icon\";\nimport type { ButtonProps } from \"../button\";\nimport {\n\tBUTTON_RADIUS_SPRING,\n\tBUTTON_SHAPE_MORPH_SPRING,\n\tBUTTON_SIZE_TOKENS,\n} from \"../button/button-tokens\";\nimport {\n\tButtonGroupDefaults,\n\tPRESSED_RADIUS_MAP,\n\ttype ShapeSet,\n} from \"./button-group-defaults\";\nimport type { ButtonGroupProps } from \"./types\";\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst PILL_BORDER_RADIUS = 9999;\n\nconst CHECK_ICON_SIZE = 24;\nconst CHECK_ICON = (\n\t<Icon name=\"check\" variant=\"rounded\" size={CHECK_ICON_SIZE} weight={700} />\n);\n\nconst CHECK_ICON_GAP_MAP: Record<string, number> = {\n\txs: 6,\n\tsm: 8,\n\tmd: 8,\n\tlg: 12,\n\txl: 12,\n};\n\nconst CHECK_ICON_MOTION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 420,\n\tdamping: 34,\n\tmass: 0.75,\n};\n\n// ─── Sub-components ──────────────────────────────────────────────────────────\n\nconst AnimatedCheckLabel = React.memo(function AnimatedCheckLabel({\n\tselected,\n\tsize,\n\tchildren,\n}: {\n\tselected: boolean;\n\tsize: string;\n\tchildren: React.ReactNode;\n}) {\n\tconst gap = CHECK_ICON_GAP_MAP[size] ?? CHECK_ICON_GAP_MAP.sm;\n\n\treturn (\n\t\t<m.span\n\t\t\tlayout\n\t\t\tclassName=\"inline-flex min-w-0 items-center justify-center whitespace-nowrap align-middle\"\n\t\t>\n\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t{selected && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tkey=\"selected-check\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tinitial={{ width: 0, opacity: 0, marginRight: 0, x: -4 }}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\twidth: CHECK_ICON_SIZE,\n\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\tmarginRight: gap,\n\t\t\t\t\t\t\tx: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\texit={{ width: 0, opacity: 0, marginRight: 0, x: -4 }}\n\t\t\t\t\t\ttransition={CHECK_ICON_MOTION}\n\t\t\t\t\t\tclassName=\"inline-flex shrink-0 items-center justify-center overflow-hidden\"\n\t\t\t\t\t\tstyle={{ willChange: \"width, opacity, transform, margin-right\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"inline-flex h-6 w-6 items-center justify-center\">\n\t\t\t\t\t\t\t{CHECK_ICON}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t\t<m.span layout=\"position\" className=\"min-w-0 truncate\">\n\t\t\t\t{children}\n\t\t\t</m.span>\n\t\t</m.span>\n\t);\n});\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction resolveConnectedShapes(\n\tvariant: string,\n\torientation: string,\n\tisFirst: boolean,\n\tisLast: boolean,\n\titemSize: MD3Size,\n): ShapeSet {\n\tconst defaults = ButtonGroupDefaults.connectedLeadingButtonShapes(itemSize);\n\tif (variant !== \"connected\") return defaults;\n\n\tif (orientation === \"horizontal\") {\n\t\tif (isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedLeadingButtonShapes(itemSize);\n\t\tif (!isFirst && isLast)\n\t\t\treturn ButtonGroupDefaults.connectedTrailingButtonShapes(itemSize);\n\t\tif (!isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedMiddleButtonShapes(itemSize);\n\t} else {\n\t\tif (isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedTopButtonShapes(itemSize);\n\t\tif (!isFirst && isLast)\n\t\t\treturn ButtonGroupDefaults.connectedBottomButtonShapes(itemSize);\n\t\tif (!isFirst && !isLast)\n\t\t\treturn ButtonGroupDefaults.connectedMiddleButtonShapes(itemSize);\n\t}\n\n\treturn defaults;\n}\n\ninterface ResolvedIcon {\n\ticon: React.ReactNode;\n\tlabel: React.ReactNode;\n}\n\nfunction resolveIconAndLabel(\n\telement: React.ReactElement<ButtonProps>,\n\tisSelected: boolean,\n\titemSize: string,\n\tshowCheck: boolean,\n\ticonBehavior: ButtonGroupProps[\"iconBehavior\"],\n\tlabelBehavior: ButtonGroupProps[\"labelBehavior\"],\n): ResolvedIcon {\n\tlet icon: React.ReactNode = element.props.icon;\n\tlet label: React.ReactNode = element.props.children;\n\n\tconst animateCheckInLabel =\n\t\tshowCheck &&\n\t\ticonBehavior !== \"none\" &&\n\t\ticonBehavior !== \"selected\" &&\n\t\tlabel !== undefined;\n\n\tif (iconBehavior === \"none\" || animateCheckInLabel) {\n\t\ticon = undefined;\n\t} else if (iconBehavior === \"selected\") {\n\t\ticon = isSelected ? element.props.icon : undefined;\n\t}\n\n\tif (labelBehavior === \"none\") {\n\t\tlabel = undefined;\n\t} else if (labelBehavior === \"selected\") {\n\t\tlabel = isSelected ? element.props.children : undefined;\n\t}\n\n\tif (animateCheckInLabel && label !== undefined) {\n\t\tlabel = (\n\t\t\t<AnimatedCheckLabel selected={isSelected} size={itemSize}>\n\t\t\t\t{label}\n\t\t\t</AnimatedCheckLabel>\n\t\t);\n\t}\n\n\treturn { icon, label };\n}\n\ntype MotionOverrides = {\n\tanimate: TargetAndTransition;\n\twhileTap?: TargetAndTransition;\n\ttransition?: Transition;\n\tlayout?: boolean | \"position\" | \"size\" | \"preserve-aspect\";\n};\n\nfunction buildMotionProps(\n\tvariant: string,\n\tisSelected: boolean,\n\tisPressed: boolean,\n\titemSize: MD3Size,\n\tshapes: ShapeSet,\n\texistingAnimate: TargetAndTransition,\n\texistingWhileTap: TargetAndTransition,\n): MotionOverrides {\n\tconst props: MotionOverrides = { animate: { ...existingAnimate } };\n\n\tif (variant === \"standard\") {\n\t\tconst pressedRadius = PRESSED_RADIUS_MAP[itemSize] ?? PRESSED_RADIUS_MAP.sm;\n\t\tconst itemSizeTokens =\n\t\t\tBUTTON_SIZE_TOKENS[itemSize] ?? BUTTON_SIZE_TOKENS.sm;\n\t\tconst isSquish = isSelected || isPressed;\n\n\t\tprops.animate.borderRadius = isSquish\n\t\t\t? pressedRadius\n\t\t\t: itemSizeTokens.roundShapeRadius;\n\t\tprops.whileTap = {\n\t\t\tscale: 0.98,\n\t\t\t...existingWhileTap,\n\t\t};\n\t\tprops.transition = {\n\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\tdefault: BUTTON_SHAPE_MORPH_SPRING,\n\t\t};\n\t\tprops.layout = true;\n\t}\n\n\tif (variant === \"connected\") {\n\t\tconst { tl, tr, br, bl } = isSelected\n\t\t\t? {\n\t\t\t\t\ttl: PILL_BORDER_RADIUS,\n\t\t\t\t\ttr: PILL_BORDER_RADIUS,\n\t\t\t\t\tbr: PILL_BORDER_RADIUS,\n\t\t\t\t\tbl: PILL_BORDER_RADIUS,\n\t\t\t\t}\n\t\t\t: shapes.default;\n\n\t\tprops.animate = {\n\t\t\t...props.animate,\n\t\t\tborderRadius: undefined,\n\t\t\tborderTopLeftRadius: tl,\n\t\t\tborderTopRightRadius: tr,\n\t\t\tborderBottomRightRadius: br,\n\t\t\tborderBottomLeftRadius: bl,\n\t\t};\n\t\tprops.whileTap = {\n\t\t\tborderRadius: undefined,\n\t\t\tborderTopLeftRadius: shapes.pressed.tl,\n\t\t\tborderTopRightRadius: shapes.pressed.tr,\n\t\t\tborderBottomRightRadius: shapes.pressed.br,\n\t\t\tborderBottomLeftRadius: shapes.pressed.bl,\n\t\t\t...existingWhileTap,\n\t\t};\n\t\tprops.transition = {\n\t\t\t...BUTTON_SHAPE_MORPH_SPRING,\n\t\t\tborderTopLeftRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderTopRightRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderBottomRightRadius: BUTTON_RADIUS_SPRING,\n\t\t\tborderBottomLeftRadius: BUTTON_RADIUS_SPRING,\n\t\t};\n\t\tprops.layout = true;\n\t}\n\n\treturn props;\n}\n\n// ─── Main Component ───────────────────────────────────────────────────────────\n\nconst ButtonGroupComponent = React.forwardRef<\n\tHTMLFieldSetElement,\n\tButtonGroupProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tvariant = \"standard\",\n\t\t\torientation = \"horizontal\",\n\t\t\tfullWidth = false,\n\t\t\tsize,\n\t\t\titemClassName,\n\t\t\tshowCheck = false,\n\t\t\tchildren,\n\t\t\ticonBehavior,\n\t\t\tlabelBehavior,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [pressedIndex, setPressedIndex] = React.useState<number | null>(null);\n\n\t\tconst childrenArray = React.useMemo(\n\t\t\t() => React.Children.toArray(children).filter(React.isValidElement),\n\t\t\t[children],\n\t\t);\n\t\tconst count = childrenArray.length;\n\n\t\tconst handlePointerLeaveAndUp = React.useCallback(() => {\n\t\t\tsetPressedIndex(null);\n\t\t}, []);\n\n\t\treturn (\n\t\t\t<fieldset\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex p-0 m-0 border-none max-w-full [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\torientation === \"vertical\"\n\t\t\t\t\t\t? \"flex-col items-stretch overflow-y-auto overflow-x-hidden\"\n\t\t\t\t\t\t: \"flex-row overflow-x-auto overflow-y-hidden\",\n\t\t\t\t\tvariant === \"standard\" ? \"gap-3\" : \"gap-0.5\",\n\t\t\t\t\tfullWidth && \"w-full\",\n\t\t\t\t\tfullWidth && orientation === \"vertical\" && \"h-full\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t\tonPointerLeave={handlePointerLeaveAndUp}\n\t\t\t\tonPointerUp={handlePointerLeaveAndUp}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{childrenArray.map((child, index) => {\n\t\t\t\t\tconst element = child as React.ReactElement<ButtonProps>;\n\t\t\t\t\tconst isSelected = element.props.selected === true;\n\t\t\t\t\tconst isFirst = index === 0;\n\t\t\t\t\tconst isLast = index === count - 1;\n\t\t\t\t\tconst itemSize = (size || element.props.size || \"sm\") as MD3Size;\n\t\t\t\t\tconst isPressed = pressedIndex === index;\n\n\t\t\t\t\tconst { icon: explicitIcon, label: explicitLabel } =\n\t\t\t\t\t\tresolveIconAndLabel(\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\t\titemSize,\n\t\t\t\t\t\t\tshowCheck,\n\t\t\t\t\t\t\ticonBehavior,\n\t\t\t\t\t\t\tlabelBehavior,\n\t\t\t\t\t\t);\n\n\t\t\t\t\tconst shapes = resolveConnectedShapes(\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\torientation,\n\t\t\t\t\t\tisFirst,\n\t\t\t\t\t\tisLast,\n\t\t\t\t\t\titemSize,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst existingAnimate =\n\t\t\t\t\t\ttypeof element.props.animate === \"object\" &&\n\t\t\t\t\t\t!Array.isArray(element.props.animate)\n\t\t\t\t\t\t\t? element.props.animate\n\t\t\t\t\t\t\t: {};\n\t\t\t\t\tconst existingWhileTap =\n\t\t\t\t\t\ttypeof element.props.whileTap === \"object\" &&\n\t\t\t\t\t\t!Array.isArray(element.props.whileTap)\n\t\t\t\t\t\t\t? element.props.whileTap\n\t\t\t\t\t\t\t: {};\n\n\t\t\t\t\tconst motionProps = buildMotionProps(\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\tisSelected,\n\t\t\t\t\t\tisPressed,\n\t\t\t\t\t\titemSize,\n\t\t\t\t\t\tshapes,\n\t\t\t\t\t\texistingAnimate as TargetAndTransition,\n\t\t\t\t\t\texistingWhileTap as TargetAndTransition,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst connectedClasses =\n\t\t\t\t\t\tvariant === \"connected\" && isSelected ? \"z-20\" : \"\";\n\n\t\t\t\t\tconst clonedElement = React.cloneElement(element, {\n\t\t\t\t\t\tkey: element.key ?? index,\n\t\t\t\t\t\ttabIndex: isFirst ? 0 : -1,\n\t\t\t\t\t\tsize: size || element.props.size,\n\t\t\t\t\t\ticon: explicitIcon,\n\t\t\t\t\t\tchildren: explicitLabel,\n\t\t\t\t\t\t...(variant === \"connected\" && {\n\t\t\t\t\t\t\tcolorStyle: element.props.colorStyle || \"tonal\",\n\t\t\t\t\t\t\tselectedColorStyle: element.props.selectedColorStyle || \"filled\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName: cn(\n\t\t\t\t\t\t\telement.props.className,\n\t\t\t\t\t\t\tconnectedClasses,\n\t\t\t\t\t\t\t\"focus-visible:z-10 hover:z-10 relative min-w-0\",\n\t\t\t\t\t\t\torientation === \"vertical\" && \"w-full\",\n\t\t\t\t\t\t\tfullWidth && \"flex-1\",\n\t\t\t\t\t\t\titemClassName,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tonPointerDown: (e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\tsetPressedIndex(index);\n\t\t\t\t\t\t\tif (element.props.onPointerDown) element.props.onPointerDown(e);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...motionProps,\n\t\t\t\t\t} as Partial<ButtonProps>);\n\n\t\t\t\t\treturn clonedElement;\n\t\t\t\t})}\n\t\t\t</fieldset>\n\t\t);\n\t},\n);\n\nButtonGroupComponent.displayName = \"ButtonGroup\";\n\nexport const ButtonGroup = React.memo(ButtonGroupComponent);\n","/**\n * @file extended-fab.tsx\n * MD3 Expressive Extended Floating Action Button.\n * @see https://m3.material.io/components/extended-fab/specs\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } 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 {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n} from \"../../../shared/constants\";\n\nconst SIZE_HEIGHT: Record<string, string> = {\n\tsm: \"h-14\",\n\tmd: \"h-20\",\n\tlg: \"h-24\",\n};\n\nconst SIZE_WIDTH_COLLAPSED: Record<string, string> = {\n\tsm: \"w-14\",\n\tmd: \"w-20\",\n\tlg: \"w-24\",\n};\n\nconst SIZE_PADDING: Record<string, string> = {\n\tsm: \"px-4\",\n\tmd: \"px-[26px]\",\n\tlg: \"px-7\",\n};\n\nconst SIZE_GAP: Record<string, string> = {\n\tsm: \"gap-2\",\n\tmd: \"gap-3\",\n\tlg: \"gap-4\",\n};\n\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-7\", px: 28 },\n\tlg: { cls: \"size-9\", px: 36 },\n};\n\nconst SIZE_TEXT: Record<string, string> = {\n\tsm: \"text-base font-medium\",\n\tmd: \"text-lg font-medium\",\n\tlg: \"text-xl font-normal\",\n};\n\nconst MORPH_RADIUS: Record<string, { default: number; pressed: number }> = {\n\tsm: { default: 16, pressed: 10 },\n\tmd: { default: 20, pressed: 14 },\n\tlg: { default: 28, pressed: 18 },\n};\n\nconst COLOR_CLASSES: Record<string, { bg: string; text: string }> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t},\n\tsurface: {\n\t\tbg: \"bg-m3-surface-container-high\",\n\t\ttext: \"text-m3-on-surface\",\n\t},\n};\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/** Props for the `ExtendedFAB` component. */\nexport interface ExtendedFABProps extends MotionButtonProps {\n\t/** Required text label. Keep it short (1-2 words); it does not wrap. */\n\tlabel: string;\n\t/** Icon to render. Automatically replaced by a spinner when `loading={true}`. */\n\ticon?: React.ReactNode;\n\t/** Button size per MD3 Expressive spec. @default \"sm\" */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\t/** MD3 color role for the container surface. @default \"primary\" */\n\tcolorStyle?: \"primary\" | \"secondary\" | \"tertiary\" | \"surface\";\n\t/** Reduces shadow to the lower elevation variant. @default false */\n\tlowered?: boolean;\n\t/** Replaces the icon with a spinner and blocks interaction. @default false */\n\tloading?: boolean;\n\t/** Spinner style shown while loading. @default \"loading-indicator\" */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/** Mounts/unmounts with an entrance/exit animation. @default true */\n\tvisible?: boolean;\n\t/** Collapses to icon-only when the user scrolls down. @default false */\n\tcollapseOnScroll?: boolean;\n\t/** Minimum scroll delta (px) required to trigger collapse/expand. @default 50 */\n\tscrollThreshold?: number;\n\t/** Controlled collapsed state. Overrides internal scroll-driven state when provided. */\n\tcollapsed?: boolean;\n\t/** Callback fired when the internal collapsed state changes. */\n\tonCollapsedChange?: (collapsed: boolean) => void;\n\t/** Layout ID for Framer Motion Container Transform transitions. */\n\tlayoutId?: string;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\n/**\n * Internal hook that listens to scroll events and manages the collapsed state.\n * @internal\n */\nfunction useScrollCollapse(\n\tenabled: boolean,\n\tscrollThreshold: number,\n\tonCollapsedChange?: (collapsed: boolean) => void,\n) {\n\tconst [collapsed, setCollapsed] = React.useState(false);\n\tconst lastScrollY = React.useRef(0);\n\n\tReact.useEffect(() => {\n\t\tif (!enabled || typeof window === \"undefined\") return;\n\n\t\tlastScrollY.current = window.scrollY;\n\n\t\tconst handleScroll = () => {\n\t\t\tconst currentScrollY = window.scrollY;\n\t\t\tconst diff = currentScrollY - lastScrollY.current;\n\n\t\t\tif (Math.abs(diff) < scrollThreshold) return;\n\n\t\t\tif (diff > 0 && !collapsed) {\n\t\t\t\tsetCollapsed(true);\n\t\t\t\tonCollapsedChange?.(true);\n\t\t\t} else if (diff < 0 && collapsed) {\n\t\t\t\tsetCollapsed(false);\n\t\t\t\tonCollapsedChange?.(false);\n\t\t\t}\n\n\t\t\tlastScrollY.current = currentScrollY;\n\t\t};\n\n\t\twindow.addEventListener(\"scroll\", handleScroll, { passive: true });\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, [enabled, scrollThreshold, collapsed, onCollapsedChange]);\n\n\treturn collapsed;\n}\n\nconst ExtendedFABComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tExtendedFABProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tlabel,\n\t\t\ticon,\n\t\t\tsize = \"sm\",\n\t\t\tcolorStyle = \"primary\",\n\t\t\tlowered = false,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tvisible = true,\n\t\t\tcollapseOnScroll = false,\n\t\t\tscrollThreshold = 50,\n\t\t\tcollapsed,\n\t\t\tonCollapsedChange,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\tlayoutId,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst localRef = React.useRef<HTMLButtonElement>(null);\n\t\tReact.useImperativeHandle(ref, () => localRef.current as HTMLButtonElement);\n\n\t\tconst [dir, setDir] = React.useState<\"ltr\" | \"rtl\">(\"ltr\");\n\n\t\tReact.useEffect(() => {\n\t\t\tif (!localRef.current) return;\n\t\t\tconst closestDir = localRef.current.closest(\"[dir]\")?.getAttribute(\"dir\");\n\t\t\tif (closestDir === \"rtl\" || closestDir === \"ltr\") {\n\t\t\t\tsetDir(closestDir);\n\t\t\t}\n\t\t}, []);\n\n\t\tconst internalCollapsed = useScrollCollapse(\n\t\t\tcollapseOnScroll,\n\t\t\tscrollThreshold,\n\t\t\tonCollapsedChange,\n\t\t);\n\n\t\tconst isCollapsed = collapsed !== undefined ? collapsed : internalCollapsed;\n\t\tconst hasIcon = !!icon || loading;\n\n\t\tconst colors = COLOR_CLASSES[colorStyle] ?? COLOR_CLASSES.primary;\n\t\tconst radiusConfig = MORPH_RADIUS[size] ?? MORPH_RADIUS.sm;\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.sm;\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) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\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 ((e.key === \"Enter\" || e.key === \" \") && onClick) {\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 containerClassName = cn(\n\t\t\t\"relative shrink-0 inline-flex items-center select-none cursor-pointer overflow-hidden\",\n\t\t\t\"transition-[box-shadow,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\tcolors.bg,\n\t\t\tcolors.text,\n\t\t\tlowered ? \"shadow-sm\" : \"shadow-md\",\n\t\t\tSIZE_HEIGHT[size] ?? \"h-14\",\n\t\t\tSIZE_TEXT[size],\n\t\t\tisCollapsed\n\t\t\t\t? cn(\"px-0 justify-center\", SIZE_WIDTH_COLLAPSED[size])\n\t\t\t\t: cn(\n\t\t\t\t\t\thasIcon ? \"justify-start\" : \"justify-center\",\n\t\t\t\t\t\tSIZE_PADDING[size],\n\t\t\t\t\t\thasIcon && SIZE_GAP[size],\n\t\t\t\t\t),\n\t\t\tdir === \"rtl\" || restProps.dir === \"rtl\"\n\t\t\t\t? \"flex-row-reverse\"\n\t\t\t\t: \"flex-row\",\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{hasIcon && (\n\t\t\t\t\t<m.span\n\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\tsizeIcon.cls,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-full h-full\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\t\t\tsize={sizeIcon.px}\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t<ProgressIndicator\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\t\t\tsize={sizeIcon.px}\n\t\t\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</m.span>\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\t\t<m.span\n\t\t\t\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-full h-full [&>svg]:w-full [&>svg]:h-full\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t</m.span>\n\t\t\t\t)}\n\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0, width: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, width: \"auto\" }}\n\t\t\t\t\t\t\texit={{ opacity: 0, width: 0 }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"linear\" },\n\t\t\t\t\t\t\t\twidth: SPRING_TRANSITION,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"overflow-hidden whitespace-nowrap\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{label}\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</>\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{visible &&\n\t\t\t\t\t\t!(isCollapsed && !hasIcon) &&\n\t\t\t\t\t\t(asChild ? (\n\t\t\t\t\t\t\t<Slot\n\t\t\t\t\t\t\t\tref={localRef}\n\t\t\t\t\t\t\t\taria-label={ariaLabel || label}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\tborderRadius: `${radiusConfig.default}px`,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Slot>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<m.button\n\t\t\t\t\t\t\t\tref={localRef}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tlayout\n\t\t\t\t\t\t\t\tlayoutId={layoutId}\n\t\t\t\t\t\t\t\taria-label={ariaLabel || label}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\tscale: 0.6,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tborderRadius: radiusConfig.default,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\tborderRadius: radiusConfig.default,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{ scale: 0.6, opacity: 0 }}\n\t\t\t\t\t\t\t\twhileTap={{ borderRadius: radiusConfig.pressed }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tborderRadius: { type: \"spring\", stiffness: 500, damping: 30 },\n\t\t\t\t\t\t\t\t\tscale: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.2, ease: \"linear\" },\n\t\t\t\t\t\t\t\t\tlayout: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t\t\t</m.button>\n\t\t\t\t\t\t))}\n\t\t\t\t</AnimatePresence>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nExtendedFABComponent.displayName = \"ExtendedFAB\";\n\nexport const ExtendedFAB = React.memo(ExtendedFABComponent);\n","/**\n * @file fab.tsx\n *\n * MD3 Expressive Floating Action Button (FAB).\n *\n * Supports four sizes, an extended variant with animated label reveal,\n * shape morphing, a `lowered` elevation variant, and an optional\n * `FABPosition` container for absolute positioning within a layout.\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } 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 {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../../shared/constants\";\nimport { TouchTarget } from \"../../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size layout classes for the FAB container.\n * MD3 sizes: SM=40dp, MD=56dp, LG=96dp, XL=136dp.\n * Extended FABs use `w-full` + `px-*` via the caller.\n * @internal\n */\nconst SIZE_STYLES: Record<string, string> = {\n\tsm: \"h-10 w-10\",\n\tmd: \"h-14 w-14\",\n\tlg: \"h-24 w-24\",\n\txl: \"h-[8.5rem] w-[8.5rem]\",\n};\n\n/**\n * Per-size icon dimensions (Tailwind class + pixel value).\n * MD3 icon sizes: SM=24dp, MD=24dp, LG=32dp, XL=40dp.\n * @internal\n */\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-6\", px: 24 },\n\tlg: { cls: \"size-8\", px: 32 },\n\txl: { cls: \"size-10\", px: 40 },\n};\n\n/**\n * Per-size label typography classes used in the extended variant.\n * @internal\n */\nconst SIZE_TEXT_CLASS: Record<string, string> = {\n\tsm: \"text-sm  font-medium\",\n\tmd: \"text-base font-medium\",\n\tlg: \"text-xl  font-semibold\",\n\txl: \"text-2xl font-semibold\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shape Morphing — Border Radius Map\n//\n// IMPORTANT: Use exact height/2 values for \"round\" radii to avoid the dead-zone\n// artefact: CSS clips any radius > height/2 identically, so animating from\n// 9999 → small value produces a jump/snap at the threshold.\n// Heights: SM=40dp, MD=56dp, LG=96dp, XL=136dp\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size border-radius tokens for all interaction / selection states.\n *\n * - `default`: idle pill radius (height / 2).\n * - `pressed`: compressed on `whileTap`.\n * - `extended`: radius for the extended (label-visible) state.\n * - `extended_pressed`: compressed extended state on `whileTap`.\n *\n * @internal\n */\nconst MORPH_RADIUS: Record<\n\tstring,\n\t{\n\t\tdefault: number;\n\t\tpressed: number;\n\t\textended: number;\n\t\textended_pressed: number;\n\t}\n> = {\n\tsm: { default: 12, pressed: 8, extended: 12, extended_pressed: 8 },\n\tmd: { default: 16, pressed: 10, extended: 16, extended_pressed: 10 },\n\tlg: { default: 28, pressed: 20, extended: 28, extended_pressed: 20 },\n\txl: { default: 40, pressed: 28, extended: 40, extended_pressed: 28 },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Color Roles\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Color-role Tailwind class map for each FAB color variant.\n * @internal\n */\nconst COLOR_CLASSES: Record<\n\tstring,\n\t{ bg: string; text: string; shadow: string }\n> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t\tshadow: \"shadow-md\",\n\t},\n\tsurface: {\n\t\tbg: \"bg-m3-surface-container-high\",\n\t\ttext: \"text-m3-primary\",\n\t\tshadow: \"shadow-md\",\n\t},\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/**\n * Props for `FAB` Floating Action Button component.\n *\n * @remarks\n * - Ensure icon-only FABs specify `aria-label` for accessibility.\n * - In extended mode (`extended={true}`), text passed to `children` acts as the label, so `aria-label` may be omitted if children is string.\n * - `lowered` prop reduces the container shadow to MD3 \"lowered\" FAB specification;\n *   useful when placed on surface containers like Bottom App Bars for visual balance.\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport interface FABProps extends MotionButtonProps {\n\t/**\n\t * Icon element to render — typically an Icon component.\n\t * Swapped for loading spinner when `loading={true}`.\n\t */\n\ticon: React.ReactNode;\n\t/**\n\t * FAB size variant according to MD3 specification.\n\t * - `sm`: Small (40dp) — Recommended for tight layouts / inside content.\n\t * - `md`: Regular (56dp) — Standard primary action.\n\t * - `lg`: Large (96dp) — High-emphasis action.\n\t * - `xl`: Extra-large (136dp) — Spotlight action element.\n\t * @default \"md\"\n\t */\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\";\n\t/**\n\t * MD3 color role container style.\n\t * @default \"primary\"\n\t */\n\tcolorStyle?: \"primary\" | \"secondary\" | \"tertiary\" | \"surface\";\n\t/**\n\t * When `true`, expands FAB to display label text alongside icon.\n\t * Width automatically expands to fit `children`.\n\t * @default false\n\t */\n\textended?: boolean;\n\t/**\n\t * Label content rendered when `extended={true}`.\n\t * Plain string recommended.\n\t */\n\tchildren?: React.ReactNode;\n\t/**\n\t * When `true`, reduces container shadow to lowered elevation.\n\t * @default false\n\t */\n\tlowered?: boolean;\n\t/**\n\t * When `true`, displays loading spinner and disables click interactions.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Loading spinner variant.\n\t * @default \"loading-indicator\"\n\t */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/**\n\t * Controls FAB visibility in layout using scale motion animation.\n\t * @default true\n\t */\n\tvisible?: boolean;\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// FABPosition — Layout Wrapper\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Props for `FABPosition` layout wrapper component.\n * Position absolute wrapper to anchor FAB to a screen corner.\n *\n * @see {@link FABPosition}\n */\nexport interface FABPositionProps {\n\t/**\n\t * Screen corner position for FAB.\n\t * @default \"bottom-right\"\n\t */\n\tposition?: \"bottom-right\" | \"bottom-left\" | \"top-right\" | \"top-left\";\n\t/** Child elements — typically a `<FAB>` component */\n\tchildren: React.ReactNode;\n\t/** Additional CSS class */\n\tclassName?: string;\n}\n\nconst POSITION_CLASS: Record<string, string> = {\n\t\"bottom-right\": \"bottom-4 right-4 sm:bottom-6 sm:right-6\",\n\t\"bottom-left\": \"bottom-4 left-4 sm:bottom-6 sm:left-6\",\n\t\"top-right\": \"top-4 right-4 sm:top-6 sm:right-6\",\n\t\"top-left\": \"top-4 left-4 sm:top-6 sm:left-6\",\n};\n\n/**\n * Absolute position wrapper component for `<FAB>`.\n *\n * Anchors FAB to a screen corner with responsive offset padding.\n * Requires parent element to have `position: relative`.\n *\n * @see https://m3.material.io/components/floating-action-button/guidelines\n */\n\nexport function FABPosition({\n\tposition = \"bottom-right\",\n\tchildren,\n\tclassName,\n}: FABPositionProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute z-10\",\n\t\t\t\tPOSITION_CLASS[position] ?? POSITION_CLASS[\"bottom-right\"],\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FAB Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst FABComponent = React.forwardRef<HTMLButtonElement, FABProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\ticon,\n\t\t\tsize = \"md\",\n\t\t\tcolorStyle = \"primary\",\n\t\t\textended = false,\n\t\t\tchildren,\n\t\t\tlowered = false,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\tvisible = true,\n\t\t\tasChild = false,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\tlayout,\n\t\t\tlayoutId,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst colors = COLOR_CLASSES[colorStyle] ?? COLOR_CLASSES.primary;\n\t\tconst radiusConfig = MORPH_RADIUS[size] ?? MORPH_RADIUS.md;\n\n\t\tconst animateRadius = extended\n\t\t\t? radiusConfig.extended\n\t\t\t: radiusConfig.default;\n\t\tconst pressedRadius = extended\n\t\t\t? radiusConfig.extended_pressed\n\t\t\t: radiusConfig.pressed;\n\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.md;\n\t\tconst iconClass = sizeIcon.cls;\n\t\tconst iconPx = sizeIcon.px;\n\n\t\t// xs/sm share the SM token; only MD FAB (40dp) needs the touch target\n\t\tconst needsTouchTarget = size === \"sm\";\n\n\t\t// ── Ripple ───────────────────────────────────────────────────────\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) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\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 ((e.key === \"Enter\" || e.key === \" \") && onClick) {\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 labelContent = asChild\n\t\t\t? (\n\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t}>\n\t\t\t\t).props.children\n\t\t\t: children;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{/* Icon / Loading swap */}\n\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\ticonClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\tsize={iconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\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<ProgressIndicator\n\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\tsize={iconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\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.span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full\",\n\t\t\t\t\t\t\t\ticonClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{/* Extended label — animates in/out with the `extended` prop */}\n\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t{extended && labelContent && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"label\"\n\t\t\t\t\t\t\tlayout=\"position\"\n\t\t\t\t\t\t\tinitial={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ width: \"auto\", opacity: 1 }}\n\t\t\t\t\t\t\texit={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"linear\" },\n\t\t\t\t\t\t\t\twidth: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\tlayout: SPRING_TRANSITION,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"overflow-hidden whitespace-nowrap ml-3\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{labelContent}\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</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\t\"transition-[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\tcolors.bg,\n\t\t\tcolors.text,\n\t\t\tlowered ? \"shadow-sm\" : colors.shadow,\n\t\t\tSIZE_STYLES[size] ?? \"h-14 w-14\",\n\t\t\textended && \"w-auto pl-4 pr-6\",\n\t\t\tSIZE_TEXT_CLASS[size],\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst computedAriaLabel =\n\t\t\tariaLabel || (typeof children === \"string\" ? children : undefined);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{visible &&\n\t\t\t\t\t\t(asChild ? (\n\t\t\t\t\t\t\t<Slot\n\t\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(style as React.CSSProperties),\n\t\t\t\t\t\t\t\t\tborderRadius: `${animateRadius}px`,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</Slot>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<m.button\n\t\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tlayout={layout !== undefined ? layout : true}\n\t\t\t\t\t\t\t\tlayoutId={layoutId}\n\t\t\t\t\t\t\t\taria-label={computedAriaLabel}\n\t\t\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\t\tstyle={style}\n\t\t\t\t\t\t\t\t// ── Entrance / Exit (FAB visibility) ────────────────\n\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\tscale: 0.5,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tborderRadius: animateRadius,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tanimate={{ scale: 1, opacity: 1, borderRadius: animateRadius }}\n\t\t\t\t\t\t\t\texit={{ scale: 0.5, opacity: 0 }}\n\t\t\t\t\t\t\t\t// ── Shape Morphing (extended toggle) ────────────────\n\t\t\t\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\tborderRadius: SPRING_TRANSITION_FAST,\n\t\t\t\t\t\t\t\t\tscale: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.25, ease: \"easeOut\" },\n\t\t\t\t\t\t\t\t\tlayout: SPRING_TRANSITION,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t\t\t</m.button>\n\t\t\t\t\t\t))}\n\t\t\t\t</AnimatePresence>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nFABComponent.displayName = \"FAB\";\n\n/**\n * Primary Floating Action Button (FAB) component adhering to MD3 Expressive.\n *\n * Supports sizes from SM to XL, multiple color roles, extended label expansion,\n * loading states, and entrance/exit scale motion animations.\n *\n * @remarks\n * - Requires `aria-label` for icon-only FABs.\n * - When `extended={true}`, string `children` is automatically used as the accessible label.\n * - Animates scale out when `visible={false}` using fluid spring animation.\n * - Combine with `FABPosition` to anchor to screen corners.\n *\n * @example\n * ```tsx\n * // Basic small icon-only FAB\n * <FAB icon={<Icon name=\"search\" />} aria-label=\"Search\" size=\"sm\" />\n *\n * // Extended FAB with label\n * const [isOpen, setOpen] = React.useState(false);\n * <FAB\n *   icon={<Icon name=\"edit\" />}\n *   extended={isOpen}\n *   onClick={() => setOpen(!isOpen)}\n * >\n *   Compose\n * </FAB>\n *\n * // Large FAB with loading state\n * <FAB\n *   icon={<Icon name=\"upload\" />}\n\n *   size=\"lg\"\n *   loading={isUploading}\n *   colorStyle=\"secondary\"\n *   aria-label=\"Upload files\"\n * />\n *\n * // Fixed at bottom right\n * <FABPosition position=\"bottom-right\">\n *   <FAB icon={<Icon name=\"add\" />} aria-label=\"Add item\" />\n * </FABPosition>\n * ```\n\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport const FAB = React.memo(FABComponent);\n","/**\n * @file fab-menu.tsx\n *\n * FAB Menu component adhering to MD3 Expressive.\n *\n * Provides a toggle Floating Action Button (FAB) that expands a list of action items with staggered animation.\n * Complies with MD3 FloatingActionButtonMenu specification with full accessibility support\n * (keyboard navigation, focus management, ARIA roles).\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseReducedMotion,\n\tuseSpring,\n\tuseTransform,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../../ripple\";\nimport {\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../../shared/constants\";\nimport { TouchTarget } from \"../../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens — MD3 FAB Menu Spec\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst SPRING_NORMAL = { stiffness: 700, damping: 40 } as const;\nconst SPRING_REDUCED = { stiffness: 10000, damping: 100 } as const;\nconst FOCUS_DELAY_MS = 50;\n\nconst TOGGLE_FAB_COLORS: Record<\n\tstring,\n\t{\n\t\tcontainerBg: string;\n\t\tcontainerText: string;\n\t\tcheckedBg: string;\n\t\tcheckedText: string;\n\t}\n> = {\n\tprimary: {\n\t\tcontainerBg: \"bg-m3-primary-container\",\n\t\tcontainerText: \"text-m3-on-primary-container\",\n\t\tcheckedBg: \"bg-m3-primary\",\n\t\tcheckedText: \"text-m3-on-primary\",\n\t},\n\tsecondary: {\n\t\tcontainerBg: \"bg-m3-secondary-container\",\n\t\tcontainerText: \"text-m3-on-secondary-container\",\n\t\tcheckedBg: \"bg-m3-secondary\",\n\t\tcheckedText: \"text-m3-on-secondary\",\n\t},\n\ttertiary: {\n\t\tcontainerBg: \"bg-m3-tertiary-container\",\n\t\tcontainerText: \"text-m3-on-tertiary-container\",\n\t\tcheckedBg: \"bg-m3-tertiary\",\n\t\tcheckedText: \"text-m3-on-tertiary\",\n\t},\n};\n\n/**\n * Size tokens for ToggleFAB.\n *\n * MD3 Kotlin reference:\n *  - Baseline: 56dp, cornerRadius 16dp → 28dp (fully round)\n *  - Medium: ~80dp (FabMediumTokens.ContainerHeight), cornerRadius 20dp → 40dp\n *  - Large: 96dp, cornerRadius 28dp → 48dp\n * @internal\n */\nconst TOGGLE_FAB_SIZES: Record<\n\t\"sm\" | \"md\" | \"lg\",\n\t{ sizeClass: string; initialRadius: number; finalRadius: number }\n> = {\n\tsm: { sizeClass: \"h-14 w-14\", initialRadius: 16, finalRadius: 28 },\n\tmd: { sizeClass: \"h-20 w-20\", initialRadius: 20, finalRadius: 40 },\n\tlg: { sizeClass: \"h-24 w-24\", initialRadius: 28, finalRadius: 48 },\n};\n\nconst MENU_ITEM_STYLES = {\n\tpadding: \"ps-4 pe-6\",\n\tgap: \"gap-3\",\n\tsize: \"h-14 min-w-14\",\n\tcornerRadius: 999,\n} as const;\n\nconst MENU_ITEM_COLORS: Record<string, { bg: string; text: string }> = {\n\tprimary: {\n\t\tbg: \"bg-m3-primary-container\",\n\t\ttext: \"text-m3-on-primary-container\",\n\t},\n\tsecondary: {\n\t\tbg: \"bg-m3-secondary-container\",\n\t\ttext: \"text-m3-on-secondary-container\",\n\t},\n\ttertiary: {\n\t\tbg: \"bg-m3-tertiary-container\",\n\t\ttext: \"text-m3-on-tertiary-container\",\n\t},\n};\n\nconst ALIGNMENT_CONTAINER_CLASSES: Record<string, string> = {\n\tend: \"items-end bottom-4 right-4 sm:bottom-6 sm:right-6\",\n\tstart: \"items-start bottom-4 left-4 sm:bottom-6 sm:left-6\",\n\tcenter: \"items-center bottom-4 left-1/2 -translate-x-1/2 sm:bottom-6\",\n};\n\nconst ALIGNMENT_ITEMS_CLASSES: Record<string, string> = {\n\tend: \"items-end\",\n\tstart: \"items-start\",\n\tcenter: \"items-center\",\n};\n\nconst ALIGNMENT_TRANSFORM_ORIGIN: Record<string, string> = {\n\tend: \"right\",\n\tstart: \"left\",\n\tcenter: \"bottom\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Data interface for each action item in FAB menu.\n *\n * If `label` is omitted, renders as an icon-only item.\n */\nexport interface FABMenuItemData {\n\t/** Unique ID used for React keys and focus tracking. */\n\tid: string;\n\t/** Label displayed adjacent to icon (optional). Omit for icon-only item. */\n\tlabel?: string;\n\t/** Icon node — typically an SVG icon component. */\n\ticon: React.ReactNode;\n\t/** Callback invoked when item is activated (click, Enter, or Space). */\n\tonClick: () => void;\n\t/**\n\t * When `true`, visually and interactively disables the item.\n\t * Uses `aria-disabled` instead of HTML `disabled` to preserve focusability for accessibility.\n\t * @default false\n\t */\n\tdisabled?: boolean;\n\t/** Additional CSS class names for item wrapper. */\n\tclassName?: string;\n}\n\n/**\n * Props controlling the main `FABMenu` component.\n *\n * @remarks\n * FABMenu manages menu open/close lifecycle, focus trapping, keyboard control,\n * and staggered motion transitions. `expanded` state is controlled externally.\n */\nexport interface FABMenuProps {\n\t/** Whether the FAB Menu is open (expanded). */\n\texpanded: boolean;\n\t/** Callback invoked when Toggle FAB is interacted with or backdrop dismissed. */\n\tonToggle: (expanded: boolean) => void;\n\t/** List of action items (MD3 spec recommends 2–6 items). */\n\titems: FABMenuItemData[];\n\t/**\n\t * MD3 container color role for trigger FAB and menu items.\n\t * @default \"primary\"\n\t */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/**\n\t * FAB size variant controlling container dimensions per MD3 Extended FAB specification.\n\t * - `\"sm\"` – small FAB: 56dp (replaces deprecated \"baseline\").\n\t * - `\"md\"` – medium FAB: 80dp.\n\t * - `\"lg\"` – large FAB: 96dp.\n\t * @default \"sm\"\n\t */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\t/**\n\t * Menu items alignment relative to Toggle FAB.\n\t * - `\"end\"`: Items align to right edge (trailing edge, recommended for RTL).\n\t * - `\"start\"`: Items align along left edge.\n\t * - `\"center\"`: Items align vertically centered above FAB.\n\t * @default \"end\"\n\t */\n\talignment?: \"start\" | \"end\" | \"center\";\n\t/** Custom CSS className for root component. */\n\tclassName?: string;\n\t/**\n\t * When `true`, clicking backdrop overlay closes menu.\n\t * @default true\n\t */\n\tcloseOnBackdropClick?: boolean;\n\t/**\n\t * When `true`, focus automatically moves to the LAST item (closest above FAB) when expanded.\n\t * If `false`, focus moves to the FIRST item in list.\n\n\t * @default true\n\t */\n\tfocusLast?: boolean;\n\t/** Required `aria-label` for ToggleFAB for accessibility. */\n\t\"aria-label\"?: string;\n}\n\n/**\n * Props for standalone `ToggleFAB` component.\n */\nexport interface ToggleFABProps {\n\t/** Whether the button is in expanded/active state. */\n\texpanded: boolean;\n\t/** Callback fired when button toggle state changes. */\n\tonToggle: (expanded: boolean) => void;\n\t/**\n\t * Icon generator function receiving `progress` between `0` -> `1` (collapsed -> expanded).\n\t * Useful for icon morphing effects during animation (e.g., plus to close icon).\n\t *\n\t * @example\n\t * ```tsx\n\t * icon={(progress) => progress > 0.5 ? <Icon name=\"close\" /> : <Icon name=\"add\" />}\n\t * ```\n\t */\n\ticon: (progress: number) => React.ReactNode;\n\t/** MD3 container color role. @default \"primary\" */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/** FAB size variant controlling container dimensions. @default \"sm\" */\n\tsize?: \"sm\" | \"md\" | \"lg\";\n\t/** Additional CSS class name. */\n\tclassName?: string;\n\t/** Accessible label requirement. Required. */\n\t\"aria-label\"?: string;\n\t/** ID link for aria-controls attribute to reference menu. */\n\t\"aria-controls\"?: string;\n\t/** Component ID. */\n\tid?: string;\n}\n\n/**\n * Props for an individual `FABMenuItem`.\n */\nexport interface FABMenuItemProps {\n\t/** Icon node to display. */\n\ticon: React.ReactNode;\n\t/** Descriptive label text adjacent to icon. */\n\tlabel?: string;\n\t/** Callback fired when item is clicked. */\n\tonClick: () => void;\n\t/** Disables interaction while keeping element focusable in tab order. @default false */\n\tdisabled?: boolean;\n\t/** Container color role. @default \"primary\" */\n\tcolorVariant?: \"primary\" | \"secondary\" | \"tertiary\";\n\t/** Custom CSS className. */\n\tclassName?: string;\n\t/** Item index used for staggered animation delay. */\n\tindex?: number;\n\t/** Total items count in menu array. */\n\ttotalItems?: number;\n\t/** Logic `tabIndex` value for manual keyboard navigation. */\n\ttabIndex?: number;\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Animation Variants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ITEM_SPRING = { type: \"spring\" as const, stiffness: 700, damping: 25 };\n\nconst MENU_CONTAINER_VARIANTS = {\n\topen: { transition: { staggerChildren: 0.033, staggerDirection: 1 } },\n\tclosed: { transition: { staggerChildren: 0.02, staggerDirection: -1 } },\n} as const;\n\nconst MENU_ITEM_VARIANTS = {\n\topen: { scaleX: 1, opacity: 1, transition: ITEM_SPRING },\n\tclosed: { scaleX: 0, opacity: 0, transition: ITEM_SPRING },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal Icon Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction AddIcon() {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t>\n\t\t\t<title>Add</title>\n\t\t\t<path d=\"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\" />\n\t\t</svg>\n\t);\n}\n\nfunction CloseIcon() {\n\treturn (\n\t\t<svg\n\t\t\taria-hidden=\"true\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t>\n\t\t\t<title>Close</title>\n\t\t\t<path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n\t\t</svg>\n\t);\n}\n\nfunction defaultFabIcon(progress: number) {\n\treturn progress > 0.5 ? <CloseIcon /> : <AddIcon />;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// ToggleFAB Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst ToggleFABComponent = React.forwardRef<HTMLButtonElement, ToggleFABProps>(\n\t(\n\t\t{\n\t\t\texpanded,\n\t\t\tonToggle,\n\t\t\ticon,\n\t\t\tcolorVariant = \"primary\",\n\t\t\tsize = \"sm\",\n\t\t\tclassName,\n\t\t\tid,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-controls\": ariaControls,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion();\n\t\tconst colors = TOGGLE_FAB_COLORS[colorVariant] ?? TOGGLE_FAB_COLORS.primary;\n\t\tconst sizeTokens = TOGGLE_FAB_SIZES[size] ?? TOGGLE_FAB_SIZES.sm;\n\n\t\tconst springConfig = prefersReduced ? SPRING_REDUCED : SPRING_NORMAL;\n\t\tconst checkedProgress = useSpring(expanded ? 1 : 0, springConfig);\n\n\t\tReact.useEffect(() => {\n\t\t\tcheckedProgress.set(expanded ? 1 : 0);\n\t\t}, [expanded, checkedProgress]);\n\n\t\tconst borderRadius = useTransform(\n\t\t\tcheckedProgress,\n\t\t\t[0, 1],\n\t\t\t[`${sizeTokens.initialRadius}px`, `${sizeTokens.finalRadius}px`],\n\t\t);\n\n\t\tconst [iconProgress, setIconProgress] = React.useState(expanded ? 1 : 0);\n\n\t\tReact.useEffect(() => {\n\t\t\treturn checkedProgress.on(\"change\", setIconProgress);\n\t\t}, [checkedProgress]);\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState();\n\n\t\tconst handleClick = React.useCallback(() => {\n\t\t\tonToggle(!expanded);\n\t\t}, [expanded, onToggle]);\n\n\t\treturn (\n\t\t\t<m.button\n\t\t\t\tref={ref}\n\t\t\t\tid={id}\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-expanded={expanded}\n\t\t\t\taria-haspopup=\"menu\"\n\t\t\t\taria-label={ariaLabel ?? (expanded ? \"Close menu\" : \"Open menu\")}\n\t\t\t\taria-controls={ariaControls}\n\t\t\t\tdata-expanded={expanded ? \"true\" : \"false\"}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\tstyle={{ borderRadius }}\n\t\t\t\tanimate={{\n\t\t\t\t\tboxShadow: expanded\n\t\t\t\t\t\t? \"0 4px 8px 3px rgba(0,0,0,0.15), 0 1px 3px rgba(0,0,0,0.3)\"\n\t\t\t\t\t\t: \"0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)\",\n\t\t\t\t}}\n\t\t\t\twhileTap={{ scale: 0.95, transition: SPRING_TRANSITION_FAST }}\n\t\t\t\ttransition={{ boxShadow: SPRING_TRANSITION }}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\t\t\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\t\t\t\"transition-colors duration-200\",\n\t\t\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\t\tsizeTokens.sizeClass,\n\t\t\t\t\texpanded ? colors.checkedBg : colors.containerBg,\n\t\t\t\t\texpanded ? colors.checkedText : colors.containerText,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<TouchTarget />\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"relative z-10 flex items-center justify-center size-6 pointer-events-none\"\n\t\t\t\t>\n\t\t\t\t\t{icon(iconProgress)}\n\t\t\t\t</span>\n\t\t\t</m.button>\n\t\t);\n\t},\n);\n\nToggleFABComponent.displayName = \"ToggleFAB\";\n\n/**\n * Toggle FAB button (Morphing FAB) usable as standalone or trigger for `FABMenu`.\n *\n * Container shape transitions from squircle to circle (square → circle) and shifts colors\n * when `expanded` state changes from false → true.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n * <ToggleFAB\n *   expanded={open}\n *   onToggle={setOpen}\n *   colorVariant=\"primary\"\n *   aria-label=\"Toggle actions\"\n *   icon={(progress) => progress > 0.5 ? <Icon name=\"close\" /> : <Icon name=\"add\" />}\n * />\n * ```\n */\nexport const ToggleFAB = React.memo(ToggleFABComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABMenuItem Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Single action item within a `FABMenu`.\n *\n * Renders a pill shape enclosing icon and optional label text.\n * When `label` is omitted, renders as a square item containing only icon.\n * Includes MD3 Ripple and 48dp touch target area per WCAG 2.5.5 touch target guidelines.\n *\n * @remarks\n * Disabled items use `aria-disabled=\"true\"` rather than native HTML `disabled`\n * so they remain focusable in the tab sequence per MD3 specification.\n */\nexport function FABMenuItem({\n\ticon,\n\tlabel,\n\tonClick,\n\tdisabled = false,\n\tcolorVariant = \"primary\",\n\tclassName,\n\ttabIndex = 0,\n\tasChild = false,\n\tchildren,\n}: FABMenuItemProps) {\n\tconst colors = MENU_ITEM_COLORS[colorVariant] ?? MENU_ITEM_COLORS.primary;\n\n\tconst { ripples, onPointerDown, removeRipple } = useRippleState({ disabled });\n\n\tconst handleClick = React.useCallback(\n\t\t(e: React.MouseEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonClick();\n\t\t},\n\t\t[disabled, onClick],\n\t);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) return;\n\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonClick();\n\t\t\t}\n\t\t},\n\t\t[disabled, onClick],\n\t);\n\n\tconst innerContent = (\n\t\t<>\n\t\t\t<TouchTarget />\n\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"relative z-10 flex items-center justify-center size-6 shrink-0 [&>svg]:w-full [&>svg]:h-full pointer-events-none\"\n\t\t\t>\n\t\t\t\t{icon}\n\t\t\t</span>\n\t\t\t{label && (\n\t\t\t\t<span className=\"relative z-10 text-base font-medium leading-none pointer-events-none\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</>\n\t);\n\n\tconst containerClassName = cn(\n\t\t\"relative inline-flex flex-row items-center\",\n\t\t\"select-none cursor-pointer overflow-hidden\",\n\t\t\"whitespace-nowrap\",\n\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-1\",\n\t\tMENU_ITEM_STYLES.size,\n\t\tMENU_ITEM_STYLES.gap,\n\t\tlabel ? MENU_ITEM_STYLES.padding : \"px-4\",\n\t\t!label && \"justify-center\",\n\t\tcolors.bg,\n\t\tcolors.text,\n\t\tdisabled && \"opacity-[0.38] pointer-events-none\",\n\t\tclassName,\n\t);\n\n\tconst containerStyle = {\n\t\ttransformOrigin: \"right\",\n\t\tborderRadius: `${MENU_ITEM_STYLES.cornerRadius}px`,\n\t};\n\n\tif (asChild) {\n\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\tchildren?: React.ReactNode;\n\t\t}>;\n\t\treturn (\n\t\t\t<m.div variants={MENU_ITEM_VARIANTS} style={containerStyle}>\n\t\t\t\t<Slot\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\taria-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t>\n\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t</Slot>\n\t\t\t</m.div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<m.div\n\t\t\trole=\"menuitem\"\n\t\t\ttabIndex={tabIndex}\n\t\t\taria-disabled={disabled ? \"true\" : undefined}\n\t\t\tdata-disabled={disabled ? \"true\" : undefined}\n\t\t\tonClick={handleClick}\n\t\t\tonPointerDown={onPointerDown}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\tvariants={MENU_ITEM_VARIANTS}\n\t\t\tstyle={containerStyle}\n\t\t\tclassName={containerClassName}\n\t\t>\n\t\t\t{innerContent}\n\t\t</m.div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// FABMenu Component\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive FAB Menu.\n *\n * Floating Action Button expansion menu. Toggling trigger button reveals vertically stacked action items.\n *\n * Full MD3 Accessibility implementation:\n *  - `role=\"menu\"` assigned to container\n *  - `role=\"menuitem\"` assigned to child action items\n *  - Focus lifecycle management: Open -> Focus first/last menu item; Close -> Restore focus to ToggleFAB\n *  - Keyboard navigation: Escape key closes menu, ArrowUp/Down navigates items, Tab moves focus.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n *\n * const items = [\n *   { id: 'share', icon: <Icon name=\"share\" />, label: 'Share', onClick: () => console.log('Share') },\n *   { id: 'edit', icon: <Icon name=\"edit\" />, label: 'Edit', onClick: () => console.log('Edit') },\n *   { id: 'delete', icon: <Icon name=\"delete\" />, label: 'Delete', disabled: true, onClick: () => {} }\n * ];\n *\n * <FABMenu\n *   expanded={open}\n *   onToggle={setOpen}\n *   aria-label=\"Quick actions\"\n *   alignment=\"center\"\n *   colorVariant=\"tertiary\"\n\n *   items={items}\n * />\n * ```\n *\n * @see https://m3.material.io/components/floating-action-button/overview\n */\nexport function FABMenu({\n\texpanded,\n\tonToggle,\n\titems,\n\tcolorVariant = \"primary\",\n\tsize = \"sm\",\n\talignment = \"end\",\n\tclassName,\n\tcloseOnBackdropClick = true,\n\tfocusLast = true,\n\t\"aria-label\": ariaLabel,\n}: FABMenuProps) {\n\tconst fabId = React.useId();\n\tconst menuId = React.useId();\n\tconst toggleRef = React.useRef<HTMLButtonElement>(null);\n\tconst itemRefs = React.useRef<(HTMLDivElement | null)[]>([]);\n\tconst [focusedIndex, setFocusedIndex] = React.useState<number>(-1);\n\n\tconst reversedItems = React.useMemo(() => [...items].reverse(), [items]);\n\n\tconst focusItem = React.useCallback((index: number) => {\n\t\tconst clampedIndex = Math.max(\n\t\t\t0,\n\t\t\tMath.min(index, itemRefs.current.length - 1),\n\t\t);\n\t\tsetFocusedIndex(clampedIndex);\n\t\titemRefs.current[clampedIndex]?.focus();\n\t}, []);\n\n\t// Track whether menu was previously open so we only return focus\n\t// to the toggle button after a user-initiated close, not on initial mount.\n\tconst wasExpandedRef = React.useRef(false);\n\n\tReact.useEffect(() => {\n\t\tif (expanded) {\n\t\t\twasExpandedRef.current = true;\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tfocusItem(focusLast ? items.length - 1 : 0);\n\t\t\t}, FOCUS_DELAY_MS);\n\t\t\treturn () => clearTimeout(timer);\n\t\t}\n\n\t\tif (wasExpandedRef.current) {\n\t\t\ttoggleRef.current?.focus();\n\t\t}\n\t\twasExpandedRef.current = false;\n\t\tsetFocusedIndex(-1);\n\t}, [expanded, focusLast, items.length, focusItem]);\n\n\tconst handleMenuKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (!expanded) return;\n\n\t\t\tconst lastIndex = items.length - 1;\n\n\t\t\tswitch (e.key) {\n\t\t\t\tcase \"Escape\":\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonToggle(false);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfocusItem(focusedIndex <= 0 ? lastIndex : focusedIndex - 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tfocusItem(focusedIndex >= lastIndex ? 0 : focusedIndex + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase \"Tab\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif (e.shiftKey) {\n\t\t\t\t\t\tfocusItem(focusedIndex <= 0 ? lastIndex : focusedIndex - 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfocusItem(focusedIndex >= lastIndex ? 0 : focusedIndex + 1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[expanded, focusedIndex, items.length, focusItem, onToggle],\n\t);\n\n\treturn (\n\t\t<LazyMotion features={domMax} strict>\n\t\t\t{expanded && closeOnBackdropClick && (\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"fixed inset-0 z-40\"\n\t\t\t\t\tonClick={() => onToggle(false)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: FAB menu container needs div, not fieldset — this is not a form group */}\n\t\t\t<div\n\t\t\t\trole=\"group\"\n\t\t\t\taria-label={ariaLabel ?? \"Actions menu\"}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed z-50 flex flex-col gap-2\",\n\t\t\t\t\tALIGNMENT_CONTAINER_CLASSES[alignment],\n\t\t\t\t\t\"*:shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonKeyDown={handleMenuKeyDown}\n\t\t\t>\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{expanded && (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tid={menuId}\n\t\t\t\t\t\t\trole=\"menu\"\n\t\t\t\t\t\t\taria-labelledby={fabId}\n\t\t\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\t\t\tvariants={MENU_CONTAINER_VARIANTS}\n\t\t\t\t\t\t\tinitial=\"closed\"\n\t\t\t\t\t\t\tanimate=\"open\"\n\t\t\t\t\t\t\texit=\"closed\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-col-reverse gap-2\",\n\t\t\t\t\t\t\t\tALIGNMENT_ITEMS_CLASSES[alignment],\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{reversedItems.map((item, reversedIndex) => {\n\t\t\t\t\t\t\t\tconst originalIndex = items.length - 1 - reversedIndex;\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\t\t\tvariants={MENU_ITEM_VARIANTS}\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\ttransformOrigin:\n\t\t\t\t\t\t\t\t\t\t\t\tALIGNMENT_TRANSFORM_ORIGIN[alignment] ?? \"right\",\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tref={(el) => {\n\t\t\t\t\t\t\t\t\t\t\titemRefs.current[originalIndex] = el;\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<FABMenuItem\n\t\t\t\t\t\t\t\t\t\t\ticon={item.icon}\n\t\t\t\t\t\t\t\t\t\t\tlabel={item.label}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tif (!item.disabled) {\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.onClick();\n\t\t\t\t\t\t\t\t\t\t\t\t\tonToggle(false);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\t\t\t\t\t\t\t\tclassName={item.className}\n\t\t\t\t\t\t\t\t\t\t\ttabIndex={expanded ? 0 : -1}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</m.div>\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.div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t<ToggleFAB\n\t\t\t\t\tref={toggleRef}\n\t\t\t\t\tid={fabId}\n\t\t\t\t\texpanded={expanded}\n\t\t\t\t\tonToggle={onToggle}\n\t\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\t\tsize={size}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tariaLabel ?? (expanded ? \"Close actions menu\" : \"Open actions menu\")\n\t\t\t\t\t}\n\t\t\t\t\taria-controls={menuId}\n\t\t\t\t\ticon={defaultFabIcon}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</LazyMotion>\n\t);\n}\n","/**\n * @file icon-button.tsx\n *\n * MD3 Expressive Icon Button component.\n *\n * An icon-only button with shape morphing, ripple effect, loading state,\n * and toggle variant. Requires `aria-label` for accessibility since there\n * is no visible text label.\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { MD3SlotWidth } from \"../../../types/md3\";\nimport { LoadingIndicator } from \"../../loading-indicator\";\nimport { ProgressIndicator } from \"../../progress-indicator\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport {\n\tICON_SPAN_VARIANTS,\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_FAST,\n} from \"../../shared/constants\";\nimport { TouchTarget } from \"../../shared/touch-target\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Design Tokens\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst SIZE_HEIGHT_STYLES: Record<string, string> = {\n\txs: \"h-8\",\n\tsm: \"h-10\",\n\tmd: \"h-14\",\n\tlg: \"h-24\",\n\txl: \"h-[8.5rem]\",\n};\n\n/**\n * Per-size container width variants (Tailwind utility classes).\n * MD3 Expressive width variants: default (1:1), narrow, wide.\n * @internal\n */\nconst WIDTH_SIZE_STYLES: Record<string, Record<string, string>> = {\n\txs: {\n\t\tdefault: \"w-8\",\n\t\tnarrow: \"w-8\",\n\t\twide: \"w-12\",\n\t},\n\tsm: {\n\t\tdefault: \"w-10\",\n\t\tnarrow: \"w-12\",\n\t\twide: \"w-[3.25rem]\",\n\t},\n\tmd: {\n\t\tdefault: \"w-14\",\n\t\tnarrow: \"w-12\",\n\t\twide: \"w-[4.5rem]\",\n\t},\n\tlg: {\n\t\tdefault: \"w-24\",\n\t\tnarrow: \"w-16\",\n\t\twide: \"w-32\",\n\t},\n\txl: {\n\t\tdefault: \"w-[8.5rem]\",\n\t\tnarrow: \"w-[6.5rem]\",\n\t\twide: \"w-[11.5rem]\",\n\t},\n};\n\n/**\n * Per-size icon dimensions — Tailwind class + pixel value.\n * Single source of truth to keep icon class and LoadingIndicator size in sync.\n * @internal\n */\nconst SIZE_ICON: Record<string, { cls: string; px: number }> = {\n\txs: { cls: \"size-5\", px: 20 },\n\tsm: { cls: \"size-6\", px: 24 },\n\tmd: { cls: \"size-6\", px: 24 },\n\tlg: { cls: \"size-8\", px: 32 },\n\txl: { cls: \"size-10\", px: 40 },\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Shape Morphing — Border Radius Map\n// Keys: round=CornerFull, square=CornerMedium–XL, pressed, selectedRound, selectedSquare\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Per-size shape morphing radius configuration for all interaction states.\n *\n * - `round` / `square`: idle border-radius per shape variant.\n * - `pressed`: compressed radius on whileTap.\n * - `selectedRound` / `selectedSquare`: radius when toggle is selected\n *   (shape flips — round selected → selectedRound which is squarer).\n *\n * @internal\n */\nconst RADIUS_MAP: Record<\n\tstring,\n\t{\n\t\tround: number;\n\t\tsquare: number;\n\t\tpressed: number;\n\t\tselectedRound: number;\n\t\tselectedSquare: number;\n\t}\n> = {\n\txs: {\n\t\tround: 16,\n\t\tsquare: 12,\n\t\tpressed: 8,\n\t\tselectedRound: 12,\n\t\tselectedSquare: 16,\n\t},\n\tsm: {\n\t\tround: 20,\n\t\tsquare: 12,\n\t\tpressed: 8,\n\t\tselectedRound: 12,\n\t\tselectedSquare: 20,\n\t},\n\tmd: {\n\t\tround: 28,\n\t\tsquare: 16,\n\t\tpressed: 12,\n\t\tselectedRound: 16,\n\t\tselectedSquare: 28,\n\t},\n\tlg: {\n\t\tround: 48,\n\t\tsquare: 28,\n\t\tpressed: 16,\n\t\tselectedRound: 28,\n\t\tselectedSquare: 48,\n\t},\n\txl: {\n\t\tround: 68,\n\t\tsquare: 28,\n\t\tpressed: 16,\n\t\tselectedRound: 28,\n\t\tselectedSquare: 68,\n\t},\n};\n\n/**\n * Outline border width per size for the `outlined` color style.\n * XS/SM/MD = 1dp, LG = 2dp, XL = 3dp.\n * @internal\n */\nconst SIZE_OUTLINE_WIDTH: Record<string, string> = {\n\txs: \"border\",\n\tsm: \"border\",\n\tmd: \"border\",\n\tlg: \"border-2\",\n\txl: \"border-[3px]\",\n};\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Color Variants\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Color-role class pairs for each `colorStyle` × selection state combination.\n * @internal\n */\nconst colorStyles = {\n\tstandard: {\n\t\tdefault:\n\t\t\t\"text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected: \"text-m3-primary hover:bg-m3-primary/8 active:bg-m3-primary/12\",\n\t},\n\tfilled: {\n\t\tdefault:\n\t\t\t\"bg-m3-surface-container text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected:\n\t\t\t\"bg-m3-primary text-m3-on-primary hover:brightness-95 active:brightness-90\",\n\t},\n\ttonal: {\n\t\tdefault:\n\t\t\t\"bg-m3-secondary-container text-m3-on-secondary-container hover:bg-m3-on-secondary-container/8 active:bg-m3-on-secondary-container/12\",\n\t\tselected:\n\t\t\t\"bg-m3-secondary text-m3-on-secondary hover:brightness-95 active:brightness-90\",\n\t},\n\toutlined: {\n\t\tdefault:\n\t\t\t\"border-m3-outline-variant text-m3-on-surface-variant hover:bg-m3-on-surface-variant/8 active:bg-m3-on-surface-variant/12\",\n\t\tselected:\n\t\t\t\"bg-m3-inverse-surface text-m3-inverse-on-surface border-transparent hover:brightness-95 active:brightness-90\",\n\t},\n};\n\n/**\n * Base Tailwind classes shared by all icon button variants.\n * Separated from CVA to keep bundle output lean (no runtime variant lookups needed here).\n * @internal\n */\nconst baseIconButtonClasses = [\n\t\"relative shrink-0 inline-flex items-center justify-center\",\n\t\"select-none cursor-pointer\",\n\t\"transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200\",\n\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2\",\n\t\"disabled:pointer-events-none disabled:opacity-[0.38]\",\n];\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype MotionButtonProps = Omit<HTMLMotionProps<\"button\">, \"children\" | \"color\">;\n\n/**\n * Base props for the Icon Button component.\n *\n * @see {@link IconButtonProps} for the full discriminated union.\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport interface BaseIconButtonProps extends MotionButtonProps {\n\t/**\n\t * Visual color style following MD3 color roles.\n\t * @default \"standard\"\n\t */\n\tcolorStyle?: \"standard\" | \"filled\" | \"tonal\" | \"outlined\";\n\t/**\n\t * Button container size.\n\t * Sizes: XS=32dp, SM=40dp, MD=56dp, LG=96dp, XL=136dp.\n\t * @default \"sm\"\n\t */\n\tsize?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\t/**\n\t * Container width ratio per MD3 Expressive icon button specification.\n\t * Controls horizontal compression/expansion independent of `size`.\n\t * - `\"narrow\"` – compressed aspect ratio, suited for dense toolbars.\n\t * - `\"default\"` – 1:1 square/round aspect ratio (standard icon button).\n\t * - `\"wide\"` – extended width, for icon buttons with more visual weight.\n\t *\n\t * Note: This prop controls the width-to-height ratio, not the physical size scale.\n\t * Use `size` to control the container height/diameter.\n\t * Use `fullWidth` (Button) for stretching to container width — different concept.\n\t * @default \"default\"\n\t */\n\twidth?: MD3SlotWidth;\n\t/**\n\t * Container shape controlling border-radius morphing.\n\t * - `round`: fully circular (CornerFull).\n\t * - `square`: rounded square (CornerMedium–CornerExtraLarge per size).\n\t * @default \"round\"\n\t */\n\tshape?: \"round\" | \"square\";\n\t/**\n\t * An optional icon to display when the icon button is in a selected toggle state (`variant=\"toggle\"` and `selected={true}`).\n\t * If omitted, falls back to `children`.\n\t */\n\tselectedIcon?: React.ReactNode;\n\t/**\n\t * When `true`, replaces the icon with an animated loading indicator.\n\t * Interaction is blocked and `aria-busy` is set.\n\t * @default false\n\t */\n\tloading?: boolean;\n\t/**\n\t * Spinner style shown while `loading={true}`.\n\t * @default \"loading-indicator\"\n\t */\n\tloadingVariant?: \"loading-indicator\" | \"circular\";\n\t/** Explicit icon size override in px */\n\ticonSize?: number | \"inherit\";\n\t/** Icon content — typically a single SVG icon component. */\n\tchildren: React.ReactNode;\n\t/**\n\t * Accessible label — **REQUIRED** because icon buttons have no visible text.\n\t *\n\t * @example \"Close\", \"Add to favourites\", \"Toggle dark mode\"\n\t * @see https://m3.material.io/components/icon-buttons/accessibility\n\t */\n\t\"aria-label\": string;\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 * Complete `IconButton` props — discriminated union that enforces\n * `selected` is only valid with `variant=\"toggle\"`.\n *\n * @example\n * ```tsx\n * // Standard\n * <IconButton aria-label=\"Close\" onClick={handleClose}>\n *   <XIcon />\n * </IconButton>\n *\n * // Toggle\n * <IconButton\n *   variant=\"toggle\"\n *   selected={isLiked}\n *   aria-label={isLiked ? \"Unlike\" : \"Like\"}\n *   colorStyle=\"filled\"\n *   onClick={() => setIsLiked(!isLiked)}\n * >\n *   <HeartIcon />\n * </IconButton>\n * ```\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport type IconButtonProps = BaseIconButtonProps &\n\t(\n\t\t| { variant?: \"default\"; selected?: never }\n\t\t| { variant: \"toggle\"; selected: boolean }\n\t);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Resolves the animated border-radius based on shape and toggle state.\n *\n * @param radiusConfig - The radius map entry for the current size.\n * @param shape - Current shape variant.\n * @param isToggle - Whether the button is a toggle variant.\n * @param isSelected - Current toggle selection state.\n * @returns Border radius in px.\n * @internal\n */\nfunction resolveAnimateRadius(\n\tradiusConfig: (typeof RADIUS_MAP)[string],\n\tshape: \"round\" | \"square\",\n\tisToggle: boolean,\n\tisSelected: boolean,\n): number {\n\tif (isToggle && isSelected) {\n\t\treturn shape === \"round\"\n\t\t\t? radiusConfig.selectedRound\n\t\t\t: radiusConfig.selectedSquare;\n\t}\n\treturn shape === \"round\" ? radiusConfig.round : radiusConfig.square;\n}\n\n/**\n * Returns extra disabled-state classes specific to background-bearing color styles.\n *\n * `filled` and `tonal` need a dimmed background; `outlined` needs a dimmed border.\n * `standard` only dims the icon colour (handled by global `disabled:opacity-[0.38]`).\n *\n * @param colorStyle - Current color style.\n * @returns Tailwind disabled-state override classes.\n * @internal\n */\nfunction resolveDisabledBgClass(colorStyle: string): string {\n\tif (colorStyle === \"filled\" || colorStyle === \"tonal\") {\n\t\treturn \"disabled:bg-m3-on-surface/12 disabled:text-m3-on-surface/[0.38]\";\n\t}\n\tif (colorStyle === \"outlined\") {\n\t\treturn \"disabled:text-m3-on-surface/[0.38] disabled:border-m3-on-surface/[0.12]\";\n\t}\n\treturn \"disabled:text-m3-on-surface/[0.38]\";\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Component\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst IconButtonComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tIconButtonProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"default\",\n\t\t\tcolorStyle = \"standard\",\n\t\t\tsize = \"sm\",\n\t\t\twidth = \"default\",\n\t\t\tshape = \"round\",\n\t\t\tselected,\n\t\t\tselectedIcon,\n\t\t\tloading = false,\n\t\t\tloadingVariant = \"loading-indicator\",\n\t\t\ticonSize,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonKeyDown,\n\t\t\t\"aria-label\": ariaLabel,\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;\n\n\t\t// Derived display values — memoized to avoid recalculation on every render\n\t\tconst resolvedColorClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tisSelected\n\t\t\t\t\t? colorStyles[colorStyle].selected\n\t\t\t\t\t: colorStyles[colorStyle].default,\n\t\t\t[isSelected, colorStyle],\n\t\t);\n\n\t\tconst outlineWidthClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcolorStyle === \"outlined\" && !isSelected\n\t\t\t\t\t? (SIZE_OUTLINE_WIDTH[size] ?? \"border\")\n\t\t\t\t\t: \"\",\n\t\t\t[colorStyle, isSelected, size],\n\t\t);\n\n\t\tconst disabledBgClass = React.useMemo(\n\t\t\t() => resolveDisabledBgClass(colorStyle),\n\t\t\t[colorStyle],\n\t\t);\n\n\t\tconst radiusConfig = RADIUS_MAP[size] ?? RADIUS_MAP.sm;\n\t\tconst animateRadius = resolveAnimateRadius(\n\t\t\tradiusConfig,\n\t\t\tshape,\n\t\t\tisToggle,\n\t\t\tisSelected,\n\t\t);\n\t\tconst pressedRadius = radiusConfig.pressed;\n\n\t\tconst sizeIcon = SIZE_ICON[size] ?? SIZE_ICON.sm;\n\t\tconst iconClass = sizeIcon.cls;\n\t\tconst defaultIconPx = sizeIcon.px;\n\t\tconst iconPx = iconSize ?? defaultIconPx;\n\t\tconst isCustomSize = iconSize != null && iconSize !== \"inherit\";\n\n\t\tconst heightClass = SIZE_HEIGHT_STYLES[size] ?? SIZE_HEIGHT_STYLES.sm;\n\t\tconst widthClass =\n\t\t\t(WIDTH_SIZE_STYLES[size] ?? WIDTH_SIZE_STYLES.sm)[width] ??\n\t\t\tWIDTH_SIZE_STYLES.sm.default;\n\n\t\t// xs/sm need 48dp touch target (WCAG 2.5.5 + MD3 a11y)\n\t\tconst needsTouchTarget = size === \"xs\" || size === \"sm\";\n\n\t\t// ── Ripple ───────────────────────────────────────────────────────\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) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\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\t// Manually trigger click for Enter/Space — needed because JSDOM does not\n\t\t\t\t// fire native click events from keyboard, and some custom scroll containers\n\t\t\t\t// suppress the default browser behaviour.\n\t\t\t\tif ((e.key === \"Enter\" || e.key === \" \") && onClick) {\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 innerContent = (\n\t\t\t<>\n\t\t\t\t{/* Extended 48dp touch target for xs/sm (WCAG 2.5.5) */}\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"loading\"\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\ticonSize != null ? undefined : iconClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tisCustomSize\n\t\t\t\t\t\t\t\t\t? { width: `${iconSize}px`, height: `${iconSize}px` }\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{loadingVariant === \"loading-indicator\" ? (\n\t\t\t\t\t\t\t\t<LoadingIndicator\n\t\t\t\t\t\t\t\t\tsize={typeof iconPx === \"number\" ? iconPx : defaultIconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\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<ProgressIndicator\n\t\t\t\t\t\t\t\t\tvariant=\"circular\"\n\t\t\t\t\t\t\t\t\tsize={typeof iconPx === \"number\" ? iconPx : defaultIconPx}\n\t\t\t\t\t\t\t\t\tcolor=\"currentColor\"\n\t\t\t\t\t\t\t\t\ttrackColor=\"transparent\"\n\t\t\t\t\t\t\t\t\taria-label=\"Loading\"\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.span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey={isSelected && selectedIcon ? \"selected-content\" : \"content\"}\n\t\t\t\t\t\t\t{...ICON_SPAN_VARIANTS}\n\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 [&_svg]:w-full [&_svg]:h-full [&_.md-icon]:text-[length:inherit]\",\n\t\t\t\t\t\t\t\ticonSize != null ? undefined : iconClass,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tfontSize: typeof iconPx === \"number\" ? `${iconPx}px` : iconPx,\n\t\t\t\t\t\t\t\twidth: isCustomSize ? `${iconSize}px` : undefined,\n\t\t\t\t\t\t\t\theight: isCustomSize ? `${iconSize}px` : undefined,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{isSelected && selectedIcon\n\t\t\t\t\t\t\t\t? selectedIcon\n\t\t\t\t\t\t\t\t: asChild\n\t\t\t\t\t\t\t\t\t? (\n\t\t\t\t\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\t\t\t).props.children\n\t\t\t\t\t\t\t\t\t: children}\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</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tbaseIconButtonClasses,\n\t\t\tresolvedColorClass,\n\t\t\toutlineWidthClass,\n\t\t\tdisabledBgClass,\n\t\t\t\"overflow-hidden\",\n\t\t\theightClass,\n\t\t\twidthClass,\n\t\t\tloading && \"pointer-events-none opacity-75 cursor-not-allowed\",\n\t\t\tclassName,\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\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...(style 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={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.button\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-pressed={isToggle ? isSelected : undefined}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-busy={loading || undefined}\n\t\t\t\t\taria-disabled={loading || restProps.disabled}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\tstyle={style}\n\t\t\t\t\tanimate={{ borderRadius: animateRadius }}\n\t\t\t\t\twhileTap={{ borderRadius: pressedRadius }}\n\t\t\t\t\ttransition={{ borderRadius: SPRING_TRANSITION_FAST }}\n\t\t\t\t\tclassName={containerClassName}\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\nIconButtonComponent.displayName = \"IconButton\";\n\n/**\n * MD3 Expressive Icon Button.\n *\n * An icon-only button with spring shape morphing, ripple effect, loading state support,\n * and an optional toggle variant. Compliant with MD3 Expressive sizing and WCAG 2.5.5\n * (touch target minimum for XS and SM sizes).\n *\n * @remarks\n * - `aria-label` is **required** — icon buttons have no visible text label.\n * - `variant=\"toggle\"` requires `selected: boolean`.\n * - Touch target is automatically extended to 48dp for `xs` and `sm` sizes.\n *\n * @example\n * ```tsx\n * <IconButton aria-label=\"Close\" onClick={handleClose}>\n *   <XIcon />\n * </IconButton>\n *\n * <IconButton\n *   variant=\"toggle\"\n *   selected={isBookmarked}\n *   aria-label={isBookmarked ? \"Remove bookmark\" : \"Bookmark\"}\n *   colorStyle=\"filled\"\n *   onClick={toggleBookmark}\n * >\n *   <BookmarkIcon />\n * </IconButton>\n * ```\n *\n * @see https://m3.material.io/components/icon-buttons/overview\n */\nexport const IconButton = React.memo(IconButtonComponent);\n","import * as React from \"react\";\nimport type { SplitButtonSize, SplitButtonVariant } from \"./split-button-types\";\n\nexport interface SplitButtonContextValue {\n\tsize?: SplitButtonSize;\n\tvariant?: SplitButtonVariant;\n}\n\nexport const SplitButtonContext =\n\tReact.createContext<SplitButtonContextValue | null>(null);\n\nexport function useSplitButtonContext() {\n\treturn React.useContext(SplitButtonContext);\n}\n","import * as React from \"react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { SplitButtonContext } from \"./split-button-context\";\nimport type {\n\tSplitButtonLayoutProps,\n\tSplitButtonSize,\n\tSplitButtonVariant,\n} from \"./split-button-types\";\n\n/**\n * SplitButtonLayout renders a split button group consisting of a leading\n * action button and a trailing menu toggle button.\n *\n * @example\n * <SplitButtonLayout\n *   leadingButton={<SplitButtonLeading onClick={handleSave}>Save</SplitButtonLeading>}\n *   trailingButton={\n *     <SplitButtonTrailing\n *       checked={open}\n *       onCheckedChange={setOpen}\n *       aria-label=\"More save options\"\n *     />\n *   }\n * />\n */\nconst SplitButtonLayoutComponent = React.forwardRef<\n\tHTMLDivElement,\n\tSplitButtonLayoutProps\n>(\n\t(\n\t\t{\n\t\t\tleadingButton,\n\t\t\ttrailingButton,\n\t\t\tclassName,\n\t\t\tspacing = 2,\n\t\t\tvariant: layoutVariant,\n\t\t\tsize: layoutSize,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\t// Extract size and variant from the leading button props\n\t\tconst leadingProps = React.isValidElement<{\n\t\t\tsize?: SplitButtonSize;\n\t\t\tvariant?: SplitButtonVariant;\n\t\t}>(leadingButton)\n\t\t\t? leadingButton.props\n\t\t\t: {};\n\n\t\tconst size = layoutSize || leadingProps.size;\n\t\tconst variant = layoutVariant || leadingProps.variant;\n\n\t\tconst contextValue = React.useMemo(\n\t\t\t() => ({\n\t\t\t\tsize,\n\t\t\t\tvariant,\n\t\t\t}),\n\t\t\t[size, variant],\n\t\t);\n\n\t\treturn (\n\t\t\t<SplitButtonContext.Provider value={contextValue}>\n\t\t\t\t{/* biome-ignore lint/a11y/useSemanticElements: Split button group needs div with role=\"group\", not fieldset */}\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\trole=\"group\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"inline-flex flex-row items-stretch justify-center w-fit shrink-0 relative\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ gap: `${spacing}px`, ...restProps.style }}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{leadingButton}\n\t\t\t\t\t{trailingButton}\n\t\t\t\t</div>\n\t\t\t</SplitButtonContext.Provider>\n\t\t);\n\t},\n);\n\nSplitButtonLayoutComponent.displayName = \"SplitButtonLayout\";\n\nexport const SplitButtonLayout = React.memo(SplitButtonLayoutComponent);\n","import { domMax, type HTMLMotionProps, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport interface StateLayerProps extends HTMLMotionProps<\"div\"> {\n\thovered?: boolean;\n\tfocused?: boolean;\n\tpressed?: boolean;\n}\n\n/**\n * StateLayer provides a standardized visual overlay for interactive states (hover, focus, pressed)\n * following MD3 specifications.\n */\nexport const StateLayer = React.forwardRef<HTMLDivElement, StateLayerProps>(\n\t({ className, hovered, focused, pressed, ...props }, ref) => {\n\t\t// Determine opacity based on MD3 specs\n\t\tlet opacity = 0;\n\t\tif (pressed) {\n\t\t\topacity = 0.12;\n\t\t} else if (focused) {\n\t\t\topacity = 0.1;\n\t\t} else if (hovered) {\n\t\t\topacity = 0.08;\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<m.div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute inset-0 bg-current pointer-events-none rounded-[inherit]\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tanimate={{ opacity }}\n\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nStateLayer.displayName = \"StateLayer\";\n","import { cornerRadius } from \"@bug-on/m3-tokens\";\nimport type { Transition } from \"motion/react\";\nimport { FAST_EFFECTS_SPRING } from \"../../shared/constants\";\nimport type {\n\tSplitButtonSize,\n\tSplitButtonSizeTokens,\n} from \"./split-button-types\";\n\n// Standard (non-expressive) spring for chevron rotation per M3 spec\nexport const SPLIT_BUTTON_CHEVRON_SPRING: Transition = {\n\ttype: \"spring\",\n\tstiffness: 200,\n\tdamping: 20,\n\tmass: 1,\n};\n\n// Use fast effects spring (critically damped, no bounce) for border radius morphing\nexport const SPLIT_BUTTON_RADIUS_SPRING: Transition = FAST_EFFECTS_SPRING;\n\n/**\n * Split Button Tokens (Expressive)\n * Source: SplitButtonXSmallTokens.kt, SplitButtonSmallTokens.kt,\n *         SplitButtonMediumTokens.kt, SplitButtonLargeTokens.kt,\n *         SplitButtonXLargeTokens.kt (Android/Compose reference)\n */\nexport const SPLIT_BUTTON_TOKENS = {\n\txs: {\n\t\tcontainerHeight: 32, // XSmallTokens: ContainerHeight = 32.0.dp\n\t\tbetweenSpace: 2, // XSmallTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.small, // 8dp\n\t\t\tpressed: cornerRadius.small, // 8dp\n\t\t},\n\t\touterCornerPercent: 50, // XSmallTokens: OuterCornerCornerSizePercent = 50.0f → full pill\n\t\tleadingPadding: {\n\t\t\tstart: 12, // XSmallTokens: LeadingButtonLeadingSpace = 12.0.dp\n\t\t\tend: 10, // XSmallTokens: LeadingButtonTrailingSpace = 10.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 13, // XSmallTokens: TrailingButtonLeadingSpace = 13.0.dp\n\t\t\tend: 13, // XSmallTokens: TrailingButtonTrailingSpace = 13.0.dp\n\t\t},\n\t\ttrailingIconSize: 22, // XSmallTokens: TrailingIconSize = 22.0.dp\n\t\topticalCenterOffset: -1, // Spec: XS = -1dp from center\n\t},\n\tsm: {\n\t\tcontainerHeight: 40, // SmallTokens: ContainerHeight = 40.0.dp\n\t\tbetweenSpace: 2, // SmallTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.medium, // 12dp\n\t\t\tpressed: cornerRadius.medium, // 12dp\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 16, // SmallTokens: LeadingButtonLeadingSpace = 16.0.dp\n\t\t\tend: 12, // SmallTokens: LeadingButtonTrailingSpace = 12.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 13, // SmallTokens: TrailingButtonLeadingSpace = 13.0.dp\n\t\t\tend: 13, // SmallTokens: TrailingButtonTrailingSpace = 13.0.dp\n\t\t},\n\t\ttrailingIconSize: 22, // SmallTokens: TrailingIconSize = 22.0.dp\n\t\topticalCenterOffset: -1, // Spec: S = -1dp from center\n\t},\n\tmd: {\n\t\tcontainerHeight: 56, // MediumTokens: ContainerHeight = 56.0.dp\n\t\tbetweenSpace: 2, // MediumTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.extraSmall, // 4dp\n\t\t\thovered: cornerRadius.medium, // 12dp\n\t\t\tpressed: cornerRadius.medium, // 12dp\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 24, // MediumTokens: LeadingButtonLeadingSpace = 24.0.dp\n\t\t\tend: 24, // MediumTokens: LeadingButtonTrailingSpace = 24.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 15, // MediumTokens: TrailingButtonLeadingSpace = 15.0.dp\n\t\t\tend: 15, // MediumTokens: TrailingButtonTrailingSpace = 15.0.dp\n\t\t},\n\t\ttrailingIconSize: 26, // MediumTokens: TrailingIconSize = 26.0.dp\n\t\topticalCenterOffset: -2, // Spec: M = -2dp from center\n\t},\n\tlg: {\n\t\tcontainerHeight: 96, // LargeTokens: ContainerHeight = 96.0.dp\n\t\tbetweenSpace: 2, // LargeTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.small, // 8dp\n\t\t\thovered: 28, // LargeTokens: InnerHoveredCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t\tpressed: 28, // LargeTokens: InnerPressedCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 48, // LargeTokens: LeadingButtonLeadingSpace = 48.0.dp\n\t\t\tend: 48, // LargeTokens: LeadingButtonTrailingSpace = 48.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 29, // LargeTokens: TrailingButtonLeadingSpace = 29.0.dp\n\t\t\tend: 29, // LargeTokens: TrailingButtonTrailingSpace = 29.0.dp\n\t\t},\n\t\ttrailingIconSize: 38, // LargeTokens: TrailingIconSize = 38.0.dp\n\t\topticalCenterOffset: -3, // Spec: L = -3dp from center\n\t},\n\txl: {\n\t\tcontainerHeight: 136, // XLargeTokens: ContainerHeight = 136.0.dp\n\t\tbetweenSpace: 2, // XLargeTokens: BetweenSpace = 2.0.dp\n\t\tinnerCorner: {\n\t\t\tdefault: cornerRadius.medium, // 12dp\n\t\t\thovered: 28, // XLargeTokens: InnerHoveredCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t\tpressed: 28, // XLargeTokens: InnerPressedCornerCornerSize = CornerValueLargeIncreased (28dp)\n\t\t},\n\t\touterCornerPercent: 50,\n\t\tleadingPadding: {\n\t\t\tstart: 64, // XLargeTokens: LeadingButtonLeadingSpace = 64.0.dp\n\t\t\tend: 64, // XLargeTokens: LeadingButtonTrailingSpace = 64.0.dp\n\t\t},\n\t\ttrailingPadding: {\n\t\t\tstart: 43, // XLargeTokens: TrailingButtonLeadingSpace = 43.0.dp\n\t\t\tend: 43, // XLargeTokens: TrailingButtonTrailingSpace = 43.0.dp\n\t\t},\n\t\ttrailingIconSize: 50, // XLargeTokens: TrailingIconSize = 50.0.dp\n\t\topticalCenterOffset: -6, // Spec: XL = -6dp from center\n\t},\n} as const satisfies Record<SplitButtonSize, SplitButtonSizeTokens>;\n\n/**\n * Leading icon size per size variant.\n * From Compose ButtonDefaults.iconSizeFor logic.\n */\nexport const LEADING_ICON_SIZE_FOR_SIZE = {\n\txs: 18,\n\tsm: 20,\n\tmd: 24,\n\tlg: 32,\n\txl: 40,\n} as const;\n","import { cva } from \"class-variance-authority\";\n\n/**\n * Size variants for the Split Button components.\n * These map to the MD3 Expressive container heights.\n */\nconst splitButtonSizeVariants = {\n\txs: \"h-[32px] min-h-[32px]\",\n\tsm: \"h-[40px] min-h-[40px]\",\n\tmd: \"h-[56px] min-h-[56px]\",\n\tlg: \"h-[96px] min-h-[96px]\",\n\txl: \"h-[136px] min-h-[136px]\",\n};\n\n/**\n * Color variants for the Split Button components using CVA.\n */\nexport const splitButtonVariants = cva(\n\t\"group relative w-fit shrink-0 inline-flex flex-row items-center justify-center whitespace-nowrap select-none cursor-pointer transition-[background-color,color,border-color,box-shadow,opacity,filter] duration-200 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-m3-primary z-10 overflow-hidden\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tfilled: \"bg-m3-primary text-m3-on-primary\",\n\t\t\t\ttonal: \"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\t\t\televated:\n\t\t\t\t\t\"bg-m3-surface-container-low text-m3-primary shadow-md hover:shadow-lg\",\n\t\t\t\toutlined: \"bg-transparent text-m3-primary border border-m3-outline\",\n\t\t\t},\n\t\t\tsize: splitButtonSizeVariants,\n\t\t\tdisabled: {\n\t\t\t\ttrue: \"pointer-events-none\",\n\t\t\t\tfalse: \"\",\n\t\t\t},\n\t\t},\n\t\tcompoundVariants: [\n\t\t\t{\n\t\t\t\tvariant: \"filled\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"tonal\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38]\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"elevated\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"bg-m3-on-surface/10 text-m3-on-surface/[0.38] shadow-none\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tvariant: \"outlined\",\n\t\t\t\tdisabled: true,\n\t\t\t\tclassName: \"text-m3-on-surface/[0.38] border-m3-on-surface/[0.12]\",\n\t\t\t},\n\t\t],\n\t\tdefaultVariants: {\n\t\t\tvariant: \"filled\",\n\t\t\tsize: \"sm\",\n\t\t\tdisabled: false,\n\t\t},\n\t},\n);\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { BUTTON_TYPOGRAPHY_TOKENS } from \"../button/button-tokens\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tLEADING_ICON_SIZE_FOR_SIZE,\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonLeadingProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonLeadingComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonLeadingProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\ticon,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tasChild = false,\n\t\t\tonClick,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\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 tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst typographyClass =\n\t\t\tBUTTON_TYPOGRAPHY_TOKENS[actualSize] ?? BUTTON_TYPOGRAPHY_TOKENS.sm;\n\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\t// Outer corner is always a full pill (50% of height)\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Format: TL TR BR BL\n\t\t// Left outer corners are fully rounded, right inner corners animate\n\t\tconst borderRadius = `${outerRadius}px ${innerCornerRadius}px ${innerCornerRadius}px ${outerRadius}px`;\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (disabled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.(e);\n\t\t\t},\n\t\t\t[disabled, onClick],\n\t\t);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst leadingIconSize = LEADING_ICON_SIZE_FOR_SIZE[actualSize];\n\n\t\tconst labelContent = asChild\n\t\t\t? (\n\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t}>\n\t\t\t\t).props.children\n\t\t\t: children;\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<StateLayer\n\t\t\t\t\thovered={isHovered}\n\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\tpressed={isPressed}\n\t\t\t\t/>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t{icon && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full overflow-hidden [&_.md-icon]:text-[length:inherit]!\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontSize: leadingIconSize,\n\t\t\t\t\t\t\twidth: leadingIconSize,\n\t\t\t\t\t\t\theight: leadingIconSize,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t{labelContent && (\n\t\t\t\t\t<span className=\"inline-flex items-center justify-center gap-[inherit]\">\n\t\t\t\t\t\t{labelContent}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tsplitButtonVariants({\n\t\t\t\tvariant: actualVariant,\n\t\t\t\tsize: actualSize,\n\t\t\t\tdisabled,\n\t\t\t}),\n\t\t\t\"gap-2\",\n\t\t\ttypographyClass,\n\t\t\tclassName,\n\t\t);\n\n\t\tconst mergedStyle = {\n\t\t\tpaddingInlineStart: tokens.leadingPadding.start,\n\t\t\tpaddingInlineEnd: tokens.leadingPadding.end,\n\t\t\tborderRadius,\n\t\t\t...(style as React.CSSProperties),\n\t\t};\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{asChild ? (\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tdata-split-button-part=\"leading\"\n\t\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Slot>\n\t\t\t\t) : (\n\t\t\t\t\t<m.button\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tdata-split-button-part=\"leading\"\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpaddingInlineStart: tokens.leadingPadding.start,\n\t\t\t\t\t\t\tpaddingInlineEnd: tokens.leadingPadding.end,\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t</m.button>\n\t\t\t\t)}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonLeadingComponent.displayName = \"SplitButtonLeading\";\n\nexport const SplitButtonLeading = React.memo(SplitButtonLeadingComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => <SplitButtonLeading ref={ref} variant=\"filled\" {...props} />);\nFilledSplitButtonLeading.displayName = \"FilledSplitButtonLeading\";\n\nexport const TonalSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => <SplitButtonLeading ref={ref} variant=\"tonal\" {...props} />);\nTonalSplitButtonLeading.displayName = \"TonalSplitButtonLeading\";\n\nexport const ElevatedSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonLeading ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonLeading.displayName = \"ElevatedSplitButtonLeading\";\n\nexport const OutlinedSplitButtonLeading = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonLeadingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonLeading ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonLeading.displayName = \"OutlinedSplitButtonLeading\";\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { domMax, LazyMotion, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Icon } from \"../../icon\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tSPLIT_BUTTON_CHEVRON_SPRING,\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonTrailingProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonTrailingComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonTrailingProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\tchecked,\n\t\t\tonCheckedChange,\n\t\t\ticon,\n\t\t\tdisabled,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-haspopup\": ariaHaspopup = \"menu\",\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\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 tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst prefersReducedMotion = useReducedMotion();\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Format: TL TR BR BL\n\t\t// If checked (menu open), it morphs into a full circle (pill)\n\t\t// If unchecked, the left inner corners are animated, right outer are pill\n\t\tconst borderRadius = checked\n\t\t\t? `${outerRadius}px ${outerRadius}px ${outerRadius}px ${outerRadius}px`\n\t\t\t: `${innerCornerRadius}px ${outerRadius}px ${outerRadius}px ${innerCornerRadius}px`;\n\n\t\tconst handleToggle = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tonCheckedChange(!checked);\n\t\t\t}\n\t\t}, [disabled, checked, onCheckedChange]);\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst innerContent = (\n\t\t\t<>\n\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t<StateLayer\n\t\t\t\t\thovered={isHovered}\n\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\tpressed={isPressed}\n\t\t\t\t/>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t<m.div\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\trotate: checked ? 180 : 0,\n\t\t\t\t\t\tx: checked ? 0 : tokens.opticalCenterOffset,\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tprefersReducedMotion ? { duration: 0 } : SPLIT_BUTTON_CHEVRON_SPRING\n\t\t\t\t\t}\n\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: tokens.trailingIconSize,\n\t\t\t\t\t\theight: tokens.trailingIconSize,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{icon ?? (\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tname=\"arrow_drop_down\"\n\t\t\t\t\t\t\tsize={tokens.trailingIconSize}\n\t\t\t\t\t\t\topticalSize={24}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</m.div>\n\t\t\t</>\n\t\t);\n\n\t\tconst containerClassName = cn(\n\t\t\tsplitButtonVariants({\n\t\t\t\tvariant: actualVariant,\n\t\t\t\tsize: actualSize,\n\t\t\t\tdisabled,\n\t\t\t}),\n\t\t\tclassName,\n\t\t);\n\n\t\tconst mergedStyle = {\n\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\tborderRadius,\n\t\t\t...(style as React.CSSProperties),\n\t\t};\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{asChild ? (\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tdata-split-button-part=\"trailing\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-expanded={checked}\n\t\t\t\t\t\taria-haspopup={ariaHaspopup}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tstyle={mergedStyle}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...(restProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(\n\t\t\t\t\t\t\tReact.Children.only(children) as React.ReactElement<{\n\t\t\t\t\t\t\t\tchildren?: React.ReactNode;\n\t\t\t\t\t\t\t}>,\n\t\t\t\t\t\t\t{ children: innerContent },\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Slot>\n\t\t\t\t) : (\n\t\t\t\t\t<m.button\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tdata-split-button-part=\"trailing\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-expanded={checked}\n\t\t\t\t\t\taria-haspopup={ariaHaspopup}\n\t\t\t\t\t\taria-disabled={disabled}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\t\ttransition={SPLIT_BUTTON_RADIUS_SPRING}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\t\t\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\t\t\t\t\t...style,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={containerClassName}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{innerContent}\n\t\t\t\t\t</m.button>\n\t\t\t\t)}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonTrailingComponent.displayName = \"SplitButtonTrailing\";\n\nexport const SplitButtonTrailing = React.memo(SplitButtonTrailingComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"filled\" {...props} />\n));\nFilledSplitButtonTrailing.displayName = \"FilledSplitButtonTrailing\";\n\nexport const TonalSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => <SplitButtonTrailing ref={ref} variant=\"tonal\" {...props} />);\nTonalSplitButtonTrailing.displayName = \"TonalSplitButtonTrailing\";\n\nexport const ElevatedSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonTrailing.displayName = \"ElevatedSplitButtonTrailing\";\n\nexport const OutlinedSplitButtonTrailing = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailing ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonTrailing.displayName = \"OutlinedSplitButtonTrailing\";\n","import { domMax, LazyMotion, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { StateLayer } from \"../../shared/state-layer\";\nimport { TouchTarget } from \"../../shared/touch-target\";\nimport { useSplitButtonContext } from \"./split-button-context\";\nimport {\n\tSPLIT_BUTTON_RADIUS_SPRING,\n\tSPLIT_BUTTON_TOKENS,\n} from \"./split-button-tokens\";\nimport type { SplitButtonTrailingUncheckableProps } from \"./split-button-types\";\nimport { splitButtonVariants } from \"./split-button-variants\";\n\nconst SplitButtonTrailingUncheckableComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tSplitButtonTrailingUncheckableProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tvariant = \"filled\",\n\t\t\tsize = \"sm\",\n\t\t\ticon,\n\t\t\tdisabled,\n\t\t\tonClick,\n\t\t\tonPointerDown,\n\t\t\tonPointerUp,\n\t\t\tonPointerLeave,\n\t\t\tonPointerCancel,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useSplitButtonContext();\n\t\tconst actualSize = context?.size ?? size;\n\t\tconst actualVariant = context?.variant ?? variant;\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 tokens = SPLIT_BUTTON_TOKENS[actualSize];\n\t\tconst prefersReducedMotion = useReducedMotion();\n\t\tconst needsTouchTarget = actualSize === \"xs\" || actualSize === \"sm\";\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: onRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({ disabled });\n\n\t\tconst innerCornerRadius =\n\t\t\tisPressed || isFocused\n\t\t\t\t? tokens.innerCorner.pressed\n\t\t\t\t: isHovered\n\t\t\t\t\t? tokens.innerCorner.hovered\n\t\t\t\t\t: tokens.innerCorner.default;\n\n\t\tconst outerRadius =\n\t\t\t(tokens.containerHeight * tokens.outerCornerPercent) / 100;\n\n\t\t// Uncheckable variant always has the asymmetric shape\n\t\tconst borderRadius = `${innerCornerRadius}px ${outerRadius}px ${outerRadius}px ${innerCornerRadius}px`;\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tonRipplePointerDown(e);\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tonPointerDown?.(e);\n\t\t\t},\n\t\t\t[onRipplePointerDown, onPointerDown],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUp?.(e);\n\t\t\t},\n\t\t\t[onPointerUp],\n\t\t);\n\n\t\tconst handlePointerEnter = React.useCallback(() => {\n\t\t\tif (!disabled) {\n\t\t\t\tsetIsHovered(true);\n\t\t\t}\n\t\t}, [disabled]);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsHovered(false);\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeave?.(e);\n\t\t\t},\n\t\t\t[onPointerLeave],\n\t\t);\n\n\t\tconst handlePointerCancel = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerCancel?.(e);\n\t\t\t},\n\t\t\t[onPointerCancel],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tif (!disabled) setIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[disabled, onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\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\ttype=\"button\"\n\t\t\t\t\tdata-split-button-part=\"trailing\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\tonPointerCancel={handlePointerCancel}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tanimate={{ borderRadius }}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tprefersReducedMotion ? { duration: 0 } : SPLIT_BUTTON_RADIUS_SPRING\n\t\t\t\t\t}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tpaddingInlineStart: tokens.trailingPadding.start,\n\t\t\t\t\t\tpaddingInlineEnd: tokens.trailingPadding.end,\n\t\t\t\t\t\t...style,\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tsplitButtonVariants({\n\t\t\t\t\t\t\tvariant: actualVariant,\n\t\t\t\t\t\t\tsize: actualSize,\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t{needsTouchTarget && <TouchTarget />}\n\t\t\t\t\t<StateLayer\n\t\t\t\t\t\thovered={isHovered}\n\t\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\t\tpressed={isPressed}\n\t\t\t\t\t/>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tanimate={{ x: tokens.opticalCenterOffset }}\n\t\t\t\t\t\ttransition={\n\t\t\t\t\t\t\tprefersReducedMotion\n\t\t\t\t\t\t\t\t? { duration: 0 }\n\t\t\t\t\t\t\t\t: SPLIT_BUTTON_RADIUS_SPRING\n\t\t\t\t\t\t}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 [&>svg]:w-full [&>svg]:h-full\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: tokens.trailingIconSize,\n\t\t\t\t\t\t\theight: tokens.trailingIconSize,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</m.div>\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSplitButtonTrailingUncheckableComponent.displayName =\n\t\"SplitButtonTrailingUncheckable\";\n\nexport const SplitButtonTrailingUncheckable = React.memo(\n\tSplitButtonTrailingUncheckableComponent,\n);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Preset Components\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport const FilledSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"filled\" {...props} />\n));\nFilledSplitButtonTrailingUncheckable.displayName =\n\t\"FilledSplitButtonTrailingUncheckable\";\n\nexport const TonalSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"tonal\" {...props} />\n));\nTonalSplitButtonTrailingUncheckable.displayName =\n\t\"TonalSplitButtonTrailingUncheckable\";\n\nexport const ElevatedSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"elevated\" {...props} />\n));\nElevatedSplitButtonTrailingUncheckable.displayName =\n\t\"ElevatedSplitButtonTrailingUncheckable\";\n\nexport const OutlinedSplitButtonTrailingUncheckable = React.forwardRef<\n\tHTMLButtonElement,\n\tOmit<SplitButtonTrailingUncheckableProps, \"variant\">\n>((props, ref) => (\n\t<SplitButtonTrailingUncheckable ref={ref} variant=\"outlined\" {...props} />\n));\nOutlinedSplitButtonTrailingUncheckable.displayName =\n\t\"OutlinedSplitButtonTrailingUncheckable\";\n","/**\n * @file card-tokens.ts\n *\n * MD3 Expressive Card Elevation & Motion Tokens.\n *\n * Elevation levels translated from:\n * - ElevatedCardTokens.kt\n * - FilledCardTokens.kt\n * - OutlinedCardTokens.kt\n * - Elevation.kt\n *\n * Elevation Levels:\n * - Level 0: 0dp (Flat - \"none\")\n * - Level 1: 1dp (Slight elevation - Elevated rest)\n * - Level 2: 3dp (Hover / Focus elevation for Elevated, Hover for Filled/Outlined)\n * - Level 3: 6dp (Dragged state elevation)\n * - Level 4: 8dp (Pickers/Popups elevation)\n * - Level 5: 12dp (Modals/Dialogs elevation)\n */\n\nexport const 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\tlevel3: \"0px 4px 8px 3px rgba(0,0,0,.15), 0px 1px 3px 0px rgba(0,0,0,.3)\",\n\tlevel4: \"0px 6px 10px 4px rgba(0,0,0,.15), 0px 2px 3px 0px rgba(0,0,0,.3)\",\n\tlevel5: \"0px 8px 12px 6px rgba(0,0,0,.15), 0px 4px 4px 0px rgba(0,0,0,.3)\",\n} as const;\n\nexport type ShadowLevel = keyof typeof SHADOW;\n\nexport type ElevationLevel = 0 | 1 | 2 | 3 | 4 | 5;\n\nexport type CardElevationConfig =\n\t| ElevationLevel\n\t| {\n\t\t\trest?: ElevationLevel | string;\n\t\t\thover?: ElevationLevel | string;\n\t\t\tpressed?: ElevationLevel | string;\n\t\t\tdragged?: ElevationLevel | string;\n\t  };\n\n/**\n * Resolves a numeric level (0–5) or custom box-shadow string to an MD3 shadow value.\n */\nexport function resolveElevationShadow(\n\tlevel: ElevationLevel | string | undefined,\n): string | undefined {\n\tif (level === undefined) return undefined;\n\tif (typeof level === \"number\") {\n\t\tconst key = `level${level}` as ShadowLevel;\n\t\treturn SHADOW[key] ?? SHADOW.level0;\n\t}\n\treturn level;\n}\n\n/**\n * Maps each card variant to its elevation level across interaction states.\n * - Elevated: Rest (Level 1) -> Hover/Focus (Level 2) -> Pressed (Level 1) -> Dragged (Level 3)\n * - Filled: Rest (Level 0) -> Hover/Focus (Level 1) -> Pressed (Level 0) -> Dragged (Level 3)\n * - Outlined: Rest (Level 0) -> Hover/Focus (Level 1) -> Pressed (Level 0) -> Dragged (Level 3)\n */\nexport const VARIANT_ELEVATION = {\n\televated: {\n\t\trest: SHADOW.level1,\n\t\thover: SHADOW.level2,\n\t\tpressed: SHADOW.level1,\n\t\tdragged: SHADOW.level3,\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\tdragged: SHADOW.level3,\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\tdragged: SHADOW.level3,\n\t\tdisabled: SHADOW.level0,\n\t},\n} as const;\n\nexport type CardVariant = keyof typeof VARIANT_ELEVATION;\n\nexport interface CardElevationOptions {\n\tvariant?: CardVariant;\n\tdisabled?: boolean;\n\tdraggable?: boolean;\n\televation?: CardElevationConfig;\n\tdisableElevation?: boolean;\n\thoverEffect?: boolean;\n}\n\n/**\n * Hook: Card Elevation Animation\n * Calculates animated boxShadow states based on variant, overrides, and interaction flags.\n */\nexport function useCardElevation({\n\tvariant = \"elevated\",\n\tdisabled = false,\n\tdraggable = false,\n\televation,\n\tdisableElevation = false,\n\thoverEffect = true,\n}: CardElevationOptions) {\n\tconst defaultLevels =\n\t\tVARIANT_ELEVATION[variant] || VARIANT_ELEVATION.elevated;\n\n\tlet restShadow: string = defaultLevels.rest;\n\tlet hoverShadow: string = defaultLevels.hover;\n\tlet pressedShadow: string = defaultLevels.pressed;\n\tlet draggedShadow: string = defaultLevels.dragged;\n\n\tif (disableElevation) {\n\t\trestShadow = SHADOW.level0;\n\t\thoverShadow = SHADOW.level0;\n\t\tpressedShadow = SHADOW.level0;\n\t\tdraggedShadow = SHADOW.level0;\n\t} else if (typeof elevation === \"number\") {\n\t\t// When developer supplies a fixed numeric elevation (e.g. elevation={0} or elevation={2}):\n\t\tconst resolved = resolveElevationShadow(elevation) ?? SHADOW.level0;\n\t\trestShadow = resolved;\n\t\t// If hover effect is enabled and elevation was provided as a base number,\n\t\t// hover either bumps by 1 level (if below max) or stays at given elevation if hoverEffect=false.\n\t\tconst hoverLevel = hoverEffect\n\t\t\t? (Math.min((elevation as number) + 1, 5) as ElevationLevel)\n\t\t\t: (elevation as ElevationLevel);\n\t\thoverShadow = resolveElevationShadow(hoverLevel) ?? resolved;\n\t\tpressedShadow = resolved;\n\t\tdraggedShadow =\n\t\t\tresolveElevationShadow(\n\t\t\t\tMath.min((elevation as number) + 2, 5) as ElevationLevel,\n\t\t\t) ?? resolved;\n\t} else if (elevation && typeof elevation === \"object\") {\n\t\tif (elevation.rest !== undefined) {\n\t\t\trestShadow = resolveElevationShadow(elevation.rest) ?? restShadow;\n\t\t}\n\t\tif (elevation.hover !== undefined) {\n\t\t\thoverShadow = resolveElevationShadow(elevation.hover) ?? hoverShadow;\n\t\t}\n\t\tif (elevation.pressed !== undefined) {\n\t\t\tpressedShadow =\n\t\t\t\tresolveElevationShadow(elevation.pressed) ?? pressedShadow;\n\t\t}\n\t\tif (elevation.dragged !== undefined) {\n\t\t\tdraggedShadow =\n\t\t\t\tresolveElevationShadow(elevation.dragged) ?? draggedShadow;\n\t\t}\n\t}\n\n\tif (!hoverEffect) {\n\t\thoverShadow = restShadow;\n\t}\n\n\tconst animateShadow = disabled\n\t\t? disableElevation\n\t\t\t? SHADOW.level0\n\t\t\t: defaultLevels.disabled\n\t\t: restShadow;\n\n\treturn {\n\t\tanimate: { boxShadow: animateShadow },\n\t\twhileHover:\n\t\t\tdisabled || !hoverEffect ? undefined : { boxShadow: hoverShadow },\n\t\twhileTap: disabled ? undefined : { boxShadow: pressedShadow },\n\t\twhileFocus:\n\t\t\tdisabled || !hoverEffect ? undefined : { boxShadow: hoverShadow },\n\t\twhileDrag:\n\t\t\t!disabled && draggable ? { boxShadow: draggedShadow } : undefined,\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 * @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/drag.\n *\n * Elevation levels (0–5):\n * - Level 0 = \"none\" (Flat)\n * - Level 1 = box-shadow ~1dp (Slight elevation - Elevated rest)\n * - Level 2 = box-shadow ~2dp (Hover/Focus elevation)\n * - Level 3 = box-shadow ~6dp (Dragged state elevation)\n * - Level 4 = box-shadow ~8dp (Pickers/Popups elevation)\n * - Level 5 = box-shadow ~12dp (Modals/Dialogs elevation)\n *\n * @example\n * ```tsx\n * // Static card with flat elevation\n * <Card variant=\"elevated\" elevation={0}>\n *   <CardContent>Flat elevated surface</CardContent>\n * </Card>\n *\n * // Interactive button card without ripple or hover effect\n * <Card variant=\"filled\" onClick={() => alert('Clicked!')} disableRipple disableHoverEffect>\n *   <CardContent>Clickable without ripple</CardContent>\n * </Card>\n *\n * // Interactive link card with custom hover scale\n * <Card variant=\"outlined\" href=\"/home\" whileHover={{ scale: 1.02 }}>\n *   <CardContent>Scaled link card</CardContent>\n * </Card>\n * ```\n *\n * @see https://m3.material.io/components/cards/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport { domMax, type HTMLMotionProps, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Ripple, useRippleState } from \"../../ripple\";\nimport { type CardVariant, useCardElevation } from \"./card-tokens\";\nimport type { CardProps } from \"./types\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CVA – Variant base classes (token-aligned with MD3)\n// ─────────────────────────────────────────────────────────────────────────────\nexport const cardVariants = cva(\n\t\"rounded-m3-lg flex flex-col relative overflow-hidden transition-all 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 text-m3-on-surface\",\n\t\t\t\t// FilledCardTokens.ContainerColor = SurfaceContainerHighest\n\t\t\t\tfilled: \"bg-m3-surface-container-highest text-m3-on-surface\",\n\t\t\t\t// OutlinedCardTokens.ContainerColor = Surface, OutlineColor = OutlineVariant\n\t\t\t\toutlined:\n\t\t\t\t\t\"bg-m3-surface text-m3-on-surface border border-m3-outline-variant\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { variant: \"elevated\" },\n\t},\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\televation,\n\t\t\tdisableElevation = false,\n\t\t\tripple = true,\n\t\t\tdisableRipple = false,\n\t\t\thoverEffect = true,\n\t\t\tdisableHoverEffect = false,\n\t\t\tstateLayer = true,\n\t\t\tdisableStateLayer = false,\n\t\t\tdisabled = false,\n\t\t\tinteractive = false,\n\t\t\tdraggable = false,\n\t\t\thref,\n\t\t\ttarget,\n\t\t\trel: relProp,\n\t\t\tonClick,\n\t\t\tonPointerDown: userOnPointerDown,\n\t\t\twhileHover,\n\t\t\twhileTap,\n\t\t\twhileFocus,\n\t\t\twhileDrag,\n\t\t\ttransition,\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 || \"elevated\") as CardVariant;\n\t\tconst isInteractive = !!onClick || !!href || interactive || asChild;\n\t\tconst isHoverEnabled = hoverEffect !== false && !disableHoverEffect;\n\t\tconst isRippleEnabled =\n\t\t\tripple !== false && !disableRipple && isInteractive && !disabled;\n\t\tconst isStateLayerEnabled =\n\t\t\tstateLayer !== false && !disableStateLayer && isInteractive && !disabled;\n\n\t\tconst elevationProps = useCardElevation({\n\t\t\tvariant: safeVariant,\n\t\t\tdisabled,\n\t\t\tdraggable,\n\t\t\televation,\n\t\t\tdisableElevation,\n\t\t\thoverEffect: isHoverEnabled,\n\t\t});\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: rippleOnPointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState();\n\n\t\tconst handlePointerDown = (event: React.PointerEvent<HTMLElement>) => {\n\t\t\tif (isRippleEnabled) {\n\t\t\t\trippleOnPointerDown(event);\n\t\t\t}\n\t\t\tuserOnPointerDown?.(\n\t\t\t\tevent as unknown as React.PointerEvent<HTMLButtonElement>,\n\t\t\t);\n\t\t};\n\n\t\tconst baseClass = cn(\n\t\t\tcardVariants({ variant: safeVariant }),\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%, Dragged: 16%)\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 (when stateLayer is enabled)\n\t\t\tisStateLayerEnabled && [\n\t\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\tisHoverEnabled && \"hover:before:opacity-[0.08]\",\n\t\t\t\t\"focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\",\n\t\t\t\tdraggable && \"active:before:opacity-[0.16]\",\n\t\t\t],\n\t\t\t// Outlined interactive card: smooth transition of border color to m3-outline on hover/focus/press\n\t\t\tsafeVariant === \"outlined\" &&\n\t\t\t\t\"transition-colors duration-200 hover:border-m3-outline focus-visible:border-m3-outline active:border-m3-outline\",\n\t\t);\n\n\t\t// Merge user-supplied motion props with elevation motion presets\n\t\tconst mergedWhileHover =\n\t\t\televationProps.whileHover || whileHover\n\t\t\t\t? {\n\t\t\t\t\t\t...elevationProps.whileHover,\n\t\t\t\t\t\t...(typeof whileHover === \"object\" ? whileHover : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tconst mergedWhileTap =\n\t\t\televationProps.whileTap || whileTap\n\t\t\t\t? {\n\t\t\t\t\t\t...elevationProps.whileTap,\n\t\t\t\t\t\t...(typeof whileTap === \"object\" ? whileTap : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tconst mergedWhileFocus =\n\t\t\televationProps.whileFocus || whileFocus\n\t\t\t\t? {\n\t\t\t\t\t\t...elevationProps.whileFocus,\n\t\t\t\t\t\t...(typeof whileFocus === \"object\" ? whileFocus : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tconst mergedWhileDrag =\n\t\t\televationProps.whileDrag || whileDrag\n\t\t\t\t? {\n\t\t\t\t\t\t...elevationProps.whileDrag,\n\t\t\t\t\t\t...(typeof whileDrag === \"object\" ? whileDrag : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tconst mergedTransition =\n\t\t\televationProps.transition || transition\n\t\t\t\t? {\n\t\t\t\t\t\t...elevationProps.transition,\n\t\t\t\t\t\t...(typeof transition === \"object\" ? transition : {}),\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\t// ── asChild Delegation ───────────────────────────────────────────\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{isRippleEnabled && (\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t)}\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={handlePointerDown}\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\tstyle={{\n\t\t\t\t\t\tboxShadow: elevationProps.animate.boxShadow,\n\t\t\t\t\t\t...((props as React.HTMLAttributes<HTMLDivElement>).style || {}),\n\t\t\t\t\t}}\n\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t{...(props as React.HTMLAttributes<HTMLDivElement>)}\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={handlePointerDown}\n\t\t\t\t\t\tanimate={elevationProps.animate}\n\t\t\t\t\t\twhileHover={mergedWhileHover}\n\t\t\t\t\t\twhileTap={mergedWhileTap}\n\t\t\t\t\t\twhileFocus={mergedWhileFocus}\n\t\t\t\t\t\twhileDrag={mergedWhileDrag}\n\t\t\t\t\t\ttransition={mergedTransition}\n\t\t\t\t\t\t{...(props as unknown as HTMLMotionProps<\"a\">)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isRippleEnabled && (\n\t\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t)}\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={handlePointerDown}\n\t\t\t\t\tanimate={elevationProps.animate}\n\t\t\t\t\twhileHover={mergedWhileHover}\n\t\t\t\t\twhileTap={mergedWhileTap}\n\t\t\t\t\twhileFocus={mergedWhileFocus}\n\t\t\t\t\twhileDrag={mergedWhileDrag}\n\t\t\t\t\ttransition={mergedTransition}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{isRippleEnabled && (\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t)}\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","/**\n * @file card-sub-components.tsx\n *\n * Sub-components for MD3 Expressive Card layout anatomy:\n * - CardHeader: Avatar / Icon + Title + Subtitle + Action slot\n * - CardMedia: Responsive media region (image/video) with aspect ratio control\n * - CardContent: Main body text & descriptive content area\n * - CardFooter: Action buttons row with flexible alignment\n *\n * @see https://m3.material.io/components/cards/guidelines#anatomy\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type {\n\tCardContentProps,\n\tCardFooterProps,\n\tCardHeaderProps,\n\tCardMediaProps,\n} from \"./types\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CardHeader\n// ─────────────────────────────────────────────────────────────────────────────\nexport const CardHeader = React.forwardRef<HTMLDivElement, CardHeaderProps>(\n\t(\n\t\t{ className, avatar, title, subheader, action, children, ...props },\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-4 px-6 pt-6 pb-2 relative z-1\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{avatar && <div className=\"shrink-0 flex items-center\">{avatar}</div>}\n\t\t\t\t{title || subheader ? (\n\t\t\t\t\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t{title && (\n\t\t\t\t\t\t\t<div className=\"text-base font-medium text-m3-on-surface truncate\">\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{subheader && (\n\t\t\t\t\t\t\t<div className=\"text-sm text-m3-on-surface-variant truncate\">\n\t\t\t\t\t\t\t\t{subheader}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t) : null}\n\t\t\t\t{children}\n\t\t\t\t{action && (\n\t\t\t\t\t<div className=\"shrink-0 ml-auto flex items-center\">{action}</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\nCardHeader.displayName = \"CardHeader\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CardMedia\n// ─────────────────────────────────────────────────────────────────────────────\nconst ASPECT_RATIO_CLASSES = {\n\tvideo: \"aspect-video\",\n\tsquare: \"aspect-square\",\n\twide: \"aspect-[21/9]\",\n\tauto: \"\",\n} as const;\n\nexport const CardMedia = React.forwardRef<HTMLDivElement, CardMediaProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tsrc,\n\t\t\talt = \"\",\n\t\t\taspectRatio = \"video\",\n\t\t\tcomponent,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst ratioClass =\n\t\t\taspectRatio in ASPECT_RATIO_CLASSES\n\t\t\t\t? ASPECT_RATIO_CLASSES[aspectRatio as keyof typeof ASPECT_RATIO_CLASSES]\n\t\t\t\t: \"\";\n\n\t\tconst Component = component || (src && !children ? \"img\" : \"div\");\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-full overflow-hidden shrink-0\",\n\t\t\t\t\tratioClass,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children ? (\n\t\t\t\t\tchildren\n\t\t\t\t) : src ? (\n\t\t\t\t\t<Component\n\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\tclassName=\"w-full h-full object-cover\"\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t);\n\t},\n);\nCardMedia.displayName = \"CardMedia\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CardContent\n// ─────────────────────────────────────────────────────────────────────────────\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n\t({ className, children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"px-6 py-4 text-sm text-m3-on-surface-variant flex-1 relative z-1\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t},\n);\nCardContent.displayName = \"CardContent\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CardFooter\n// ─────────────────────────────────────────────────────────────────────────────\nconst ALIGN_CLASSES = {\n\tstart: \"justify-start\",\n\tcenter: \"justify-center\",\n\tend: \"justify-end\",\n\tbetween: \"justify-between\",\n} as const;\n\nexport const CardFooter = React.forwardRef<HTMLDivElement, CardFooterProps>(\n\t({ className, align = \"end\", children, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-2 px-6 pb-6 pt-2 relative z-1\",\n\t\t\t\t\tALIGN_CLASSES[align],\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t},\n);\nCardFooter.displayName = \"CardFooter\";\n","/**\n * @file carousel-grid.tsx\n * Expanded \"Show all\" view rendering carousel items as a responsive, vertically scrolling grid.\n * Supports both RSC mode (children) and CSR data-driven mode (items + renderItem).\n *\n * @see docs/m3/carousel/Carousel_Accessibility_Material_Design_3.md\n */\n\nimport * as React from \"react\";\n\nexport interface CarouselGridProps<T = unknown>\n\textends React.HTMLAttributes<HTMLDivElement> {\n\tchildren?: React.ReactNode;\n\titems?: T[];\n\trenderItem?: (item: T, index: number) => React.ReactNode;\n\tpreferredItemWidth?: number;\n}\n\nexport function CarouselGrid<T = unknown>({\n\tchildren,\n\titems,\n\trenderItem,\n\tpreferredItemWidth = 240,\n\tclassName,\n\tstyle,\n\t...props\n}: CarouselGridProps<T>) {\n\tconst gridStyle: React.CSSProperties = {\n\t\tdisplay: \"grid\",\n\t\tgridTemplateColumns: `repeat(auto-fill, minmax(${preferredItemWidth}px, 1fr))`,\n\t\tgap: \"8px\",\n\t\tpadding: \"8px 16px\",\n\t\twidth: \"100%\",\n\t\tboxSizing: \"border-box\",\n\t\t...style,\n\t};\n\n\tconst itemStyle: React.CSSProperties = {\n\t\tposition: \"relative\",\n\t\twidth: \"100%\",\n\t\tminHeight: \"180px\",\n\t\tborderRadius: \"28px\",\n\t\toverflow: \"hidden\",\n\t};\n\n\t// Render items from CSR items array if provided\n\tif (items && renderItem) {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tclassName={className}\n\t\t\t\tstyle={gridStyle}\n\t\t\t\taria-label=\"Expanded carousel grid\"\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\tconst itemKey =\n\t\t\t\t\t\ttypeof item === \"object\" && item !== null && \"id\" in item\n\t\t\t\t\t\t\t? (item as { id: React.Key }).id\n\t\t\t\t\t\t\t: typeof item === \"object\" && item !== null && \"key\" in item\n\t\t\t\t\t\t\t\t? (item as { key: React.Key }).key\n\t\t\t\t\t\t\t\t: index;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div key={itemKey} style={itemStyle}>\n\t\t\t\t\t\t\t{renderItem(item, index)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</section>\n\t\t);\n\t}\n\n\t// RSC Mode: Render direct children\n\treturn (\n\t\t<section\n\t\t\tclassName={className}\n\t\t\tstyle={gridStyle}\n\t\t\taria-label=\"Expanded carousel grid\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{React.Children.map(children, (child, index) => {\n\t\t\t\tconst childKey =\n\t\t\t\t\tReact.isValidElement(child) && child.key != null ? child.key : index;\n\n\t\t\t\treturn (\n\t\t\t\t\t<div key={childKey} style={itemStyle}>\n\t\t\t\t\t\t{child}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\t})}\n\t\t</section>\n\t);\n}\n","/**\n * @file carousel-item.tsx\n * Single Carousel slide wrapper supporting ARIA roles, dynamic clip-path masks,\n * inner parallax content translation, and MD3 touch ripples.\n *\n * @see docs/m3/carousel/Carousel_Specs_Material_Design_3.md\n * @see docs/m3/carousel/Carousel_Accessibility_Material_Design_3.md\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Ripple, useRippleState } from \"../ripple\";\nimport type { CarouselLayout } from \"./carousel.types\";\n\nexport interface CarouselItemProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\tindex: number;\n\ttotalItems: number;\n\tlayout?: CarouselLayout;\n\twidth?: number;\n\tminContentWidth?: number;\n\tmaskClipPercent?: number;\n\tparallaxOffset?: number;\n\tisFocused?: boolean;\n\tisScrolling?: boolean;\n\tdisabled?: boolean;\n\tchildren: React.ReactNode;\n}\n\nexport const CarouselItem = React.forwardRef<HTMLDivElement, CarouselItemProps>(\n\tfunction CarouselItem(\n\t\t{\n\t\t\tindex,\n\t\t\ttotalItems,\n\t\t\tlayout = \"multi-browse\",\n\t\t\twidth,\n\t\t\tminContentWidth,\n\t\t\tmaskClipPercent = 0,\n\t\t\tparallaxOffset = 0,\n\t\t\tisFocused = false,\n\t\t\tisScrolling = false,\n\t\t\tdisabled = false,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\tchildren,\n\t\t\tonClick,\n\t\t\tonPointerDown,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) {\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: handleRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState();\n\n\t\tconst itemNumber = index + 1;\n\t\tconst ariaLabel =\n\t\t\tprops[\"aria-label\"] || `Item ${itemNumber} of ${totalItems}`;\n\n\t\tconst isFullScreen = layout === \"full-screen\";\n\t\tconst isCenterHero = layout === \"center-aligned-hero\";\n\n\t\tconst combinedStyle: React.CSSProperties = {\n\t\t\twidth: isFullScreen ? \"100%\" : width ? `${width}px` : undefined,\n\t\t\theight: isFullScreen ? \"100%\" : undefined,\n\t\t\tflexShrink: 0,\n\t\t\t...style,\n\t\t};\n\n\t\tconst handlePointerDown = (e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (!disabled) {\n\t\t\t\thandleRipplePointerDown(e);\n\t\t\t}\n\t\t\tonPointerDown?.(e);\n\t\t};\n\n\t\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (!disabled && (e.key === \"Enter\" || e.key === \" \")) {\n\t\t\t\te.preventDefault();\n\t\t\t\tonClick?.(e as unknown as React.MouseEvent<HTMLDivElement>);\n\t\t\t}\n\t\t\tprops.onKeyDown?.(e);\n\t\t};\n\n\t\treturn (\n\t\t\t// biome-ignore lint/a11y/useSemanticElements: ARIA carousel pattern requires role=\"group\" for slide items\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\trole=\"group\"\n\t\t\t\taria-roledescription=\"slide\"\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\ttabIndex={disabled ? -1 : isFocused ? 0 : -1}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Base item styles: overflow-hidden + rounded 28px acts as MD3 keyline mask\n\t\t\t\t\t\"relative flex flex-col overflow-hidden rounded-[28px] cursor-pointer select-none box-border outline-none shrink-0\",\n\t\t\t\t\t// GPU Composition & Layout Containment\n\t\t\t\t\t\"will-change-[transform,clip-path] contain-[layout_paint_style] [user-select:none] [-webkit-user-drag:none] [&_img]:pointer-events-none [&_img]:select-none [&_img]:[-webkit-user-drag:none]\",\n\t\t\t\t\t// Scroll snap: center-aligned hero snaps to center, all others snap start\n\t\t\t\t\tisCenterHero ? \"snap-center\" : \"snap-start\",\n\t\t\t\t\t// Full-screen: no rounding, fill height\n\t\t\t\t\tisFullScreen && \"rounded-none\",\n\t\t\t\t\t// State layers via ::after pseudo-element\n\t\t\t\t\t\"after:absolute after:inset-0 after:rounded-[inherit] after:bg-black after:opacity-0 after:pointer-events-none after:z-2 after:transition-opacity after:duration-150 after:motion-reduce:transition-none\",\n\t\t\t\t\t\"hover:after:opacity-[0.08]\",\n\t\t\t\t\t\"active:after:opacity-[0.10]\",\n\t\t\t\t\t// Focus ring\n\t\t\t\t\t\"focus-visible:outline-[3px] focus-visible:outline-(--md-sys-color-secondary,#625b71) focus-visible:outline-offset-2 focus-visible:z-3\",\n\t\t\t\t\t// Disabled\n\t\t\t\t\tdisabled && \"opacity-[0.38] pointer-events-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={combinedStyle}\n\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tonClick={disabled ? undefined : onClick}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Parallax inner content container maintained at full largeWidth */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"w-full flex-1 flex flex-col will-change-transform select-none\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: isFullScreen\n\t\t\t\t\t\t\t? \"100%\"\n\t\t\t\t\t\t\t: minContentWidth\n\t\t\t\t\t\t\t\t? `${minContentWidth}px`\n\t\t\t\t\t\t\t\t: \"100%\",\n\t\t\t\t\t\tminWidth: isFullScreen\n\t\t\t\t\t\t\t? \"100%\"\n\t\t\t\t\t\t\t: minContentWidth\n\t\t\t\t\t\t\t\t? `${minContentWidth}px`\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\ttransform:\n\t\t\t\t\t\t\tparallaxOffset !== 0\n\t\t\t\t\t\t\t\t? `translateX(${parallaxOffset}px)`\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCarouselItem.displayName = \"CarouselItem\";\n","/**\n * @file useCarouselA11y.ts\n * Custom hook providing WCAG 2.1 AA compliant keyboard navigation and ARIA attribute mapping.\n *\n * Navigation rules per Material Design 3 Specs:\n * - Tab: Initial focus on first item (index 0).\n * - ArrowLeft / ArrowRight: Moves focus to previous or next item and scrolls it into view.\n * - ArrowUp / ArrowDown: Exits carousel navigation to move focus to adjacent page elements.\n * - Space / Enter: Activates the currently focused carousel item.\n *\n * @see docs/m3/carousel/Carousel_Accessibility_Material_Design_3.md\n */\n\nimport { useCallback, useState } from \"react\";\n\nexport interface UseCarouselA11yOptions {\n\ttotalItems: number;\n\tonItemSelect?: (index: number) => void;\n\tonExitNavigation?: () => void;\n\tscrollToIndex?: (index: number) => void;\n}\n\nexport function useCarouselA11y({\n\ttotalItems,\n\tonItemSelect,\n\tonExitNavigation,\n\tscrollToIndex,\n}: UseCarouselA11yOptions) {\n\tconst [focusedIndex, setFocusedIndex] = useState<number>(0);\n\n\tconst handleKeyDown = useCallback(\n\t\t(event: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (totalItems === 0) return;\n\n\t\t\tswitch (event.key) {\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\t// ArrowRight moves to next item; ArrowDown exits or moves next depending on orientation\n\t\t\t\t\tif (event.key === \"ArrowDown\" && onExitNavigation) {\n\t\t\t\t\t\tonExitNavigation();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetFocusedIndex((prev) => {\n\t\t\t\t\t\tconst next = Math.min(totalItems - 1, prev + 1);\n\t\t\t\t\t\tscrollToIndex?.(next);\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\tif (event.key === \"ArrowUp\" && onExitNavigation) {\n\t\t\t\t\t\tonExitNavigation();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetFocusedIndex((prev) => {\n\t\t\t\t\t\tconst next = Math.max(0, prev - 1);\n\t\t\t\t\t\tscrollToIndex?.(next);\n\t\t\t\t\t\treturn next;\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"Home\": {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tsetFocusedIndex(0);\n\t\t\t\t\tscrollToIndex?.(0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"End\": {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tconst lastIndex = totalItems - 1;\n\t\t\t\t\tsetFocusedIndex(lastIndex);\n\t\t\t\t\tscrollToIndex?.(lastIndex);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \" \":\n\t\t\t\tcase \"Enter\": {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tonItemSelect?.(focusedIndex);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[totalItems, focusedIndex, onItemSelect, onExitNavigation, scrollToIndex],\n\t);\n\n\t/** Generates WCAG compliant ARIA attributes for slide items */\n\tconst getItemA11yProps = useCallback(\n\t\t(index: number, customLabel?: string) => {\n\t\t\tconst itemNumber = index + 1;\n\t\t\tconst defaultLabel = `Item ${itemNumber} of ${totalItems}`;\n\n\t\t\treturn {\n\t\t\t\trole: \"group\" as const,\n\t\t\t\t\"aria-roledescription\": \"slide\",\n\t\t\t\t\"aria-label\": customLabel\n\t\t\t\t\t? `${customLabel} (${itemNumber} of ${totalItems})`\n\t\t\t\t\t: defaultLabel,\n\t\t\t\ttabIndex: index === focusedIndex ? 0 : -1,\n\t\t\t\tonFocus: () => setFocusedIndex(index),\n\t\t\t};\n\t\t},\n\t\t[focusedIndex, totalItems],\n\t);\n\n\treturn {\n\t\tfocusedIndex,\n\t\tsetFocusedIndex,\n\t\thandleKeyDown,\n\t\tgetItemA11yProps,\n\t};\n}\n","/**\n * @file carousel.tokens.ts\n * MD3 Expressive Carousel — Design tokens ported from Material 3 Carousel Specs.\n * All dimensional values are in px (dp equivalents for web).\n * Colors reference CSS custom properties — no hardcoded hex.\n * @see docs/m3/carousel/Carousel_Specs_Material_Design_3.md\n */\n\nexport const CarouselTokens = {\n\t/** Corner radius shape (M3 extraLarge shape: 28dp) */\n\tcontainerRadius: 28,\n\n\t/** Small item dimension limits (dp) */\n\tsmallItemMin: 40,\n\tsmallItemMax: 56,\n\n\t/** Layout defaults (dp) */\n\titemSpacing: 8,\n\tcontentPadding: 16,\n\tverticalPadding: 8,\n\n\t/** Interactive state overlays */\n\thoverOpacity: 0.08,\n\tfocusOpacity: 0.1,\n\tpressedOpacity: 0.1,\n\tdisabledOpacity: 0.38,\n\n\t/** Focus indicator dimensions */\n\tfocusThickness: 3,\n\tfocusOffset: 2,\n\n\t/** Touch target minimum size for accessibility (WCAG 2.1 AAA / M3) */\n\tminTouchTargetSize: 48,\n\n\t/** CSS Custom Property token maps for fallback and runtime injection */\n\tcssVars: {\n\t\tshape: \"--carousel-item-shape\",\n\t\tspacing: \"--carousel-item-spacing\",\n\t\tcontentPadding: \"--carousel-content-padding\",\n\t\tverticalPadding: \"--carousel-vertical-padding\",\n\t\tsmallMin: \"--carousel-small-item-min\",\n\t\tsmallMax: \"--carousel-small-item-max\",\n\t\thoverOpacity: \"--carousel-hover-opacity\",\n\t\tfocusThickness: \"--carousel-focus-thickness\",\n\t\tfocusOffset: \"--carousel-focus-offset\",\n\t\tpressedOpacity: \"--carousel-pressed-opacity\",\n\t\tdisabledOpacity: \"--carousel-disabled-opacity\",\n\t},\n} as const;\n\nexport type CarouselTokensType = typeof CarouselTokens;\n","/**\n * @file useCarouselKeylines.ts\n * Custom hook calculating M3 Carousel keyline matrices, item widths,\n * snap positions, dynamic clip-path mask percentages, and parallax offsets.\n *\n * Specification: Material Design 3 Carousel Specs\n * @see docs/m3/carousel/Carousel_Specs_Material_Design_3.md\n */\n\nimport { useMemo } from \"react\";\nimport { CarouselTokens } from \"../carousel.tokens\";\nimport type { CarouselKeylineResult, CarouselLayout } from \"../carousel.types\";\n\nexport interface UseCarouselKeylinesOptions {\n\tcontainerWidth: number;\n\tpreferredItemWidth?: number;\n\tlayout?: CarouselLayout;\n\titemSpacing?: number;\n\tcontentPadding?: number;\n\ttotalItems: number;\n\tscrollX?: number;\n}\n\nexport function useCarouselKeylines({\n\tcontainerWidth,\n\tpreferredItemWidth = 300,\n\tlayout = \"multi-browse\",\n\titemSpacing = CarouselTokens.itemSpacing,\n\tcontentPadding = CarouselTokens.contentPadding,\n\ttotalItems,\n\tscrollX: _scrollX = 0,\n}: UseCarouselKeylinesOptions): CarouselKeylineResult & {\n\tgetItemMaskClip: (index: number) => number;\n\tgetItemParallaxOffset: (index: number) => number;\n\tgetItemWidth: (index: number) => number;\n} {\n\treturn useMemo(() => {\n\t\tconst safeContainerWidth = Math.max(containerWidth, 100);\n\n\t\t// Clamp small item size between 40px and 56px per M3 spec\n\t\tconst smallWidth = Math.min(\n\t\t\tMath.max(\n\t\t\t\tCarouselTokens.smallItemMin,\n\t\t\t\tMath.round(safeContainerWidth * 0.1),\n\t\t\t),\n\t\t\tCarouselTokens.smallItemMax,\n\t\t);\n\n\t\tlet largeWidth = preferredItemWidth;\n\t\tlet mediumWidth = Math.round(preferredItemWidth * 0.65);\n\n\t\t// Adjust sizes according to layout variant\n\t\tswitch (layout) {\n\t\t\tcase \"hero\": {\n\t\t\t\tconst availableWidth =\n\t\t\t\t\tsafeContainerWidth - contentPadding * 2 - smallWidth - itemSpacing;\n\t\t\t\tlargeWidth = Math.max(160, availableWidth);\n\t\t\t\tmediumWidth = largeWidth;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"center-aligned-hero\": {\n\t\t\t\tconst availableWidth =\n\t\t\t\t\tsafeContainerWidth -\n\t\t\t\t\tcontentPadding * 2 -\n\t\t\t\t\tsmallWidth * 2 -\n\t\t\t\t\titemSpacing * 2;\n\t\t\t\tlargeWidth = Math.max(160, availableWidth);\n\t\t\t\tmediumWidth = largeWidth;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"uncontained\":\n\t\t\tcase \"uncontained-multi-aspect\": {\n\t\t\t\tlargeWidth = Math.min(\n\t\t\t\t\tpreferredItemWidth,\n\t\t\t\t\tsafeContainerWidth - contentPadding * 2,\n\t\t\t\t);\n\t\t\t\tmediumWidth = largeWidth;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"full-screen\": {\n\t\t\t\tlargeWidth = safeContainerWidth;\n\t\t\t\tmediumWidth = safeContainerWidth;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\t// multi-browse layout sizing\n\t\t\t\tconst maxLargeWidth =\n\t\t\t\t\tsafeContainerWidth - contentPadding * 2 - smallWidth - itemSpacing;\n\t\t\t\tlargeWidth = Math.min(preferredItemWidth, Math.max(160, maxLargeWidth));\n\t\t\t\tmediumWidth = Math.max(smallWidth + 16, Math.round(largeWidth * 0.65));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t// Calculate initial keylines array based on layout\n\t\tconst keylines: CarouselKeylineResult[\"keylines\"] = [];\n\t\tif (layout === \"hero\") {\n\t\t\tconst smallMask = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(\n\t\t\t\t\t100,\n\t\t\t\t\tMath.round(((largeWidth - smallWidth) / largeWidth) * 100),\n\t\t\t\t),\n\t\t\t);\n\t\t\tkeylines.push(\n\t\t\t\t{\n\t\t\t\t\toffset: contentPadding,\n\t\t\t\t\twidth: largeWidth,\n\t\t\t\t\ttype: \"large\",\n\t\t\t\t\tmaskClip: 0,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toffset: contentPadding + largeWidth + itemSpacing,\n\t\t\t\t\twidth: smallWidth,\n\t\t\t\t\ttype: \"small\",\n\t\t\t\t\tmaskClip: smallMask,\n\t\t\t\t},\n\t\t\t);\n\t\t} else if (layout === \"center-aligned-hero\") {\n\t\t\tconst smallMask = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(\n\t\t\t\t\t100,\n\t\t\t\t\tMath.round(((largeWidth - smallWidth) / largeWidth) * 100),\n\t\t\t\t),\n\t\t\t);\n\t\t\tkeylines.push(\n\t\t\t\t{\n\t\t\t\t\toffset: contentPadding,\n\t\t\t\t\twidth: smallWidth,\n\t\t\t\t\ttype: \"small\",\n\t\t\t\t\tmaskClip: smallMask,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toffset: contentPadding + smallWidth + itemSpacing,\n\t\t\t\t\twidth: largeWidth,\n\t\t\t\t\ttype: \"large\",\n\t\t\t\t\tmaskClip: 0,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toffset:\n\t\t\t\t\t\tcontentPadding +\n\t\t\t\t\t\tsmallWidth +\n\t\t\t\t\t\titemSpacing +\n\t\t\t\t\t\tlargeWidth +\n\t\t\t\t\t\titemSpacing,\n\t\t\t\t\twidth: smallWidth,\n\t\t\t\t\ttype: \"small\",\n\t\t\t\t\tmaskClip: smallMask,\n\t\t\t\t},\n\t\t\t);\n\t\t} else if (layout === \"multi-browse\") {\n\t\t\tconst mediumMask = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(\n\t\t\t\t\t100,\n\t\t\t\t\tMath.round(((largeWidth - mediumWidth) / largeWidth) * 100),\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst smallMask = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(\n\t\t\t\t\t100,\n\t\t\t\t\tMath.round(((largeWidth - smallWidth) / largeWidth) * 100),\n\t\t\t\t),\n\t\t\t);\n\t\t\tconst availableWidth = safeContainerWidth - contentPadding * 2;\n\t\t\tconst numLarge = Math.max(\n\t\t\t\t1,\n\t\t\t\tMath.floor((availableWidth + itemSpacing) / (largeWidth + itemSpacing)),\n\t\t\t);\n\n\t\t\tlet offset = contentPadding;\n\t\t\tfor (let k = 0; k < numLarge; k++) {\n\t\t\t\tkeylines.push({\n\t\t\t\t\toffset,\n\t\t\t\t\twidth: largeWidth,\n\t\t\t\t\ttype: \"large\",\n\t\t\t\t\tmaskClip: 0,\n\t\t\t\t});\n\t\t\t\toffset += largeWidth + itemSpacing;\n\t\t\t}\n\t\t\tkeylines.push({\n\t\t\t\toffset,\n\t\t\t\twidth: mediumWidth,\n\t\t\t\ttype: \"medium\",\n\t\t\t\tmaskClip: mediumMask,\n\t\t\t});\n\t\t\toffset += mediumWidth + itemSpacing;\n\t\t\tkeylines.push({\n\t\t\t\toffset,\n\t\t\t\twidth: smallWidth,\n\t\t\t\ttype: \"small\",\n\t\t\t\tmaskClip: smallMask,\n\t\t\t});\n\t\t} else {\n\t\t\tkeylines.push({\n\t\t\t\toffset: contentPadding,\n\t\t\t\twidth: largeWidth,\n\t\t\t\ttype: \"large\",\n\t\t\t\tmaskClip: 0,\n\t\t\t});\n\t\t}\n\n\t\t// Helper to calculate initial rest width for keyline alignment\n\t\tconst getItemRestWidth = (i: number): number => {\n\t\t\tif (layout === \"full-screen\") return safeContainerWidth;\n\t\t\tif (layout === \"uncontained\") return largeWidth;\n\t\t\tif (layout === \"uncontained-multi-aspect\") {\n\t\t\t\tconst ratios = [1.77, 1.33, 1.0, 0.56];\n\t\t\t\tconst ratio = ratios[i % ratios.length];\n\t\t\t\treturn Math.round(Math.min(largeWidth, 220 * ratio));\n\t\t\t}\n\t\t\tif (layout === \"hero\") return i === 0 ? largeWidth : smallWidth;\n\t\t\tif (layout === \"center-aligned-hero\")\n\t\t\t\treturn i === 0 || i === totalItems - 1 ? smallWidth : largeWidth;\n\n\t\t\t// multi-browse cycle pattern: Large, Large, Medium, Small\n\t\t\tconst pattern = [largeWidth, largeWidth, mediumWidth, smallWidth];\n\t\t\treturn pattern[i % pattern.length];\n\t\t};\n\n\t\t// Calculate track start positions for each item\n\t\tconst snapPositions: number[] = [];\n\t\tlet currentOffset = 0;\n\t\tconst itemLayoutWidth =\n\t\t\tlayout === \"full-screen\" ? safeContainerWidth : largeWidth;\n\t\tfor (let i = 0; i < totalItems; i++) {\n\t\t\tsnapPositions.push(currentOffset);\n\t\t\tcurrentOffset += itemLayoutWidth + itemSpacing;\n\t\t}\n\n\t\t// Stable item width calculation for layout composition — all items render at largeWidth capacity\n\t\tconst getItemWidth = (_index: number): number => {\n\t\t\tif (layout === \"full-screen\") return safeContainerWidth;\n\t\t\treturn largeWidth;\n\t\t};\n\n\t\tconst getItemMaskClip = (index: number): number => {\n\t\t\tif (\n\t\t\t\tlayout === \"full-screen\" ||\n\t\t\t\tlayout === \"uncontained\" ||\n\t\t\t\tlayout === \"uncontained-multi-aspect\"\n\t\t\t) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tconst itemW = getItemRestWidth(index);\n\t\t\tif (itemW >= largeWidth || largeWidth <= 0) return 0;\n\t\t\treturn Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(100, Math.round(((largeWidth - itemW) / largeWidth) * 100)),\n\t\t\t);\n\t\t};\n\n\t\tconst getItemParallaxOffset = (index: number): number => {\n\t\t\tconst maskClip = getItemMaskClip(index);\n\t\t\tif (maskClip <= 0) return 0;\n\t\t\treturn calculateParallaxOffset(0, maskClip, largeWidth);\n\t\t};\n\n\t\tlet maxAccumulatedShift = 0;\n\t\tif (layout === \"hero\") {\n\t\t\tmaxAccumulatedShift = Math.max(\n\t\t\t\t0,\n\t\t\t\t(totalItems - 1) * (largeWidth - smallWidth),\n\t\t\t);\n\t\t} else if (layout === \"center-aligned-hero\") {\n\t\t\tmaxAccumulatedShift = Math.max(\n\t\t\t\t0,\n\t\t\t\tMath.min(totalItems, 2) * (largeWidth - smallWidth),\n\t\t\t);\n\t\t} else if (layout === \"multi-browse\") {\n\t\t\tconst availableWidth = safeContainerWidth - contentPadding * 2;\n\t\t\tconst numLarge = Math.max(\n\t\t\t\t1,\n\t\t\t\tMath.floor((availableWidth + itemSpacing) / (largeWidth + itemSpacing)),\n\t\t\t);\n\t\t\tconst nonLargeItems = Math.max(0, totalItems - numLarge);\n\t\t\tif (nonLargeItems > 0) {\n\t\t\t\tconst mediumClipped = largeWidth - mediumWidth;\n\t\t\t\tconst smallClipped = largeWidth - smallWidth;\n\t\t\t\tconst numSmall = Math.max(0, nonLargeItems - 1);\n\t\t\t\tmaxAccumulatedShift = mediumClipped + numSmall * smallClipped;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tlargeWidth,\n\t\t\tmediumWidth,\n\t\t\tsmallWidth,\n\t\t\tkeylines,\n\t\t\tsnapPositions,\n\t\t\tmaxAccumulatedShift,\n\t\t\tgetItemWidth,\n\t\t\tgetItemMaskClip,\n\t\t\tgetItemParallaxOffset,\n\t\t};\n\t}, [\n\t\tcontainerWidth,\n\t\tpreferredItemWidth,\n\t\tlayout,\n\t\titemSpacing,\n\t\tcontentPadding,\n\t\ttotalItems,\n\t]);\n}\n\n/**\n * Pure calculation helper: Dynamic mask clip percentage for an item based on its viewport X offset.\n */\nexport function calculateMaskClipForOffset(\n\titemLeftInViewport: number,\n\tcontainerWidth: number,\n\tlargeWidth: number,\n\tmediumWidth: number,\n\tsmallWidth: number,\n\tcontentPadding: number = 16,\n\tlayout: CarouselLayout = \"multi-browse\",\n): number {\n\tif (\n\t\tlayout === \"full-screen\" ||\n\t\tlayout === \"uncontained\" ||\n\t\tlayout === \"uncontained-multi-aspect\" ||\n\t\tlargeWidth <= 0\n\t) {\n\t\treturn 0;\n\t}\n\n\tconst mediumMask = Math.max(\n\t\t0,\n\t\tMath.min(100, ((largeWidth - mediumWidth) / largeWidth) * 100),\n\t);\n\tconst smallMask = Math.max(\n\t\t0,\n\t\tMath.min(100, ((largeWidth - smallWidth) / largeWidth) * 100),\n\t);\n\n\t// Trailing threshold: item approaching or passing right edge\n\tconst trailingFocalThreshold =\n\t\tcontainerWidth - contentPadding - mediumWidth - (largeWidth - mediumWidth);\n\tconst trailingMediumThreshold = containerWidth - contentPadding - smallWidth;\n\tconst trailingEndThreshold = containerWidth - contentPadding;\n\n\t// Leading threshold: item scrolling off left edge\n\tconst leadingThreshold = contentPadding;\n\n\t// Case 1: Item scrolling off the left edge\n\tif (itemLeftInViewport < leadingThreshold) {\n\t\tconst dist = leadingThreshold - itemLeftInViewport;\n\t\tconst progress = Math.min(1, Math.max(0, dist / largeWidth));\n\t\treturn Math.min(100, Math.max(0, progress * smallMask));\n\t}\n\n\t// Case 2: Item approaching the right edge\n\tif (itemLeftInViewport > trailingFocalThreshold) {\n\t\tif (itemLeftInViewport < trailingMediumThreshold) {\n\t\t\tconst range = Math.max(\n\t\t\t\t1,\n\t\t\t\ttrailingMediumThreshold - trailingFocalThreshold,\n\t\t\t);\n\t\t\tconst progress = Math.min(\n\t\t\t\t1,\n\t\t\t\tMath.max(0, (itemLeftInViewport - trailingFocalThreshold) / range),\n\t\t\t);\n\t\t\treturn progress * mediumMask;\n\t\t}\n\t\tconst range = Math.max(1, trailingEndThreshold - trailingMediumThreshold);\n\t\tconst progress = Math.min(\n\t\t\t1,\n\t\t\tMath.max(0, (itemLeftInViewport - trailingMediumThreshold) / range),\n\t\t);\n\t\treturn mediumMask + progress * (smallMask - mediumMask);\n\t}\n\n\t// Case 3: In focal zone\n\treturn 0;\n}\n\n/**\n * Pure calculation helper: Inner content parallax translation in px based on mask clip percentage.\n */\nexport function calculateParallaxOffset(\n\t_itemLeftInViewport: number,\n\tmaskClipPercent: number,\n\tlargeWidth: number,\n): number {\n\tif (maskClipPercent <= 0 || largeWidth <= 0) return 0;\n\treturn -Math.round((maskClipPercent / 100) * (largeWidth * 0.2));\n}\n","/**\n * @file carousel-scroll.tsx\n * Client scroll engine handling gesture tracking, scroll physics,\n * keyline matrix calculations, dynamic masks, and keyboard navigation.\n */\n\n\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CarouselProps } from \"./carousel.types\";\nimport { CarouselItem } from \"./carousel-item\";\nimport { useCarouselA11y } from \"./hooks/useCarouselA11y\";\nimport {\n\tcalculateMaskClipForOffset,\n\tcalculateParallaxOffset,\n\tuseCarouselKeylines,\n} from \"./hooks/useCarouselKeylines\";\n\nexport interface CarouselScrollClientProps<T = unknown>\n\textends CarouselProps<T> {\n\ttotalItemsCount: number;\n}\n\nexport function CarouselScrollClient<T = unknown>({\n\tchildren,\n\titems,\n\trenderItem,\n\tlayout = \"multi-browse\",\n\tpreferredItemWidth = 300,\n\titemSpacing = 8,\n\tcontentPadding = 16,\n\tverticalPadding = 8,\n\tuserScrollEnabled = true,\n\ttotalItemsCount,\n\tclassName,\n\tstyle,\n\t...props\n}: CarouselScrollClientProps<T>) {\n\tconst trackRef = React.useRef<HTMLDivElement>(null);\n\tconst [containerWidth, setContainerWidth] = React.useState<number>(600);\n\n\t// Refs for rAF scroll tracking and drag gesture physics\n\tconst rafIdRef = React.useRef<number | null>(null);\n\tconst isDraggingRef = React.useRef<boolean>(false);\n\tconst hasMovedRef = React.useRef<boolean>(false);\n\tconst startPosRef = React.useRef<number>(0);\n\tconst startScrollRef = React.useRef<number>(0);\n\n\t// Calculate stable keyline sizes without per-frame React re-renders\n\tconst keylines = useCarouselKeylines({\n\t\tcontainerWidth,\n\t\tpreferredItemWidth,\n\t\tlayout,\n\t\titemSpacing,\n\t\tcontentPadding,\n\t\ttotalItems: totalItemsCount,\n\t});\n\n\t// High performance rAF scroll handler updating CSS variables and GPU masks directly\n\tconst handleScroll = React.useCallback(() => {\n\t\tif (rafIdRef.current !== null) return;\n\n\t\trafIdRef.current = requestAnimationFrame(() => {\n\t\t\tconst track = trackRef.current;\n\t\t\tif (track) {\n\t\t\t\tconst scrollVal =\n\t\t\t\t\tlayout === \"full-screen\" ? track.scrollTop : track.scrollLeft;\n\t\t\t\ttrack.style.setProperty(\"--carousel-scroll-left\", `${scrollVal}px`);\n\n\t\t\t\tif (layout !== \"full-screen\") {\n\t\t\t\t\tconst prefersReducedMotion =\n\t\t\t\t\t\ttypeof window !== \"undefined\" &&\n\t\t\t\t\t\twindow.matchMedia?.(\"(prefers-reduced-motion: reduce)\")?.matches;\n\n\t\t\t\t\tlet accumulatedShift = 0;\n\n\t\t\t\t\tconst items = track.children;\n\t\t\t\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t\t\t\tconst itemEl = items[i] as HTMLElement;\n\t\t\t\t\t\tif (!itemEl || itemEl.getAttribute(\"role\") !== \"group\") continue;\n\n\t\t\t\t\t\tif (prefersReducedMotion) {\n\t\t\t\t\t\t\titemEl.style.clipPath = \"none\";\n\t\t\t\t\t\t\titemEl.style.transform = \"none\";\n\t\t\t\t\t\t\tconst innerContent = itemEl.firstElementChild as HTMLElement;\n\t\t\t\t\t\t\tif (innerContent) innerContent.style.transform = \"none\";\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// 1. Calculate native offset & visual (post-shift) offset\n\t\t\t\t\t\tconst nativeOffset = itemEl.offsetLeft - scrollVal;\n\t\t\t\t\t\tconst visualOffset = nativeOffset - accumulatedShift;\n\n\t\t\t\t\t\t// 2. Calculate dynamic mask based on true visual position\n\t\t\t\t\t\tconst maskPercent = calculateMaskClipForOffset(\n\t\t\t\t\t\t\tvisualOffset,\n\t\t\t\t\t\t\tcontainerWidth,\n\t\t\t\t\t\t\tkeylines.largeWidth,\n\t\t\t\t\t\t\tkeylines.mediumWidth,\n\t\t\t\t\t\t\tkeylines.smallWidth,\n\t\t\t\t\t\t\tcontentPadding,\n\t\t\t\t\t\t\tlayout,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// 3. Calculate how many pixels are visually removed from THIS item\n\t\t\t\t\t\tconst clippedPixels = (maskPercent / 100) * keylines.largeWidth;\n\n\t\t\t\t\t\t// 4. SHIFT item left by the accumulated lost space of all PREVIOUS items\n\t\t\t\t\t\titemEl.style.transform =\n\t\t\t\t\t\t\taccumulatedShift > 0\n\t\t\t\t\t\t\t\t? `translateX(${-accumulatedShift}px)`\n\t\t\t\t\t\t\t\t: \"none\";\n\n\t\t\t\t\t\t// 5. Apply the mask to visually shrink the item\n\t\t\t\t\t\titemEl.style.clipPath =\n\t\t\t\t\t\t\tmaskPercent > 0\n\t\t\t\t\t\t\t\t? `inset(0px ${maskPercent}% 0px 0px round 28px)`\n\t\t\t\t\t\t\t\t: \"none\";\n\n\t\t\t\t\t\t// 6. Apply parallax to inner content\n\t\t\t\t\t\tconst innerContent = itemEl.firstElementChild as HTMLElement;\n\t\t\t\t\t\tif (innerContent) {\n\t\t\t\t\t\t\tconst parallaxX = calculateParallaxOffset(\n\t\t\t\t\t\t\t\tvisualOffset,\n\t\t\t\t\t\t\t\tmaskPercent,\n\t\t\t\t\t\t\t\tkeylines.largeWidth,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tinnerContent.style.transform =\n\t\t\t\t\t\t\t\tparallaxX !== 0 ? `translateX(${parallaxX}px)` : \"none\";\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// 7. Add this item's clipped space to the accumulator for the next items\n\t\t\t\t\t\taccumulatedShift += clippedPixels;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\trafIdRef.current = null;\n\t\t});\n\t}, [\n\t\tlayout,\n\t\tcontainerWidth,\n\t\tkeylines.largeWidth,\n\t\tkeylines.mediumWidth,\n\t\tkeylines.smallWidth,\n\t\tcontentPadding,\n\t]);\n\n\t// Measure track container width using ResizeObserver and apply initial keylines\n\tReact.useEffect(() => {\n\t\tconst track = trackRef.current;\n\t\tif (!track) return;\n\n\t\tconst updateWidth = () => {\n\t\t\tif (track.clientWidth > 0) {\n\t\t\t\tsetContainerWidth(track.clientWidth);\n\t\t\t}\n\t\t};\n\n\t\tupdateWidth();\n\t\tconst observer = new ResizeObserver(updateWidth);\n\t\tobserver.observe(track);\n\t\treturn () => observer.disconnect();\n\t}, []);\n\n\t// Trigger initial keyline mask pass on mount or dimension changes\n\tReact.useEffect(() => {\n\t\thandleScroll();\n\t}, [handleScroll]);\n\n\t// Cleanup rAF on unmount\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tif (rafIdRef.current !== null) {\n\t\t\t\tcancelAnimationFrame(rafIdRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\t// Drag Gesture Physics\n\tconst handlePointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (!userScrollEnabled || e.button !== 0) return;\n\t\t\tconst track = trackRef.current;\n\t\t\tif (!track) return;\n\n\t\t\tisDraggingRef.current = true;\n\t\t\thasMovedRef.current = false;\n\t\t\tstartPosRef.current = layout === \"full-screen\" ? e.clientY : e.clientX;\n\t\t\tstartScrollRef.current =\n\t\t\t\tlayout === \"full-screen\" ? track.scrollTop : track.scrollLeft;\n\n\t\t\ttry {\n\t\t\t\t(e.target as HTMLElement).setPointerCapture?.(e.pointerId);\n\t\t\t} catch {\n\t\t\t\t// Ignore pointer capture errors if unsupported\n\t\t\t}\n\t\t},\n\t\t[userScrollEnabled, layout],\n\t);\n\n\tconst handlePointerMove = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (!isDraggingRef.current || !trackRef.current) return;\n\n\t\t\tconst currentPos = layout === \"full-screen\" ? e.clientY : e.clientX;\n\t\t\tconst delta = currentPos - startPosRef.current;\n\n\t\t\tif (Math.abs(delta) > 4) {\n\t\t\t\thasMovedRef.current = true;\n\t\t\t}\n\n\t\t\tif (hasMovedRef.current) {\n\t\t\t\tif (layout === \"full-screen\") {\n\t\t\t\t\ttrackRef.current.scrollTop = startScrollRef.current - delta;\n\t\t\t\t} else {\n\t\t\t\t\ttrackRef.current.scrollLeft = startScrollRef.current - delta;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[layout],\n\t);\n\n\tconst handlePointerUp = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (!isDraggingRef.current) return;\n\t\t\tisDraggingRef.current = false;\n\n\t\t\ttry {\n\t\t\t\t(e.target as HTMLElement).releasePointerCapture?.(e.pointerId);\n\t\t\t} catch {\n\t\t\t\t// Ignore if already released\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\t// Suppress click events if the user performed a drag gesture\n\tconst handleClickCapture = React.useCallback((e: React.MouseEvent) => {\n\t\tif (hasMovedRef.current) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t\thasMovedRef.current = false;\n\t\t}\n\t}, []);\n\n\t// Scroll into view helper for accessibility\n\tconst scrollToIndex = React.useCallback(\n\t\t(index: number) => {\n\t\t\tconst track = trackRef.current;\n\t\t\tif (!track) return;\n\t\t\tconst itemEl = track.children[index] as HTMLElement | undefined;\n\t\t\tif (!itemEl) return;\n\t\t\tconst targetPos = Math.max(0, itemEl.offsetLeft - contentPadding);\n\t\t\ttrack.scrollTo({\n\t\t\t\tleft: targetPos,\n\t\t\t\tbehavior: \"smooth\",\n\t\t\t});\n\t\t},\n\t\t[contentPadding],\n\t);\n\n\t// Accessibility keyboard navigation hook\n\tconst { focusedIndex, handleKeyDown, getItemA11yProps } = useCarouselA11y({\n\t\ttotalItems: totalItemsCount,\n\t\tscrollToIndex,\n\t});\n\n\t// Track layout classes\n\tconst isFullScreen = layout === \"full-screen\";\n\tconst isHero = layout === \"hero\" || layout === \"center-aligned-hero\";\n\n\tconst trackClasses = cn(\n\t\t// Base layout & GPU containment\n\t\t\"relative box-border select-none [contain:layout_style]\",\n\t\tuserScrollEnabled && \"cursor-grab active:cursor-grabbing\",\n\t\t// Scrollbar hide\n\t\t\"[scrollbar-width:none] [&::-webkit-scrollbar]:hidden\",\n\t\t// Full-screen: vertical snap column\n\t\tisFullScreen\n\t\t\t? \"flex flex-col flex-1 min-h-0 overflow-x-hidden overflow-y-auto p-0 gap-0 [scroll-snap-type:y_mandatory] [touch-action:pan-y]\"\n\t\t\t: \"flex flex-row items-stretch overflow-x-auto overflow-y-hidden [-webkit-overflow-scrolling:touch] [touch-action:pan-x]\",\n\t\t// Snap for hero/center-aligned-hero\n\t\tisHero && !isFullScreen && \"[scroll-snap-type:x_mandatory]\",\n\t\t// Disabled\n\t\t!userScrollEnabled &&\n\t\t\t\"overflow-x-hidden pointer-events-none [touch-action:none]\",\n\t\tclassName,\n\t);\n\n\tconst trackStyle: React.CSSProperties = isFullScreen\n\t\t? { ...style }\n\t\t: {\n\t\t\t\tpaddingLeft: `${contentPadding}px`,\n\t\t\t\tpaddingRight:\n\t\t\t\t\tlayout === \"uncontained\" || layout === \"uncontained-multi-aspect\"\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: `${contentPadding}px`,\n\t\t\t\tscrollPaddingLeft: `${contentPadding}px`,\n\t\t\t\tscrollPaddingRight: `${contentPadding}px`,\n\t\t\t\tpaddingTop: `${verticalPadding}px`,\n\t\t\t\tpaddingBottom: `${verticalPadding}px`,\n\t\t\t\tgap: `${itemSpacing}px`,\n\t\t\t\t...style,\n\t\t\t};\n\n\t// Determine rendered slides (CSR array vs RSC children)\n\tconst renderSlides = () => {\n\t\tif (items && renderItem) {\n\t\t\treturn items.map((item, index) => {\n\t\t\t\tconst itemWidth = keylines.largeWidth;\n\t\t\t\tconst maskClip = keylines.getItemMaskClip(index);\n\t\t\t\tconst parallax = keylines.getItemParallaxOffset(index);\n\t\t\t\tconst a11yProps = getItemA11yProps(index);\n\t\t\t\tconst itemKey =\n\t\t\t\t\ttypeof item === \"object\" && item !== null && \"id\" in item\n\t\t\t\t\t\t? (item as { id: React.Key }).id\n\t\t\t\t\t\t: typeof item === \"object\" && item !== null && \"key\" in item\n\t\t\t\t\t\t\t? (item as { key: React.Key }).key\n\t\t\t\t\t\t\t: index;\n\n\t\t\t\treturn (\n\t\t\t\t\t<CarouselItem\n\t\t\t\t\t\tkey={itemKey}\n\t\t\t\t\t\tindex={index}\n\t\t\t\t\t\ttotalItems={totalItemsCount}\n\t\t\t\t\t\tlayout={layout}\n\t\t\t\t\t\twidth={itemWidth}\n\t\t\t\t\t\tminContentWidth={keylines.largeWidth}\n\t\t\t\t\t\tmaskClipPercent={maskClip}\n\t\t\t\t\t\tparallaxOffset={parallax}\n\t\t\t\t\t\tisFocused={focusedIndex === index}\n\t\t\t\t\t\t{...a11yProps}\n\t\t\t\t\t>\n\t\t\t\t\t\t{renderItem(item, index)}\n\t\t\t\t\t</CarouselItem>\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\n\t\treturn React.Children.map(children, (child, index) => {\n\t\t\tif (!React.isValidElement(child)) return child;\n\n\t\t\tconst itemWidth = keylines.largeWidth;\n\t\t\tconst maskClip = keylines.getItemMaskClip(index);\n\t\t\tconst parallax = keylines.getItemParallaxOffset(index);\n\t\t\tconst a11yProps = getItemA11yProps(index);\n\t\t\tconst childKey = child.key != null ? child.key : index;\n\n\t\t\treturn (\n\t\t\t\t<CarouselItem\n\t\t\t\t\tkey={childKey}\n\t\t\t\t\tindex={index}\n\t\t\t\t\ttotalItems={totalItemsCount}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\twidth={itemWidth}\n\t\t\t\t\tminContentWidth={keylines.largeWidth}\n\t\t\t\t\tmaskClipPercent={maskClip}\n\t\t\t\t\tparallaxOffset={parallax}\n\t\t\t\t\tisFocused={focusedIndex === index}\n\t\t\t\t\t{...a11yProps}\n\t\t\t\t>\n\t\t\t\t\t{child}\n\t\t\t\t</CarouselItem>\n\t\t\t);\n\t\t});\n\t};\n\n\treturn (\n\t\t<section\n\t\t\tref={trackRef}\n\t\t\taria-roledescription=\"carousel\"\n\t\t\taria-label={props[\"aria-label\"] || \"Content carousel\"}\n\t\t\t// biome-ignore lint/a11y/noNoninteractiveTabindex: carousel region requires keyboard focus for arrow navigation\n\t\t\ttabIndex={0}\n\t\t\tclassName={trackClasses}\n\t\t\tstyle={trackStyle}\n\t\t\tonScroll={handleScroll}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerUp={handlePointerUp}\n\t\t\tonPointerCancel={handlePointerUp}\n\t\t\tonClickCapture={handleClickCapture}\n\t\t\tonKeyDown={handleKeyDown}\n\t\t\t{...props}\n\t\t>\n\t\t\t{renderSlides()}\n\t\t\t{!isFullScreen && (\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName=\"shrink-0 pointer-events-none\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\tmarginRight:\n\t\t\t\t\t\t\tkeylines.maxAccumulatedShift > 0\n\t\t\t\t\t\t\t\t? `-${keylines.maxAccumulatedShift}px`\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</section>\n\t);\n}\n","/**\n * @file carousel.tsx\n * Main Material Design 3 Expressive Carousel component.\n *\n * Provides Dual-Render API (RSC children vs CSR items + renderItem)\n * and Hybrid \"Show All\" Control Pattern (Uncontrolled internal state vs Controlled router delegation).\n *\n * @see docs/m3/carousel/Carousel_Specs_Material_Design_3.md\n * @see docs/m3/carousel/Carousel_Accessibility_Material_Design_3.md\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { CarouselProps } from \"./carousel.types\";\nimport { CarouselGrid } from \"./carousel-grid\";\nimport { CarouselScrollClient } from \"./carousel-scroll\";\n\nexport function Carousel<T = unknown>({\n\tchildren,\n\titems,\n\trenderItem,\n\tlayout = \"multi-browse\",\n\tpreferredItemWidth = 300,\n\titemSpacing = 8,\n\tcontentPadding = 16,\n\tverticalPadding = 8,\n\tisExpanded: controlledExpanded,\n\tonShowAllClick,\n\tshowAllLabel = \"Show all\",\n\tuserScrollEnabled = true,\n\tclassName,\n\tstyle,\n\t...props\n}: CarouselProps<T>) {\n\t// Uncontrolled internal state for \"Show all\" grid toggle\n\tconst [internalExpanded, setInternalExpanded] =\n\t\tReact.useState<boolean>(false);\n\n\tconst isExpanded = controlledExpanded ?? internalExpanded;\n\n\t// Calculate total items count\n\tconst totalItemsCount = React.useMemo(() => {\n\t\tif (items) return items.length;\n\t\treturn React.Children.count(children);\n\t}, [items, children]);\n\n\tconst handleShowAllToggle = React.useCallback(() => {\n\t\tif (onShowAllClick) {\n\t\t\tonShowAllClick();\n\t\t} else {\n\t\t\tsetInternalExpanded((prev) => !prev);\n\t\t}\n\t}, [onShowAllClick]);\n\n\tconst isFullScreen = layout === \"full-screen\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"relative w-full flex flex-col gap-3 box-border min-h-0\",\n\t\t\t\t// Full-screen: propagate height to track\n\t\t\t\tisFullScreen && \"flex-1\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{/* Show All Header Control (hidden in full-screen variant) */}\n\t\t\t{!isFullScreen && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"flex items-center justify-between\"\n\t\t\t\t\tstyle={{ padding: `0 ${contentPadding}px` }}\n\t\t\t\t>\n\t\t\t\t\t{props[\"aria-label\"] && (\n\t\t\t\t\t\t<h3 className=\"m-0 text-(length:--md-sys-typescale-title-medium-size,1.125rem) font-medium text-(--md-sys-color-on-surface,currentColor)\">\n\t\t\t\t\t\t\t{props[\"aria-label\"]}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t)}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"inline-flex items-center justify-center min-h-12 min-w-12 px-4 py-2\",\n\t\t\t\t\t\t\t\"rounded-[20px] border border-(--md-sys-color-outline-variant,rgba(121,116,126,0.3))\",\n\t\t\t\t\t\t\t\"bg-transparent text-(--md-sys-color-primary,#6750a4) font-medium text-[0.875rem]\",\n\t\t\t\t\t\t\t\"cursor-pointer outline-none transition-colors duration-200\",\n\t\t\t\t\t\t\t\"hover:bg-(--md-sys-color-surface-container-high,rgba(103,80,164,0.08))\",\n\t\t\t\t\t\t\t\"focus-visible:outline-[3px] focus-visible:outline-(--md-sys-color-secondary,#625b71) focus-visible:outline-offset-2\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tonClick={handleShowAllToggle}\n\t\t\t\t\t\taria-expanded={isExpanded}\n\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\tisExpanded\n\t\t\t\t\t\t\t\t? \"Collapse carousel view\"\n\t\t\t\t\t\t\t\t: `${showAllLabel} (${totalItemsCount} items)`\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isExpanded ? \"Show carousel\" : showAllLabel}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Main View: Responsive Grid or Scroll Carousel */}\n\t\t\t{isExpanded ? (\n\t\t\t\t<CarouselGrid\n\t\t\t\t\titems={items}\n\t\t\t\t\trenderItem={renderItem}\n\t\t\t\t\tpreferredItemWidth={preferredItemWidth}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</CarouselGrid>\n\t\t\t) : (\n\t\t\t\t<CarouselScrollClient\n\t\t\t\t\titems={items}\n\t\t\t\t\trenderItem={renderItem}\n\t\t\t\t\tlayout={layout}\n\t\t\t\t\tpreferredItemWidth={preferredItemWidth}\n\t\t\t\t\titemSpacing={itemSpacing}\n\t\t\t\t\tcontentPadding={contentPadding}\n\t\t\t\t\tverticalPadding={verticalPadding}\n\t\t\t\t\tuserScrollEnabled={userScrollEnabled}\n\t\t\t\t\ttotalItemsCount={totalItemsCount}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</CarouselScrollClient>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/**\n * @file checkbox.tsx\n * MD3 Expressive Checkbox — 2-state and tri-state support.\n * Spec: https://m3.material.io/components/checkbox/overview\n */\n\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\tuseReducedMotion,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Ripple, type RippleOrigin } from \"./ripple\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** MD3 Standard easing: checkmark draw and path morph. */\nconst MD3_STANDARD = [0.2, 0, 0, 1] as const;\n\n/** MD3 FastEffects easing: container fill (emphasizedAccelerate). */\nconst MD3_FAST_EFFECTS = [0.3, 0, 1, 1] as const;\n\n/**\n * SVG paths share the same command count (M→L→L) for Framer Motion d-morph.\n * viewBox: 18×18\n */\nconst CHECKMARK_PATH = \"M 4.5 9.5 L 7.5 12.5 L 13.5 5.5\";\nconst DASH_PATH = \"M 4.5 9 L 9 9 L 13.5 9\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Tri-state value: `\"unchecked\"` | `\"checked\"` | `\"indeterminate\"`.\n */\nexport type CheckboxState = \"unchecked\" | \"checked\" | \"indeterminate\";\n\n/**\n * Props for `Checkbox`. Supports boolean (`checked`/`onCheckedChange`)\n * and tri-state (`state`/`onStateChange`) modes.\n */\nexport interface CheckboxProps {\n\t/** Controlled checked value (2-state mode). */\n\tchecked?: boolean;\n\t/** Initial value for uncontrolled mode. @default false */\n\tdefaultChecked?: boolean;\n\t/** Forces indeterminate rendering regardless of `checked`. */\n\tindeterminate?: boolean;\n\t/** Fired on checked change (simple mode). Not called when disabled. */\n\tonCheckedChange?: (checked: boolean) => void;\n\n\t/** Controlled tri-state value. Takes priority over `checked`/`indeterminate`. */\n\tstate?: CheckboxState;\n\t/** Fired on tri-state change. Cycles: unchecked → checked → indeterminate. */\n\tonStateChange?: (state: CheckboxState) => void;\n\n\t/** Disables interaction and applies 0.38 opacity. */\n\tdisabled?: boolean;\n\t/** Error state — changes colors to `m3-error` and sets `aria-invalid`. */\n\terror?: boolean;\n\n\t/** Adjacent label text. Wraps checkbox + span in `<label>`. */\n\tlabel?: string;\n\t\"aria-label\"?: string;\n\t\"aria-labelledby\"?: string;\n\t\"aria-describedby\"?: string;\n\t\"aria-required\"?: boolean;\n\n\t/** Passed to the hidden `<input>` for form submission. */\n\tname?: string;\n\t/** Passed to the hidden `<input>` for form submission. */\n\tvalue?: string;\n\t/** ID for the hidden `<input>`. Auto-generated when `label` is set. */\n\tid?: string;\n\n\t/** Extra class names on the outermost wrapper. */\n\tclassName?: string;\n\t/** Ref pointing to the hidden `<input type=\"checkbox\">`. */\n\tref?: React.Ref<HTMLInputElement>;\n}\n\n/**\n * `TriStateCheckbox` props — requires `state` + `onStateChange`.\n */\nexport interface TriStateCheckboxProps\n\textends Omit<\n\t\tCheckboxProps,\n\t\t\"checked\" | \"defaultChecked\" | \"onCheckedChange\"\n\t> {\n\tstate: CheckboxState;\n\tonStateChange: (state: CheckboxState) => void;\n}\n\n// ─── State helpers ────────────────────────────────────────────────────────────\n\n/** Priority: `state` prop > `indeterminate` > `checked`. @internal */\nfunction resolveState(\n\tchecked?: boolean,\n\tindeterminate?: boolean,\n\tstate?: CheckboxState,\n): CheckboxState {\n\tif (state !== undefined) return state;\n\tif (indeterminate) return \"indeterminate\";\n\treturn checked ? \"checked\" : \"unchecked\";\n}\n\n/** Tri-state cycle: unchecked → checked → indeterminate → unchecked. */\nconst NEXT_STATE: Record<CheckboxState, CheckboxState> = {\n\tunchecked: \"checked\",\n\tchecked: \"indeterminate\",\n\tindeterminate: \"unchecked\",\n};\n\n// ─── Internal subcomponents ───────────────────────────────────────────────────\n\ninterface CheckboxVisualProps {\n\tisSelected: boolean;\n\tisIndeterminate: boolean;\n\tcontainerBg: string;\n\tcontainerBorderColor: string;\n\tcontainerBorderWidth: number;\n\ticonColor: string;\n\tsvgPath: string;\n\tpathLength: number;\n\tfillDuration: number;\n\tdrawDuration: number;\n\tmorphDuration: number;\n\tprefersReduced: boolean;\n}\n\n/** Animated 18×18dp checkbox box (container + SVG icon). @internal */\nconst CheckboxVisual = React.memo(function CheckboxVisual({\n\tisSelected,\n\tisIndeterminate,\n\tcontainerBg,\n\tcontainerBorderColor,\n\tcontainerBorderWidth,\n\ticonColor,\n\tsvgPath,\n\tpathLength,\n\tfillDuration,\n\tdrawDuration,\n\tmorphDuration,\n\tprefersReduced,\n}: CheckboxVisualProps) {\n\treturn (\n\t\t<m.div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"relative flex items-center justify-center w-4.5 h-4.5 rounded-sm overflow-hidden\"\n\t\t\tanimate={{\n\t\t\t\tbackgroundColor: containerBg,\n\t\t\t\tborderColor: containerBorderColor,\n\t\t\t\tborderWidth: containerBorderWidth,\n\t\t\t}}\n\t\t\ttransition={{\n\t\t\t\tbackgroundColor: {\n\t\t\t\t\tduration: fillDuration,\n\t\t\t\t\tease: isSelected ? MD3_FAST_EFFECTS : \"easeOut\",\n\t\t\t\t},\n\t\t\t\tborderColor: { duration: fillDuration, ease: \"easeOut\" },\n\t\t\t\tborderWidth: { duration: fillDuration, ease: \"easeOut\" },\n\t\t\t}}\n\t\t\tstyle={{ borderStyle: \"solid\" }}\n\t\t>\n\t\t\t<AnimatePresence>\n\t\t\t\t{isSelected && (\n\t\t\t\t\t<m.svg\n\t\t\t\t\t\tkey=\"icon\"\n\t\t\t\t\t\tviewBox=\"0 0 18 18\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\twidth={18}\n\t\t\t\t\t\theight={18}\n\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\ttransition={{ duration: prefersReduced ? 0 : 0.1 }}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<m.path\n\t\t\t\t\t\t\td={svgPath}\n\t\t\t\t\t\t\tstroke={iconColor}\n\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\td: svgPath,\n\t\t\t\t\t\t\t\tpathLength: isIndeterminate ? 1 : pathLength,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tinitial={{ pathLength: 0 }}\n\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\td: { duration: morphDuration, ease: MD3_STANDARD },\n\t\t\t\t\t\t\t\tpathLength: { duration: drawDuration, ease: MD3_STANDARD },\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</m.svg>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</m.div>\n\t);\n});\n\n// ─── useMergedRef ─────────────────────────────────────────────────────────────\n\n/** Merges external + internal refs into a single callback ref. @internal */\nfunction useMergedRef<T>(\n\texternalRef: React.Ref<T> | undefined,\n\tinternalRef: React.RefObject<T | null>,\n): React.RefCallback<T> {\n\treturn React.useCallback(\n\t\t(node: T | null) => {\n\t\t\t(internalRef as React.MutableRefObject<T | null>).current = node;\n\t\t\tif (!externalRef) return;\n\t\t\tif (typeof externalRef === \"function\") {\n\t\t\t\texternalRef(node);\n\t\t\t} else {\n\t\t\t\t(externalRef as React.MutableRefObject<T | null>).current = node;\n\t\t\t}\n\t\t},\n\t\t[externalRef, internalRef],\n\t);\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nconst CheckboxComponent = React.forwardRef<HTMLInputElement, CheckboxProps>(\n\t(\n\t\t{\n\t\t\tchecked,\n\t\t\tdefaultChecked = false,\n\t\t\tindeterminate = false,\n\t\t\tonCheckedChange,\n\t\t\tstate: stateProp,\n\t\t\tonStateChange,\n\t\t\tdisabled = false,\n\t\t\terror = false,\n\t\t\tlabel,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\t\"aria-describedby\": ariaDescribedby,\n\t\t\t\"aria-required\": ariaRequired,\n\t\t\tname,\n\t\t\tvalue,\n\t\t\tid: idProp,\n\t\t\tclassName,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\tconst generatedId = React.useId();\n\t\tconst inputId = idProp ?? (label ? `checkbox-${generatedId}` : undefined);\n\n\t\tconst [internalState, setInternalState] = React.useState<CheckboxState>(\n\t\t\t() => (defaultChecked ? \"checked\" : \"unchecked\"),\n\t\t);\n\n\t\t// `state` and `checked` determine controlled vs uncontrolled.\n\t\t// `indeterminate` is visual-only and always overrides.\n\t\tconst isControlled = stateProp !== undefined || checked !== undefined;\n\t\tconst baseState = isControlled\n\t\t\t? resolveState(checked, false, stateProp)\n\t\t\t: internalState;\n\t\tconst effectiveState: CheckboxState = indeterminate\n\t\t\t? \"indeterminate\"\n\t\t\t: baseState;\n\n\t\t// ── Ripple ──────────────────────────────────────────────────────────\n\t\tconst [ripples, setRipples] = React.useState<RippleOrigin[]>([]);\n\t\tconst removeRipple = React.useCallback(\n\t\t\t(id: number) => setRipples((prev) => prev.filter((r) => r.id !== id)),\n\t\t\t[],\n\t\t);\n\n\t\tconst onPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tconst rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\t\t\t\t// Ripple origin offset by 4px to simulate a 40×40 state layer inside 48×48 touch target.\n\t\t\t\tconst x = e.clientX - rect.left - 4;\n\t\t\t\tconst y = e.clientY - rect.top - 4;\n\t\t\t\tconst rippleSize = Math.hypot(40, 40) * 2;\n\t\t\t\tsetRipples((prev) => [\n\t\t\t\t\t...prev,\n\t\t\t\t\t{ id: Date.now(), x, y, size: rippleSize },\n\t\t\t\t]);\n\t\t\t},\n\t\t\t[disabled],\n\t\t);\n\n\t\t// ── Change handler ───────────────────────────────────────────────────\n\t\tconst handleChange = React.useCallback(\n\t\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\t\tif (disabled) return;\n\n\t\t\t\tif (stateProp !== undefined) {\n\t\t\t\t\tonStateChange?.(NEXT_STATE[effectiveState]);\n\t\t\t\t} else if (checked !== undefined) {\n\t\t\t\t\tonCheckedChange?.(e.target.checked);\n\t\t\t\t} else {\n\t\t\t\t\tconst next = NEXT_STATE[effectiveState];\n\t\t\t\t\tsetInternalState(next);\n\t\t\t\t\tif (next === \"indeterminate\") {\n\t\t\t\t\t\tonStateChange?.(next);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonCheckedChange?.(next === \"checked\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tdisabled,\n\t\t\t\tstateProp,\n\t\t\t\tchecked,\n\t\t\t\teffectiveState,\n\t\t\t\tonStateChange,\n\t\t\t\tonCheckedChange,\n\t\t\t],\n\t\t);\n\n\t\t// ── Sync indeterminate DOM property ──────────────────────────────────\n\t\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\t\tconst mergedRef = useMergedRef(ref, inputRef);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (inputRef.current) {\n\t\t\t\tinputRef.current.indeterminate = effectiveState === \"indeterminate\";\n\t\t\t}\n\t\t}, [effectiveState]);\n\n\t\t// ── Derived visual state ─────────────────────────────────────────────\n\t\tconst isChecked = effectiveState === \"checked\";\n\t\tconst isIndeterminate = effectiveState === \"indeterminate\";\n\t\tconst isSelected = isChecked || isIndeterminate;\n\t\tconst ariaChecked = isIndeterminate ? (\"mixed\" as const) : isChecked;\n\n\t\t// ── Animation values ─────────────────────────────────────────────────\n\t\tconst accentColor = error\n\t\t\t? \"var(--color-m3-error)\"\n\t\t\t: \"var(--color-m3-primary)\";\n\t\tconst onAccentColor = error\n\t\t\t? \"var(--color-m3-on-error)\"\n\t\t\t: \"var(--color-m3-on-primary)\";\n\n\t\t// MD3 Outline color (on-surface with 38% opacity)\n\t\t// We use a CSS variable or a static RGBA to ensure Framer Motion can animate it.\n\t\t// Since color-mix is not animatable, we'll use the variable directly if it's a plain color,\n\t\t// or use a fallback. Better yet, we can use the style prop for static colors\n\t\t// and only animate opacity if needed, but here we want to animate the color itself.\n\t\tconst outlineColor = error\n\t\t\t? \"var(--color-m3-error)\"\n\t\t\t: \"rgba(0, 0, 0, 0.38)\"; // Standard fallback for on-surface 38%\n\n\t\tconst containerBg = isSelected ? accentColor : \"rgba(0, 0, 0, 0)\";\n\t\tconst containerBorderColor = isSelected ? \"rgba(0, 0, 0, 0)\" : outlineColor;\n\t\tconst containerBorderWidth = isSelected ? 0 : 2;\n\t\tconst iconColor = isSelected ? onAccentColor : \"rgba(0, 0, 0, 0)\";\n\n\t\tconst svgPath = isIndeterminate ? DASH_PATH : CHECKMARK_PATH;\n\t\tconst pathLength = isSelected ? 1 : 0;\n\n\t\tconst fillDuration = prefersReduced ? 0 : isSelected ? 0.15 : 0.1;\n\t\tconst drawDuration = prefersReduced ? 0 : isSelected ? 0.2 : 0.1;\n\t\tconst morphDuration = prefersReduced ? 0 : 0.2;\n\n\t\t// ── State layer classes ──────────────────────────────────────────────\n\t\tconst stateLayerBg = isSelected\n\t\t\t? error\n\t\t\t\t? \"before:bg-m3-error\"\n\t\t\t\t: \"before:bg-m3-primary\"\n\t\t\t: error\n\t\t\t\t? \"before:bg-m3-error\"\n\t\t\t\t: \"before:bg-m3-on-surface\";\n\n\t\tconst stateLayerClass = cn(\n\t\t\t\"before:absolute before:inset-0 before:rounded-full before:pointer-events-none\",\n\t\t\t\"before:transition-opacity before:duration-150 before:opacity-0\",\n\t\t\t\"group-hover/cbx:before:opacity-[0.08]\",\n\t\t\t\"group-focus-within/cbx:before:opacity-[0.10]\",\n\t\t\t\"group-active/cbx:before:opacity-[0.10]\",\n\t\t\tstateLayerBg,\n\t\t);\n\n\t\t// ── Shared visual props ──────────────────────────────────────────────\n\t\tconst visualProps: CheckboxVisualProps = {\n\t\t\tisSelected,\n\t\t\tisIndeterminate,\n\t\t\tcontainerBg,\n\t\t\tcontainerBorderColor,\n\t\t\tcontainerBorderWidth,\n\t\t\ticonColor,\n\t\t\tsvgPath,\n\t\t\tpathLength,\n\t\t\tfillDuration,\n\t\t\tdrawDuration,\n\t\t\tmorphDuration,\n\t\t\tprefersReduced,\n\t\t};\n\n\t\tconst touchTargetClass = cn(\n\t\t\t\"relative inline-flex items-center justify-center outline-none shrink-0\",\n\t\t\t\"w-12 h-12 group/cbx\",\n\t\t\tdisabled && \"pointer-events-none\",\n\t\t);\n\n\t\t// ── Render ───────────────────────────────────────────────────────────\n\t\tconst stateLayerAndRipple = (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"absolute flex items-center justify-center w-10 h-10 m-auto inset-0 rounded-full overflow-hidden pointer-events-none\",\n\t\t\t\t\tstateLayerClass,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t<Ripple\n\t\t\t\t\tripples={ripples}\n\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\n\t\tconst hiddenInput = (\n\t\t\t<input\n\t\t\t\tref={mergedRef}\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tvalue={value}\n\t\t\t\tchecked={isChecked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-checked={ariaChecked}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\taria-describedby={ariaDescribedby}\n\t\t\t\taria-required={ariaRequired}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tclassName=\"sr-only\"\n\t\t\t/>\n\t\t);\n\n\t\tif (label) {\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<label\n\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"inline-flex items-center gap-2 cursor-pointer select-none\",\n\t\t\t\t\t\t\tdisabled &&\n\t\t\t\t\t\t\t\t\"cursor-not-allowed opacity-[0.38] pointer-events-none\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className={touchTargetClass} onPointerDown={onPointerDown}>\n\t\t\t\t\t\t\t{stateLayerAndRipple}\n\t\t\t\t\t\t\t{hiddenInput}\n\t\t\t\t\t\t\t<CheckboxVisual {...visualProps} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span className=\"text-sm leading-none text-m3-on-surface\">\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<label\n\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\tclassName={cn(touchTargetClass, \"cursor-pointer\", className)}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t>\n\t\t\t\t\t{stateLayerAndRipple}\n\t\t\t\t\t{hiddenInput}\n\t\t\t\t\t<CheckboxVisual {...visualProps} />\n\t\t\t\t</label>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nCheckboxComponent.displayName = \"Checkbox\";\n\n/**\n * MD3 Expressive Checkbox component.\n *\n * Supports 2-state and tri-state patterns. Fully animated per MD3 spec:\n * checkmark draw, indeterminate dash morph, container fill, state layer, and ripple.\n *\n * @example\n * ```tsx\n * <Checkbox checked={isChecked} onCheckedChange={setIsChecked} label=\"Accept terms\" />\n * <Checkbox state={parentState} onStateChange={setParentState} label=\"Select all\" />\n * <Checkbox error label=\"Required field\" aria-describedby=\"err-msg\" />\n * ```\n * @see https://m3.material.io/components/checkbox/overview\n */\nexport const Checkbox = React.memo(CheckboxComponent);\n\n// ─── TriStateCheckbox ─────────────────────────────────────────────────────────\n\nconst TriStateCheckboxComponent = React.forwardRef<\n\tHTMLInputElement,\n\tTriStateCheckboxProps\n>(({ state, onStateChange, ...rest }, ref) => (\n\t<Checkbox ref={ref} state={state} onStateChange={onStateChange} {...rest} />\n));\n\nTriStateCheckboxComponent.displayName = \"TriStateCheckbox\";\n\n/**\n * MD3 Expressive Tri-State Checkbox.\n *\n * Convenience wrapper around `Checkbox` that enforces `state` + `onStateChange`.\n * Ideal for parent-child selection patterns.\n *\n * @example\n * ```tsx\n * <TriStateCheckbox state={parentState} onStateChange={setParentState} label=\"Select all\" />\n * ```\n */\nexport const TriStateCheckbox = React.memo(TriStateCheckboxComponent);\n","/**\n * @file chip.tsx\n *\n * MD3 Expressive Chip component — 4 variants.\n *\n * - `assist`     → Triggered actions spanning multiple apps. Flat (bordered) or Elevated.\n * - `filter`     → Toggleable selections. Animated checkmark on select.\n * - `input`      → Entities/tags with optional avatar and a dedicated remove button.\n * - `suggestion` → Contextual dynamic recommendations. Flat (bordered) or Elevated.\n *\n * @remarks\n * Token references (Kotlin source):\n * AssistChipTokens, FilterChipTokens, InputChipTokens, SuggestionChipTokens\n *\n * Architecture:\n * - Styling: `cva` + `cn` (clsx/tailwind-merge)\n * - Animation: Framer Motion (`LazyMotion` + `domMax`) for animated checkmark\n * - Ripple: `Ripple` + `useRippleState` from `./ripple.tsx`\n * - A11y: `role=\"checkbox\"` (filter), `role=\"button\"` (others); full keyboard support\n *\n * @see https://m3.material.io/components/chips/overview\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { AnimatePresence, domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Ripple, useRippleState } from \"./ripple\";\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Internal Icons\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Animated checkmark icon for selected Filter chips.\n * @internal\n */\nfunction CheckIcon({ className }: { className?: string }) {\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\twidth={18}\n\t\t\theight={18}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2.5}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={className}\n\t\t>\n\t\t\t<polyline points=\"20 6 9 17 4 12\" />\n\t\t</svg>\n\t);\n}\n\n/**\n * Close (×) icon for the trailing remove button on Input chips.\n * @internal\n */\nfunction CloseIcon({ className }: { className?: string }) {\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\twidth={18}\n\t\t\theight={18}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={2.5}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={className}\n\t\t>\n\t\t\t<line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n\t\t\t<line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n\t\t</svg>\n\t);\n}\n\n// CVA Variants\n// Token mapping references (Kotlin source):\n// - FlatOutlineColor (all variants): border-m3-outline-variant\n// - FlatSelectedContainerColor: bg-m3-secondary-container\n// - SelectedLabelTextColor: text-m3-on-secondary-container\n// - ElevatedContainerColor: bg-m3-surface-container-low\n\nconst chipVariants = cva(\n\t[\n\t\t// Base layout\n\t\t\"inline-flex items-center h-8 rounded-lg shrink-0\",\n\t\t// Typography: LabelLarge\n\t\t\"text-sm font-medium leading-none\",\n\t\t// Interaction\n\t\t\"relative overflow-hidden cursor-pointer select-none\",\n\t\t\"transition-all duration-200 ease-in-out\",\n\t\t// Remove browser default focus; use MD3 focus ring\n\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-1\",\n\t\t\"focus-visible:ring-m3-secondary\",\n\t\t// MD3 State Layer (pseudo-element overlay)\n\t\t// Use inset-[-1px] to ensure the state layer covers the 1px border perfectly\n\t\t\"before:absolute before:inset-[-1px] before:pointer-events-none before:rounded-lg\",\n\t\t\"before:transition-opacity before:duration-200 before:opacity-0\",\n\t\t\"hover:before:opacity-[0.08] focus-visible:before:opacity-[0.10] active:before:opacity-[0.10]\",\n\t].join(\" \"),\n\t{\n\t\tvariants: {\n\t\t\t/**\n\t\t\t * Chip variant controlling default colors and border behavior.\n\t\t\t * Selected/elevated state overrides are applied via `cn()` at runtime.\n\t\t\t */\n\t\t\tvariant: {\n\t\t\t\t/**\n\t\t\t\t * Assist chip – FlatOutlineColor: outline-variant, LabelTextColor: on-surface\n\t\t\t\t * Leading icon color: primary (AssistChipTokens.IconColor)\n\t\t\t\t */\n\t\t\t\tassist:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface before:bg-m3-on-surface\",\n\t\t\t\t/**\n\t\t\t\t * Filter chip (unselected) – FlatUnselectedOutlineColor: outline-variant\n\t\t\t\t * UnselectedLabelTextColor: on-surface-variant\n\t\t\t\t */\n\t\t\t\tfilter:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface-variant before:bg-m3-on-surface-variant\",\n\t\t\t\t/**\n\t\t\t\t * Input chip (unselected) – UnselectedOutlineColor: outline-variant\n\t\t\t\t * UnselectedLabelTextColor: on-surface-variant\n\t\t\t\t */\n\t\t\t\tinput:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface-variant before:bg-m3-on-surface-variant\",\n\t\t\t\t/**\n\t\t\t\t * Suggestion chip – FlatOutlineColor: outline-variant\n\t\t\t\t * LabelTextColor: on-surface-variant (SuggestionChipTokens)\n\t\t\t\t */\n\t\t\t\tsuggestion:\n\t\t\t\t\t\"border border-m3-outline-variant text-m3-on-surface-variant before:bg-m3-on-surface-variant\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { variant: \"assist\" },\n\t},\n);\n\nexport interface ChipProps\n\textends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"children\"> {\n\t/**\n\t * Chip variant.\n\t * - `assist`     → Smart/automated actions. Flat by default, can be elevated.\n\t * - `filter`     → Toggleable tag/filter. Shows animated checkmark when selected.\n\t * - `input`      → Entity representation (tag, contact). Has optional avatar + remove button.\n\t * - `suggestion` → Contextual suggestions. Like assist, flat by default, can be elevated.\n\t * @default 'assist'\n\t */\n\tvariant?: VariantProps<typeof chipVariants>[\"variant\"];\n\n\t/**\n\t * Renders with elevation shadow (Level 1) and fills background with `surface-container-low`.\n\t * Applicable to `assist`, `filter` (unselected), and `suggestion` variants.\n\t * Source: AssistChipTokens.ElevatedContainerColor / SuggestionChipTokens.ElevatedContainerColor\n\t */\n\televated?: boolean;\n\n\t/**\n\t * Toggle/selection state.\n\t * - `filter`:     selected → bg `secondary-container`, animated checkmark appears.\n\t * - `input`:      selected → bg `secondary-container`.\n\t * - `suggestion`: selected → bg `secondary-container`.\n\t * Used for `role=\"checkbox\"` (filter) / `aria-pressed` (input/suggestion).\n\t */\n\tselected?: boolean;\n\n\t/**\n\t * Disables the chip. Applies:\n\t * - `pointer-events-none` – no mouse/touch interaction\n\t * - `opacity-[0.38]`      – DisabledLabelTextOpacity (0.38) per MD3 tokens\n\t * - `text-m3-on-surface`  – DisabledLabelTextColor per MD3 tokens\n\t * - `aria-disabled=\"true\"`\n\t * - `tabIndex={-1}`\n\t */\n\tdisabled?: boolean;\n\n\t/**\n\t * Visible label. Required. Can be a string or ReactNode.\n\t */\n\tlabel: React.ReactNode;\n\n\t/**\n\t * Optional leading icon element (18×18px recommended).\n\t * For `filter` chips with `selected=true`, this is replaced by an animated checkmark.\n\t * For `assist`/`suggestion`: icon color → `primary`\n\t * For `input` (unselected): icon color → `on-surface-variant`\n\t */\n\tleadingIcon?: React.ReactNode;\n\n\t/**\n\t * Optional trailing icon element (18×18px recommended).\n\t * Supported across all chip variants including `filter` (alongside checkmark).\n\t * Color: `on-surface-variant` (unselected) / `on-secondary-container` (selected).\n\t */\n\ttrailingIcon?: React.ReactNode;\n\n\t/**\n\t * Avatar element for `input` chips. Takes priority over `leadingIcon`.\n\t * Rendered as a 24×24px circle (InputChipTokens: AvatarSize = 24.dp, AvatarShape = CornerFull).\n\t */\n\tavatar?: React.ReactNode;\n\n\t/**\n\t * Callback when the trailing remove (×) button is activated on `input` chips.\n\t * When provided, a dedicated tabbable close button with `aria-label=\"Remove {label}\"` is rendered.\n\t */\n\tonRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\n\t/**\n\t * Change the component to the underlying child element and merge props/behavior.\n\t * Useful when wrapping in Next.js `<Link>` or custom anchor tags.\n\t * @default false\n\t */\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\nconst ChipImpl = React.forwardRef<HTMLButtonElement, ChipProps>(\n\t(\n\t\t{\n\t\t\tvariant = \"assist\",\n\t\t\televated = false,\n\t\t\tselected = false,\n\t\t\tdisabled = false,\n\t\t\tlabel,\n\t\t\tleadingIcon,\n\t\t\ttrailingIcon,\n\t\t\tavatar,\n\t\t\tonRemove,\n\t\t\tclassName,\n\t\t\tonClick,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tif (\n\t\t\t(\n\t\t\t\tglobalThis as unknown as {\n\t\t\t\t\tprocess?: { env?: { NODE_ENV?: string } };\n\t\t\t\t}\n\t\t\t).process?.env?.NODE_ENV !== \"production\"\n\t\t) {\n\t\t\tif (variant === \"assist\" && selected) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"[Chip] variant='assist' does not support `selected` state per Material Design 3 specification.\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled,\n\t\t});\n\n\t\tconst isFilter = variant === \"filter\";\n\t\tconst isInput = variant === \"input\";\n\t\tconst isSelectable = isFilter || isInput || variant === \"suggestion\";\n\n\t\t/**\n\t\t * For input chips, avatar takes priority over leadingIcon.\n\t\t * Source: leadingContent() in Chip.kt – \"An avatar takes precedence\"\n\t\t */\n\t\tconst resolvedLeadingIcon = isInput && avatar ? avatar : leadingIcon;\n\n\t\t/**\n\t\t * Filter chip: when selected, show animated checkmark.\n\t\t * If a leadingIcon is provided, the checkmark replaces it when selected.\n\t\t * Source: Chip.kt – AnimatedVisibility with expandHorizontally + fadeIn\n\t\t */\n\t\tconst showCheckmark = isFilter && selected;\n\n\t\t/** Trailing slot: custom trailingIcon OR the remove button for input chips */\n\t\tconst hasTrailingContent = !!trailingIcon || !!onRemove;\n\n\t\t/**\n\t\t * Leading slot: filter chips have leading content when selected (checkmark)\n\t\t * or when a leadingIcon is provided. Otherwise depends on resolvedLeadingIcon.\n\t\t */\n\t\tconst hasLeadingContent =\n\t\t\t(isFilter && (selected || !!resolvedLeadingIcon)) ||\n\t\t\t(!isFilter && !!resolvedLeadingIcon);\n\n\t\t// Source: AssistChipDefaults.ContentPadding / inputChipPadding in Chip.kt\n\t\t// No icons:      px-4 | Input: px-3\n\t\t// Leading only:  pl-2 pr-4 | Input: pl-1 pr-3\n\t\t// Trailing only: pl-4 pr-2 | Input: pl-3 pr-2\n\t\t// Both:          px-2 | Input: pl-1 pr-2\n\t\tconst paddingClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcn(\n\t\t\t\t\t!isInput && !hasLeadingContent && !hasTrailingContent && \"px-4\",\n\t\t\t\t\t!isInput && hasLeadingContent && !hasTrailingContent && \"pl-2 pr-4\",\n\t\t\t\t\t!isInput && !hasLeadingContent && hasTrailingContent && \"pl-4 pr-2\",\n\t\t\t\t\t!isInput && hasLeadingContent && hasTrailingContent && \"px-2\",\n\t\t\t\t\tisInput && !hasLeadingContent && !hasTrailingContent && \"px-3\",\n\t\t\t\t\tisInput && hasLeadingContent && !hasTrailingContent && \"pl-1 pr-3\",\n\t\t\t\t\tisInput && !hasLeadingContent && hasTrailingContent && \"pl-3 pr-2\",\n\t\t\t\t\tisInput && hasLeadingContent && hasTrailingContent && \"pl-1 pr-2\",\n\t\t\t\t),\n\t\t\t[isInput, hasLeadingContent, hasTrailingContent],\n\t\t);\n\n\t\t// Selected / elevated / disabled state overrides.\n\t\t// Source: MD3 tokens — DisabledLabelTextOpacity=0.38, FlatDisabledOutlineOpacity=0.12\n\t\tconst stateClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcn(\n\t\t\t\t\tisSelectable &&\n\t\t\t\t\t\tselected &&\n\t\t\t\t\t\t\"bg-m3-secondary-container text-m3-on-secondary-container border-none before:bg-m3-on-secondary-container\",\n\t\t\t\t\televated &&\n\t\t\t\t\t\t!selected &&\n\t\t\t\t\t\t\"bg-m3-surface-container-low border-none elevation-1\",\n\t\t\t\t\televated && isFilter && selected && \"elevation-1\",\n\t\t\t\t\tdisabled &&\n\t\t\t\t\t\t\"opacity-[0.38] pointer-events-none cursor-not-allowed text-m3-on-surface\",\n\t\t\t\t\tdisabled && !selected && \"border-m3-outline-variant/[.12]\",\n\t\t\t\t\tdisabled && selected && \"bg-m3-on-surface/[.12] border-none\",\n\t\t\t\t),\n\t\t\t[isSelectable, isFilter, selected, elevated, disabled],\n\t\t);\n\n\t\t// Leading icon color tokens:\n\t\t// assist/suggestion → Primary | filter unselected → Primary\n\t\t// filter selected → OnSecondaryContainer | input unselected → OnSurfaceVariant | input selected → Primary\n\t\tconst leadingIconColorClass = React.useMemo(\n\t\t\t() =>\n\t\t\t\tcn(\n\t\t\t\t\t(variant === \"assist\" || variant === \"suggestion\") &&\n\t\t\t\t\t\t\"text-m3-primary\",\n\t\t\t\t\tisFilter && !selected && \"text-m3-primary\",\n\t\t\t\t\tisFilter && selected && \"text-m3-on-secondary-container\",\n\t\t\t\t\tisInput && !selected && \"text-m3-on-surface-variant\",\n\t\t\t\t\tisInput && selected && \"text-m3-primary\",\n\t\t\t\t),\n\t\t\t[variant, isFilter, isInput, selected],\n\t\t);\n\n\t\tconst isCompound = !!onRemove;\n\t\tconst Root = (isCompound ? \"div\" : \"button\") as React.ElementType;\n\n\t\t// Composed class for the root container\n\t\tconst containerClass = cn(\n\t\t\tchipVariants({ variant }),\n\t\t\t!isCompound && paddingClass,\n\t\t\t!isCompound && \"gap-2\",\n\t\t\tstateClass,\n\t\t\t// When compound, the root div handles the overall shape and the main state layer\n\t\t\tisCompound && [\n\t\t\t\t\"items-stretch cursor-default gap-0 group/chip\",\n\t\t\t\t\"hover:before:opacity-0 focus-visible:before:opacity-0 active:before:opacity-0\",\n\t\t\t\t\"focus-visible:ring-0\",\n\t\t\t\t\"has-[.main-btn:hover]:before:opacity-[0.08]!\",\n\t\t\t\t\"has-[.main-btn:focus-visible]:before:opacity-[0.10]!\",\n\t\t\t\t\"has-[.main-btn:active]:before:opacity-[0.10]!\",\n\t\t\t\t\"has-[.main-btn:focus-visible]:ring-2 has-[.main-btn:focus-visible]:ring-m3-secondary has-[.main-btn:focus-visible]:ring-offset-1\",\n\t\t\t],\n\t\t\tclassName,\n\t\t);\n\n\t\t/** Main hit area content (Leading Icon + Label) */\n\t\tconst mainContent = (\n\t\t\t<>\n\t\t\t\t<AnimatePresence initial={false} mode=\"wait\">\n\t\t\t\t\t{isFilter ? (\n\t\t\t\t\t\tshowCheckmark ? (\n\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\tkey=\"checkmark\"\n\t\t\t\t\t\t\t\tinitial={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ width: 18, opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\twidth: { duration: 0.2, ease: [0.2, 0, 0, 1] },\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"easeOut\" },\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 overflow-hidden\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckIcon />\n\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t) : resolvedLeadingIcon ? (\n\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\tkey=\"leading-icon\"\n\t\t\t\t\t\t\t\tinitial={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ width: 18, opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ width: 0, opacity: 0 }}\n\t\t\t\t\t\t\t\ttransition={{\n\t\t\t\t\t\t\t\t\twidth: { duration: 0.2, ease: [0.2, 0, 0, 1] },\n\t\t\t\t\t\t\t\t\topacity: { duration: 0.15, ease: \"easeOut\" },\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 overflow-hidden [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\tleadingIconColorClass,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{resolvedLeadingIcon}\n\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t) : null\n\t\t\t\t\t) : resolvedLeadingIcon ? (\n\t\t\t\t\t\tisInput && avatar ? (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey=\"avatar\"\n\t\t\t\t\t\t\t\tclassName=\"flex items-center justify-center shrink-0 w-6 h-6 rounded-full overflow-hidden\"\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{resolvedLeadingIcon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tkey=\"leading-icon\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0 w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\tleadingIconColorClass,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{resolvedLeadingIcon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t) : null}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t<span className=\"whitespace-nowrap\">{label}</span>\n\t\t\t</>\n\t\t);\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement<{\n\t\t\t\tchildren?: React.ReactNode;\n\t\t\t}>;\n\t\t\tconst innerContent = (\n\t\t\t\t<>\n\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t{mainContent}\n\t\t\t\t\t{hasTrailingContent && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\tonRemove\n\t\t\t\t\t\t\t\t\t? \"absolute right-1 top-1/2 -translate-y-1/2 z-10\"\n\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{onRemove ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\ttypeof label === \"string\" ? `Remove ${label}` : \"Remove\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tonRemove(e);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonPointerDown={(e: React.PointerEvent<HTMLButtonElement>) =>\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"remove-btn flex items-center justify-center w-6 h-6 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"cursor-pointer focus-visible:outline-none\",\n\t\t\t\t\t\t\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-m3-secondary\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\t\t\"relative overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\"before:absolute before:inset-0 before:pointer-events-none before:bg-current before:rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"before:transition-opacity before:duration-200 before:opacity-0\",\n\t\t\t\t\t\t\t\t\t\t\"hover:before:opacity-[0.08] active:before:opacity-[0.12]\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CloseIcon />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : trailingIcon ? (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\tconst strippedProps = { ...props } as Record<string, unknown>;\n\t\t\tdelete strippedProps.children;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tclassName={containerClass}\n\t\t\t\t\t\t{...(strippedProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t\t</Slot>\n\t\t\t\t</LazyMotion>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<Root\n\t\t\t\t\tref={(!isCompound ? ref : undefined) as React.Ref<HTMLButtonElement>}\n\t\t\t\t\ttype={!isCompound ? \"button\" : undefined}\n\t\t\t\t\t// Filter chips act as checkboxes; Input chips can be buttons/toggleable; others buttons\n\t\t\t\t\t// Source: Material Design 3 Accessibility\n\t\t\t\t\t{...(isFilter\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\trole: \"checkbox\" as React.AriaRole,\n\t\t\t\t\t\t\t\t\"aria-checked\": selected,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: isInput && !isCompound && selected\n\t\t\t\t\t\t\t? { role: \"button\", \"aria-pressed\": true }\n\t\t\t\t\t\t\t: isCompound\n\t\t\t\t\t\t\t\t? { role: \"group\" }\n\t\t\t\t\t\t\t\t: { role: \"button\" })}\n\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\ttabIndex={isCompound ? -1 : disabled ? -1 : 0}\n\t\t\t\t\tdisabled={!isCompound ? disabled : undefined}\n\t\t\t\t\tonClick={!isCompound ? onClick : undefined}\n\t\t\t\t\tonPointerDown={!isCompound ? onPointerDown : undefined}\n\t\t\t\t\tclassName={containerClass}\n\t\t\t\t\t// Filter out props that shouldn't be on a div if isCompound\n\t\t\t\t\t{...(isCompound ? {} : props)}\n\t\t\t\t>\n\t\t\t\t\t{/* State Ripple layer */}\n\t\t\t\t\t{!isCompound && (\n\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Main action area: if compound, this is a nested button for a11y & avoids nesting buttons */}\n\t\t\t\t\t{isCompound ? (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"main-btn flex items-center h-full w-full focus:outline-none appearance-none bg-transparent border-none\",\n\t\t\t\t\t\t\t\t\"text-inherit font-inherit cursor-pointer\",\n\t\t\t\t\t\t\t\tpaddingClass,\n\t\t\t\t\t\t\t\t\"gap-2\",\n\t\t\t\t\t\t\t\t\"pr-8\",\n\t\t\t\t\t\t\t\t\"relative overflow-hidden rounded-lg\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Ripple ripples={ripples} onRippleDone={removeRipple} />\n\t\t\t\t\t\t\t{mainContent}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tmainContent\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Trailing slot */}\n\t\t\t\t\t{hasTrailingContent && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex items-center justify-center shrink-0\",\n\t\t\t\t\t\t\t\tonRemove\n\t\t\t\t\t\t\t\t\t? \"absolute right-1 top-1/2 -translate-y-1/2 z-10\"\n\t\t\t\t\t\t\t\t\t: \"\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{onRemove ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\t\t\ttypeof label === \"string\" ? `Remove ${label}` : \"Remove\"\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\tonRemove(e);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonPointerDown={(e: React.PointerEvent<HTMLButtonElement>) =>\n\t\t\t\t\t\t\t\t\t\te.stopPropagation()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"remove-btn flex items-center justify-center w-6 h-6 rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"cursor-pointer focus-visible:outline-none\",\n\t\t\t\t\t\t\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-m3-secondary\",\n\t\t\t\t\t\t\t\t\t\t\"transition-all duration-150\",\n\t\t\t\t\t\t\t\t\t\t\"relative overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\"before:absolute before:inset-0 before:pointer-events-none before:bg-current before:rounded-full\",\n\t\t\t\t\t\t\t\t\t\t\"before:transition-opacity before:duration-200 before:opacity-0\",\n\t\t\t\t\t\t\t\t\t\t\"hover:before:opacity-[0.08] active:before:opacity-[0.12]\",\n\t\t\t\t\t\t\t\t\t\t// TrailingIcon color tokens\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CloseIcon />\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : trailingIcon ? (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex items-center justify-center w-4.5 h-4.5 [&_.md-icon]:text-[length:inherit]!\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ fontSize: 18 }}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</Root>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nChipImpl.displayName = \"Chip\";\n\n/**\n * MD3 Expressive Chip — 4-variant interactive tag component.\n *\n * @remarks\n * - `filter` chips accept `selected` and render an animated checkmark.\n * - `input` chips accept `onRemove` to render a compound close button.\n * - `elevated` is supported on `assist`, `filter` (unselected), and `suggestion`.\n * - Fully accessible: `role=\"checkbox\"` for filter, `role=\"group\"` for compound chips.\n *\n * @example\n * ```tsx\n * // Assist chip\n * <Chip variant=\"assist\" label=\"Share\" onClick={share} />\n *\n * // Filter chip\n * <Chip variant=\"filter\" label=\"Unread\" selected={showUnread} onClick={toggle} />\n *\n * // Input chip with remove\n * <Chip variant=\"input\" label=\"React\" onRemove={() => removeTag(\"React\")} />\n * ```\n *\n * @see https://m3.material.io/components/chips/overview\n */\nexport const Chip = React.memo(ChipImpl);\n","\"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 date-time-pickers/shared/animation-tokens.ts\n *\n * MD3 Expressive animation constants for picker overlays.\n * Reuses shared motion-tokens from ui/shared and adds picker-specific animations.\n *\n * CSS variables sourced from packages/tailwind/src/index.css.\n *\n * @see https://m3.material.io/styles/motion/overview/how-it-works\n */\n\nimport type { TargetAndTransition, Transition, Variants } from \"motion/react\";\nimport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n} from \"../../shared/motion-tokens\";\n\n// ─── Dialog / Overlay Animations ─────────────────────────────────────────────\n\n/** Scrim fade animation — 200ms standard-decelerate */\nexport const PICKER_OVERLAY_ANIM: {\n\tinitial: TargetAndTransition;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { opacity: 0 },\n\tanimate: {\n\t\topacity: 1,\n\t\ttransition: { duration: 0.2, ease: [0, 0, 0, 1] as const },\n\t},\n\texit: {\n\t\topacity: 0,\n\t\ttransition: { duration: 0.15, ease: [0.3, 0, 1, 1] as const },\n\t},\n};\n\n/**\n * Content panel enter animation — MD3 default.spatial spring (380/0.8).\n * Scales from 0.85 to 1 + fade in.\n */\nexport const PICKER_CONTENT_ANIM: {\n\tinitial: TargetAndTransition;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { opacity: 0, scale: 0.85, y: 16 },\n\tanimate: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ty: 0,\n\t\ttransition: DEFAULT_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.95,\n\t\ty: 8,\n\t\ttransition: { duration: 0.15, ease: [0.3, 0, 1, 1] as const },\n\t},\n};\n\n// ─── Calendar Grid Navigation ─────────────────────────────────────────────────\n\n/**\n * Slide animation when navigating to next month (→).\n * FAST_SPATIAL_SPRING — 350ms, cubic-bezier(0.42, 1.67, 0.21, 0.9).\n */\nexport const CALENDAR_SLIDE_VARIANTS: Variants = {\n\tenterFromRight: {\n\t\tx: \"100%\",\n\t\topacity: 0,\n\t},\n\tenterFromLeft: {\n\t\tx: \"-100%\",\n\t\topacity: 0,\n\t},\n\tcenter: {\n\t\tx: 0,\n\t\topacity: 1,\n\t\ttransition: FAST_SPATIAL_SPRING,\n\t},\n\texitToLeft: {\n\t\tx: \"-100%\",\n\t\topacity: 0,\n\t\ttransition: { duration: 0.15, ease: [0.3, 0, 1, 1] as const },\n\t},\n\texitToRight: {\n\t\tx: \"100%\",\n\t\topacity: 0,\n\t\ttransition: { duration: 0.15, ease: [0.3, 0, 1, 1] as const },\n\t},\n};\n\n// ─── Year / Month Selector Grid ───────────────────────────────────────────────\n\n/**\n * Month and Year selector panel transition — DEFAULT_SPATIAL_SPRING (380/0.8).\n * Scales from 0.95 to 1 + subtle vertical spring shift.\n */\nexport const PICKER_SELECTOR_ANIM: {\n\tinitial: TargetAndTransition;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { opacity: 0, scale: 0.95, y: -6 },\n\tanimate: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ty: 0,\n\t\ttransition: DEFAULT_SPATIAL_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.95,\n\t\ty: 6,\n\t\ttransition: { duration: 0.1, ease: \"easeIn\" as const },\n\t},\n};\n\n/** Year grid fade in/out — DEFAULT_EFFECTS_SPRING (1600/1.0) */\nexport const YEAR_GRID_ANIM: {\n\tinitial: TargetAndTransition;\n\tanimate: TargetAndTransition;\n\texit: TargetAndTransition;\n} = {\n\tinitial: { opacity: 0, scale: 0.95 },\n\tanimate: {\n\t\topacity: 1,\n\t\tscale: 1,\n\t\ttransition: DEFAULT_EFFECTS_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.95,\n\t\ttransition: { duration: 0.1, ease: \"easeIn\" as const },\n\t},\n};\n\n// ─── Day Cell ─────────────────────────────────────────────────────────────────\n\n/** State layer transition cho day cell — FAST_EFFECTS_SPRING (3800/1.0) */\nexport const DAY_CELL_STATE_TRANSITION: Transition = FAST_EFFECTS_SPRING;\n\n// ─── Re-exports for convenience ───────────────────────────────────────────────\n\nexport {\n\tDEFAULT_EFFECTS_SPRING,\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_EFFECTS_SPRING,\n\tFAST_SPATIAL_SPRING,\n};\n","/**\n * @file date-time-pickers/shared/calendar-model.ts\n *\n * Pure calendar math functions — no React dependencies.\n * 100% testable, reusable for Date Pickers and Time Pickers.\n *\n * All timestamps are in UTC milliseconds to prevent timezone shift issues.\n */\n\nimport type {\n\tCalendarWeek,\n\tDateLocale,\n\tResolvedDateLocale,\n\tSelectableDates,\n} from \"./types\";\n\n// ─── UTC Date Helpers ─────────────────────────────────────────────────────────\n\n/**\n * Normalizes a timestamp to UTC midnight (00:00:00.000 UTC).\n * Essential for consistent day comparison across timezones.\n */\nexport const startOfDayUTC = (ms: number): number => {\n\tconst d = new Date(ms);\n\treturn Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());\n};\n\n/** Gets UTC midnight of today */\nexport const todayUTC = (): number => startOfDayUTC(Date.now());\n\n/** Gets UTC midnight of 1st day of month */\nexport const startOfMonthUTC = (year: number, month: number): number =>\n\tDate.UTC(year, month, 1);\n\n/** Gets total days in month */\nexport const getDaysInMonth = (year: number, month: number): number =>\n\tnew Date(Date.UTC(year, month + 1, 0)).getUTCDate();\n\n/** Gets day-of-week (0=Sun, 6=Sat) for 1st day of month */\nexport const getFirstDayOfWeek = (year: number, month: number): number =>\n\tnew Date(Date.UTC(year, month, 1)).getUTCDay();\n\n// ─── Calendar Grid ────────────────────────────────────────────────────────────\n\n/**\n * Generates calendar grid for a specific month.\n * Returns array of weeks, each week containing 7 cells (null = padding).\n *\n * @param year - Full year\n * @param month - Month (0–11)\n * @param weekStartsOn - 0 = Sunday, 1 = Monday\n */\nexport const getWeeksInMonth = (\n\tyear: number,\n\tmonth: number,\n\tweekStartsOn: 0 | 1,\n): CalendarWeek[] => {\n\tconst todayMs = todayUTC();\n\tconst daysInMonth = getDaysInMonth(year, month);\n\tconst firstDow = getFirstDayOfWeek(year, month); // 0 = Sun\n\n\t// Compute start padding cells according to weekStartsOn\n\tconst startPadding = (firstDow - weekStartsOn + 7) % 7;\n\n\t// Total cells = padding + actual days\n\tconst totalCells = startPadding + daysInMonth;\n\tconst totalWeeks = Math.ceil(totalCells / 7);\n\n\tconst weeks: CalendarWeek[] = [];\n\n\tfor (let w = 0; w < totalWeeks; w++) {\n\t\tconst week: CalendarWeek = [];\n\t\tfor (let d = 0; d < 7; d++) {\n\t\t\tconst cellIndex = w * 7 + d;\n\t\t\tconst dayNumber = cellIndex - startPadding + 1;\n\n\t\t\tif (dayNumber < 1 || dayNumber > daysInMonth) {\n\t\t\t\tweek.push(null);\n\t\t\t} else {\n\t\t\t\tconst utcMs = Date.UTC(year, month, dayNumber);\n\t\t\t\tweek.push({\n\t\t\t\t\tutcMs,\n\t\t\t\t\tday: dayNumber,\n\t\t\t\t\tmonth,\n\t\t\t\t\tyear,\n\t\t\t\t\tisCurrentMonth: true,\n\t\t\t\t\tisToday: utcMs === todayMs,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tweeks.push(week);\n\t}\n\n\treturn weeks;\n};\n\n// ─── Date Comparison ──────────────────────────────────────────────────────────\n\n/** Compares if two timestamps share the same UTC date */\nexport const isSameDay = (a: number, b: number): boolean =>\n\tstartOfDayUTC(a) === startOfDayUTC(b);\n\n/** Checks if ms falls within [startMs, endMs] (inclusive) */\nexport const isDateInRange = (\n\tms: number,\n\tstartMs: number | null,\n\tendMs: number | null,\n): boolean => {\n\tif (startMs === null || endMs === null) return false;\n\tconst day = startOfDayUTC(ms);\n\tconst start = startOfDayUTC(startMs);\n\tconst end = startOfDayUTC(endMs);\n\treturn day >= start && day <= end;\n};\n\n/** Checks if ms is the start date of range */\nexport const isRangeStart = (ms: number, startMs: number | null): boolean =>\n\tstartMs !== null && isSameDay(ms, startMs);\n\n/** Checks if ms is the end date of range */\nexport const isRangeEnd = (ms: number, endMs: number | null): boolean =>\n\tendMs !== null && isSameDay(ms, endMs);\n\n/** Checks if year is selectable according to `SelectableDates` config */\nexport const isYearSelectable = (\n\tyear: number,\n\tselectableDates: SelectableDates,\n): boolean => selectableDates.isSelectableYear(year);\n\n// ─── Locale / Month Normalization ─────────────────────────────────────────────\n\n/** Resolves partial DateLocale config with fallback values */\nexport const resolveLocale = (locale?: DateLocale): ResolvedDateLocale => ({\n\tlocale:\n\t\tlocale?.locale ??\n\t\t(typeof navigator !== \"undefined\" ? navigator.language : \"en-US\"),\n\tweekStartsOn: locale?.weekStartsOn ?? 1,\n});\n\n/** Normalizes any timestamp to UTC midnight on the 1st of that month */\nexport const normalizeToMonthStart = (ms: number): number => {\n\tconst d = new Date(ms);\n\treturn Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), 1);\n};\n\n// ─── Month Navigation ─────────────────────────────────────────────────────────\n\n/**\n * Navigates to next/previous month.\n * @returns UTC ms of the 1st day of target month\n */\nexport const navigateMonth = (\n\tcurrentMs: number,\n\tdirection: \"prev\" | \"next\",\n): number => {\n\tconst d = new Date(currentMs);\n\tconst year = d.getUTCFullYear();\n\tconst month = d.getUTCMonth();\n\tif (direction === \"next\") {\n\t\treturn month === 11\n\t\t\t? Date.UTC(year + 1, 0, 1)\n\t\t\t: Date.UTC(year, month + 1, 1);\n\t}\n\treturn month === 0 ? Date.UTC(year - 1, 11, 1) : Date.UTC(year, month - 1, 1);\n};\n\n/** Whether a month can be displayed under the picker year constraints. */\nexport const isMonthNavigable = (\n\tyear: number,\n\tyearRange: [number, number],\n\tselectableDates: SelectableDates,\n): boolean =>\n\tyear >= yearRange[0] &&\n\tyear <= yearRange[1] &&\n\tselectableDates.isSelectableYear(year);\n\n/**\n * Return the adjacent month only when its year is allowed. This keeps imperative\n * hook actions and the header controls subject to exactly the same constraints.\n */\nexport const getNavigableMonth = (\n\tcurrentMs: number,\n\tdirection: \"prev\" | \"next\",\n\tyearRange: [number, number],\n\tselectableDates: SelectableDates,\n): number | null => {\n\tconst targetMs = navigateMonth(currentMs, direction);\n\tconst targetYear = new Date(targetMs).getUTCFullYear();\n\treturn isMonthNavigable(targetYear, yearRange, selectableDates)\n\t\t? targetMs\n\t\t: null;\n};\n\n// ─── Date Formatting ──────────────────────────────────────────────────────────\n\n/**\n * Formats a UTC timestamp into a locale-aware date string.\n *\n * @example\n\n * ```ts\n * formatDate(Date.UTC(2025, 5, 26), { locale: 'en-US', weekStartsOn: 1 })\n * // → \"June 26, 2025\"\n * ```\n */\nexport const formatDate = (\n\tutcMs: number,\n\tlocale: ResolvedDateLocale,\n\toptions?: Intl.DateTimeFormatOptions,\n): string => {\n\tconst defaultOptions: Intl.DateTimeFormatOptions = {\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\",\n\t\ttimeZone: \"UTC\",\n\t};\n\treturn new Intl.DateTimeFormat(locale.locale, {\n\t\t...defaultOptions,\n\t\t...options,\n\t}).format(new Date(utcMs));\n};\n\n/**\n * Formats month + year for calendar header (e.g., \"June 2025\").\n */\nexport const formatMonthYear = (\n\tutcMs: number,\n\tlocale: ResolvedDateLocale,\n): string =>\n\tnew Intl.DateTimeFormat(locale.locale, {\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\ttimeZone: \"UTC\",\n\t}).format(new Date(utcMs));\n\n/**\n * Returns weekday names (narrow) according to locale and weekStartsOn.\n * @returns Array of 7 names, starting from weekStartsOn day.\n *\n * @example\n * ```ts\n * getWeekdayNames({ locale: 'en-US', weekStartsOn: 1 })\n * // → ['M', 'T', 'W', 'T', 'F', 'S', 'S']\n * ```\n */\nexport const getWeekdayNames = (locale: ResolvedDateLocale): string[] => {\n\t// Fixed reference week (2025-01-05 is Sunday) to extract day names\n\tconst SUNDAY_MS = Date.UTC(2025, 0, 5);\n\tconst formatter = new Intl.DateTimeFormat(locale.locale, {\n\t\tweekday: \"narrow\",\n\t\ttimeZone: \"UTC\",\n\t});\n\n\tconst allDays = Array.from({ length: 7 }, (_, i) =>\n\t\tformatter.format(new Date(SUNDAY_MS + i * 86_400_000)),\n\t);\n\n\t// Rotate according to weekStartsOn: 0=Sun (no rotate), 1=Mon (rotate 1)\n\treturn [\n\t\t...allDays.slice(locale.weekStartsOn),\n\t\t...allDays.slice(0, locale.weekStartsOn),\n\t];\n};\n\n// ─── Parse helpers ────────────────────────────────────────────────────────────\n\n/**\n * Parses date string in \"MM/DD/YYYY\" format into UTC ms.\n * @returns UTC ms if valid, null if invalid\n */\nexport const parseDateInput = (input: string): number | null => {\n\tconst match = input.match(/^(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})$/);\n\tif (!match) return null;\n\n\tconst [, mm, dd, yyyy] = match;\n\tconst month = parseInt(mm, 10) - 1;\n\n\tconst day = parseInt(dd, 10);\n\tconst year = parseInt(yyyy, 10);\n\n\tif (month < 0 || month > 11 || day < 1 || day > 31 || year < 1) return null;\n\n\tconst maxDay = getDaysInMonth(year, month);\n\tif (day > maxDay) return null;\n\n\treturn Date.UTC(year, month, day);\n};\n","/**\n * @file date-picker/date-picker-input.tsx\n *\n * Text input mode for Date Picker — manual entry in MM/DD/YYYY format.\n * Uses library TextField component.\n *\n * @see https://m3.material.io/components/date-pickers/overview\n */\n\nimport * as React from \"react\";\nimport { parseDateInput } from \"../shared/calendar-model\";\nimport type { DatePickerInputProps } from \"./date-picker.types\";\n\n/**\n * Text input for Date Picker with MM/DD/YYYY format.\n * Validates realtime, commits on blur or Enter.\n */\nexport const DatePickerInput: React.FC<DatePickerInputProps> = ({\n\tvalue,\n\tonChange,\n\tonCommit,\n\tlabel = \"Enter date\",\n\terror,\n\tlocale,\n\tclassName,\n}) => {\n\tconst inputId = React.useId();\n\tconst errorId = `${inputId}-error`;\n\t// Format hint according to locale\n\tconst placeholder = React.useMemo(() => {\n\t\tif (locale?.startsWith(\"vi\")) return \"DD/MM/YYYY\";\n\t\treturn \"MM/DD/YYYY\";\n\t}, [locale]);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\t\tif (e.key === \"Enter\") {\n\t\t\t\tconst parsed = parseDateInput(value);\n\t\t\t\tonCommit(parsed);\n\t\t\t}\n\t\t},\n\t\t[value, onCommit],\n\t);\n\n\tconst handleBlur = React.useCallback(() => {\n\t\tconst parsed = parseDateInput(value);\n\t\tonCommit(parsed);\n\t}, [value, onCommit]);\n\n\t// Auto-format: inserts \"/\" after month and day digits\n\tconst handleChange = React.useCallback(\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tlet raw = e.target.value.replace(/\\D/g, \"\"); // retain numbers only\n\n\t\t\tif (raw.length > 8) raw = raw.slice(0, 8);\n\n\t\t\tlet formatted = raw;\n\t\t\tif (raw.length > 2) {\n\t\t\t\tformatted = `${raw.slice(0, 2)}/${raw.slice(2)}`;\n\t\t\t}\n\t\t\tif (raw.length > 4) {\n\t\t\t\tformatted = `${raw.slice(0, 2)}/${raw.slice(2, 4)}/${raw.slice(4)}`;\n\t\t\t}\n\n\t\t\tonChange(formatted);\n\t\t},\n\t\t[onChange],\n\t);\n\n\treturn (\n\t\t<div className={className}>\n\t\t\t<div className=\"px-6 py-4\">\n\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t<label\n\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\tclassName=\"block text-[length:var(--md-typescale-label-large-size,14px)]\n\t\t\t\t\t\t\tfont-[number:var(--md-typescale-label-large-weight,500)]\n\t\t\t\t\t\t\ttext-m3-on-surface-variant\n\t\t\t\t\t\t\tmb-1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{label}\n\t\t\t\t\t</label>\n\t\t\t\t\t<input\n\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tinputMode=\"numeric\"\n\t\t\t\t\t\tvalue={value}\n\t\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\taria-label={label}\n\t\t\t\t\t\taria-invalid={!!error || undefined}\n\t\t\t\t\t\taria-describedby={error ? errorId : undefined}\n\t\t\t\t\t\tmaxLength={10}\n\t\t\t\t\t\tclassName=\"w-full h-14 px-4 rounded-m3-xs\n\t\t\t\t\t\t\tbg-m3-surface-container-highest\n\t\t\t\t\t\t\ttext-[length:var(--md-typescale-body-large-size,16px)]\n\t\t\t\t\t\t\thover:bg-m3-on-surface/8\n\t\t\t\t\t\t\ttext-m3-on-surface\n\t\t\t\t\t\t\tcaret-m3-primary\n\t\t\t\t\t\t\tplaceholder:text-m3-on-surface-variant\n\t\t\t\t\t\t\toutline-none border-0\n\t\t\t\t\t\t\tfocus:ring-2 focus:ring-m3-primary\n\t\t\t\t\t\t\ttransition-m3-fast-effects\"\n\t\t\t\t\t/>\n\t\t\t\t\t{/* Supporting text / error */}\n\t\t\t\t\t{error && (\n\t\t\t\t\t\t<p id={errorId} className=\"mt-1 text-xs text-m3-error px-1\">\n\t\t\t\t\t\t\t{error}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nDatePickerInput.displayName = \"DatePickerInput\";\n","/**\n * @file date-picker/subcomponents/day-cell.tsx\n *\n * Day cell in calendar grid with complete MD3 states.\n * Tokens from DatePickerModalTokens.kt:\n * - DateContainerShape = CornerFull (pill)\n * - DateContainerHeight/Width = 40px\n * - DateSelectedContainerColor = Primary\n * - DateTodayContainerOutlineColor = Primary\n * - RangeSelectionActiveIndicatorContainerColor = SecondaryContainer\n */\n\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { DAY_CELL_STATE_TRANSITION } from \"../../shared/animation-tokens\";\nimport {\n\tisDateInRange,\n\tisRangeEnd,\n\tisRangeStart,\n\tisSameDay,\n} from \"../../shared/calendar-model\";\nimport type { CalendarDay } from \"../../shared/types\";\n\ninterface DayCellProps {\n\tday: CalendarDay;\n\tselectedMs: number | null;\n\tselectedStartMs?: number | null;\n\tselectedEndMs?: number | null;\n\tisRangePicker?: boolean;\n\tisSelectable: boolean;\n\tonSelect(ms: number): void;\n\tlocale?: string;\n}\n\n/**\n * Day cell with 6 visual MD3 states:\n * - default, today, selected, in-range, range-start/end, disabled\n */\n\nexport const DayCell: React.FC<DayCellProps> = ({\n\tday,\n\tselectedMs,\n\tselectedStartMs = null,\n\tselectedEndMs = null,\n\tisRangePicker = false,\n\tisSelectable,\n\tonSelect,\n\tlocale,\n}) => {\n\tconst { utcMs, day: dayNum, isToday } = day;\n\n\t// ── State computation ───────────────────────────────────────────────────────\n\tconst isSelected =\n\t\t!isRangePicker && selectedMs !== null && isSameDay(utcMs, selectedMs);\n\tconst isStart = isRangePicker && isRangeStart(utcMs, selectedStartMs);\n\tconst isEnd = isRangePicker && isRangeEnd(utcMs, selectedEndMs);\n\tconst isInRange =\n\t\tisRangePicker &&\n\t\t!isStart &&\n\t\t!isEnd &&\n\t\tisDateInRange(utcMs, selectedStartMs, selectedEndMs);\n\tconst isDisabled = !isSelectable;\n\n\t// ── Accessible label ────────────────────────────────────────────────────────\n\tconst ariaLabel = new Intl.DateTimeFormat(locale, {\n\t\tyear: \"numeric\",\n\t\tmonth: \"long\",\n\t\tday: \"numeric\",\n\t\ttimeZone: \"UTC\",\n\t}).format(new Date(utcMs));\n\n\t// ── Range half-fill classes ─────────────────────────────────────────────────\n\t// Range start → fill right half; Range end → fill left half; In range → full fill\n\tconst rangeHighlightClass = cn(\n\t\t\"absolute inset-y-0 bg-m3-secondary-container\",\n\t\tisStart && selectedEndMs !== null && \"left-1/2 right-0\",\n\t\tisEnd && selectedStartMs !== null && \"left-0 right-1/2\",\n\t\tisInRange && \"inset-x-0\",\n\t);\n\n\t// ── Day circle classes ──────────────────────────────────────────────────────\n\tconst circleClass = cn(\n\t\t\"relative z-10 flex items-center justify-center w-10 h-10 rounded-m3-full\",\n\t\t\"text-[length:var(--md-typescale-body-large-size,14px)]\",\n\t\t\"font-[number:var(--md-typescale-body-large-weight,400)]\",\n\t\t\"transition-m3-fast-effects\",\n\t\t// Selected (single) or range endpoints\n\t\t(isSelected || isStart || isEnd) && [\"bg-m3-primary\", \"text-m3-on-primary\"],\n\t\t// In-range text\n\t\tisInRange && \"text-m3-on-secondary-container\",\n\t\t// Today outline (only when not selected)\n\t\tisToday &&\n\t\t\t!isSelected &&\n\t\t\t!isStart &&\n\t\t\t!isEnd && [\"outline outline-1 outline-m3-primary\", \"text-m3-primary\"],\n\t\t// Default text\n\t\t!isSelected &&\n\t\t\t!isStart &&\n\t\t\t!isEnd &&\n\t\t\t!isInRange &&\n\t\t\t!isToday &&\n\t\t\t\"text-m3-on-surface\",\n\t\t// Hover states (only when selectable and not selected/range endpoints)\n\t\t!isDisabled &&\n\t\t\t!isSelected &&\n\t\t\t!isStart &&\n\t\t\t!isEnd && [\n\t\t\t\tisInRange\n\t\t\t\t\t? \"hover:bg-m3-on-secondary-container/8\"\n\t\t\t\t\t: \"hover:bg-m3-on-surface/8\",\n\t\t\t],\n\t\t// Disabled\n\t\tisDisabled && \"opacity-[0.38]\",\n\t);\n\n\tconst handleClick = React.useCallback(() => {\n\t\tif (isDisabled) return;\n\t\tonSelect(utcMs);\n\t}, [isDisabled, utcMs, onSelect]);\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent) => {\n\t\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleClick();\n\t\t\t}\n\t\t},\n\t\t[handleClick],\n\t);\n\n\treturn (\n\t\t<td className=\"relative flex items-center justify-center\">\n\t\t\t{/* Range highlight background (full row width) */}\n\t\t\t{isRangePicker && (isInRange || isStart || isEnd) && (\n\t\t\t\t<div className={rangeHighlightClass} />\n\t\t\t)}\n\n\t\t\t{/* Day circle */}\n\t\t\t<m.button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\tcircleClass,\n\t\t\t\t\tisDisabled && \"pointer-events-none cursor-not-allowed\",\n\t\t\t\t)}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-selected={isSelected || isStart || isEnd || undefined}\n\t\t\t\taria-disabled={isDisabled || undefined}\n\t\t\t\ttabIndex={isDisabled ? -1 : 0}\n\t\t\t\twhileTap={\n\t\t\t\t\t!isDisabled\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tscale: 0.94,\n\t\t\t\t\t\t\t\ttransition: DAY_CELL_STATE_TRANSITION,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t{dayNum}\n\t\t\t</m.button>\n\t\t</td>\n\t);\n};\n\nDayCell.displayName = \"DayCell\";\n","/**\n * @file date-picker/subcomponents/weekday-row.tsx\n *\n * Header row displaying weekday names.\n * Locale-aware via Intl.DateTimeFormat.\n * Supports weekStartsOn = 0 (Sun) or 1 (Mon).\n */\n\nimport * as React from \"react\";\nimport { getWeekdayNames } from \"../../shared/calendar-model\";\nimport type { ResolvedDateLocale } from \"../../shared/types\";\n\ninterface WeekdayRowProps {\n\tlocale: ResolvedDateLocale;\n}\n\n/**\n * Weekday header row (Mon Tue Wed Thu Fri Sat Sun).\n * Locale-aware, following weekStartsOn configuration.\n */\n\nexport const WeekdayRow: React.FC<WeekdayRowProps> = ({ locale }) => {\n\tconst names = React.useMemo(() => getWeekdayNames(locale), [locale]);\n\n\treturn (\n\t\t<tr className=\"grid grid-cols-7 mb-1\">\n\t\t\t{names.map((name, i) => (\n\t\t\t\t<th\n\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: stable weekday order\n\t\t\t\t\tkey={i}\n\t\t\t\t\tscope=\"col\"\n\t\t\t\t\taria-label={name}\n\t\t\t\t\tclassName=\"flex items-center justify-center h-10 w-10 mx-auto\n\t\t\t\t\t\ttext-[length:var(--md-typescale-label-large-size,14px)]\n\t\t\t\t\t\tfont-[number:var(--md-typescale-label-large-weight,500)]\n\t\t\t\t\t\ttext-m3-on-surface\n\t\t\t\t\t\tselect-none\n\t\t\t\t\t\tfont-normal\"\n\t\t\t\t>\n\t\t\t\t\t{name}\n\t\t\t\t</th>\n\t\t\t))}\n\t\t</tr>\n\t);\n};\n\nWeekdayRow.displayName = \"WeekdayRow\";\n","/**\n * @file date-picker/subcomponents/calendar-grid.tsx\n *\n * 7-column calendar grid with slide animation during month navigation.\n * Uses AnimatePresence + direction-aware variants for smooth transitions.\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { CALENDAR_SLIDE_VARIANTS } from \"../../shared/animation-tokens\";\nimport { getWeeksInMonth } from \"../../shared/calendar-model\";\nimport type { ResolvedDateLocale, SelectableDates } from \"../../shared/types\";\nimport { DayCell } from \"./day-cell\";\nimport { WeekdayRow } from \"./weekday-row\";\n\ninterface CalendarGridProps {\n\t/** UTC ms of 1st day of month being displayed */\n\tdisplayedMonthMs: number;\n\t/** Navigation direction determining slide animation axis */\n\tslideDirection: \"prev\" | \"next\" | null;\n\tlocale: ResolvedDateLocale;\n\tselectableDates: SelectableDates;\n\tselectedMs: number | null;\n\tselectedStartMs?: number | null;\n\tselectedEndMs?: number | null;\n\tisRangePicker?: boolean;\n\tonDaySelect(ms: number): void;\n}\n\n/**\n * Calendar grid 6×7 with direction-aware slide animation.\n * Renders WeekdayRow + 6 day rows.\n */\n\nexport const CalendarGrid: React.FC<CalendarGridProps> = ({\n\tdisplayedMonthMs,\n\tslideDirection,\n\tlocale,\n\tselectableDates,\n\tselectedMs,\n\tselectedStartMs = null,\n\tselectedEndMs = null,\n\tisRangePicker = false,\n\tonDaySelect,\n}) => {\n\tconst d = new Date(displayedMonthMs);\n\tconst year = d.getUTCFullYear();\n\tconst month = d.getUTCMonth();\n\n\tconst weeks = React.useMemo(\n\t\t() => getWeeksInMonth(year, month, locale.weekStartsOn),\n\t\t[year, month, locale.weekStartsOn],\n\t);\n\n\tconst enterVariant =\n\t\tslideDirection === \"next\" ? \"enterFromRight\" : \"enterFromLeft\";\n\tconst exitVariant = slideDirection === \"next\" ? \"exitToLeft\" : \"exitToRight\";\n\n\treturn (\n\t\t<table className=\"w-full px-3 border-collapse block\">\n\t\t\t<thead className=\"block\">\n\t\t\t\t<WeekdayRow locale={locale} />\n\t\t\t</thead>\n\t\t\t<AnimatePresence initial={false} mode=\"popLayout\">\n\t\t\t\t<m.tbody\n\t\t\t\t\tkey={displayedMonthMs}\n\t\t\t\t\tvariants={CALENDAR_SLIDE_VARIANTS}\n\t\t\t\t\tinitial={slideDirection !== null ? enterVariant : false}\n\t\t\t\t\tanimate=\"center\"\n\t\t\t\t\texit={slideDirection !== null ? exitVariant : undefined}\n\t\t\t\t\tclassName=\"overflow-hidden block\"\n\t\t\t\t\taria-label={new Intl.DateTimeFormat(locale.locale, {\n\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\ttimeZone: \"UTC\",\n\t\t\t\t\t}).format(new Date(displayedMonthMs))}\n\t\t\t\t>\n\t\t\t\t\t{weeks.map((week, weekIdx) => (\n\t\t\t\t\t\t<tr\n\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: stable week index per month\n\t\t\t\t\t\t\tkey={weekIdx}\n\t\t\t\t\t\t\tclassName=\"grid grid-cols-7\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{week.map((day, dayIdx) =>\n\t\t\t\t\t\t\t\tday === null ? (\n\t\t\t\t\t\t\t\t\t<td\n\t\t\t\t\t\t\t\t\t\t// biome-ignore lint/suspicious/noArrayIndexKey: empty cells have no stable domain identifier\n\t\t\t\t\t\t\t\t\t\tkey={`empty-${weekIdx}-${dayIdx}`}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-10 h-10 mx-auto block\"\n\t\t\t\t\t\t\t\t\t\taria-hidden\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<DayCell\n\t\t\t\t\t\t\t\t\t\tkey={day.utcMs}\n\t\t\t\t\t\t\t\t\t\tday={day}\n\t\t\t\t\t\t\t\t\t\tselectedMs={selectedMs}\n\t\t\t\t\t\t\t\t\t\tselectedStartMs={selectedStartMs}\n\t\t\t\t\t\t\t\t\t\tselectedEndMs={selectedEndMs}\n\t\t\t\t\t\t\t\t\t\tisRangePicker={isRangePicker}\n\t\t\t\t\t\t\t\t\t\tisSelectable={selectableDates.isSelectableDate(day.utcMs)}\n\t\t\t\t\t\t\t\t\t\tonSelect={onDaySelect}\n\t\t\t\t\t\t\t\t\t\tlocale={locale.locale}\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</tr>\n\t\t\t\t\t))}\n\t\t\t\t</m.tbody>\n\t\t\t</AnimatePresence>\n\t\t</table>\n\t);\n};\n\nCalendarGrid.displayName = \"CalendarGrid\";\n","/**\n * Calendar header with independent month and year selectors.\n */\n\nimport type * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { IconButton } from \"../../../buttons/icon-button\";\nimport { Icon } from \"../../../icon\";\nimport { formatMonthYear } from \"../../shared/calendar-model\";\nimport type { DisplayMode, ResolvedDateLocale } from \"../../shared/types\";\n\nexport type CalendarSelector = \"month\" | \"year\" | null;\n\ninterface CalendarHeaderProps {\n\tdisplayedMonthMs: number;\n\tactiveSelector: CalendarSelector;\n\tdisplayMode: DisplayMode;\n\tshowModeToggle: boolean;\n\ttitle: React.ReactNode;\n\theadline: React.ReactNode;\n\tlocale: ResolvedDateLocale;\n\tcanNavigatePrev: boolean;\n\tcanNavigateNext: boolean;\n\tcanNavigatePreviousYear: boolean;\n\tcanNavigateNextYear: boolean;\n\tonPrev(): void;\n\tonNext(): void;\n\tonPreviousYear(): void;\n\tonNextYear(): void;\n\tonToggleSelector(selector: Exclude<CalendarSelector, null>): void;\n\tonToggleMode(): void;\n}\n\nconst selectorClassName =\n\t\"flex items-center gap-1 rounded-m3-full px-2 py-1 text-[length:var(--md-typescale-title-small-size,14px)] font-[number:var(--md-typescale-title-small-weight,500)] text-m3-on-surface transition-m3-fast-effects hover:bg-m3-on-surface/8 focus-visible:outline-2 focus-visible:outline-m3-primary\";\n\nexport const CalendarHeader: React.FC<CalendarHeaderProps> = ({\n\tdisplayedMonthMs,\n\tactiveSelector,\n\tdisplayMode,\n\tshowModeToggle,\n\ttitle,\n\theadline,\n\tlocale,\n\tcanNavigatePrev,\n\tcanNavigateNext,\n\tcanNavigatePreviousYear,\n\tcanNavigateNextYear,\n\tonPrev,\n\tonNext,\n\tonPreviousYear,\n\tonNextYear,\n\tonToggleSelector,\n\tonToggleMode,\n}) => {\n\tconst date = new Date(displayedMonthMs);\n\tconst monthLabel = new Intl.DateTimeFormat(locale.locale, {\n\t\tmonth: \"short\",\n\t\ttimeZone: \"UTC\",\n\t}).format(date);\n\tconst yearLabel = String(date.getUTCFullYear());\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-1 px-6 pb-4 pt-5\">\n\t\t\t<div className=\"text-(length:--md-typescale-label-large-size,14px) font-(--md-typescale-label-large-weight,500) text-m3-on-surface-variant\">\n\t\t\t\t{title}\n\t\t\t</div>\n\t\t\t<div className=\"mb-2 leading-tight text-(length:--md-typescale-headline-large-size,32px) font-(--md-typescale-headline-large-weight,400) text-m3-on-surface-variant\">\n\t\t\t\t{headline}\n\t\t\t</div>\n\n\t\t\t{displayMode === \"picker\" && (\n\t\t\t\t<div className=\"flex min-h-10 items-center gap-0.5\">\n\t\t\t\t\t{activeSelector === null && (\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tonClick={onPrev}\n\t\t\t\t\t\t\taria-label=\"Previous month\"\n\t\t\t\t\t\t\tdisabled={!canNavigatePrev}\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon name=\"chevron_left\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t)}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonClick={() => onToggleSelector(\"month\")}\n\t\t\t\t\t\taria-expanded={activeSelector === \"month\"}\n\t\t\t\t\t\taria-controls=\"date-picker-selection\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tselectorClassName,\n\t\t\t\t\t\t\tactiveSelector === \"month\" && \"bg-m3-on-surface/8\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{monthLabel}\n\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\tname=\"arrow_drop_down\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"text-[20px] transition-transform duration-200\",\n\t\t\t\t\t\t\t\tactiveSelector === \"month\" && \"rotate-180\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</button>\n\t\t\t\t\t{activeSelector === null && (\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tonClick={onNext}\n\t\t\t\t\t\t\taria-label=\"Next month\"\n\t\t\t\t\t\t\tdisabled={!canNavigateNext}\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon name=\"chevron_right\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div className=\"ml-auto flex items-center gap-0.5\">\n\t\t\t\t\t\t{activeSelector === null && (\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\tonClick={onPreviousYear}\n\t\t\t\t\t\t\t\taria-label=\"Previous year\"\n\t\t\t\t\t\t\t\tdisabled={!canNavigatePreviousYear}\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"chevron_left\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onToggleSelector(\"year\")}\n\t\t\t\t\t\t\taria-expanded={activeSelector === \"year\"}\n\t\t\t\t\t\t\taria-controls=\"date-picker-selection\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tselectorClassName,\n\t\t\t\t\t\t\t\tactiveSelector === \"year\" && \"bg-m3-on-surface/8\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{yearLabel}\n\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\tname=\"arrow_drop_down\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"text-[20px] transition-transform duration-200\",\n\t\t\t\t\t\t\t\t\tactiveSelector === \"year\" && \"rotate-180\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{activeSelector === null && (\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\tonClick={onNextYear}\n\t\t\t\t\t\t\t\taria-label=\"Next year\"\n\t\t\t\t\t\t\t\tdisabled={!canNavigateNextYear}\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"chevron_right\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{showModeToggle && (\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\tonClick={onToggleMode}\n\t\t\t\t\t\t\t\taria-label=\"Switch to text input\"\n\t\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon name=\"keyboard\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{displayMode === \"input\" && showModeToggle && (\n\t\t\t\t<IconButton\n\t\t\t\t\tonClick={onToggleMode}\n\t\t\t\t\taria-label=\"Switch to calendar\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tclassName=\"self-end\"\n\t\t\t\t>\n\t\t\t\t\t<Icon name=\"calendar_month\" />\n\t\t\t\t</IconButton>\n\t\t\t)}\n\t\t\t<span className=\"sr-only\">\n\t\t\t\t{formatMonthYear(displayedMonthMs, locale)}\n\t\t\t</span>\n\t\t</div>\n\t);\n};\n\nCalendarHeader.displayName = \"CalendarHeader\";\n","/**\n * Scrollable month selector used by the calendar header.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { Icon } from \"../../../icon\";\nimport type { ResolvedDateLocale } from \"../../shared/types\";\n\ninterface MonthPickerListProps {\n\tselectedMonth: number;\n\tlocale: ResolvedDateLocale;\n\tonMonthSelect(month: number): void;\n}\n\nconst getMonthLabel = (month: number, locale: string): string =>\n\tnew Intl.DateTimeFormat(locale, {\n\t\tmonth: \"long\",\n\t\ttimeZone: \"UTC\",\n\t}).format(new Date(Date.UTC(2025, month, 1)));\n\nexport const MonthPickerList: React.FC<MonthPickerListProps> = ({\n\tselectedMonth,\n\tlocale,\n\tonMonthSelect,\n}) => {\n\tconst selectedRef = React.useRef<HTMLButtonElement>(null);\n\n\tReact.useEffect(() => {\n\t\tselectedRef.current?.scrollIntoView?.({\n\t\t\tblock: \"center\",\n\t\t\tbehavior: \"instant\",\n\t\t});\n\t}, []);\n\n\tconst months = React.useMemo(\n\t\t() => Array.from({ length: 12 }, (_, month) => month),\n\t\t[],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"h-full min-h-[240px] overflow-y-auto py-2\"\n\t\t\trole=\"listbox\"\n\t\t\taria-label=\"Select month\"\n\t\t>\n\t\t\t{months.map((month) => {\n\t\t\t\tconst isSelected = month === selectedMonth;\n\t\t\t\treturn (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={month}\n\t\t\t\t\t\tref={isSelected ? selectedRef : undefined}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\taria-selected={isSelected}\n\t\t\t\t\t\tonClick={() => onMonthSelect(month)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex min-h-12 w-full items-center gap-4 px-6 text-left\",\n\t\t\t\t\t\t\t\"text-[length:var(--md-typescale-body-large-size,16px)]\",\n\t\t\t\t\t\t\t\"text-m3-on-surface transition-m3-fast-effects\",\n\t\t\t\t\t\t\t\"hover:bg-m3-on-surface/8 focus-visible:outline-2 focus-visible:outline-m3-primary\",\n\t\t\t\t\t\t\tisSelected &&\n\t\t\t\t\t\t\t\t\"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"w-6\" aria-hidden>\n\t\t\t\t\t\t\t{isSelected && <Icon name=\"check\" className=\"text-[20px]\" />}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{getMonthLabel(month, locale.locale)}\n\t\t\t\t\t</button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nMonthPickerList.displayName = \"MonthPickerList\";\n","/**\n * Scrollable, responsive year selector used by the calendar header.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { Icon } from \"../../../icon\";\nimport { isYearSelectable } from \"../../shared/calendar-model\";\nimport type { SelectableDates } from \"../../shared/types\";\n\ninterface YearPickerListProps {\n\tselectedYear: number;\n\tyearRange: [number, number];\n\tselectableDates: SelectableDates;\n\tonYearSelect(year: number): void;\n}\n\nexport const YearPickerList: React.FC<YearPickerListProps> = ({\n\tselectedYear,\n\tyearRange,\n\tselectableDates,\n\tonYearSelect,\n}) => {\n\tconst selectedRef = React.useRef<HTMLButtonElement>(null);\n\tconst years = React.useMemo(() => {\n\t\tconst [min, max] = yearRange;\n\t\treturn Array.from({ length: max - min + 1 }, (_, index) => min + index);\n\t}, [yearRange]);\n\n\tReact.useEffect(() => {\n\t\tselectedRef.current?.scrollIntoView?.({\n\t\t\tblock: \"center\",\n\t\t\tbehavior: \"instant\",\n\t\t});\n\t}, []);\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"h-full min-h-[240px] overflow-y-auto py-2\"\n\t\t\trole=\"listbox\"\n\t\t\taria-label=\"Select year\"\n\t\t>\n\t\t\t{years.map((year) => {\n\t\t\t\tconst isSelected = year === selectedYear;\n\t\t\t\tconst isSelectable = isYearSelectable(year, selectableDates);\n\t\t\t\treturn (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={year}\n\t\t\t\t\t\tref={isSelected ? selectedRef : undefined}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"option\"\n\t\t\t\t\t\taria-selected={isSelected}\n\t\t\t\t\t\taria-disabled={!isSelectable || undefined}\n\t\t\t\t\t\tdisabled={!isSelectable}\n\t\t\t\t\t\tonClick={() => onYearSelect(year)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex min-h-12 w-full items-center gap-4 px-6 text-left\",\n\t\t\t\t\t\t\t\"text-[length:var(--md-typescale-body-large-size,16px)]\",\n\t\t\t\t\t\t\t\"text-m3-on-surface transition-m3-fast-effects\",\n\t\t\t\t\t\t\t\"hover:bg-m3-on-surface/8 focus-visible:outline-2 focus-visible:outline-m3-primary\",\n\t\t\t\t\t\t\tisSelected &&\n\t\t\t\t\t\t\t\t\"bg-m3-secondary-container text-m3-on-secondary-container\",\n\t\t\t\t\t\t\t!isSelectable && \"cursor-not-allowed opacity-[0.38]\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span className=\"w-6\" aria-hidden>\n\t\t\t\t\t\t\t{isSelected && <Icon name=\"check\" className=\"text-[20px]\" />}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{year}\n\t\t\t\t\t</button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n};\n\nYearPickerList.displayName = \"YearPickerList\";\n","/**\n * @file date-picker/date-picker.tsx\n *\n * DatePicker — calendar UI component (excluding dialog wrapper).\n * Equivalent to `DatePicker` composable in Android Compose Material3.\n *\n * Layout:\n *   CalendarHeader (title, headline, month nav)\n *   ↓\n *   CalendarGrid | YearPickerGrid (AnimatePresence toggle)\n *   ↓\n *   DatePickerInput (when displayMode === 'input')\n *\n * @see https://m3.material.io/components/date-pickers/overview\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { PICKER_SELECTOR_ANIM } from \"../shared/animation-tokens\";\nimport {\n\tformatDate,\n\tgetNavigableMonth,\n\tisMonthNavigable,\n} from \"../shared/calendar-model\";\nimport type { DatePickerProps } from \"./date-picker.types\";\nimport { DatePickerInput } from \"./date-picker-input\";\nimport { CalendarGrid } from \"./subcomponents/calendar-grid\";\nimport {\n\tCalendarHeader,\n\ttype CalendarSelector,\n} from \"./subcomponents/calendar-header\";\nimport { MonthPickerList } from \"./subcomponents/month-picker-list\";\nimport { YearPickerList } from \"./subcomponents/year-picker-list\";\n\n/** Format UTC ms → \"MM/DD/YYYY\" for input sync */\nconst formatInputDate = (ms: number): string =>\n\tnew Intl.DateTimeFormat(\"en-US\", {\n\t\tmonth: \"2-digit\",\n\t\tday: \"2-digit\",\n\t\tyear: \"numeric\",\n\t\ttimeZone: \"UTC\",\n\t}).format(new Date(ms));\n\n/**\n * DatePicker calendar UI.\n *\n * @example\n * ```tsx\n * const state = useDatePickerState({ locale: { locale: 'en-US' } });\n *\n * <DatePicker\n *   state={state}\n *   showModeToggle\n *   title=\"Select date\"\n * />\n * ```\n */\n\nexport const DatePicker: React.FC<DatePickerProps> = ({\n\tstate,\n\tshowModeToggle = true,\n\ttitle,\n\theadline,\n\tclassName,\n}) => {\n\tconst {\n\t\tselectedDateMs,\n\t\tdisplayedMonthMs,\n\t\tdisplayMode,\n\t\tyearRange,\n\t\tlocale,\n\t\tselectableDates,\n\t\tselectDate,\n\t\tnavigateMonth,\n\t\tnavigateToMonth,\n\t\tsetDisplayMode,\n\t} = state;\n\n\tconst [activeSelector, setActiveSelector] =\n\t\tReact.useState<CalendarSelector>(null);\n\n\t// ── Navigation direction tracking ────────────────────────────────────────────\n\tconst [slideDirection, setSlideDirection] = React.useState<\n\t\t\"prev\" | \"next\" | null\n\t>(null);\n\n\tconst handlePrev = React.useCallback(() => {\n\t\tsetSlideDirection(\"prev\");\n\t\tnavigateMonth(\"prev\");\n\t}, [navigateMonth]);\n\n\tconst handleNext = React.useCallback(() => {\n\t\tsetSlideDirection(\"next\");\n\t\tnavigateMonth(\"next\");\n\t}, [navigateMonth]);\n\n\tconst handleYearSelect = React.useCallback(\n\t\t(year: number) => {\n\t\t\tconst d = new Date(displayedMonthMs);\n\t\t\tnavigateToMonth(year, d.getUTCMonth());\n\t\t\tsetActiveSelector(null);\n\t\t},\n\t\t[displayedMonthMs, navigateToMonth],\n\t);\n\n\tconst handleMonthSelect = React.useCallback(\n\t\t(month: number) => {\n\t\t\tconst d = new Date(displayedMonthMs);\n\t\t\tnavigateToMonth(d.getUTCFullYear(), month);\n\t\t\tsetActiveSelector(null);\n\t\t},\n\t\t[displayedMonthMs, navigateToMonth],\n\t);\n\n\t// ── Input mode state ─────────────────────────────────────────────────────────\n\tconst [inputValue, setInputValue] = React.useState(() =>\n\t\tselectedDateMs !== null ? formatInputDate(selectedDateMs) : \"\",\n\t);\n\tconst [inputError, setInputError] = React.useState<string | undefined>();\n\n\tconst handleInputCommit = React.useCallback(\n\t\t(ms: number | null) => {\n\t\t\tif (ms === null && inputValue.length > 0) {\n\t\t\t\tsetInputError(\"Invalid date\");\n\t\t\t} else {\n\t\t\t\tsetInputError(undefined);\n\t\t\t\tselectDate(ms);\n\t\t\t}\n\t\t},\n\t\t[inputValue, selectDate],\n\t);\n\n\t// ── Default title / headline ─────────────────────────────────────────────────\n\tconst resolvedTitle = title ?? \"Select date\";\n\tconst resolvedHeadline =\n\t\theadline ??\n\t\t(selectedDateMs !== null\n\t\t\t? formatDate(selectedDateMs, locale, {\n\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\ttimeZone: \"UTC\",\n\t\t\t\t})\n\t\t\t: \"—\");\n\n\t// ── Current year ─────────────────────────────────────────────────────────────\n\tconst currentYear = new Date(displayedMonthMs).getUTCFullYear();\n\tconst currentMonth = new Date(displayedMonthMs).getUTCMonth();\n\tconst computedAriaLabel =\n\t\ttypeof resolvedTitle === \"string\" ? resolvedTitle : \"Date picker\";\n\tconst canNavigatePrev =\n\t\tgetNavigableMonth(displayedMonthMs, \"prev\", yearRange, selectableDates) !==\n\t\tnull;\n\tconst canNavigateNext =\n\t\tgetNavigableMonth(displayedMonthMs, \"next\", yearRange, selectableDates) !==\n\t\tnull;\n\tconst canNavigatePreviousYear = isMonthNavigable(\n\t\tcurrentYear - 1,\n\t\tyearRange,\n\t\tselectableDates,\n\t);\n\tconst canNavigateNextYear = isMonthNavigable(\n\t\tcurrentYear + 1,\n\t\tyearRange,\n\t\tselectableDates,\n\t);\n\n\treturn (\n\t\t<fieldset\n\t\t\tclassName={cn(\"flex flex-col select-none\", className)}\n\t\t\tstyle={{ width: \"min(100%, 360px)\" }}\n\t\t\taria-label={computedAriaLabel}\n\t\t>\n\t\t\t<legend className=\"sr-only\">{computedAriaLabel}</legend>\n\t\t\t{/* Header */}\n\t\t\t<CalendarHeader\n\t\t\t\tdisplayedMonthMs={displayedMonthMs}\n\t\t\t\tactiveSelector={activeSelector}\n\t\t\t\tdisplayMode={displayMode}\n\t\t\t\tshowModeToggle={showModeToggle}\n\t\t\t\ttitle={resolvedTitle}\n\t\t\t\theadline={resolvedHeadline}\n\t\t\t\tlocale={locale}\n\t\t\t\tcanNavigatePrev={canNavigatePrev}\n\t\t\t\tcanNavigateNext={canNavigateNext}\n\t\t\t\tcanNavigatePreviousYear={canNavigatePreviousYear}\n\t\t\t\tcanNavigateNextYear={canNavigateNextYear}\n\t\t\t\tonPrev={handlePrev}\n\t\t\t\tonNext={handleNext}\n\t\t\t\tonPreviousYear={() => navigateToMonth(currentYear - 1, currentMonth)}\n\t\t\t\tonNextYear={() => navigateToMonth(currentYear + 1, currentMonth)}\n\t\t\t\tonToggleSelector={(selector) =>\n\t\t\t\t\tsetActiveSelector((active) => (active === selector ? null : selector))\n\t\t\t\t}\n\t\t\t\tonToggleMode={() => {\n\t\t\t\t\tsetDisplayMode(displayMode === \"picker\" ? \"input\" : \"picker\");\n\t\t\t\t\tsetActiveSelector(null);\n\t\t\t\t\tsetInputError(undefined);\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t{/* Body */}\n\t\t\t<div\n\t\t\t\tclassName=\"relative flex-1 overflow-hidden\"\n\t\t\t\tstyle={{ minHeight: \"296px\" }}\n\t\t\t>\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{displayMode === \"input\" ? (\n\t\t\t\t\t\t// Input mode\n\t\t\t\t\t\t<DatePickerInput\n\t\t\t\t\t\t\tkey=\"input-mode\"\n\t\t\t\t\t\t\tvalue={inputValue}\n\t\t\t\t\t\t\tonChange={setInputValue}\n\t\t\t\t\t\t\tonCommit={handleInputCommit}\n\t\t\t\t\t\t\terror={inputError}\n\t\t\t\t\t\t\tlocale={locale.locale}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : activeSelector === \"month\" ? (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tid=\"date-picker-selection\"\n\t\t\t\t\t\t\tkey=\"month-list\"\n\t\t\t\t\t\t\tinitial={PICKER_SELECTOR_ANIM.initial}\n\t\t\t\t\t\t\tanimate={PICKER_SELECTOR_ANIM.animate}\n\t\t\t\t\t\t\texit={PICKER_SELECTOR_ANIM.exit}\n\t\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MonthPickerList\n\t\t\t\t\t\t\t\tselectedMonth={currentMonth}\n\t\t\t\t\t\t\t\tlocale={locale}\n\t\t\t\t\t\t\t\tonMonthSelect={handleMonthSelect}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</m.div>\n\t\t\t\t\t) : activeSelector === \"year\" ? (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tid=\"date-picker-selection\"\n\t\t\t\t\t\t\tkey=\"year-list\"\n\t\t\t\t\t\t\tinitial={PICKER_SELECTOR_ANIM.initial}\n\t\t\t\t\t\t\tanimate={PICKER_SELECTOR_ANIM.animate}\n\t\t\t\t\t\t\texit={PICKER_SELECTOR_ANIM.exit}\n\t\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<YearPickerList\n\t\t\t\t\t\t\t\tselectedYear={currentYear}\n\t\t\t\t\t\t\t\tyearRange={yearRange}\n\t\t\t\t\t\t\t\tselectableDates={selectableDates}\n\t\t\t\t\t\t\t\tonYearSelect={handleYearSelect}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</m.div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t// Calendar grid\n\t\t\t\t\t\t<CalendarGrid\n\t\t\t\t\t\t\tkey=\"calendar\"\n\t\t\t\t\t\t\tdisplayedMonthMs={displayedMonthMs}\n\t\t\t\t\t\t\tslideDirection={slideDirection}\n\t\t\t\t\t\t\tlocale={locale}\n\t\t\t\t\t\t\tselectableDates={selectableDates}\n\t\t\t\t\t\t\tselectedMs={selectedDateMs}\n\t\t\t\t\t\t\tisRangePicker={false}\n\t\t\t\t\t\t\tonDaySelect={(ms) => {\n\t\t\t\t\t\t\t\tselectDate(ms);\n\t\t\t\t\t\t\t\tsetInputValue(formatInputDate(ms));\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</AnimatePresence>\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n};\n\nDatePicker.displayName = \"DatePicker\";\n","/**\n * @file date-picker/date-picker.tokens.ts\n *\n * MD3 Design tokens for Date Picker component.\n * Maps from DatePickerModalTokens.kt → CSS variables in packages/tailwind/src/index.css.\n *\n * @see docs/m3/date-and-time-pickers/date-pickers/DatePickerModalTokens.kt\n * @see packages/tailwind/src/index.css\n */\n\n// ─── Color Tokens ─────────────────────────────────────────────────────────────\n\n/** Color tokens — uses CSS custom properties from MD3 theme */\nexport const DP_COLORS = {\n\t/** Dialog container — SurfaceContainerHigh */\n\tcontainer: \"var(--md-sys-color-surface-container-high)\",\n\t/** Selected day background — Primary */\n\tdaySelected: \"var(--md-sys-color-primary)\",\n\t/** Selected day text — OnPrimary */\n\tdaySelectedText: \"var(--md-sys-color-on-primary)\",\n\t/** Today outline — Primary */\n\ttodayOutline: \"var(--md-sys-color-primary)\",\n\t/** Today text — Primary */\n\ttodayText: \"var(--md-sys-color-primary)\",\n\t/** Unselected day text — OnSurface */\n\tdayText: \"var(--md-sys-color-on-surface)\",\n\t/** Weekday header text — OnSurface */\n\tweekdayText: \"var(--md-sys-color-on-surface)\",\n\t/** Header headline + supporting text — OnSurfaceVariant */\n\theaderText: \"var(--md-sys-color-on-surface-variant)\",\n\t/** Range highlight background — SecondaryContainer */\n\trangeHighlight: \"var(--md-sys-color-secondary-container)\",\n\t/** Range highlight text — OnSecondaryContainer */\n\trangeText: \"var(--md-sys-color-on-secondary-container)\",\n\t/** Unselected year text — OnSurfaceVariant */\n\tyearText: \"var(--md-sys-color-on-surface-variant)\",\n\t/** Selected year background — Primary */\n\tyearSelected: \"var(--md-sys-color-primary)\",\n\t/** Selected year text — OnPrimary */\n\tyearSelectedText: \"var(--md-sys-color-on-primary)\",\n\t/** Scrim overlay */\n\tscrim: \"var(--md-sys-color-scrim)\",\n} as const;\n\n// ─── Shape Tokens ─────────────────────────────────────────────────────────────\n\n/** Shape tokens — corner radii from MD3 shape scale */\nexport const DP_SHAPE = {\n\t/** Dialog container — CornerExtraLarge = 28px */\n\tcontainer: \"var(--md-sys-shape-corner-extra-large)\",\n\t/** Day cell — CornerFull = pill */\n\tday: \"var(--md-sys-shape-corner-full)\",\n\t/** Range start/end indicator — CornerFull */\n\trangeEndpoint: \"var(--md-sys-shape-corner-full)\",\n\t/** Year chip — CornerFull */\n\tyear: \"var(--md-sys-shape-corner-full)\",\n} as const;\n\n// ─── Dimension Tokens ─────────────────────────────────────────────────────────\n\n/** Fixed dimension tokens from DatePickerModalTokens.kt */\nexport const DP_SIZE = {\n\t/** Dialog container width */\n\tcontainerWidth: 360,\n\t/** Dialog container height */\n\tcontainerHeight: 568,\n\t/** Day cell width/height */\n\tdayCell: 40,\n\t/** Today border width */\n\ttodayOutlineWidth: 1,\n\t/** Header container height */\n\theaderHeight: 120,\n\t/** Range picker header height */\n\trangeHeaderHeight: 128,\n\t/** Year chip height */\n\tyearChipHeight: 36,\n\t/** Year chip width */\n\tyearChipWidth: 72,\n} as const;\n\n// ─── Tailwind Class Helpers ───────────────────────────────────────────────────\n\n/**\n * Tailwind utility class strings for Date Picker elements.\n * Used with `cn()` function.\n */\nexport const DP_CLASSES = {\n\t/** Dialog container */\n\tdialog: [\n\t\t\"bg-m3-surface-container-high\",\n\t\t\"rounded-m3-xl\",\n\t\t\"w-[360px]\",\n\t\t\"overflow-hidden\",\n\t\t\"elevation-3\",\n\t].join(\" \"),\n\n\t/** Day cell container */\n\tdayCell: [\n\t\t\"relative flex items-center justify-center\",\n\t\t\"w-10 h-10 rounded-m3-full\",\n\t\t\"text-[length:var(--md-typescale-body-large-size,14px)]\",\n\t\t\"font-[var(--md-typescale-body-large-weight,400)]\",\n\t\t\"cursor-pointer select-none\",\n\t\t\"transition-m3-fast-effects\",\n\t].join(\" \"),\n\n\t/** Day cell: selected state */\n\tdayCellSelected: [\"bg-m3-primary\", \"text-m3-on-primary\"].join(\" \"),\n\n\t/** Day cell: today state */\n\tdayCellToday: [\n\t\t\"outline outline-1 outline-m3-primary\",\n\t\t\"text-m3-primary\",\n\t].join(\" \"),\n\n\t/** Day cell: disabled state */\n\tdayCellDisabled: \"opacity-[0.38] pointer-events-none cursor-not-allowed\",\n\n\t/** Range highlight (between start and end) */\n\trangeHighlight: \"bg-m3-secondary-container\",\n\n\t/** Weekday header row */\n\tweekdayRow:\n\t\t\"text-[length:var(--md-typescale-body-large-size,14px)] text-m3-on-surface\",\n} as const;\n","/**\n * @file dialog.tsx\n *\n * Dialog component system built on Material Design 3 Expressive guidelines.\n *\n * Extends Radix UI Dialog primitives with Framer Motion physics-based Spring animations\n * for entrance and exit transitions matching MD3 Expressive specifications.\n * Supports both Standard modal and Full-Screen dialog variants.\n *\n * @see https://m3.material.io/components/dialogs/overview\n */\n\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { IconButton } from \"./buttons/icon-button\";\nimport { Icon } from \"./icon\";\nimport { ScrollArea } from \"./scroll-area\";\nimport { DEFAULT_SPATIAL_SPRING } from \"./shared/motion-tokens\";\n\n// ─── MD3 Spring Config (Expressive) ──────────────────────────────────────────\n// MD3 default.spatial: stiffness=380, dampingRatio=0.8 → Framer damping ≈ 31.19\nconst MD3_SPRING = DEFAULT_SPATIAL_SPRING;\n\nconst MD3_OVERLAY_ANIM = {\n\tinitial: { opacity: 0 },\n\tanimate: {\n\t\topacity: 1,\n\t\ttransition: { duration: 0.2, ease: \"easeOut\" as const },\n\t},\n\texit: { opacity: 0, transition: { duration: 0.15, ease: \"easeIn\" as const } },\n};\n\nconst MD3_CONTENT_ANIM = {\n\tinitial: { opacity: 0, scale: 0.85, y: 24 },\n\tanimate: { opacity: 1, scale: 1, y: 0, transition: MD3_SPRING },\n\texit: {\n\t\topacity: 0,\n\t\tscale: 0.95,\n\t\ty: 8,\n\t\ttransition: { duration: 0.15, ease: \"easeIn\" as const },\n\t},\n};\n\nconst MD3_FULLSCREEN_ANIM = {\n\tinitial: { y: \"100%\" },\n\tanimate: { y: 0, transition: MD3_SPRING },\n\texit: { y: \"100%\", transition: { duration: 0.2, ease: \"easeIn\" as const } },\n};\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Root `Dialog` props. Wraps Radix `Dialog.Root` supporting controlled and uncontrolled open state.\n *\n * @example\n * ```tsx\n * const [open, setOpen] = React.useState(false);\n *\n * <Dialog open={open} onOpenChange={setOpen}>\n *   <DialogTrigger asChild>\n *      <Button>Open Dialog</Button>\n *   </DialogTrigger>\n *   <DialogContent>\n *     <DialogHeader>\n *        <DialogTitle>Confirm Action</DialogTitle>\n *     </DialogHeader>\n *     <DialogBody>Are you sure you want to proceed?</DialogBody>\n *     <DialogFooter>\n *        <Button onClick={() => setOpen(false)} variant=\"text\">Cancel</Button>\n *     </DialogFooter>\n *   </DialogContent>\n * </Dialog>\n * ```\n */\nexport interface DialogProps {\n\t/** Whether the dialog is open (controlled). Omit for uncontrolled. */\n\topen?: boolean;\n\t/** Called when the open state should change. */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Dialog trigger + content. */\n\tchildren: React.ReactNode;\n}\n\n/**\n * Props passed to standard container `DialogContent`.\n *\n * @see {@link DialogContent}\n */\nexport interface DialogContentProps\n\textends React.ComponentPropsWithoutRef<typeof RadixDialog.Content> {\n\t/** Hides the top-right close (X) button. @default false */\n\thideCloseButton?: boolean;\n\tclassName?: string;\n}\n\n/**\n * Props for `DialogFullScreenContent` dedicated to Full-Screen dialog mode.\n *\n * @remarks\n * Full-screen dialogs expand to cover the entire device screen and feature a Top App Bar\n * with a title label, close button, and action confirmation button.\n *\n * @see {@link DialogFullScreenContent}\n * @see https://m3.material.io/components/dialogs/guidelines#full-screen\n */\nexport interface DialogFullScreenContentProps\n\textends React.ComponentPropsWithoutRef<typeof RadixDialog.Content> {\n\t/** Title label displayed in the Top App Bar. */\n\ttitle?: string;\n\t/** Label for the primary action button on the Top App Bar (e.g. \"Save\"). */\n\tactionLabel?: string;\n\t/** Handler invoked when pressing the primary action button. */\n\tonAction?: () => void;\n\t/** Renders a divider separating Top App Bar from scrollable body content. @default false */\n\tshowDivider?: boolean;\n\tclassName?: string;\n}\n\n// ─── Re-exports wrapper ───────────────────────────────────────────────────────\n\n/**\n * Dialog component Root — wraps Radix `Dialog.Root`.\n *\n * @remarks Supports controlled state via `open`/`onOpenChange`, or uncontrolled state using `DialogTrigger`.\n */\nconst Dialog = ({ open, onOpenChange, children }: DialogProps) => (\n\t<RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n\t\t{children}\n\t</RadixDialog.Root>\n);\nDialog.displayName = \"Dialog\";\n\n/** Trigger element that toggles the open state of the Dialog (supports `asChild`). */\nconst DialogTrigger = RadixDialog.Trigger;\nDialogTrigger.displayName = \"DialogTrigger\";\n\n// ─── Portal + Overlay + Content ───────────────────────────────────────────────\nconst DialogPortal = ({\n\topen,\n\tchildren,\n}: {\n\topen?: boolean;\n\tchildren: React.ReactNode;\n}) => (\n\t<RadixDialog.Portal forceMount>\n\t\t<AnimatePresence>\n\t\t\t{open ? React.Children.toArray(children) : null}\n\t\t</AnimatePresence>\n\t</RadixDialog.Portal>\n);\nDialogPortal.displayName = \"DialogPortal\";\n\nconst DialogOverlay = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Overlay>,\n\tReact.ComponentPropsWithoutRef<typeof RadixDialog.Overlay>\n>(({ className, ...props }, ref) => (\n\t<RadixDialog.Overlay ref={ref} asChild {...props}>\n\t\t<m.div\n\t\t\tclassName={cn(\"fixed inset-0 z-50 bg-black/32\", className)}\n\t\t\taria-hidden=\"true\"\n\t\t\t{...MD3_OVERLAY_ANIM}\n\t\t/>\n\t</RadixDialog.Overlay>\n));\nDialogOverlay.displayName = \"DialogOverlay\";\n\nconst DialogContent = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Content>,\n\tDialogContentProps\n>(({ className, children, hideCloseButton = false, ...props }, ref) => (\n\t<RadixDialog.Content\n\t\tref={ref}\n\t\tasChild\n\t\taria-describedby={undefined}\n\t\t{...props}\n\t>\n\t\t<m.div\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed left-1/2 top-1/2 z-50 -translate-x-1/2 -translate-y-1/2\",\n\t\t\t\t\"w-[calc(100%-2rem)] max-w-140\",\n\t\t\t\t\"rounded-[28px] bg-m3-surface-container-high p-6\",\n\t\t\t\t\"shadow-lg outline-none focus-visible:ring-2 focus-visible:ring-m3-primary\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\trole=\"dialog\"\n\t\t\t{...MD3_CONTENT_ANIM}\n\t\t>\n\t\t\t{children}\n\t\t\t{!hideCloseButton && (\n\t\t\t\t<RadixDialog.Close asChild aria-label=\"Close dialog\">\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tcolorStyle=\"filled\"\n\t\t\t\t\t\tclassName=\"absolute right-4 top-4\"\n\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"close\" aria-hidden=\"true\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</RadixDialog.Close>\n\t\t\t)}\n\t\t</m.div>\n\t</RadixDialog.Content>\n));\nDialogContent.displayName = \"DialogContent\";\n\n// ─── Header & Related ────────────────────────────────────────────────────────\nconst DialogIcon = React.forwardRef<\n\tHTMLDivElement,\n\tReact.HTMLAttributes<HTMLDivElement>\n>(({ className, children, ...props }, ref) => (\n\t<div\n\t\tref={ref}\n\t\tclassName={cn(\"flex justify-center mb-4 text-m3-secondary\", className)}\n\t\taria-hidden=\"true\"\n\t\t{...props}\n\t>\n\t\t{children}\n\t</div>\n));\nDialogIcon.displayName = \"DialogIcon\";\n\nconst DialogHeader = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n\t<div className={cn(\"flex flex-col gap-2 mb-4\", className)} {...props} />\n);\nDialogHeader.displayName = \"DialogHeader\";\n\n// RadixDialog.Title surfaces to the accessibility tree — required\nconst DialogTitle = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Title>,\n\tReact.ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, asChild, ...props }, ref) => (\n\t<RadixDialog.Title\n\t\tref={ref}\n\t\tasChild={asChild}\n\t\tclassName={cn(\n\t\t\t\"text-[24px] leading-8 font-normal text-m3-on-surface tracking-[0em]\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n));\nDialogTitle.displayName = \"DialogTitle\";\n\nconst DialogDescription = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Description>,\n\tReact.ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, asChild, ...props }, ref) => (\n\t<RadixDialog.Description\n\t\tref={ref}\n\t\tasChild={asChild}\n\t\tclassName={cn(\"text-sm text-m3-on-surface-variant leading-5\", className)}\n\t\t{...props}\n\t/>\n));\nDialogDescription.displayName = \"DialogDescription\";\n\n// ─── Body & Footer ───────────────────────────────────────────────────────────\nconst DialogBody = React.forwardRef<\n\tHTMLDivElement,\n\tReact.HTMLAttributes<HTMLDivElement>\n>(({ className, children, dir, ...props }, ref) => (\n\t<ScrollArea\n\t\tref={ref}\n\t\ttype=\"hover\"\n\t\tdir={dir as \"ltr\" | \"rtl\" | undefined}\n\t\tclassName={cn(\"max-h-[calc(85dvh-200px)] -mx-6\", className)}\n\t\tviewportClassName=\"px-6\"\n\t\t{...props}\n\t>\n\t\t{children}\n\t</ScrollArea>\n));\nDialogBody.displayName = \"DialogBody\";\n\nconst DialogFooter = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n\t<div\n\t\tclassName={cn(\"flex flex-row justify-end gap-2 mt-6\", className)}\n\t\t{...props}\n\t/>\n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogClose = RadixDialog.Close;\n\n// ─── Full Screen Content Variant ──────────────────────────────────────────────\nconst DialogFullScreenContent = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Content>,\n\tDialogFullScreenContentProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tchildren,\n\t\t\ttitle,\n\t\t\tactionLabel,\n\t\t\tonAction,\n\t\t\tshowDivider,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => (\n\t\t<RadixDialog.Content\n\t\t\tref={ref}\n\t\t\tasChild\n\t\t\taria-describedby={undefined}\n\t\t\t{...props}\n\t\t>\n\t\t\t<m.div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed inset-0 z-50 w-full h-full bg-m3-surface flex flex-col\",\n\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-m3-primary\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\trole=\"dialog\"\n\t\t\t\t{...MD3_FULLSCREEN_ANIM}\n\t\t\t>\n\t\t\t\t<div className=\"flex shrink-0 items-center px-4 h-14 gap-2 bg-m3-surface\">\n\t\t\t\t\t<RadixDialog.Close asChild aria-label=\"Close dialog\">\n\t\t\t\t\t\t<IconButton size=\"sm\" colorStyle=\"filled\" aria-label=\"Close\">\n\t\t\t\t\t\t\t<Icon name=\"close\" aria-hidden=\"true\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</RadixDialog.Close>\n\n\t\t\t\t\t{title && (\n\t\t\t\t\t\t<DialogTitle className=\"flex-1 text-[22px] leading-7 font-medium truncate pr-2\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</DialogTitle>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{actionLabel && onAction && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={onAction}\n\t\t\t\t\t\t\tclassName=\"text-sm font-medium text-m3-primary px-3 py-2 rounded-full hover:bg-m3-primary/8 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary transition-colors whitespace-nowrap\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionLabel}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{showDivider && (\n\t\t\t\t\t<hr className=\"border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t)}\n\n\t\t\t\t<ScrollArea\n\t\t\t\t\ttype=\"hover\"\n\t\t\t\t\tclassName=\"flex-1 w-full\"\n\t\t\t\t\tviewportClassName=\"p-6\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</ScrollArea>\n\t\t\t</m.div>\n\t\t</RadixDialog.Content>\n\t),\n);\nDialogFullScreenContent.displayName = \"DialogFullScreenContent\";\n\nexport {\n\tDialog,\n\tDialogBody,\n\tDialogClose,\n\tDialogContent,\n\tDialogDescription,\n\tDialogFooter,\n\tDialogFullScreenContent,\n\tDialogHeader,\n\tDialogIcon,\n\tDialogOverlay,\n\tDialogPortal,\n\tDialogTitle,\n\tDialogTrigger,\n};\n","/**\n * @file date-picker/date-picker-dialog.tsx\n *\n * Modal container for Date Pickers — reuses Dialog + DialogPortal primitives.\n * Equivalent to `DatePickerDialog` composable in Android Compose Material3.\n *\n * Tokens from DatePickerModalTokens.kt:\n * - ContainerColor = SurfaceContainerHigh (#ece6f0)\n * - ContainerShape = CornerExtraLarge (28px)\n * - ContainerElevation = Level3\n * - ContainerWidth = 360px, ContainerHeight = 568px (single date)\n *\n * @see https://m3.material.io/components/date-pickers/overview\n */\n\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { m } from \"motion/react\";\nimport type * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Dialog, DialogPortal } from \"../../dialog\";\nimport {\n\tPICKER_CONTENT_ANIM,\n\tPICKER_OVERLAY_ANIM,\n} from \"../shared/animation-tokens\";\nimport type { DatePickerDialogProps } from \"./date-picker.types\";\n\n/**\n * Modal Date Picker dialog with MD3 Expressive spring animations.\n *\n * Reuses `<Dialog>` (Root) and `<DialogPortal>` (AnimatePresence + Portal lifecycle)\n * while managing Overlay and Content to preserve MD3 Date Picker layout specs.\n *\n * @example\n\n * ```tsx\n * const state = useDatePickerState();\n * const [open, setOpen] = React.useState(false);\n *\n * <DatePickerDialog\n *   open={open}\n *   onDismiss={() => setOpen(false)}\n *   confirmButton={\n *     <Button variant=\"text\" onClick={() => { handleConfirm(state.selectedDateMs); setOpen(false); }}>\n *       OK\n *     </Button>\n *   }\n *   dismissButton={\n *     <Button variant=\"text\" onClick={() => setOpen(false)}>Cancel</Button>\n *   }\n * >\n *   <DatePicker state={state} />\n * </DatePickerDialog>\n * ```\n */\nexport const DatePickerDialog: React.FC<DatePickerDialogProps> = ({\n\topen,\n\tonDismiss,\n\tconfirmButton,\n\tdismissButton,\n\tchildren,\n\tclassName,\n\ttitle = \"Select date\",\n}) => {\n\treturn (\n\t\t<Dialog open={open} onOpenChange={(v) => !v && onDismiss()}>\n\t\t\t<DialogPortal open={open}>\n\t\t\t\t{/* Scrim */}\n\t\t\t\t<RadixDialog.Overlay asChild forceMount>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tkey=\"picker-overlay\"\n\t\t\t\t\t\tclassName=\"fixed inset-0 z-50 bg-m3-scrim/40\"\n\t\t\t\t\t\tinitial={PICKER_OVERLAY_ANIM.initial}\n\t\t\t\t\t\tanimate={PICKER_OVERLAY_ANIM.animate}\n\t\t\t\t\t\texit={PICKER_OVERLAY_ANIM.exit}\n\t\t\t\t\t\tonClick={onDismiss}\n\t\t\t\t\t/>\n\t\t\t\t</RadixDialog.Overlay>\n\n\t\t\t\t{/* Dialog panel */}\n\t\t\t\t<RadixDialog.Content\n\t\t\t\t\tasChild\n\t\t\t\t\tforceMount\n\t\t\t\t\tonEscapeKeyDown={onDismiss}\n\t\t\t\t\tonPointerDownOutside={(e) => e.preventDefault()} // scrim handles dismiss\n\t\t\t\t\taria-modal\n\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tkey=\"picker-content\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"fixed z-50 left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t\t\t\"bg-m3-surface-container-high\",\n\t\t\t\t\t\t\t\"rounded-m3-xl\",\n\t\t\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\t\t\t// Elevation Level 3\n\t\t\t\t\t\t\t\"elevation-3\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ width: \"min(calc(100vw - 32px), 360px)\" }}\n\t\t\t\t\t\tinitial={PICKER_CONTENT_ANIM.initial}\n\t\t\t\t\t\tanimate={PICKER_CONTENT_ANIM.animate}\n\t\t\t\t\t\texit={PICKER_CONTENT_ANIM.exit}\n\t\t\t\t\t>\n\t\t\t\t\t\t<RadixDialog.Title className=\"sr-only\">{title}</RadixDialog.Title>\n\n\t\t\t\t\t\t{/* Content — DatePicker or DateRangePicker */}\n\t\t\t\t\t\t<div className=\"flex-1 overflow-hidden\">{children}</div>\n\n\t\t\t\t\t\t{/* Action buttons footer */}\n\t\t\t\t\t\t<div className=\"flex items-center justify-end gap-2 px-4 py-3\">\n\t\t\t\t\t\t\t{dismissButton}\n\t\t\t\t\t\t\t{confirmButton}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</m.div>\n\t\t\t\t</RadixDialog.Content>\n\t\t\t</DialogPortal>\n\t\t</Dialog>\n\t);\n};\n\nDatePickerDialog.displayName = \"DatePickerDialog\";\n","/**\n * @file date-picker/date-range-picker.tsx\n *\n * DateRangePicker — calendar UI for date range selection.\n * Equivalent to `DateRangePicker` composable in Android Compose Material3.\n *\n * Differences from DatePicker:\n * - Highlights range between start and end (SecondaryContainer)\n * - Headline displays \"Start date → End date\"\n * - Default title: \"Select dates\" (plural)\n *\n * @see https://m3.material.io/components/date-pickers/overview\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { PICKER_SELECTOR_ANIM } from \"../shared/animation-tokens\";\nimport {\n\tformatDate,\n\tgetNavigableMonth,\n\tisMonthNavigable,\n} from \"../shared/calendar-model\";\nimport type { DateRangePickerProps } from \"./date-picker.types\";\nimport { CalendarGrid } from \"./subcomponents/calendar-grid\";\nimport {\n\tCalendarHeader,\n\ttype CalendarSelector,\n} from \"./subcomponents/calendar-header\";\nimport { MonthPickerList } from \"./subcomponents/month-picker-list\";\nimport { YearPickerList } from \"./subcomponents/year-picker-list\";\n\n/**\n * DateRangePicker calendar UI.\n *\n * @example\n * ```tsx\n * const state = useDateRangePickerState();\n *\n * <DateRangePicker\n *   state={state}\n *   title=\"Select travel dates\"\n * />\n * ```\n */\nexport const DateRangePicker: React.FC<DateRangePickerProps> = ({\n\tstate,\n\tshowModeToggle = false,\n\ttitle,\n\tclassName,\n}) => {\n\tconst {\n\t\tselectedStartMs,\n\t\tselectedEndMs,\n\t\tdisplayedMonthMs,\n\t\tdisplayMode,\n\t\tyearRange,\n\t\tlocale,\n\t\tselectableDates,\n\t\tselectDate,\n\t\tnavigateMonth,\n\t\tnavigateToMonth,\n\t\tsetDisplayMode,\n\t} = state;\n\n\tconst [activeSelector, setActiveSelector] =\n\t\tReact.useState<CalendarSelector>(null);\n\tconst [slideDirection, setSlideDirection] = React.useState<\n\t\t\"prev\" | \"next\" | null\n\t>(null);\n\n\tconst handlePrev = React.useCallback(() => {\n\t\tsetSlideDirection(\"prev\");\n\t\tnavigateMonth(\"prev\");\n\t}, [navigateMonth]);\n\n\tconst handleNext = React.useCallback(() => {\n\t\tsetSlideDirection(\"next\");\n\t\tnavigateMonth(\"next\");\n\t}, [navigateMonth]);\n\n\tconst handleYearSelect = React.useCallback(\n\t\t(year: number) => {\n\t\t\tconst d = new Date(displayedMonthMs);\n\t\t\tnavigateToMonth(year, d.getUTCMonth());\n\t\t\tsetActiveSelector(null);\n\t\t},\n\t\t[displayedMonthMs, navigateToMonth],\n\t);\n\n\tconst handleMonthSelect = React.useCallback(\n\t\t(month: number) => {\n\t\t\tconst d = new Date(displayedMonthMs);\n\t\t\tnavigateToMonth(d.getUTCFullYear(), month);\n\t\t\tsetActiveSelector(null);\n\t\t},\n\t\t[displayedMonthMs, navigateToMonth],\n\t);\n\n\t// ── Headline: \"Start → End\" ──────────────────────────────────────────────────\n\tconst formatShort = React.useCallback(\n\t\t(ms: number | null): string => {\n\t\t\tif (ms === null) return \"—\";\n\t\t\treturn formatDate(ms, locale, {\n\t\t\t\tmonth: \"short\",\n\t\t\t\tday: \"numeric\",\n\t\t\t\ttimeZone: \"UTC\",\n\t\t\t});\n\t\t},\n\t\t[locale],\n\t);\n\n\tconst headline = `${formatShort(selectedStartMs)} – ${formatShort(selectedEndMs)}`;\n\n\tconst currentYear = new Date(displayedMonthMs).getUTCFullYear();\n\tconst currentMonth = new Date(displayedMonthMs).getUTCMonth();\n\n\tconst computedAriaLabel =\n\t\ttypeof title === \"string\" ? title : \"Date range picker\";\n\tconst canNavigatePrev =\n\t\tgetNavigableMonth(displayedMonthMs, \"prev\", yearRange, selectableDates) !==\n\t\tnull;\n\tconst canNavigateNext =\n\t\tgetNavigableMonth(displayedMonthMs, \"next\", yearRange, selectableDates) !==\n\t\tnull;\n\tconst canNavigatePreviousYear = isMonthNavigable(\n\t\tcurrentYear - 1,\n\t\tyearRange,\n\t\tselectableDates,\n\t);\n\tconst canNavigateNextYear = isMonthNavigable(\n\t\tcurrentYear + 1,\n\t\tyearRange,\n\t\tselectableDates,\n\t);\n\n\treturn (\n\t\t<fieldset\n\t\t\tclassName={cn(\"flex flex-col select-none\", className)}\n\t\t\tstyle={{ width: \"min(100%, 360px)\" }}\n\t\t\taria-label={computedAriaLabel}\n\t\t>\n\t\t\t<legend className=\"sr-only\">{computedAriaLabel}</legend>\n\t\t\t{/* Header */}\n\t\t\t<CalendarHeader\n\t\t\t\tdisplayedMonthMs={displayedMonthMs}\n\t\t\t\tactiveSelector={activeSelector}\n\t\t\t\tdisplayMode={displayMode}\n\t\t\t\tshowModeToggle={showModeToggle}\n\t\t\t\ttitle={title ?? \"Select dates\"}\n\t\t\t\theadline={headline}\n\t\t\t\tlocale={locale}\n\t\t\t\tcanNavigatePrev={canNavigatePrev}\n\t\t\t\tcanNavigateNext={canNavigateNext}\n\t\t\t\tcanNavigatePreviousYear={canNavigatePreviousYear}\n\t\t\t\tcanNavigateNextYear={canNavigateNextYear}\n\t\t\t\tonPrev={handlePrev}\n\t\t\t\tonNext={handleNext}\n\t\t\t\tonPreviousYear={() => navigateToMonth(currentYear - 1, currentMonth)}\n\t\t\t\tonNextYear={() => navigateToMonth(currentYear + 1, currentMonth)}\n\t\t\t\tonToggleSelector={(selector) =>\n\t\t\t\t\tsetActiveSelector((active) => (active === selector ? null : selector))\n\t\t\t\t}\n\t\t\t\tonToggleMode={() => {\n\t\t\t\t\tsetDisplayMode(displayMode === \"picker\" ? \"input\" : \"picker\");\n\t\t\t\t\tsetActiveSelector(null);\n\t\t\t\t}}\n\t\t\t/>\n\n\t\t\t{/* Body */}\n\t\t\t<div\n\t\t\t\tclassName=\"relative flex-1 overflow-hidden\"\n\t\t\t\tstyle={{ minHeight: \"296px\" }}\n\t\t\t>\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{activeSelector === \"month\" ? (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tid=\"date-picker-selection\"\n\t\t\t\t\t\t\tkey=\"month-list\"\n\t\t\t\t\t\t\tinitial={PICKER_SELECTOR_ANIM.initial}\n\t\t\t\t\t\t\tanimate={PICKER_SELECTOR_ANIM.animate}\n\t\t\t\t\t\t\texit={PICKER_SELECTOR_ANIM.exit}\n\t\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MonthPickerList\n\t\t\t\t\t\t\t\tselectedMonth={currentMonth}\n\t\t\t\t\t\t\t\tlocale={locale}\n\t\t\t\t\t\t\t\tonMonthSelect={handleMonthSelect}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</m.div>\n\t\t\t\t\t) : activeSelector === \"year\" ? (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tid=\"date-picker-selection\"\n\t\t\t\t\t\t\tkey=\"year-list\"\n\t\t\t\t\t\t\tinitial={PICKER_SELECTOR_ANIM.initial}\n\t\t\t\t\t\t\tanimate={PICKER_SELECTOR_ANIM.animate}\n\t\t\t\t\t\t\texit={PICKER_SELECTOR_ANIM.exit}\n\t\t\t\t\t\t\tclassName=\"absolute inset-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<YearPickerList\n\t\t\t\t\t\t\t\tselectedYear={currentYear}\n\t\t\t\t\t\t\t\tyearRange={yearRange}\n\t\t\t\t\t\t\t\tselectableDates={selectableDates}\n\t\t\t\t\t\t\t\tonYearSelect={handleYearSelect}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</m.div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<CalendarGrid\n\t\t\t\t\t\t\tkey=\"calendar\"\n\t\t\t\t\t\t\tdisplayedMonthMs={displayedMonthMs}\n\t\t\t\t\t\t\tslideDirection={slideDirection}\n\t\t\t\t\t\t\tlocale={locale}\n\t\t\t\t\t\t\tselectableDates={selectableDates}\n\t\t\t\t\t\t\tselectedMs={null}\n\t\t\t\t\t\t\tselectedStartMs={selectedStartMs}\n\t\t\t\t\t\t\tselectedEndMs={selectedEndMs}\n\t\t\t\t\t\t\tisRangePicker\n\t\t\t\t\t\t\tonDaySelect={selectDate}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t</fieldset>\n\t);\n};\n\nDateRangePicker.displayName = \"DateRangePicker\";\n","/**\n * @file date-time-pickers/shared/types.ts\n *\n * Shared TypeScript base types for Date Pickers and Time Pickers system.\n * Designed for reuse across both picker systems.\n *\n * @see https://m3.material.io/components/date-pickers/overview\n */\n\n// ─── Display Mode ─────────────────────────────────────────────────────────────\n\n/**\n * Picker display mode.\n * - `picker` — calendar/dial UI (default)\n * - `input`  — text input mode for manual entry\n *\n * Equivalent to `DisplayMode` enum in Android Compose Material3.\n */\nexport type DisplayMode = \"picker\" | \"input\";\n\n// ─── Week Configuration ───────────────────────────────────────────────────────\n\n/**\n * First day of the week.\n * - `0` = Sunday (US standard)\n * - `1` = Monday (ISO 8601, default for this library)\n */\nexport type WeekStartsOn = 0 | 1;\n\n// ─── Locale Configuration ─────────────────────────────────────────────────────\n\n/**\n * Locale configuration for Date Picker.\n * Uses native `Intl.DateTimeFormat` API — zero bundle overhead.\n *\n * @example\n * ```tsx\n * const state = useDatePickerState({\n *   locale: { locale: 'en-US', weekStartsOn: 1 }\n * });\n * ```\n */\nexport interface DateLocale {\n\t/**\n\t * BCP 47 language tag.\n\t * @example 'en-US', 'fr-FR', 'ja-JP'\n\t * @default navigator.language (runtime)\n\t */\n\tlocale?: string;\n\n\t/**\n\t * First day of the week.\n\t * @default 1 (Monday)\n\t */\n\tweekStartsOn?: WeekStartsOn;\n}\n\n/** Required version — all fields resolved */\nexport type ResolvedDateLocale = Required<DateLocale>;\n\n// ─── Selectable Dates ─────────────────────────────────────────────────────────\n\n/**\n * Interface for filtering selectable dates and years.\n * Equivalent to `SelectableDates` interface in Android Compose Material3.\n\n *\n * @example\n * ```tsx\n * // Disable weekends\n * const selectableDates: SelectableDates = {\n *   isSelectableDate(utcMs) {\n *     const day = new Date(utcMs).getUTCDay();\n *     return day !== 0 && day !== 6;\n *   },\n *   isSelectableYear(year) {\n *     return year >= 2020;\n *   }\n * };\n * ```\n */\nexport interface SelectableDates {\n\t/**\n\t * Checks if a date is selectable.\n\t * @param utcTimeMs - UTC milliseconds (normalized to UTC midnight)\n\t * @returns `true` if date is selectable\n\t */\n\tisSelectableDate(utcTimeMs: number): boolean;\n\n\t/**\n\t * Checks if a year is selectable.\n\t * Unselectable years are disabled in year grid view.\n\t * @param year - Full year (e.g., 2025)\n\t * @returns `true` if year is selectable\n\t */\n\tisSelectableYear(year: number): boolean;\n}\n\n/** Default SelectableDates — allows all dates and years */\nexport const ALL_DATES_SELECTABLE: SelectableDates = {\n\tisSelectableDate: () => true,\n\tisSelectableYear: () => true,\n};\n\n// ─── Date Range ───────────────────────────────────────────────────────────────\n\n/**\n * Date range with start and end.\n * Both can be null during selection flow.\n */\nexport interface DateRange {\n\t/** Start date UTC milliseconds (UTC midnight). Null if unselected. */\n\tstart: number | null;\n\t/** End date UTC milliseconds (UTC midnight). Null if unselected. */\n\tend: number | null;\n}\n\n// ─── Calendar Day / Week ──────────────────────────────────────────────────────\n\n/** Represents a day cell in calendar grid */\nexport interface CalendarDay {\n\t/** UTC milliseconds (UTC midnight) */\n\tutcMs: number;\n\t/** Day of month (1–31) */\n\tday: number;\n\t/** Month index (0–11) — 0 = January */\n\tmonth: number;\n\t/** Full year */\n\tyear: number;\n\t/** `true` if day belongs to currently displayed month */\n\tisCurrentMonth: boolean;\n\t/** `true` if day is today */\n\tisToday: boolean;\n}\n\n/** A single week — array of 7 days (or null for padding) */\nexport type CalendarWeek = Array<CalendarDay | null>;\n","/**\n * @file date-picker/use-date-picker-state.ts\n *\n * Core state hook for DatePicker — hoisted state pattern.\n * Equivalent to `rememberDatePickerState()` in Android Compose Material3.\n *\n * @example\n * ```tsx\n * const state = useDatePickerState({\n *   locale: { locale: 'en-US', weekStartsOn: 1 },\n *   selectableDates: {\n *     isSelectableDate: (ms) => new Date(ms).getUTCDay() !== 0,\n *     isSelectableYear: (year) => year >= 2020,\n *   }\n * });\n *\n * <DatePicker state={state} />\n * <p>Selected: {state.selectedDateMs}</p>\n * ```\n */\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport {\n\tgetNavigableMonth,\n\tisMonthNavigable,\n\tnormalizeToMonthStart,\n\tresolveLocale,\n\tstartOfDayUTC,\n\ttodayUTC,\n} from \"../shared/calendar-model\";\nimport type { DisplayMode } from \"../shared/types\";\nimport { ALL_DATES_SELECTABLE } from \"../shared/types\";\nimport type {\n\tDatePickerState,\n\tUseDatePickerStateOptions,\n} from \"./date-picker.types\";\n\n// ─── Defaults ─────────────────────────────────────────────────────────────────\n\nconst DEFAULT_YEAR_RANGE: [number, number] = [1900, 2100];\nconst DEFAULT_DISPLAY_MODE: DisplayMode = \"picker\";\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\n/**\n * Hook for managing state of DatePicker.\n *\n * @param options - Initial state configuration\n * @returns `DatePickerState` object with state and actions\n */\nexport const useDatePickerState = (\n\toptions?: UseDatePickerStateOptions,\n): DatePickerState => {\n\t// ── Initial values ──────────────────────────────────────────────────────────\n\tconst initialSelectedMs = options?.initialSelectedDateMs ?? null;\n\n\tconst initialMonthMs = normalizeToMonthStart(\n\t\toptions?.initialDisplayedMonthMs ??\n\t\t\t(initialSelectedMs !== null ? initialSelectedMs : todayUTC()),\n\t);\n\n\tconst yearRange = options?.yearRange ?? DEFAULT_YEAR_RANGE;\n\tconst selectableDates = options?.selectableDates ?? ALL_DATES_SELECTABLE;\n\tconst initialDisplayMode =\n\t\toptions?.initialDisplayMode ?? DEFAULT_DISPLAY_MODE;\n\tconst locale = resolveLocale(options?.locale);\n\n\t// ── State ───────────────────────────────────────────────────────────────────\n\tconst [selectedDateMs, setSelectedDateMs] = useState<number | null>(\n\t\tinitialSelectedMs !== null ? startOfDayUTC(initialSelectedMs) : null,\n\t);\n\tconst [displayedMonthMs, setDisplayedMonthMs] =\n\t\tuseState<number>(initialMonthMs);\n\tconst [displayMode, setDisplayModeState] =\n\t\tuseState<DisplayMode>(initialDisplayMode);\n\n\t// ── Actions ─────────────────────────────────────────────────────────────────\n\n\tconst selectDate = useCallback(\n\t\t(ms: number | null): void => {\n\t\t\tif (ms === null) {\n\t\t\t\tsetSelectedDateMs(null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst normalized = startOfDayUTC(ms);\n\t\t\t// Validate selectable\n\t\t\tif (!selectableDates.isSelectableDate(normalized)) return;\n\t\t\tsetSelectedDateMs(normalized);\n\t\t\t// Auto-navigate calendar to month of selected date\n\t\t\tsetDisplayedMonthMs(normalizeToMonthStart(normalized));\n\t\t},\n\t\t[selectableDates],\n\t);\n\n\tconst navigateMonthAction = useCallback(\n\t\t(direction: \"prev\" | \"next\"): void => {\n\t\t\tsetDisplayedMonthMs(\n\t\t\t\t(prev) =>\n\t\t\t\t\tgetNavigableMonth(prev, direction, yearRange, selectableDates) ??\n\t\t\t\t\tprev,\n\t\t\t);\n\t\t},\n\t\t[yearRange, selectableDates],\n\t);\n\n\tconst navigateToMonth = useCallback(\n\t\t(year: number, month: number): void => {\n\t\t\tif (!isMonthNavigable(year, yearRange, selectableDates)) return;\n\t\t\tsetDisplayedMonthMs(Date.UTC(year, month, 1));\n\t\t},\n\t\t[yearRange, selectableDates],\n\t);\n\n\tconst setDisplayMode = useCallback((mode: DisplayMode): void => {\n\t\tsetDisplayModeState(mode);\n\t}, []);\n\n\tconst reset = useCallback((): void => {\n\t\tsetSelectedDateMs(\n\t\t\tinitialSelectedMs !== null ? startOfDayUTC(initialSelectedMs) : null,\n\t\t);\n\t\tsetDisplayedMonthMs(initialMonthMs);\n\t\tsetDisplayModeState(initialDisplayMode);\n\t}, [initialSelectedMs, initialMonthMs, initialDisplayMode]);\n\n\t// ── Memoized state object ───────────────────────────────────────────────────\n\treturn useMemo<DatePickerState>(\n\t\t() => ({\n\t\t\tselectedDateMs,\n\t\t\tdisplayedMonthMs,\n\t\t\tdisplayMode,\n\t\t\tyearRange,\n\t\t\tlocale,\n\t\t\tselectableDates,\n\t\t\tselectDate,\n\t\t\tnavigateMonth: navigateMonthAction,\n\t\t\tnavigateToMonth,\n\t\t\tsetDisplayMode,\n\t\t\treset,\n\t\t}),\n\t\t[\n\t\t\tselectedDateMs,\n\t\t\tdisplayedMonthMs,\n\t\t\tdisplayMode,\n\t\t\tyearRange,\n\t\t\tlocale,\n\t\t\tselectableDates,\n\t\t\tselectDate,\n\t\t\tnavigateMonthAction,\n\t\t\tnavigateToMonth,\n\t\t\tsetDisplayMode,\n\t\t\treset,\n\t\t],\n\t);\n};\n","/**\n * @file date-picker/use-date-range-picker-state.ts\n *\n * Core state hook for DateRangePicker — hoisted state pattern.\n * Equivalent to `rememberDateRangePickerState()` in Android Compose Material3.\n *\n * Range selection logic:\n * - Click 1: set start date\n * - Click 2 (ms > start): set end date → range complete\n * - Click 2 (ms <= start): reset, set start = ms\n * - If both start and end exist: reset, set start = ms\n *\n * @example\n * ```tsx\n * const state = useDateRangePickerState();\n *\n * <DateRangePicker state={state} />\n * <p>Start: {state.selectedStartMs}, End: {state.selectedEndMs}</p>\n * ```\n */\n\nimport { useCallback, useMemo, useReducer, useState } from \"react\";\nimport {\n\tgetNavigableMonth,\n\tisMonthNavigable,\n\tnormalizeToMonthStart,\n\tresolveLocale,\n\tstartOfDayUTC,\n\ttodayUTC,\n} from \"../shared/calendar-model\";\nimport type { DisplayMode } from \"../shared/types\";\nimport { ALL_DATES_SELECTABLE } from \"../shared/types\";\nimport type {\n\tDateRangePickerState,\n\tUseDateRangePickerStateOptions,\n} from \"./date-picker.types\";\n\n// ─── Defaults ─────────────────────────────────────────────────────────────────\n\nconst DEFAULT_YEAR_RANGE: [number, number] = [1900, 2100];\n\n// ─── Range Reducer ────────────────────────────────────────────────────────────\n\ninterface RangeState {\n\tstartMs: number | null;\n\tendMs: number | null;\n}\n\ntype RangeAction =\n\t| { type: \"SELECT\"; ms: number }\n\t| { type: \"CLEAR\" }\n\t| { type: \"RESET\"; startMs: number | null; endMs: number | null };\n\n/**\n * Pure reducer to update start/end atomically in a single dispatch —\n * avoids nested setState anti-pattern and stale closure issues.\n */\nfunction rangeReducer(state: RangeState, action: RangeAction): RangeState {\n\tswitch (action.type) {\n\t\tcase \"SELECT\": {\n\t\t\tconst { startMs, endMs } = state;\n\t\t\tconst ms = action.ms;\n\n\t\t\t// Case 1: No start date → set start\n\t\t\tif (startMs === null) return { startMs: ms, endMs: null };\n\n\t\t\t// Case 2: Both start and end exist → reset, set start = ms\n\t\t\tif (endMs !== null) return { startMs: ms, endMs: null };\n\n\t\t\t// Case 3: Has start, no end, ms > start → set end\n\t\t\tif (ms > startMs) return { startMs, endMs: ms };\n\n\t\t\t// Case 4: ms <= start → reset, set start = ms\n\t\t\treturn { startMs: ms, endMs: null };\n\t\t}\n\t\tcase \"CLEAR\":\n\t\t\treturn { startMs: null, endMs: null };\n\t\tcase \"RESET\":\n\t\t\treturn { startMs: action.startMs, endMs: action.endMs };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\n/**\n * Hook for managing state of DateRangePicker.\n *\n * @param options - Initial configuration\n * @returns `DateRangePickerState` object with state and actions\n */\nexport const useDateRangePickerState = (\n\toptions?: UseDateRangePickerStateOptions,\n): DateRangePickerState => {\n\t// ── Initial values ──────────────────────────────────────────────────────────\n\tconst initialStartMs =\n\t\toptions?.initialStartMs != null\n\t\t\t? startOfDayUTC(options.initialStartMs)\n\t\t\t: null;\n\tconst initialEndMs =\n\t\toptions?.initialEndMs != null ? startOfDayUTC(options.initialEndMs) : null;\n\n\tconst initialMonthMs = normalizeToMonthStart(\n\t\toptions?.initialDisplayedMonthMs ??\n\t\t\t(initialStartMs !== null ? initialStartMs : todayUTC()),\n\t);\n\n\tconst yearRange = options?.yearRange ?? DEFAULT_YEAR_RANGE;\n\tconst selectableDates = options?.selectableDates ?? ALL_DATES_SELECTABLE;\n\tconst initialDisplayMode: DisplayMode =\n\t\toptions?.initialDisplayMode ?? \"picker\";\n\tconst locale = resolveLocale(options?.locale);\n\n\t// ── State ───────────────────────────────────────────────────────────────────\n\tconst [{ startMs: selectedStartMs, endMs: selectedEndMs }, dispatch] =\n\t\tuseReducer(rangeReducer, {\n\t\t\tstartMs: initialStartMs,\n\t\t\tendMs: initialEndMs,\n\t\t});\n\n\tconst [displayedMonthMs, setDisplayedMonthMs] =\n\t\tuseState<number>(initialMonthMs);\n\tconst [displayMode, setDisplayModeState] =\n\t\tuseState<DisplayMode>(initialDisplayMode);\n\n\t// ── Actions ─────────────────────────────────────────────────────────────────\n\n\t/**\n\t * Dispatch atomic SELECT action — start and end are updated simultaneously\n\t * in reducer, avoiding nested setState anti-pattern.\n\t */\n\tconst selectDate = useCallback(\n\t\t(ms: number): void => {\n\t\t\tconst normalized = startOfDayUTC(ms);\n\t\t\tif (!selectableDates.isSelectableDate(normalized)) return;\n\t\t\tdispatch({ type: \"SELECT\", ms: normalized });\n\t\t},\n\t\t[selectableDates],\n\t);\n\n\tconst clearRange = useCallback((): void => {\n\t\tdispatch({ type: \"CLEAR\" });\n\t}, []);\n\n\tconst navigateMonthAction = useCallback(\n\t\t(direction: \"prev\" | \"next\"): void => {\n\t\t\tsetDisplayedMonthMs(\n\t\t\t\t(prev) =>\n\t\t\t\t\tgetNavigableMonth(prev, direction, yearRange, selectableDates) ??\n\t\t\t\t\tprev,\n\t\t\t);\n\t\t},\n\t\t[yearRange, selectableDates],\n\t);\n\n\tconst navigateToMonth = useCallback(\n\t\t(year: number, month: number): void => {\n\t\t\tif (!isMonthNavigable(year, yearRange, selectableDates)) return;\n\t\t\tsetDisplayedMonthMs(Date.UTC(year, month, 1));\n\t\t},\n\t\t[yearRange, selectableDates],\n\t);\n\n\tconst setDisplayMode = useCallback((mode: DisplayMode): void => {\n\t\tsetDisplayModeState(mode);\n\t}, []);\n\n\tconst reset = useCallback((): void => {\n\t\tdispatch({ type: \"RESET\", startMs: initialStartMs, endMs: initialEndMs });\n\t\tsetDisplayedMonthMs(initialMonthMs);\n\t\tsetDisplayModeState(initialDisplayMode);\n\t}, [initialStartMs, initialEndMs, initialMonthMs, initialDisplayMode]);\n\n\t// ── Memoized state object ───────────────────────────────────────────────────\n\treturn useMemo<DateRangePickerState>(\n\t\t() => ({\n\t\t\tselectedStartMs,\n\t\t\tselectedEndMs,\n\t\t\tdisplayedMonthMs,\n\t\t\tdisplayMode,\n\t\t\tyearRange,\n\t\t\tlocale,\n\t\t\tselectableDates,\n\t\t\tselectDate,\n\t\t\tclearRange,\n\t\t\tnavigateMonth: navigateMonthAction,\n\t\t\tnavigateToMonth,\n\t\t\tsetDisplayMode,\n\t\t\treset,\n\t\t}),\n\t\t[\n\t\t\tselectedStartMs,\n\t\t\tselectedEndMs,\n\t\t\tdisplayedMonthMs,\n\t\t\tdisplayMode,\n\t\t\tyearRange,\n\t\t\tlocale,\n\t\t\tselectableDates,\n\t\t\tselectDate,\n\t\t\tclearRange,\n\t\t\tnavigateMonthAction,\n\t\t\tnavigateToMonth,\n\t\t\tsetDisplayMode,\n\t\t\treset,\n\t\t],\n\t);\n};\n","/**\n * @file time-picker/time-picker.tokens.ts\n *\n * MD3 Design tokens for Time Picker component system.\n * Verified mapping from:\n *   - TimePickerTokens.kt → ClockDial, TimeSelector, PeriodSelector (Picker mode)\n *   - TimeInputTokens.kt  → TimeField, PeriodSelector (Input mode)\n *\n * CSS variables → packages/tokens/src/colors.css\n * Tailwind classes → packages/tailwind/src/index.css\n *\n * @see docs/m3/date-and-time-pickers/time-pickers/TimePickerTokens.kt\n * @see docs/m3/date-and-time-pickers/time-pickers/TimeInputTokens.kt\n */\n\n// ─── Color Tokens ──────────────────────────────────────────────────────────────\n\n/**\n * Color tokens for Time Picker — mapped from TimePickerTokens.kt + TimeInputTokens.kt.\n * Uses CSS custom properties from MD3 theme (packages/tokens/src/colors.css).\n */\nexport const TP_COLORS = {\n\t// ── Clock Dial (TimePickerTokens) ─────────────────────────────────────────\n\t/** Dial background — SurfaceContainerHighest */\n\tclockDial: \"var(--md-sys-color-surface-container-highest)\",\n\t/** Selected number text — OnPrimary */\n\tclockDialSelected: \"var(--md-sys-color-on-primary)\",\n\t/** Unselected number text — OnSurface */\n\tclockDialUnselected: \"var(--md-sys-color-on-surface)\",\n\t/** Selector handle circle — Primary */\n\tselectorHandle: \"var(--md-sys-color-primary)\",\n\t/** Selector track line — Primary */\n\tselectorTrack: \"var(--md-sys-color-primary)\",\n\t/** Selector center dot — Primary */\n\tselectorCenter: \"var(--md-sys-color-primary)\",\n\n\t// ── Container ─────────────────────────────────────────────────────────────\n\t/** Picker/Input container — SurfaceContainerHigh */\n\tcontainer: \"var(--md-sys-color-surface-container-high)\",\n\n\t// ── Time Selector Buttons (hour/minute display) ───────────────────────────\n\t/** Selected selector (hour/min button) — PrimaryContainer */\n\ttimeSelectorSelected: \"var(--md-sys-color-primary-container)\",\n\t/** Unselected selector — SurfaceContainerHighest */\n\ttimeSelectorUnselected: \"var(--md-sys-color-surface-container-highest)\",\n\t/** Selected selector text — OnPrimaryContainer */\n\ttimeSelectorSelectedText: \"var(--md-sys-color-on-primary-container)\",\n\t/** Unselected selector text — OnSurface */\n\ttimeSelectorUnselectedText: \"var(--md-sys-color-on-surface)\",\n\n\t// ── Period Selector AM/PM (updated flag = true → PrimaryContainer) ────────\n\t/** AM/PM selected background — TertiaryContainer */\n\tperiodSelected: \"var(--md-sys-color-tertiary-container)\",\n\t/** AM/PM unselected background — transparent */\n\tperiodUnselected: \"transparent\",\n\t/** AM/PM selected text — OnTertiaryContainer */\n\tperiodSelectedText: \"var(--md-sys-color-on-tertiary-container)\",\n\t/** AM/PM unselected text — OnSurfaceVariant */\n\tperiodUnselectedText: \"var(--md-sys-color-on-surface-variant)\",\n\t/** AM/PM border — Outline */\n\tperiodOutline: \"var(--md-sys-color-outline)\",\n\n\t// ── Time Field (TimeInput mode, TimeInputTokens) ───────────────────────────\n\t/** Time field default background — SurfaceContainerHighest */\n\ttimeField: \"var(--md-sys-color-surface-container-highest)\",\n\t/** Time field focused background — PrimaryContainer */\n\ttimeFieldFocus: \"var(--md-sys-color-primary-container)\",\n\t/** Time field focused text — OnPrimaryContainer */\n\ttimeFieldFocusText: \"var(--md-sys-color-on-primary-container)\",\n\t/** Time field focus outline — Primary */\n\ttimeFieldFocusOutline: \"var(--md-sys-color-primary)\",\n\t/** Time field default text — OnSurface */\n\ttimeFieldText: \"var(--md-sys-color-on-surface)\",\n\t/** \":\" separator — OnSurface */\n\tseparator: \"var(--md-sys-color-on-surface)\",\n\t/** Headline label (\"Select time\") — OnSurfaceVariant */\n\theadline: \"var(--md-sys-color-on-surface-variant)\",\n} as const;\n\n// ─── Tailwind Class Helpers ────────────────────────────────────────────────────\n\n/**\n * Tailwind utility class strings for Time Picker elements.\n * Used with `cn()` function.\n * Mapped from packages/tailwind/src/index.css (--color-m3-* tokens).\n */\nexport const TP_CLASSES = {\n\t// ── Container ─────────────────────────────────────────────────────────────\n\t/** Main picker/input container */\n\tcontainer: \"bg-m3-surface-container-high rounded-m3-xl select-none\",\n\n\t// ── Time Selector Buttons ─────────────────────────────────────────────────\n\t/** Hour/minute selector button — selected */\n\ttimeSelectorSelected: \"bg-m3-primary-container text-m3-on-primary-container\",\n\t/** Hour/minute selector button — unselected */\n\ttimeSelectorUnselected: \"bg-m3-surface-container-highest text-m3-on-surface\",\n\n\t// ── Period Selector ───────────────────────────────────────────────────────\n\t/** AM/PM button — selected */\n\tperiodSelected: \"bg-m3-primary-container text-m3-on-primary-container\",\n\t/** AM/PM button — unselected */\n\tperiodUnselected: \"bg-transparent text-m3-on-surface-variant\",\n\n\t// ── Time Field (input mode) ────────────────────────────────────────────────\n\t/** Time input field — default */\n\ttimeField: \"bg-m3-surface-container-highest text-m3-on-surface\",\n\t/** Time input field — focused */\n\ttimeFieldFocused:\n\t\t\"bg-m3-primary-container text-m3-on-primary-container ring-2 ring-m3-primary\",\n\n\t// ── Clock Dial ─────────────────────────────────────────────────────────────\n\t/** Clock dial background circle */\n\tclockDial: \"fill-[var(--md-sys-color-surface-container-highest)]\",\n\t/** Selected number on dial */\n\tclockDialSelectedText: \"fill-[var(--md-sys-color-on-primary)]\",\n\t/** Unselected number on dial */\n\tclockDialUnselectedText: \"fill-[var(--md-sys-color-on-surface)]\",\n\t/** Selector handle, track, center dot */\n\tselectorPrimary: \"fill-m3-primary stroke-m3-primary\",\n} as const;\n\n// ─── Shape Tokens ──────────────────────────────────────────────────────────────\n\n/**\n * Shape tokens — corner radii from MD3 shape scale.\n * Mapped from ShapeKeyTokens in TimePickerTokens.kt + TimeInputTokens.kt.\n *\n * Uses Tailwind class names from packages/tailwind/src/index.css.\n */\nexport const TP_SHAPE = {\n\t/** Dialog container — CornerExtraLarge = 28px */\n\tcontainer: \"rounded-m3-xl\",\n\t/** Hour/minute selector button — CornerSmall = 8px */\n\ttimeSelector: \"rounded-m3-sm\",\n\t/** Period (AM/PM) container — CornerSmall = 8px */\n\tperiodSelector: \"rounded-m3-sm\",\n\t/** Clock dial circle — CornerFull */\n\tclockDial: \"rounded-m3-full\",\n\t/** Time field — CornerSmall = 8px */\n\ttimeField: \"rounded-m3-sm\",\n} as const;\n\n// ─── Dimension Tokens ──────────────────────────────────────────────────────────\n\n/**\n * Fixed dimension tokens from TimePickerTokens.kt + TimeInputTokens.kt.\n * Unit: px (converted from dp).\n */\nexport const TP_SIZE = {\n\t// ── Clock Dial (TimePickerTokens) ─────────────────────────────────────────\n\t/** ClockDialContainerSize = 256dp */\n\tclockDialSize: 256,\n\t/** ClockDialSelectorHandleContainerSize = 48dp */\n\tselectorHandleSize: 48,\n\t/** ClockDialSelectorCenterContainerSize = 8dp */\n\tselectorCenterSize: 8,\n\t/** ClockDialSelectorTrackContainerWidth = 2dp */\n\tselectorTrackWidth: 2,\n\n\t// ── Time Selector (TimeSelectorContainer) ─────────────────────────────────\n\t/** TimeSelectorContainerWidth = 96dp */\n\ttimeSelectorWidth: 96,\n\t/** TimeSelectorContainerHeight = 80dp */\n\ttimeSelectorHeight: 80,\n\t/** TimeSelector24HVerticalContainerWidth = 114dp (24h mode) */\n\ttimeSelector24hWidth: 114,\n\n\t// ── Period Selector (Picker mode) ─────────────────────────────────────────\n\t/** PeriodSelectorVerticalContainerWidth = 52dp */\n\tperiodSelectorVerticalWidth: 52,\n\t/** PeriodSelectorVerticalContainerHeight = 80dp */\n\tperiodSelectorVerticalHeight: 80,\n\t/** PeriodSelectorHorizontalContainerWidth = 216dp */\n\tperiodSelectorHorizWidth: 216,\n\t/** PeriodSelectorHorizontalContainerHeight = 38dp */\n\tperiodSelectorHorizHeight: 38,\n\n\t// ── Time Field (Input mode, TimeInputTokens) ───────────────────────────────\n\t/** TimeFieldContainerWidth = 96dp */\n\ttimeFieldWidth: 96,\n\t/** TimeFieldContainerHeight = 72dp */\n\ttimeFieldHeight: 72,\n\t/** PeriodSelectorContainerHeight (Input mode) = 72dp */\n\tperiodInputHeight: 72,\n\t/** PeriodSelectorContainerWidth (Input mode) = 52dp */\n\tperiodInputWidth: 52,\n} as const;\n","/**\n * @file time-picker/subcomponents/period-selector.tsx\n *\n * AM/PM toggle — equivalent to `VerticalPeriodToggle` / `PeriodToggleImpl` in TimePicker.kt.\n *\n * - Hidden when `is24hour = true`\n * - Vertical layout (AM top, PM bottom) — default layout for M3 vertical TimePicker\n * - Border: 1px Outline or gap between AM/PM\n * - Selected: bg-m3-primary-container + bold text\n * - Unselected: transparent + text-m3-on-surface-variant\n *\n * Ported from `VerticalPeriodToggle` + `PeriodToggleImpl` in TimePicker.kt.\n *\n * @see docs/m3/date-and-time-pickers/time-pickers/TimePicker.kt (PeriodToggleImpl)\n */\n\nimport type * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { TP_SIZE } from \"../time-picker.tokens\";\nimport type { TimePickerState } from \"../time-picker.types\";\n\n// ─── Props ─────────────────────────────────────────────────────────────────────\n\ninterface PeriodSelectorProps {\n\t/** Hoisted state — requires `isPm`, `isHourInputValid`, `setIsPm` */\n\tstate: TimePickerState;\n\t/**\n\t * Layout direction.\n\t * - \"vertical\": AM top, PM bottom (used in Vertical TimePicker)\n\t * - \"horizontal\": AM left, PM right (used in Horizontal TimePicker)\n\t * @default \"vertical\"\n\t */\n\tlayout?: \"vertical\" | \"horizontal\";\n\t/** Inline style override — used for custom dimensions */\n\tstyle?: React.CSSProperties;\n\tclassName?: string;\n}\n\n// ─── Component ─────────────────────────────────────────────────────────────────\n\n/**\n * AM/PM Period Selector.\n *\n * Automatically hidden when `state.is24hour = true`.\n *\n * Implementation following \"updated toggle\" pattern (isUpdatedTimepickerToggleEnabled = true):\n * - No outer container border\n * - Two distinct buttons with rounded-m3-full shape\n * - Selected: bg-m3-primary-container + bold text\n *\n * @example\n * ```tsx\n * <PeriodSelector state={state} layout=\"vertical\" />\n * ```\n */\nexport const PeriodSelector: React.FC<PeriodSelectorProps> = ({\n\tstate,\n\tlayout = \"vertical\",\n\tstyle,\n\tclassName,\n}) => {\n\t// Completely hidden in 24h format\n\tif (state.is24hour) return null;\n\n\tconst { isPm, isHourInputValid, setIsPm } = state;\n\n\tconst handleAmClick = (): void => {\n\t\t// Only update if hour input is valid — per Compose source:\n\t\t// onClick = { if (state.isPm && state.isHourInputValid) state.hour -= 12 }\n\t\tif (isPm && isHourInputValid) {\n\t\t\tsetIsPm(false);\n\t\t}\n\t};\n\n\tconst handlePmClick = (): void => {\n\t\t// onClick = { if (!state.isPm && state.isHourInputValid) state.hour += 12 }\n\t\tif (!isPm && isHourInputValid) {\n\t\t\tsetIsPm(true);\n\t\t}\n\t};\n\n\tconst isVertical = layout === \"vertical\";\n\n\treturn (\n\t\t<fieldset\n\t\t\taria-label=\"AM/PM\"\n\t\t\tstyle={{\n\t\t\t\twidth: isVertical\n\t\t\t\t\t? TP_SIZE.periodSelectorVerticalWidth\n\t\t\t\t\t: TP_SIZE.periodSelectorHorizWidth,\n\t\t\t\theight: isVertical\n\t\t\t\t\t? TP_SIZE.periodSelectorVerticalHeight\n\t\t\t\t\t: TP_SIZE.periodSelectorHorizHeight,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t\tclassName={cn(\n\t\t\t\t// Layout\n\t\t\t\tisVertical ? \"flex flex-col\" : \"flex flex-row\",\n\t\t\t\t\"gap-0 overflow-hidden\",\n\t\t\t\t// Container shape (CornerSmall = rounded-m3-sm)\n\t\t\t\t\"rounded-m3-sm\",\n\t\t\t\t// Border (period selector outline — updated toggle uses border on container)\n\t\t\t\t\"border border-m3-outline\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{/* AM Button */}\n\t\t\t<PeriodButton\n\t\t\t\tlabel=\"AM\"\n\t\t\t\tisSelected={!isPm}\n\t\t\t\tonClick={handleAmClick}\n\t\t\t\tisFirst\n\t\t\t\tisVertical={isVertical}\n\t\t\t/>\n\n\t\t\t{/* PM Button */}\n\t\t\t<PeriodButton\n\t\t\t\tlabel=\"PM\"\n\t\t\t\tisSelected={isPm}\n\t\t\t\tonClick={handlePmClick}\n\t\t\t\tisFirst={false}\n\t\t\t\tisVertical={isVertical}\n\t\t\t/>\n\t\t</fieldset>\n\t);\n};\n\nPeriodSelector.displayName = \"PeriodSelector\";\n\n// ─── Period Button ─────────────────────────────────────────────────────────────\n\ninterface PeriodButtonProps {\n\tlabel: \"AM\" | \"PM\";\n\tisSelected: boolean;\n\tonClick: () => void;\n\tisFirst: boolean;\n\tisVertical: boolean;\n}\n\nconst PeriodButton: React.FC<PeriodButtonProps> = ({\n\tlabel,\n\tisSelected,\n\tonClick,\n\tisFirst,\n\tisVertical,\n}) => {\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\taria-pressed={isSelected}\n\t\t\taria-label={label}\n\t\t\tonClick={onClick}\n\t\t\tclassName={cn(\n\t\t\t\t// Layout\n\t\t\t\t\"flex-1 flex items-center justify-center\",\n\t\t\t\t\"min-w-0 min-h-0\",\n\t\t\t\t// Typography — TitleMedium equivalent (16px, medium weight)\n\t\t\t\t\"text-[16px] leading-none\",\n\t\t\t\t// Selected state — from PeriodToggleImpl (useUpdatedToggle = true)\n\t\t\t\tisSelected\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t\"bg-m3-tertiary-container text-m3-on-tertiary-container\",\n\t\t\t\t\t\t\t\"font-bold\",\n\t\t\t\t\t\t]\n\t\t\t\t\t: [\"bg-transparent text-m3-on-surface-variant\", \"font-medium\"],\n\t\t\t\t// Divider between buttons via border\n\t\t\t\t!isFirst && isVertical && \"border-t border-m3-outline\",\n\t\t\t\t!isFirst && !isVertical && \"border-l border-m3-outline\",\n\t\t\t\t// Interaction\n\t\t\t\t\"cursor-pointer transition-colors transition-m3-fast-effects\",\n\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-m3-primary\",\n\t\t\t)}\n\t\t>\n\t\t\t{label}\n\t\t</button>\n\t);\n};\n","/**\n * @file time-picker/subcomponents/time-field.tsx\n *\n * TimeField — display/input cell for hour or minute.\n *\n * Used in both modes:\n *   - \"selector\" → <button> in TimePicker (dial), click to switch hour/minute selection\n *   - \"input\"    → <input> in TimeInput, manual number entry\n *\n * Ported from `TimeSelector` and `TimePickerTextField` composables in TimePicker.kt.\n *\n * @see docs/m3/date-and-time-pickers/time-pickers/TimePicker.kt (TimeSelector, TimePickerTextField)\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { TP_SIZE } from \"../time-picker.tokens\";\nimport type { TimePickerSelectionMode } from \"../time-picker.types\";\n\n// ─── Props ─────────────────────────────────────────────────────────────────────\n\ninterface TimeFieldSelectorProps {\n\t/** Mode \"selector\" = button in dial picker */\n\tmode: \"selector\";\n\t/** Display value (number, zero-padded) */\n\n\tvalue: number;\n\t/** Field type: hour or minute */\n\tfield: TimePickerSelectionMode;\n\t/** Current picker selection mode */\n\tselection: TimePickerSelectionMode;\n\t/** Callback when user clicks to activate field */\n\tonActivate: () => void;\n\tclassName?: string;\n}\n\ninterface TimeFieldInputProps {\n\t/** Mode \"input\" = text input in TimeInput */\n\tmode: \"input\";\n\t/** Raw input value (bound to input element) */\n\tvalue: number;\n\t/** Field type: hour or minute */\n\tfield: TimePickerSelectionMode;\n\t/** Whether field is currently focused (controlled) */\n\tisFocused: boolean;\n\t/** Whether value is valid (for error state styling) */\n\tisValid: boolean;\n\t/** Callback when value changes */\n\tonChange: (value: number) => void;\n\t/** Callback fired when 2 digits are entered → advances focus to next field */\n\tonAutoAdvance?: () => void;\n\t/** Callback when field receives focus */\n\tonFocus?: () => void;\n\t/** Callback when field loses focus */\n\tonBlur?: () => void;\n\tclassName?: string;\n}\n\ntype TimeFieldProps = TimeFieldSelectorProps | TimeFieldInputProps;\n\n// ─── Component ─────────────────────────────────────────────────────────────────\n\n/**\n * TimeField component — renders hour/minute box according to mode.\n *\n * Selector mode: button with DisplayLarge typography, highlighted when selected.\n * Input mode: text input field with DisplayMedium typography, focus outline when focused.\n *\n * @example Selector mode (in TimePicker)\n\n * ```tsx\n * <TimeField\n *   mode=\"selector\"\n *   value={state.hourForDisplay}\n *   field=\"hour\"\n *   selection={state.selection}\n *   onActivate={() => state.setSelection('hour')}\n * />\n * ```\n *\n * @example Input mode (trong TimeInput)\n * ```tsx\n * <TimeField\n *   mode=\"input\"\n *   value={state.hourInput}\n *   field=\"hour\"\n *   isFocused={focusedField === 'hour'}\n *   isValid={state.isHourInputValid}\n *   onChange={(v) => state.setHourInput(v)}\n *   onAutoAdvance={() => setFocusedField('minute')}\n * />\n * ```\n */\nexport const TimeField: React.FC<TimeFieldProps> = (props) => {\n\tif (props.mode === \"selector\") {\n\t\treturn <SelectorField {...props} />;\n\t}\n\treturn <InputField {...props} />;\n};\n\nTimeField.displayName = \"TimeField\";\n\n// ─── Selector Field (Dial mode) ────────────────────────────────────────────────\n\nconst SelectorField: React.FC<TimeFieldSelectorProps> = ({\n\tvalue,\n\tfield,\n\tselection,\n\tonActivate,\n\tclassName,\n}) => {\n\tconst isSelected = selection === field;\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\taria-label={field === \"hour\" ? \"Hour\" : \"Minute\"}\n\t\t\taria-pressed={isSelected}\n\t\t\tonClick={onActivate}\n\t\t\tstyle={{\n\t\t\t\twidth: TP_SIZE.timeSelectorWidth,\n\t\t\t\theight: TP_SIZE.timeSelectorHeight,\n\t\t\t}}\n\t\t\tclassName={cn(\n\t\t\t\t// Layout\n\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\"rounded-m3-sm\",\n\t\t\t\t// Typography — DisplayLarge equivalent (57px)\n\t\t\t\t\"text-[57px] font-normal leading-none tabular-nums\",\n\t\t\t\t// State\n\t\t\t\tisSelected\n\t\t\t\t\t? \"bg-m3-primary-container text-m3-on-primary-container\"\n\t\t\t\t\t: \"bg-m3-surface-container-highest text-m3-on-surface\",\n\t\t\t\t// Interaction\n\t\t\t\t\"cursor-pointer transition-colors transition-m3-fast-effects\",\n\t\t\t\t\"hover:opacity-90 active:opacity-80\",\n\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{String(value).padStart(2, \"0\")}\n\t\t</button>\n\t);\n};\n\n// ─── Input Field (Text input mode) ────────────────────────────────────────────\n\nconst InputField: React.FC<TimeFieldInputProps> = ({\n\tvalue,\n\tfield,\n\tisFocused,\n\tisValid,\n\tonChange,\n\tonAutoAdvance,\n\tonFocus,\n\tonBlur,\n\tclassName,\n}) => {\n\t// Track current input content for digit-by-digit handling\n\tconst [inputText, setInputText] = React.useState(\n\t\tString(value).padStart(2, \"0\"),\n\t);\n\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\n\t// Sync from state when value changes externally (e.g. on reset)\n\tReact.useEffect(() => {\n\t\tif (!isFocused) {\n\t\t\tsetInputText(String(value).padStart(2, \"0\"));\n\t\t}\n\t}, [value, isFocused]);\n\n\t// Focus/blur the input element when isFocused prop changes\n\tReact.useEffect(() => {\n\t\tif (isFocused) {\n\t\t\tinputRef.current?.focus();\n\t\t\tinputRef.current?.select();\n\t\t}\n\t}, [isFocused]);\n\n\tconst handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n\t\tconst raw = e.target.value.replace(/\\D/g, \"\"); // retain digits only\n\t\tconst limited = raw.slice(-2); // max 2 digits\n\n\t\tsetInputText(limited);\n\n\t\tconst numVal = parseInt(limited, 10);\n\t\tif (!Number.isNaN(numVal)) {\n\t\t\tonChange(numVal);\n\n\t\t\t// Auto-advance after entering 2 digits\n\t\t\tif (limited.length === 2) {\n\t\t\t\tonAutoAdvance?.();\n\t\t\t}\n\t\t} else if (limited === \"\") {\n\t\t\t// Empty input — reset to 0 while keeping display empty\n\t\t\tonChange(0);\n\t\t}\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>): void => {\n\t\t// Allow: digits, Backspace, Delete, Tab, Arrow keys\n\n\t\tconst allowed = [\n\t\t\t\"Backspace\",\n\t\t\t\"Delete\",\n\t\t\t\"Tab\",\n\t\t\t\"ArrowLeft\",\n\t\t\t\"ArrowRight\",\n\t\t\t\"Enter\",\n\t\t];\n\t\tconst isDigit = e.key >= \"0\" && e.key <= \"9\";\n\t\tif (!isDigit && !allowed.includes(e.key)) {\n\t\t\te.preventDefault();\n\t\t}\n\t};\n\n\tconst handleFocus = (e: React.FocusEvent<HTMLInputElement>): void => {\n\t\te.target.select(); // select all text khi focus\n\t\tonFocus?.();\n\t};\n\n\tconst displayText = isFocused ? inputText : String(value).padStart(2, \"0\");\n\n\tconst isError = isFocused && !isValid && inputText.length === 2;\n\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\twidth: TP_SIZE.timeFieldWidth,\n\t\t\t\theight: TP_SIZE.timeFieldHeight,\n\t\t\t}}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex items-center justify-center rounded-m3-sm\",\n\t\t\t\t// Background state\n\t\t\t\tisFocused\n\t\t\t\t\t? \"bg-m3-primary-container\"\n\t\t\t\t\t: \"bg-m3-surface-container-highest\",\n\t\t\t\t// Error border\n\t\t\t\tisError && \"ring-2 ring-m3-error\",\n\t\t\t\t// Focus outline (non-error)\n\t\t\t\tisFocused && !isError && \"ring-2 ring-m3-primary\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={inputRef}\n\t\t\t\ttype=\"text\"\n\t\t\t\tinputMode=\"numeric\"\n\t\t\t\tvalue={displayText}\n\t\t\t\tmaxLength={2}\n\t\t\t\taria-label={field === \"hour\" ? \"Hour\" : \"Minute\"}\n\t\t\t\taria-invalid={isError}\n\t\t\t\tonChange={handleChange}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tonFocus={handleFocus}\n\t\t\t\tonBlur={onBlur}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Reset input styles\n\t\t\t\t\t\"w-full h-full bg-transparent border-none outline-none\",\n\t\t\t\t\t\"text-center tabular-nums select-all\",\n\t\t\t\t\t// Typography — DisplayMedium equivalent (45px)\n\t\t\t\t\t\"text-[45px] font-normal leading-none\",\n\t\t\t\t\t// Color\n\t\t\t\t\tisFocused ? \"text-m3-on-primary-container\" : \"text-m3-on-surface\",\n\t\t\t\t\t// Caret\n\t\t\t\t\t\"caret-m3-primary\",\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n","/**\n * @file time-picker/time-input.tsx\n *\n * TimeInput — text input mode for time entry.\n *\n * Layout:\n * ```\n *   ┌────────────────────────────────┐\n *   │ Enter time                     │  ← headline (labelMedium)\n *   │ [07] : [00] [AM]              │  ← input fields + PeriodSelector\n *   │              [PM]             │\n *   │  Hour   Minute                │  ← helper labels (bodySmall)\n *   └────────────────────────────────┘\n * ```\n *\n * Behavior:\n * - Two `<input>` fields for hour and minute\n * - Auto-advance: entering 2 valid digits automatically focuses next field\n * - Validation: error state when value is out of range\n * - AM/PM toggle on right (hidden when is24hour)\n *\n * Ported from `TimeInputImpl` in TimePicker.kt.\n *\n * @see docs/m3/date-and-time-pickers/time-pickers/TimePicker.kt (TimeInputImpl)\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { PeriodSelector } from \"./subcomponents/period-selector\";\nimport { TimeField } from \"./subcomponents/time-field\";\nimport { TP_SIZE } from \"./time-picker.tokens\";\nimport type { TimeInputProps } from \"./time-picker.types\";\n\n// ─── Component ─────────────────────────────────────────────────────────────────\n\n/**\n * TimeInput — text input mode.\n *\n * Used with `useTimePickerState`:\n *\n * @example\n * ```tsx\n * const state = useTimePickerState({ initialHour: 9, initialMinute: 30 });\n *\n * // Standalone\n * <TimeInput state={state} />\n *\n * // In dialog (with toggle)\n * <TimePickerDialog\n *   open={open}\n *   onDismiss={() => setOpen(false)}\n *   confirmButton={<Button variant=\"text\" onClick={() => setOpen(false)}>OK</Button>}\n * >\n *   <TimeInput state={state} />\n * </TimePickerDialog>\n * ```\n */\nexport const TimeInput: React.FC<TimeInputProps> = ({ state, className }) => {\n\tconst { is24hour, setHourInput, setMinuteInput, setSelection } = state;\n\n\tconst [focusedField, setFocusedField] = React.useState<\n\t\t\"hour\" | \"minute\" | null\n\t>(null);\n\n\tconst handleHourAutoAdvance = (): void => {\n\t\tsetFocusedField(\"minute\");\n\t\tsetSelection(\"minute\");\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-m3-surface-container-high rounded-m3-xl\",\n\t\t\t\t\"flex flex-col\",\n\t\t\t\t\"p-6 gap-0 select-none\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{/* ── Headline ── */}\n\t\t\t<p\n\t\t\t\tclassName=\"w-full text-left text-m3-on-surface-variant mb-5\"\n\t\t\t\tstyle={{ fontSize: \"12px\", fontWeight: 500, letterSpacing: \"0.1em\" }}\n\t\t\t>\n\t\t\t\tEnter time\n\t\t\t</p>\n\n\t\t\t{/* ── Input Row: fields + separator + AM/PM ── */}\n\t\t\t<div className=\"flex flex-row items-start gap-2\">\n\t\t\t\t{/* Hour input */}\n\t\t\t\t<div className=\"flex flex-col items-center gap-1\">\n\t\t\t\t\t<TimeField\n\t\t\t\t\t\tmode=\"input\"\n\t\t\t\t\t\tvalue={state.hourInput}\n\t\t\t\t\t\tfield=\"hour\"\n\t\t\t\t\t\tisFocused={focusedField === \"hour\"}\n\t\t\t\t\t\tisValid={state.isHourInputValid}\n\t\t\t\t\t\tonChange={setHourInput}\n\t\t\t\t\t\tonAutoAdvance={handleHourAutoAdvance}\n\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\tsetFocusedField(\"hour\");\n\t\t\t\t\t\t\tsetSelection(\"hour\");\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonBlur={() => setFocusedField(null)}\n\t\t\t\t\t/>\n\t\t\t\t\t<span className=\"text-[11px] text-m3-on-surface-variant font-normal leading-none mt-1\">\n\t\t\t\t\t\tHour\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Separator \":\" */}\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"text-m3-on-surface text-center self-start\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tfontSize: \"57px\",\n\t\t\t\t\t\tfontWeight: 400,\n\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\twidth: 24,\n\t\t\t\t\t\t// Aligned with height of input field\n\t\t\t\t\t\tmarginTop: `${(TP_SIZE.timeFieldHeight - 57) / 2}px`,\n\t\t\t\t\t}}\n\t\t\t\t\taria-hidden\n\t\t\t\t>\n\t\t\t\t\t:\n\t\t\t\t</span>\n\n\t\t\t\t{/* Minute input */}\n\t\t\t\t<div className=\"flex flex-col items-center gap-1\">\n\t\t\t\t\t<TimeField\n\t\t\t\t\t\tmode=\"input\"\n\t\t\t\t\t\tvalue={state.minuteInput}\n\t\t\t\t\t\tfield=\"minute\"\n\t\t\t\t\t\tisFocused={focusedField === \"minute\"}\n\t\t\t\t\t\tisValid={state.isMinuteInputValid}\n\t\t\t\t\t\tonChange={setMinuteInput}\n\t\t\t\t\t\tonFocus={() => {\n\t\t\t\t\t\t\tsetFocusedField(\"minute\");\n\t\t\t\t\t\t\tsetSelection(\"minute\");\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonBlur={() => setFocusedField(null)}\n\t\t\t\t\t/>\n\t\t\t\t\t{/* Helper label */}\n\t\t\t\t\t<span className=\"text-[11px] text-m3-on-surface-variant font-normal leading-none mt-1\">\n\t\t\t\t\t\tMinute\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\n\t\t\t\t{/* AM/PM (hidden when is24hour) */}\n\t\t\t\t{!is24hour && (\n\t\t\t\t\t<PeriodSelector\n\t\t\t\t\t\tstate={state}\n\t\t\t\t\t\tlayout=\"vertical\"\n\t\t\t\t\t\tclassName=\"ml-2 self-start\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\theight: TP_SIZE.periodInputHeight,\n\t\t\t\t\t\t\twidth: TP_SIZE.periodInputWidth,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nTimeInput.displayName = \"TimeInput\";\n","/**\n * @file time-picker/subcomponents/clock-dial.tsx\n *\n * Clock dial SVG — clock face with pointer interaction.\n *\n * Renders SVG circle with:\n *   - Background circle (SurfaceContainerHighest)\n *   - 12 (or 24) numbers positioned evenly on circle\n *   - Selector: center dot + track line + handle circle (all Primary)\n *   - Pointer events: click + drag to pick hour/minute\n *   - autoSwitchToMinute: automatically switches to minute after hour selection\n *\n * Math ported from `AnalogTimePickerState` in TimePicker.kt:\n *   - RadiansPerHour, RadiansPerMinute, InnerCircleToSizeRatio, OuterCircleToSizeRatio\n *   - `rotateTo`, `onTap` logic\n *\n * @see docs/m3/date-and-time-pickers/time-pickers/TimePicker.kt (ClockFace, AnalogTimePickerState)\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../../lib/utils\";\nimport { TP_COLORS, TP_SIZE } from \"../time-picker.tokens\";\nimport type {\n\tTimePickerSelectionMode,\n\tTimePickerState,\n} from \"../time-picker.types\";\n\n// ─── Constants (from TimePicker.kt) ──────────────────────────────────────────────\n\nconst FULL_CIRCLE = Math.PI * 2;\nconst QUARTER_CIRCLE = Math.PI / 2;\nconst RADIANS_PER_HOUR = FULL_CIRCLE / 12;\nconst RADIANS_PER_MINUTE = FULL_CIRCLE / 60;\n\n/**\n * OuterCircleToSizeRatio — 101dp on 256dp dial.\n */\nconst OUTER_CIRCLE_RATIO = 101 / TP_SIZE.clockDialSize;\n\n/**\n * InnerCircleToSizeRatio — 69dp on 256dp dial.\n */\nconst INNER_CIRCLE_RATIO = 69 / TP_SIZE.clockDialSize;\n\n/** SVG Center = diameter / 2 */\nconst CENTER = TP_SIZE.clockDialSize / 2; // 128\n\n/** Outer ring radius (hours 1-12, minutes) */\nconst OUTER_RADIUS = TP_SIZE.clockDialSize * OUTER_CIRCLE_RATIO; // ~106.8\n\n/** Inner ring radius (hours 13-23 in 24h mode) */\nconst INNER_RADIUS = TP_SIZE.clockDialSize * INNER_CIRCLE_RATIO; // ~74.9\n\n/** Handle circle radius = selectorHandleSize / 2 */\nconst HANDLE_RADIUS = TP_SIZE.selectorHandleSize / 2; // 24\n\n/**\n * SELECTOR_GAP — minimum gap from handle edge to container edge.\n * MD3 spec: 4dp gap between selector handle and background circle.\n */\nconst SELECTOR_GAP = 4;\n\n// ─── Number data ────────────────────────────────────────────────────────────────\n\ninterface ClockNumber {\n\tvalue: number;\n\tx: number;\n\ty: number;\n\tradius: number; // for 24h inner ring detection\n}\n\n/**\n * Calculates number position on dial circle.\n * Starting from 12 o'clock (top) = -PI/2\n */\nconst getPositionOnDial = (\n\tindex: number,\n\ttotal: number,\n\tradius: number,\n): { x: number; y: number } => {\n\tconst angle = (index / total) * FULL_CIRCLE - QUARTER_CIRCLE;\n\treturn {\n\t\tx: CENTER + radius * Math.cos(angle),\n\t\ty: CENTER + radius * Math.sin(angle),\n\t};\n};\n\n/** Generates number list for 12h hour mode (1-12) */\nconst buildHour12Numbers = (): ClockNumber[] =>\n\tArray.from({ length: 12 }, (_, i) => {\n\t\tconst hour = i === 0 ? 12 : i;\n\t\tconst pos = getPositionOnDial(i, 12, OUTER_RADIUS);\n\t\treturn { value: hour, ...pos, radius: OUTER_RADIUS };\n\t});\n\n/** Generates number list for 24h mode (0-23, outer 0-11, inner 12-23) */\nconst buildHour24Numbers = (): ClockNumber[] => {\n\tconst outer: ClockNumber[] = Array.from({ length: 12 }, (_, i) => {\n\t\tconst hour = i; // 0-11\n\t\tconst pos = getPositionOnDial(i, 12, OUTER_RADIUS);\n\t\treturn { value: hour, ...pos, radius: OUTER_RADIUS };\n\t});\n\tconst inner: ClockNumber[] = Array.from({ length: 12 }, (_, i) => {\n\t\tconst hour = i + 12; // 12-23\n\t\tconst pos = getPositionOnDial(i, 12, INNER_RADIUS);\n\t\treturn { value: hour, ...pos, radius: INNER_RADIUS };\n\t});\n\treturn [...outer, ...inner];\n};\n\n/** Generates number list for minute mode (0, 5, 10, ..., 55) */\nconst buildMinuteNumbers = (): ClockNumber[] =>\n\tArray.from({ length: 12 }, (_, i) => {\n\t\tconst minute = i * 5; // 0, 5, 10, ..., 55\n\t\tconst pos = getPositionOnDial(i, 12, OUTER_RADIUS);\n\t\treturn { value: minute, ...pos, radius: OUTER_RADIUS };\n\t});\n\n// ─── Math ──────────────────────────────────────────────────────────────────────\n\n/**\n * Calculates angle from pointer position (x, y) relative to center.\n * Similar to `atan2` in Compose — returns angle in [-PI, PI].\n * Offset by -QUARTER_CIRCLE so 12 o'clock = 0 rad.\n */\nconst getAngleFromPointer = (x: number, y: number): number => {\n\treturn Math.atan2(y - CENTER, x - CENTER);\n};\n\n/**\n * Normalizes angle to range [0, 2PI).\n */\nconst normalizeAngle = (angle: number): number => {\n\tlet a = angle % FULL_CIRCLE;\n\tif (a < 0) a += FULL_CIRCLE;\n\treturn a;\n};\n\n/**\n * Converts angle → hour (12h mode, 1-12).\n * Ported from `Float.toHour()` in AnalogTimePickerState.\n */\nconst angleToHour12 = (angle: number): number => {\n\tconst hourOffset = RADIANS_PER_HOUR / 2;\n\tconst totalOffset = hourOffset + QUARTER_CIRCLE;\n\tconst hour = Math.round((angle + totalOffset) / RADIANS_PER_HOUR) % 12;\n\treturn hour === 0 ? 12 : hour;\n};\n\n/**\n * Converts angle → minute (0-55, step 5 on click, step 1 on drag).\n * Ported from `Float.toMinute()` in AnalogTimePickerState.\n */\nconst angleToMinute = (angle: number, snap = true): number => {\n\tif (snap) {\n\t\tconst minuteOffset = RADIANS_PER_MINUTE / 2;\n\t\tconst totalOffset = minuteOffset + QUARTER_CIRCLE;\n\t\tconst raw = Math.round((angle + totalOffset) / RADIANS_PER_MINUTE) % 60;\n\t\treturn raw < 0 ? raw + 60 : raw;\n\t}\n\t// Drag mode — step 1\n\tconst normalized = normalizeAngle(angle + QUARTER_CIRCLE);\n\tconst raw = Math.round((normalized / FULL_CIRCLE) * 60) % 60;\n\treturn raw < 0 ? raw + 60 : raw;\n};\n\n/**\n * Calculates selector handle position from angle and is24h/isPm.\n * Ported from `AnalogTimePickerState.selectorPos`.\n */\nconst getSelectorPosition = (\n\tangle: number,\n\tselection: TimePickerSelectionMode,\n\tis24hour: boolean,\n\tisPm: boolean,\n): { x: number; y: number } => {\n\t// Inner circle for 24h PM hours (13-23)\n\tconst useInner = is24hour && isPm && selection === \"hour\";\n\tconst baseRadius = useInner ? INNER_RADIUS : OUTER_RADIUS;\n\n\t// MD3: clamps handle center so handle edge maintains SELECTOR_GAP to container edge.\n\t// maxLength = CENTER - HANDLE_RADIUS - GAP = 128 - 24 - 4 = 100px\n\tconst length = Math.min(baseRadius, CENTER - HANDLE_RADIUS - SELECTOR_GAP);\n\n\treturn {\n\t\tx: CENTER + length * Math.cos(angle),\n\t\ty: CENTER + length * Math.sin(angle),\n\t};\n};\n\n/**\n * Calculates display angle from hour/minute value.\n * Ported from `hourAngle = RadiansPerHour * (state.hour % 12) - FullCircle / 4`\n */\nconst valueToAngle = (\n\tvalue: number,\n\tselection: TimePickerSelectionMode,\n): number => {\n\tif (selection === \"hour\") {\n\t\treturn RADIANS_PER_HOUR * (value % 12) - QUARTER_CIRCLE;\n\t}\n\treturn RADIANS_PER_MINUTE * value - QUARTER_CIRCLE;\n};\n\n// ─── Props ─────────────────────────────────────────────────────────────────────\n\ninterface ClockDialProps {\n\t/** Hoisted state */\n\tstate: TimePickerState;\n\t/**\n\t * Automatically switches selection to \"minute\" after picking hour.\n\t * @default true\n\t */\n\tautoSwitchToMinute?: boolean;\n\t/** Inline style override */\n\tstyle?: React.CSSProperties;\n\tclassName?: string;\n}\n\n// ─── Component ─────────────────────────────────────────────────────────────────\n\n/**\n * ClockDial — SVG clock face with pointer interaction.\n *\n * Renders numbers around dial circle and selector handle, supporting:\n * - Click to select specific hour/minute\n * - Drag for continuous rotation\n * - autoSwitchToMinute\n * - 24h mode (dual ring: outer 0-11, inner 12-23)\n *\n * @example\n * ```tsx\n * <ClockDial state={state} autoSwitchToMinute />\n * ```\n */\nexport const ClockDial: React.FC<ClockDialProps> = ({\n\tstate,\n\tautoSwitchToMinute = true,\n\tstyle,\n\tclassName,\n}) => {\n\tconst {\n\t\tselection,\n\t\tis24hour,\n\t\tisPm,\n\t\thour,\n\t\tminute,\n\t\tsetHour,\n\t\tsetMinute,\n\t\tsetSelection,\n\t} = state;\n\n\t// Calculate display angle from current value\n\tconst displayAngle = React.useMemo(() => {\n\t\tif (selection === \"hour\") {\n\t\t\treturn valueToAngle(hour, \"hour\");\n\t\t}\n\t\treturn valueToAngle(minute, \"minute\");\n\t}, [selection, hour, minute]);\n\n\tconst selectorPos = React.useMemo(\n\t\t() => getSelectorPosition(displayAngle, selection, is24hour, isPm),\n\t\t[displayAngle, selection, is24hour, isPm],\n\t);\n\n\tconst trackEnd = React.useMemo(() => {\n\t\tconst dx = selectorPos.x - CENTER;\n\t\tconst dy = selectorPos.y - CENTER;\n\t\tconst length = Math.hypot(dx, dy);\n\t\tif (length === 0) return selectorPos;\n\t\treturn {\n\t\t\tx: selectorPos.x - (dx / length) * HANDLE_RADIUS,\n\t\t\ty: selectorPos.y - (dy / length) * HANDLE_RADIUS,\n\t\t};\n\t}, [selectorPos]);\n\n\tconst numbers = React.useMemo((): ClockNumber[] => {\n\t\tif (selection === \"minute\") return buildMinuteNumbers();\n\t\tif (is24hour) return buildHour24Numbers();\n\t\treturn buildHour12Numbers();\n\t}, [selection, is24hour]);\n\n\tconst isDragging = React.useRef(false);\n\tconst svgRef = React.useRef<SVGSVGElement>(null);\n\n\t/** Convert pointer event → SVG coordinate */\n\tconst getSVGPoint = (\n\t\te: PointerEvent | React.PointerEvent,\n\t): { x: number; y: number } => {\n\t\tconst svg = svgRef.current;\n\t\tif (!svg) return { x: e.clientX, y: e.clientY };\n\t\tconst rect = svg.getBoundingClientRect();\n\t\tconst scaleX = TP_SIZE.clockDialSize / rect.width;\n\t\tconst scaleY = TP_SIZE.clockDialSize / rect.height;\n\t\treturn {\n\t\t\tx: (e.clientX - rect.left) * scaleX,\n\t\t\ty: (e.clientY - rect.top) * scaleY,\n\t\t};\n\t};\n\n\t/** Handles new value from pointer position */\n\tconst handlePosition = (x: number, y: number, isPointerUp = false): void => {\n\t\tconst angle = getAngleFromPointer(x, y);\n\n\t\tif (selection === \"hour\") {\n\t\t\tlet newHour: number;\n\n\t\t\tif (is24hour) {\n\t\t\t\t// 24h: check distance from center to differentiate inner (PM) / outer (AM)\n\t\t\t\tconst dist = Math.sqrt((x - CENTER) ** 2 + (y - CENTER) ** 2);\n\t\t\t\tconst isPmHour = dist < (OUTER_RADIUS + INNER_RADIUS) / 2;\n\t\t\t\tconst hour12 = angleToHour12(angle);\n\t\t\t\tnewHour = isPmHour ? hour12 + 12 : hour12 === 12 ? 0 : hour12;\n\t\t\t} else {\n\t\t\t\tconst hour12 = angleToHour12(angle);\n\t\t\t\t// Convert 12h display → 24h internal\n\t\t\t\tnewHour = hour12 === 12 ? (isPm ? 12 : 0) : isPm ? hour12 + 12 : hour12;\n\t\t\t}\n\n\t\t\tsetHour(newHour);\n\n\t\t\t// Auto-switch: switch to minute after pointer up\n\t\t\tif (isPointerUp && autoSwitchToMinute) {\n\t\t\t\tsetTimeout(() => setSelection(\"minute\"), 100);\n\t\t\t}\n\t\t} else {\n\t\t\tconst newMinute = angleToMinute(angle, !isDragging.current);\n\t\t\tsetMinute(newMinute);\n\t\t}\n\t};\n\n\tconst handlePointerDown = (e: React.PointerEvent<SVGSVGElement>): void => {\n\t\te.currentTarget.setPointerCapture(e.pointerId);\n\t\tisDragging.current = false;\n\t\tconst { x, y } = getSVGPoint(e);\n\t\thandlePosition(x, y);\n\t};\n\n\tconst handlePointerMove = (e: React.PointerEvent<SVGSVGElement>): void => {\n\t\tif (e.buttons === 0) return; // mouse not pressed\n\t\tisDragging.current = true;\n\t\tconst { x, y } = getSVGPoint(e);\n\t\thandlePosition(x, y);\n\t};\n\n\tconst handlePointerUp = (e: React.PointerEvent<SVGSVGElement>): void => {\n\t\te.currentTarget.releasePointerCapture(e.pointerId);\n\t\tconst { x, y } = getSVGPoint(e);\n\t\thandlePosition(x, y, true);\n\t\tisDragging.current = false;\n\t};\n\n\tconst getDisplayHour = (): number => {\n\t\tif (is24hour) return hour;\n\t\treturn hour === 0 ? 12 : hour > 12 ? hour - 12 : hour;\n\t};\n\n\t/**\n\t * MD3 spec: when the handle circle overlaps a number, the number switches to OnPrimary.\n\t * For minutes, we use geometric distance to avoid nearest-5 rounding causing abrupt jumps.\n\t */\n\tconst isNumberHighlighted = (num: ClockNumber): boolean => {\n\t\tif (selection === \"hour\") return num.value === getDisplayHour();\n\t\tconst dx = selectorPos.x - num.x;\n\t\tconst dy = selectorPos.y - num.y;\n\t\treturn Math.sqrt(dx * dx + dy * dy) < HANDLE_RADIUS;\n\t};\n\n\t/**\n\t * Hour numbers move to sit inside the handle circle.\n\t * Minute numbers always stay at their fixed positions — the handle naturally overlaps them.\n\t */\n\tconst isNumberAtHandle = (num: ClockNumber): boolean => {\n\t\tif (selection === \"hour\") return num.value === getDisplayHour();\n\t\treturn false;\n\t};\n\n\t// ── Render ────────────────────────────────────────────────────────────────\n\n\treturn (\n\t\t<svg\n\t\t\tref={svgRef}\n\t\t\twidth={TP_SIZE.clockDialSize}\n\t\t\theight={TP_SIZE.clockDialSize}\n\t\t\tviewBox={`0 0 ${TP_SIZE.clockDialSize} ${TP_SIZE.clockDialSize}`}\n\t\t\trole=\"img\"\n\t\t\taria-label={`Clock face, ${selection === \"hour\" ? \"select hour\" : \"select minute\"}`}\n\t\t\tstyle={style}\n\t\t\toverflow=\"visible\"\n\t\t\tclassName={cn(\"touch-none select-none cursor-pointer\", className)}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerUp={handlePointerUp}\n\t\t>\n\t\t\t{/* ── Background circle ── */}\n\t\t\t<circle cx={CENTER} cy={CENTER} r={CENTER} fill={TP_COLORS.clockDial} />\n\n\t\t\t{/* ── Selector track (line from center → handle) ── */}\n\t\t\t<line\n\t\t\t\tx1={CENTER}\n\t\t\t\ty1={CENTER}\n\t\t\t\tx2={trackEnd.x}\n\t\t\t\ty2={trackEnd.y}\n\t\t\t\tstroke={TP_COLORS.selectorTrack}\n\t\t\t\tstrokeWidth={TP_SIZE.selectorTrackWidth}\n\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t/>\n\n\t\t\t{/* ── Handle circle ── */}\n\t\t\t<circle\n\t\t\t\tcx={selectorPos.x}\n\t\t\t\tcy={selectorPos.y}\n\t\t\t\tr={HANDLE_RADIUS}\n\t\t\t\tfill={TP_COLORS.selectorHandle}\n\t\t\t/>\n\n\t\t\t{/* ── Center dot — rendered after handle to stay on top ── */}\n\t\t\t<circle\n\t\t\t\tcx={CENTER}\n\t\t\t\tcy={CENTER}\n\t\t\t\tr={TP_SIZE.selectorCenterSize / 2}\n\t\t\t\tfill={TP_COLORS.selectorCenter}\n\t\t\t/>\n\n\t\t\t{/* ── Number labels — rendered last on top of handle ── */}\n\t\t\t{numbers.map((num) => {\n\t\t\t\tconst highlighted = isNumberHighlighted(num);\n\t\t\t\tconst atHandle = isNumberAtHandle(num);\n\t\t\t\t// Only move into handle when exactly matching selected tick\n\n\t\t\t\treturn (\n\t\t\t\t\t<text\n\t\t\t\t\t\tkey={`${num.value}-${num.radius}`}\n\t\t\t\t\t\tx={atHandle ? selectorPos.x : num.x}\n\t\t\t\t\t\ty={atHandle ? selectorPos.y : num.y}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tdominantBaseline=\"central\"\n\t\t\t\t\t\tfontSize={is24hour && num.radius === INNER_RADIUS ? 12 : 14}\n\t\t\t\t\t\tfontWeight={highlighted ? \"600\" : \"400\"}\n\t\t\t\t\t\tfill={\n\t\t\t\t\t\t\thighlighted\n\t\t\t\t\t\t\t\t? TP_COLORS.clockDialSelected\n\t\t\t\t\t\t\t\t: TP_COLORS.clockDialUnselected\n\t\t\t\t\t\t}\n\t\t\t\t\t\taria-label={String(num.value)}\n\t\t\t\t\t\tclassName=\"pointer-events-none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{selection === \"hour\" && is24hour\n\t\t\t\t\t\t\t? String(num.value).padStart(2, \"0\")\n\t\t\t\t\t\t\t: num.value}\n\t\t\t\t\t</text>\n\t\t\t\t);\n\t\t\t})}\n\t\t</svg>\n\t);\n};\n\nClockDial.displayName = \"ClockDial\";\n","/**\n * @file time-picker/time-picker.tsx\n *\n * Android MD3 clock picker. The picker uses a compact vertical arrangement in\n * portrait and moves the clock beside the display on larger landscape screens.\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { ClockDial } from \"./subcomponents/clock-dial\";\nimport { PeriodSelector } from \"./subcomponents/period-selector\";\nimport { TimeField } from \"./subcomponents/time-field\";\nimport { TP_SIZE } from \"./time-picker.tokens\";\nimport type {\n\tTimePickerLayout,\n\tTimePickerProps,\n\tTimePickerState,\n} from \"./time-picker.types\";\n\nconst getHourForDisplay = (state: TimePickerState): number => {\n\tconst { hour, is24hour, isPm } = state;\n\tif (is24hour) return hour;\n\tif (hour % 12 === 0) return 12;\n\treturn isPm ? hour - 12 : hour;\n};\n\nconst getAutoLayout = (): Exclude<TimePickerLayout, \"auto\"> => {\n\tif (typeof window === \"undefined\") return \"vertical\";\n\tconst { innerHeight, innerWidth } = window;\n\treturn innerWidth >= 600 && innerHeight >= 300 && innerWidth >= innerHeight\n\t\t? \"horizontal\"\n\t\t: \"vertical\";\n};\n\nconst useResolvedLayout = (\n\tlayout: TimePickerLayout,\n): Exclude<TimePickerLayout, \"auto\"> => {\n\t// Start vertical so SSR and the first client render agree; measure after mount.\n\tconst [autoLayout, setAutoLayout] =\n\t\tReact.useState<Exclude<TimePickerLayout, \"auto\">>(\"vertical\");\n\n\tReact.useEffect(() => {\n\t\tif (layout !== \"auto\") return;\n\t\tconst updateLayout = () => setAutoLayout(getAutoLayout());\n\t\tupdateLayout();\n\t\twindow.addEventListener(\"resize\", updateLayout);\n\t\treturn () => window.removeEventListener(\"resize\", updateLayout);\n\t}, [layout]);\n\n\treturn layout === \"auto\" ? autoLayout : layout;\n};\n\ninterface ClockDisplayProps {\n\tstate: TimePickerState;\n\tlayout: Exclude<TimePickerLayout, \"auto\">;\n}\n\nconst ClockDisplay: React.FC<ClockDisplayProps> = ({ state, layout }) => {\n\tconst { selection, setSelection, is24hour } = state;\n\tconst periodLayout = layout === \"horizontal\" ? \"horizontal\" : \"vertical\";\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex\",\n\t\t\t\tlayout === \"horizontal\"\n\t\t\t\t\t? \"flex-col items-start justify-center\"\n\t\t\t\t\t: \"flex-row items-center justify-center\",\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex items-center\">\n\t\t\t\t<TimeField\n\t\t\t\t\tmode=\"selector\"\n\t\t\t\t\tvalue={getHourForDisplay(state)}\n\t\t\t\t\tfield=\"hour\"\n\t\t\t\t\tselection={selection}\n\t\t\t\t\tonActivate={() => setSelection(\"hour\")}\n\t\t\t\t/>\n\t\t\t\t<span\n\t\t\t\t\taria-hidden\n\t\t\t\t\tclassName=\"w-6 text-center text-[57px] leading-none font-normal text-m3-on-surface\"\n\t\t\t\t>\n\t\t\t\t\t:\n\t\t\t\t</span>\n\t\t\t\t<TimeField\n\t\t\t\t\tmode=\"selector\"\n\t\t\t\t\tvalue={state.minute}\n\t\t\t\t\tfield=\"minute\"\n\t\t\t\t\tselection={selection}\n\t\t\t\t\tonActivate={() => setSelection(\"minute\")}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t{!is24hour ? (\n\t\t\t\t<PeriodSelector\n\t\t\t\t\tstate={state}\n\t\t\t\t\tlayout={periodLayout}\n\t\t\t\t\tclassName={layout === \"horizontal\" ? \"mt-3\" : \"ml-3\"}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t</div>\n\t);\n};\n\nexport const TimePicker: React.FC<TimePickerProps> = ({\n\tstate,\n\tlayout = \"auto\",\n\tclassName,\n}) => {\n\tconst resolvedLayout = useResolvedLayout(layout);\n\n\treturn (\n\t\t<div\n\t\t\tdata-time-picker-layout={resolvedLayout}\n\t\t\tclassName={cn(\n\t\t\t\t\"time-picker rounded-m3-xl bg-m3-surface-container-high p-6 select-none\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<p className=\"mb-5 text-left text-[12px] font-medium tracking-[0.1em] text-m3-on-surface-variant\">\n\t\t\t\tSelect time\n\t\t\t</p>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex\",\n\t\t\t\t\tresolvedLayout === \"horizontal\"\n\t\t\t\t\t\t? \"flex-row items-center gap-[52px]\"\n\t\t\t\t\t\t: \"flex-col items-center gap-9\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<ClockDisplay state={state} layout={resolvedLayout} />\n\t\t\t\t<ClockDial\n\t\t\t\t\tstate={state}\n\t\t\t\t\tautoSwitchToMinute\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: TP_SIZE.clockDialSize,\n\t\t\t\t\t\theight: TP_SIZE.clockDialSize,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nTimePicker.displayName = \"TimePicker\";\n","/**\n * @file time-picker/time-picker-dialog.tsx\n *\n * TimePickerDialog — modal container for TimePicker and TimeInput.\n * Reuses Dialog + DialogPortal primitives matching DatePickerDialog pattern.\n *\n * Layout:\n * ```\n *   ┌─────────────────────┐\n *   │  [Content]          │  ← TimePicker or TimeInput\n *   │─────────────────────│\n *   │ 🎹  [Cancel] [OK]   │  ← footer: modeToggle + spacer + dismiss + confirm\n *   └─────────────────────┘\n * ```\n *\n * Tokens from TimePickerDialog.kt (shared with DatePickerDialog):\n * - ContainerColor = SurfaceContainerHigh\n * - ContainerShape = CornerExtraLarge (28px)\n * - ContainerElevation = Level3\n *\n * Ported from `TimePickerDialog.kt` and `DatePickerDialog` pattern.\n *\n * @see docs/m3/date-and-time-pickers/time-pickers/TimePickerDialog.kt\n * @see packages/react/src/ui/date-time-pickers/date-picker/date-picker-dialog.tsx\n */\n\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { m } from \"motion/react\";\nimport type * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { Dialog, DialogPortal } from \"../../dialog\";\nimport {\n\tPICKER_CONTENT_ANIM,\n\tPICKER_OVERLAY_ANIM,\n} from \"../shared/animation-tokens\";\nimport type { TimePickerDialogProps } from \"./time-picker.types\";\n\n/**\n * TimePickerDialog — modal dialog container for TimePicker / TimeInput.\n *\n * Reuses `<Dialog>` (Root) and `<DialogPortal>` (AnimatePresence + Portal)\n * while managing Overlay and Content to preserve MD3 Time Picker specs.\n *\n * @example Basic usage\n\n * ```tsx\n * const state = useTimePickerState({ initialHour: 7 });\n * const [open, setOpen] = React.useState(false);\n * const [mode, setMode] = React.useState<'dial' | 'input'>('dial');\n *\n * <TimePickerDialog\n *   open={open}\n *   onDismiss={() => setOpen(false)}\n *   modeToggleButton={\n *     <button onClick={() => setMode(m => m === 'dial' ? 'input' : 'dial')}>\n *       <span className=\"md-icon\">{mode === 'dial' ? 'keyboard' : 'schedule'}</span>\n *     </button>\n *   }\n *   confirmButton={\n *     <Button variant=\"text\" onClick={() => { handleConfirm(state); setOpen(false); }}>\n *       OK\n *     </Button>\n *   }\n *   dismissButton={\n *     <Button variant=\"text\" onClick={() => setOpen(false)}>Cancel</Button>\n *   }\n * >\n *   {mode === 'dial' ? <TimePicker state={state} /> : <TimeInput state={state} />}\n * </TimePickerDialog>\n * ```\n */\nexport const TimePickerDialog: React.FC<TimePickerDialogProps> = ({\n\topen,\n\tonDismiss,\n\tconfirmButton,\n\tdismissButton,\n\tmodeToggleButton,\n\ttitle = \"Select time\",\n\tchildren,\n\tclassName,\n}) => {\n\treturn (\n\t\t<Dialog open={open} onOpenChange={(v) => !v && onDismiss()}>\n\t\t\t<DialogPortal open={open}>\n\t\t\t\t{/* Scrim */}\n\t\t\t\t<RadixDialog.Overlay asChild forceMount>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tkey=\"time-picker-overlay\"\n\t\t\t\t\t\tclassName=\"fixed inset-0 z-50 bg-m3-scrim/40\"\n\t\t\t\t\t\tinitial={PICKER_OVERLAY_ANIM.initial}\n\t\t\t\t\t\tanimate={PICKER_OVERLAY_ANIM.animate}\n\t\t\t\t\t\texit={PICKER_OVERLAY_ANIM.exit}\n\t\t\t\t\t\tonClick={onDismiss}\n\t\t\t\t\t/>\n\t\t\t\t</RadixDialog.Overlay>\n\n\t\t\t\t{/* Dialog panel */}\n\t\t\t\t<RadixDialog.Content\n\t\t\t\t\tasChild\n\t\t\t\t\tforceMount\n\t\t\t\t\tonEscapeKeyDown={onDismiss}\n\t\t\t\t\tonPointerDownOutside={(e) => e.preventDefault()} // scrim handles dismiss\n\t\t\t\t\taria-modal\n\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tkey=\"time-picker-content\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t// Positioning\n\t\t\t\t\t\t\t\"fixed z-50 left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t\t\t\t\t\t// Layout\n\t\t\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t\t\t// MD3 Time Picker container tokens\n\t\t\t\t\t\t\t\"bg-m3-surface-container-high\",\n\t\t\t\t\t\t\t\"rounded-m3-xl\",\n\t\t\t\t\t\t\t\"overflow-hidden\",\n\t\t\t\t\t\t\t\"max-w-[calc(100vw-32px)] max-h-[calc(100dvh-32px)]\",\n\t\t\t\t\t\t\t// Elevation Level 3\n\t\t\t\t\t\t\t\"elevation-3\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tinitial={PICKER_CONTENT_ANIM.initial}\n\t\t\t\t\t\tanimate={PICKER_CONTENT_ANIM.animate}\n\t\t\t\t\t\texit={PICKER_CONTENT_ANIM.exit}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Accessible title (screen reader only) */}\n\t\t\t\t\t\t<RadixDialog.Title className=\"sr-only\">{title}</RadixDialog.Title>\n\n\t\t\t\t\t\t{/* Content — TimePicker or TimeInput */}\n\t\t\t\t\t\t<div className=\"flex-1\">{children}</div>\n\n\t\t\t\t\t\t{/* Footer: modeToggle | spacer | dismiss | confirm */}\n\t\t\t\t\t\t<div className=\"flex min-h-16 items-center gap-2 px-6 py-2\">\n\t\t\t\t\t\t\t{/* Mode toggle (keyboard ↔ clock icon) — optional */}\n\t\t\t\t\t\t\t{modeToggleButton && (\n\t\t\t\t\t\t\t\t<div className=\"flex items-center\">{modeToggleButton}</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{/* Spacer */}\n\t\t\t\t\t\t\t<div className=\"flex-1\" />\n\t\t\t\t\t\t\t{/* Action buttons */}\n\t\t\t\t\t\t\t{dismissButton}\n\t\t\t\t\t\t\t{confirmButton}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</m.div>\n\t\t\t\t</RadixDialog.Content>\n\t\t\t</DialogPortal>\n\t\t</Dialog>\n\t);\n};\n\nTimePickerDialog.displayName = \"TimePickerDialog\";\n","/**\n * @file time-picker/use-time-picker-state.ts\n *\n * Core state hook for TimePicker — hoisted state pattern.\n * Ported from `rememberTimePickerState()` in Android Compose Material3.\n *\n * Separates `hour`/`minute` (always valid) and `hourInput`/`minuteInput`\n * (raw input, can be invalid mid-typing) — preserving Kotlin semantics.\n *\n * @see docs/m3/date-and-time-pickers/time-pickers/TimePickerState.md\n *\n * @example\n * ```tsx\n * const state = useTimePickerState({\n *   initialHour: 7,\n *   initialMinute: 0,\n *   is24hour: false,\n * });\n *\n * <TimePicker state={state} />\n * <p>{state.hour}:{String(state.minute).padStart(2, '0')} {state.isPm ? 'PM' : 'AM'}</p>\n * ```\n */\n\nimport { useCallback, useMemo, useState } from \"react\";\nimport type {\n\tTimePickerSelectionMode,\n\tTimePickerState,\n\tUseTimePickerStateOptions,\n} from \"./time-picker.types\";\n\n// ─── Helpers ───────────────────────────────────────────────────────────────────\n\n/** Clamps a number within [min, max] range. */\nconst clamp = (value: number, min: number, max: number): number =>\n\tMath.max(min, Math.min(max, value));\n\n/**\n * Validates hour input according to time format.\n * 24h: 0-23. 12h: 1-12 (user-facing 12h clock).\n */\nconst isValidHourInput = (h: number, is24hour: boolean): boolean =>\n\tis24hour ? h >= 0 && h <= 23 : h >= 1 && h <= 12;\n\n/** Validates minute input: 0-59 */\nconst isValidMinuteInput = (m: number): boolean => m >= 0 && m <= 59;\n\n/**\n * Converts 12h input + isPm → 24h internal value.\n * Standard mapping:\n *   12 AM = 0, 1 AM = 1, ..., 11 AM = 11\n *   12 PM = 12, 1 PM = 13, ..., 11 PM = 23\n */\nconst to24Hour = (hour12: number, isPm: boolean): number => {\n\tif (isPm) {\n\t\treturn hour12 === 12 ? 12 : hour12 + 12;\n\t}\n\treturn hour12 === 12 ? 0 : hour12;\n};\n\n/**\n * Convert 24h internal → 12h display value.\n * 0 → 12 AM, 13 → 1 PM, 12 → 12 PM\n */\nconst to12Hour = (hour24: number): number => {\n\tif (hour24 === 0) return 12;\n\tif (hour24 > 12) return hour24 - 12;\n\treturn hour24;\n};\n\n// ─── Hook ──────────────────────────────────────────────────────────────────────\n\n/**\n * State management hook for TimePicker and TimeInput.\n * Equivalent to `rememberTimePickerState()` in Android Compose.\n *\n * @param options - Initial configuration options\n * @returns `TimePickerState` object with state and actions\n */\nexport const useTimePickerState = (\n\toptions?: UseTimePickerStateOptions,\n): TimePickerState => {\n\t// ── Initial values ────────────────────────────────────────────────────────\n\tconst initialHour = clamp(options?.initialHour ?? 0, 0, 23);\n\tconst initialMinute = clamp(options?.initialMinute ?? 0, 0, 59);\n\tconst is24hour = options?.is24hour ?? false;\n\n\t// ── State ─────────────────────────────────────────────────────────────────\n\tconst [hour, setHourState] = useState<number>(initialHour);\n\tconst [minute, setMinuteState] = useState<number>(initialMinute);\n\t// hourInput: raw display value (12h when !is24hour)\n\tconst [hourInput, setHourInputState] = useState<number>(\n\t\tis24hour ? initialHour : to12Hour(initialHour),\n\t);\n\tconst [minuteInput, setMinuteInputState] = useState<number>(initialMinute);\n\tconst [selection, setSelectionState] =\n\t\tuseState<TimePickerSelectionMode>(\"hour\");\n\n\t// ── Computed ──────────────────────────────────────────────────────────────\n\tconst isPm = hour >= 12;\n\tconst isHourInputValid = isValidHourInput(hourInput, is24hour);\n\tconst isMinuteInputValid = isValidMinuteInput(minuteInput);\n\tconst isInputValid = isHourInputValid && isMinuteInputValid;\n\n\t// ── Actions ───────────────────────────────────────────────────────────────\n\n\t/**\n\t * Sets valid hour (0-23) — used for clock dial.\n\t * Automatically updates both hour and hourInput.\n\t */\n\tconst setHour = useCallback(\n\t\t(h: number): void => {\n\t\t\tconst clamped = clamp(h, 0, 23);\n\t\t\tsetHourState(clamped);\n\t\t\t// hourInput always displays 12h format when !is24hour\n\t\t\tsetHourInputState(is24hour ? clamped : to12Hour(clamped));\n\t\t},\n\t\t[is24hour],\n\t);\n\n\t/**\n\t * Sets valid minute (0-59) — used for clock dial.\n\t * Automatically updates both minute and minuteInput.\n\t */\n\tconst setMinute = useCallback((m: number): void => {\n\t\tconst clamped = clamp(m, 0, 59);\n\t\tsetMinuteState(clamped);\n\t\tsetMinuteInputState(clamped);\n\t}, []);\n\n\t/**\n\t * Sets raw hour input — used for TimeInput text field.\n\t * Only updates internal `hour` (24h) when value is valid.\n\t * `hourInput` is always updated for immediate UI reflection.\n\t */\n\tconst setHourInput = useCallback(\n\t\t(h: number): void => {\n\t\t\tsetHourInputState(h);\n\t\t\tif (isValidHourInput(h, is24hour)) {\n\t\t\t\t// Convert to 24h internal\n\t\t\t\tconst h24 = is24hour ? h : to24Hour(h, isPm);\n\t\t\t\tsetHourState(clamp(h24, 0, 23));\n\t\t\t}\n\t\t},\n\t\t[is24hour, isPm],\n\t);\n\n\t/**\n\t * Sets raw minute input — used for TimeInput text field.\n\t * Only updates `minute` when value is valid.\n\t */\n\tconst setMinuteInput = useCallback((m: number): void => {\n\t\tsetMinuteInputState(m);\n\t\tif (isValidMinuteInput(m)) {\n\t\t\tsetMinuteState(m);\n\t\t}\n\t}, []);\n\n\t/** Switches selection mode between 'hour' and 'minute'. */\n\tconst setSelection = useCallback((mode: TimePickerSelectionMode): void => {\n\t\tsetSelectionState(mode);\n\t}, []);\n\n\t/**\n\t * Toggles AM/PM.\n\t * Automatically converts internal hour (24h) and updates hourInput (12h display).\n\t */\n\tconst setIsPm = useCallback((pm: boolean): void => {\n\t\tsetHourState((prev) => {\n\t\t\tconst wasAlreadyPm = prev >= 12;\n\t\t\tif (pm === wasAlreadyPm) return prev;\n\t\t\tconst newHour = pm ? prev + 12 : prev - 12;\n\t\t\tconst clamped = clamp(newHour, 0, 23);\n\t\t\t// Sync hourInput (12h display remains unchanged, only internal hour changes)\n\t\t\tsetHourInputState(to12Hour(clamped));\n\t\t\treturn clamped;\n\t\t});\n\t}, []);\n\n\t/**\n\t * Resets to initial state.\n\t */\n\tconst reset = useCallback((): void => {\n\t\tsetHourState(initialHour);\n\t\tsetMinuteState(initialMinute);\n\t\tsetHourInputState(is24hour ? initialHour : to12Hour(initialHour));\n\t\tsetMinuteInputState(initialMinute);\n\t\tsetSelectionState(\"hour\");\n\t}, [initialHour, initialMinute, is24hour]);\n\n\t// ── Memoized state object ──────────────────────────────────────────────────\n\treturn useMemo<TimePickerState>(\n\t\t() => ({\n\t\t\thour,\n\t\t\tminute,\n\t\t\thourInput,\n\t\t\tminuteInput,\n\t\t\tis24hour,\n\t\t\tselection,\n\t\t\tisInputValid,\n\t\t\tisHourInputValid,\n\t\t\tisMinuteInputValid,\n\t\t\tisPm,\n\t\t\tsetHour,\n\t\t\tsetMinute,\n\t\t\tsetHourInput,\n\t\t\tsetMinuteInput,\n\t\t\tsetSelection,\n\t\t\tsetIsPm,\n\t\t\treset,\n\t\t}),\n\t\t[\n\t\t\thour,\n\t\t\tminute,\n\t\t\thourInput,\n\t\t\tminuteInput,\n\t\t\tis24hour,\n\t\t\tselection,\n\t\t\tisInputValid,\n\t\t\tisHourInputValid,\n\t\t\tisMinuteInputValid,\n\t\t\tisPm,\n\t\t\tsetHour,\n\t\t\tsetMinute,\n\t\t\tsetHourInput,\n\t\t\tsetMinuteInput,\n\t\t\tsetSelection,\n\t\t\tsetIsPm,\n\t\t\treset,\n\t\t],\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 RadixDialog from \"@radix-ui/react-dialog\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../lib/utils\";\nimport { Icon } from \"./icon\";\nimport { DEFAULT_SPATIAL_SPRING } from \"./shared/motion-tokens\";\n\n// ─── MD3 Expressive Drawer Animation ─────────────────────────────────────────\n// Slide from bottom, MD3 default.spatial spring\n// (stiffness=380, dampingRatio=0.8 → Framer damping ≈ 31.19)\nconst MD3_DRAWER_SPRING = DEFAULT_SPATIAL_SPRING;\n\nconst MD3_DRAWER_ANIM = {\n\tinitial: { y: \"100%\", opacity: 0.6 },\n\tanimate: {\n\t\ty: 0,\n\t\topacity: 1,\n\t\ttransition: MD3_DRAWER_SPRING,\n\t},\n\texit: {\n\t\ty: \"100%\",\n\t\topacity: 0,\n\t\ttransition: { duration: 0.22, ease: \"easeIn\" as const },\n\t},\n};\n\nconst MD3_SCRIM_ANIM = {\n\tinitial: { opacity: 0 },\n\tanimate: {\n\t\topacity: 1,\n\t\ttransition: { duration: 0.2, ease: \"easeOut\" as const },\n\t},\n\texit: { opacity: 0, transition: { duration: 0.18, ease: \"easeIn\" as const } },\n};\n\n// ─── Types ────────────────────────────────────────────────────────────────────\nexport interface DrawerProps {\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n\tchildren: React.ReactNode;\n}\n\nexport interface DrawerContentProps\n\textends Omit<\n\t\tReact.ComponentPropsWithoutRef<typeof RadixDialog.Content>,\n\t\t\"asChild\"\n\t> {\n\t/** Max height (vh). Default 90vh */\n\tmaxHeight?: string;\n\t/** Hide drag handle */\n\thideHandle?: boolean;\n\t/** Hide close button */\n\thideCloseButton?: boolean;\n\tclassName?: string;\n}\n\n// ─── Root ─────────────────────────────────────────────────────────────────────\nconst Drawer = ({ open, onOpenChange, children }: DrawerProps) => (\n\t<RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n\t\t{children}\n\t</RadixDialog.Root>\n);\nDrawer.displayName = \"Drawer\";\n\nconst DrawerTrigger = RadixDialog.Trigger;\nDrawerTrigger.displayName = \"DrawerTrigger\";\n\nconst DrawerClose = RadixDialog.Close;\n\n// ─── Portal wrapper with AnimatePresence ───────────────────────────────────────\nconst DrawerPortal = ({\n\topen,\n\tchildren,\n}: {\n\topen?: boolean;\n\tchildren: React.ReactNode;\n}) => (\n\t<RadixDialog.Portal forceMount>\n\t\t<AnimatePresence mode=\"wait\">{open && children}</AnimatePresence>\n\t</RadixDialog.Portal>\n);\n\n// ─── Scrim overlay ────────────────────────────────────────────────────────────\nconst DrawerOverlay = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Overlay>,\n\tReact.ComponentPropsWithoutRef<typeof RadixDialog.Overlay>\n>(({ className, ...props }, ref) => (\n\t<RadixDialog.Overlay ref={ref} asChild {...props}>\n\t\t<m.div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn(\"fixed inset-0 z-50 bg-black/40\", className)}\n\t\t\t{...MD3_SCRIM_ANIM}\n\t\t/>\n\t</RadixDialog.Overlay>\n));\nDrawerOverlay.displayName = \"DrawerOverlay\";\n\n// ─── Content ─────────────────────────────────────────────────────────────────\nconst DrawerContent = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Content>,\n\tDrawerContentProps\n>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tchildren,\n\t\t\tmaxHeight = \"90vh\",\n\t\t\thideHandle = false,\n\t\t\thideCloseButton = false,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => (\n\t\t<RadixDialog.Content ref={ref} asChild {...props}>\n\t\t\t<m.div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// MD3 Bottom Sheet shape: top rounded corners only\n\t\t\t\t\t\"fixed bottom-0 left-0 right-0 z-50\",\n\t\t\t\t\t\"rounded-t-[28px] bg-m3-surface-container-low\",\n\t\t\t\t\t\"flex flex-col overflow-hidden\",\n\t\t\t\t\t\"outline-none\",\n\t\t\t\t\t// focus-visible ring — a11y\n\t\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-inset\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{ maxHeight, ...style }}\n\t\t\t\t{...MD3_DRAWER_ANIM}\n\t\t\t>\n\t\t\t\t{/* Drag handle — decorative hint */}\n\t\t\t\t{!hideHandle && (\n\t\t\t\t\t<div\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"mx-auto mt-3 h-1 w-9 rounded-full bg-m3-on-surface-variant/40 shrink-0\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Close button */}\n\t\t\t\t{!hideCloseButton && (\n\t\t\t\t\t<RadixDialog.Close\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"absolute right-4 top-3 rounded-full p-2\",\n\t\t\t\t\t\t\t\"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\"hover:bg-m3-on-surface/8\",\n\t\t\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-primary\",\n\t\t\t\t\t\t\t\"transition-colors duration-200\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label=\"Close drawer panel\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Icon name=\"close\" size={20} aria-hidden=\"true\" />\n\t\t\t\t\t</RadixDialog.Close>\n\t\t\t\t)}\n\n\t\t\t\t{/* Scrollable content area */}\n\t\t\t\t<div className=\"flex-1 overflow-y-auto overscroll-contain p-6\">\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</m.div>\n\t\t</RadixDialog.Content>\n\t),\n);\nDrawerContent.displayName = \"DrawerContent\";\n\n// ─── Sub-components ───────────────────────────────────────────────────────────\nconst DrawerHeader = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n\t<div className={cn(\"flex flex-col gap-1 mb-4\", className)} {...props} />\n);\nDrawerHeader.displayName = \"DrawerHeader\";\n\nconst DrawerFooter = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n\t<div className={cn(\"flex flex-col gap-2 mt-4\", className)} {...props} />\n);\nDrawerFooter.displayName = \"DrawerFooter\";\n\nconst DrawerTitle = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Title>,\n\tReact.ComponentPropsWithoutRef<typeof RadixDialog.Title>\n>(({ className, ...props }, ref) => (\n\t<RadixDialog.Title\n\t\tref={ref}\n\t\tclassName={cn(\n\t\t\t\"text-[22px] leading-7 font-medium text-m3-on-surface\",\n\t\t\tclassName,\n\t\t)}\n\t\t{...props}\n\t/>\n));\nDrawerTitle.displayName = \"DrawerTitle\";\n\nconst DrawerDescription = React.forwardRef<\n\tReact.ComponentRef<typeof RadixDialog.Description>,\n\tReact.ComponentPropsWithoutRef<typeof RadixDialog.Description>\n>(({ className, ...props }, ref) => (\n\t<RadixDialog.Description\n\t\tref={ref}\n\t\tclassName={cn(\"text-sm text-m3-on-surface-variant leading-5\", className)}\n\t\t{...props}\n\t/>\n));\nDrawerDescription.displayName = \"DrawerDescription\";\n\nexport {\n\tDrawer,\n\tDrawerClose,\n\tDrawerContent,\n\tDrawerDescription,\n\tDrawerFooter,\n\tDrawerHeader,\n\tDrawerOverlay,\n\tDrawerPortal,\n\tDrawerTitle,\n\tDrawerTrigger,\n};\n\n// ─── Usage:\n//   <Drawer open={open} onOpenChange={setOpen}>\n//     <DrawerTrigger asChild><Button>Open Drawer</Button></DrawerTrigger>\n//     <DrawerPortal open={open}>\n//       <DrawerOverlay />\n//       <DrawerContent maxHeight=\"80vh\">\n//         <DrawerHeader>\n//           <DrawerTitle>Order Details</DrawerTitle>\n//           <DrawerDescription>View details for order #1234</DrawerDescription>\n//         </DrawerHeader>\n//         <p>Drawer content...</p>\n//         <DrawerFooter>\n//           <Button colorStyle=\"filled\" className=\"w-full\">Confirm</Button>\n//         </DrawerFooter>\n//       </DrawerContent>\n//     </DrawerPortal>\n//   </Drawer>\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 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 shrink-0\",\n\t\t\t\t\t// Touch target: 48×48 minimum (pad around 32px track)\n\t\t\t\t\t\"min-w-12 min-h-12\",\n\t\t\t\t\t// Focus ring — MD3 FocusIndicatorColor = secondary\n\t\t\t\t\t\"focus-visible:outline-2 focus-visible:outline-offset-2 rounded-full\",\n\t\t\t\t\t\"focus-visible:outline-(--md-sys-color-secondary)\",\n\t\t\t\t\t// Disabled\n\t\t\t\t\tdisabled && \"pointer-events-none cursor-not-allowed\",\n\t\t\t\t\t!label && className,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{/* Overflow clip wrapper for ripple */}\n\t\t\t\t<div className=\"relative overflow-hidden rounded-full shrink-0\">\n\t\t\t\t\t<SwitchVisual\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisPressed={isPressed}\n\t\t\t\t\t\tisHovered={isHovered}\n\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\tthumbContent={thumbContent}\n\t\t\t\t\t\ticons={icons}\n\t\t\t\t\t\tshowOnlySelectedIcon={showOnlySelectedIcon}\n\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\tcheckedTrackColor={checkedTrackColor}\n\t\t\t\t\t\tuncheckedTrackColor={uncheckedTrackColor}\n\t\t\t\t\t\tcheckedThumbColor={checkedThumbColor}\n\t\t\t\t\t\tuncheckedThumbColor={uncheckedThumbColor}\n\t\t\t\t\t/>\n\t\t\t\t\t<Ripple\n\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</button>\n\t\t);\n\n\t\t// ── With label ────────────────────────────────────────────────────────\n\t\tconst content = label ? (\n\t\t\t<label\n\t\t\t\thtmlFor={switchId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"inline-flex items-center gap-3 cursor-pointer select-none\",\n\t\t\t\t\tdisabled && \"cursor-not-allowed pointer-events-none opacity-[0.38]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{switchButton}\n\t\t\t\t<span className=\"text-sm leading-none text-(--md-sys-color-on-surface)\">\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t</label>\n\t\t) : (\n\t\t\tswitchButton\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t{content}\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSwitchComponent.displayName = \"Switch\";\n\n/**\n * MD3 Expressive Switch component.\n *\n * Toggles a single item on or off. Implements the ARIA switch pattern\n * (`role=\"switch\"`) without `<input>`. Fully animated per MD3 spec:\n * thumb translation, size morph (16→24→28px), state layer, and icon cross-fade.\n *\n * @example\n * ```tsx\n * <Switch checked={isOn} onCheckedChange={setIsOn} label=\"Wi-Fi\" />\n * <Switch checked={isOn} onCheckedChange={setIsOn} icons thumbContent={<CheckIcon />} />\n * <Switch checked={isOn} onCheckedChange={setIsOn} disabled />\n * ```\n *\n * @see https://m3.material.io/components/switch/overview\n */\nexport const Switch = React.memo(SwitchComponent);\n","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 { type MD3ShapeName, MD3Shapes, toClipPath } from \"../../shapes\";\n\nexport type NavigationItemShape = \"pill\" | MD3ShapeName;\n\n/**\n * Returns inline style for a navigation item shape.\n * If shape is 'pill' or 'circle', returns undefined (handled via rounded-full CSS).\n * For custom MD3 shapes (e.g. 'sunny', 'flower', 'star'), returns { clipPath: \"path(...)\" }.\n */\nexport function getNavigationShapeStyle(\n\tshape: NavigationItemShape | undefined,\n\twidth = 56,\n\theight = 56,\n): React.CSSProperties | undefined {\n\tif (!shape || shape === \"pill\" || shape === \"circle\") {\n\t\treturn undefined;\n\t}\n\n\tconst polygon = MD3Shapes[shape];\n\tif (!polygon) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tclipPath: toClipPath(polygon, width, height),\n\t};\n}\n\n/**\n * Checks if a shape is a 1:1 ratio shape (circle or custom MD3 shape).\n */\nexport function isSquareShape(shape: NavigationItemShape | undefined): boolean {\n\treturn Boolean(shape && shape !== \"pill\");\n}\n","\"use client\";\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\ttype Transition,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../icon\";\nimport { Ripple, useRippleState } from \"../ripple\";\nimport { SPRING_TRANSITION_EXPRESSIVE } from \"../shared/constants\";\nimport { TouchTarget } from \"../shared/touch-target\";\nimport {\n\tgetNavigationShapeStyle,\n\tisSquareShape,\n\ttype NavigationItemShape,\n} from \"./navigation-shape-utils\";\n\nexport type { NavigationItemShape };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Layout styling for navigation bar items.\n * - vertical: Icon above label (default for mobile)\n * - horizontal: Icon beside label (forced)\n */\nexport type NavigationBarItemLayout = \"vertical\" | \"horizontal\";\n\n/**\n * Visual variant of the Navigation Bar.\n * - flexible: Default MD3 behavior (h-16), becomes horizontal on desktop.\n * - baseline: Taller MD3 behavior (h-20), always vertical.\n * - xr: Floating orbiter variant for spatial interfaces (detached from bottom).\n */\nexport type NavigationBarVariant = \"flexible\" | \"baseline\" | \"xr\";\n\nexport type NavigationBarLabelVisibility = \"labeled\" | \"auto\" | \"unlabeled\";\n\nexport interface NavigationBarItemProps {\n\tselected: boolean;\n\ticon: React.ReactNode;\n\tlabel?: React.ReactNode;\n\tonClick?: () => void;\n\tdisabled?: boolean;\n\tbadge?: React.ReactNode;\n\t/** Shape of the item active indicator / icon container (pill, circle, sunny, flower, etc.) */\n\tshape?: NavigationItemShape;\n\t/** Override size (width & height) of the shape container in px. Default: 56 for square shapes, 32h×56w for pill */\n\tshapeSize?: number;\n\t/** Hide the label below the icon. Overrides container-level labelVisibility. */\n\thideLabel?: boolean;\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\nexport interface NavigationBarProps {\n\t/** Visual variant of the Navigation Bar */\n\tvariant?: NavigationBarVariant;\n\t/** Forces a specific item layout (horizontal/vertical) */\n\titemLayout?: NavigationBarItemLayout;\n\t/** Default shape of navigation items (pill, circle, sunny, flower, etc.) */\n\tshape?: NavigationItemShape;\n\t/**\n\t * Label visibility for all items.\n\t * - \"labeled\" (default): always show label\n\t * - \"auto\": show label only for the selected item\n\t * - \"unlabeled\": never show label (icon-only mode)\n\t */\n\tlabelVisibility?: NavigationBarLabelVisibility;\n\t/** Default size (width & height) for square shape containers in px. Default: 56 */\n\tshapeSize?: number;\n\t/** Whether the bar should hide when scrolling down */\n\thideOnScroll?: boolean;\n\t/** Whether the bar should have an elevation shadow */\n\televated?: boolean;\n\t/** Whether the bar is fixed to the viewport (default) or absolute */\n\tfixed?: boolean;\n\t/** Container ref to track scrolling for hideOnScroll */\n\tscrollContainerRef?: React.RefObject<HTMLElement | null>;\n\t/** Transition for the active indicator pill */\n\tactiveIndicatorTransition?: Transition;\n\t/** Navigation items */\n\tchildren: React.ReactNode;\n\t/** Optional additional classes for individual navigation items */\n\titemClassName?: string;\n\t/** Optional additional classes */\n\tclassName?: string;\n\t/** Optional inline styles */\n\tstyle?: React.CSSProperties;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Context\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst NavigationBarContext = React.createContext<{\n\tvariant: NavigationBarVariant;\n\titemLayout?: NavigationBarItemLayout;\n\tshape?: NavigationItemShape;\n\tlabelVisibility?: NavigationBarLabelVisibility;\n\tshapeSize?: number;\n\tactiveIndicatorTransition?: Transition;\n\titemClassName?: string;\n}>({ variant: \"flexible\" });\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction cloneIconWithFill(\n\ticon: React.ReactNode,\n\tselected: boolean,\n): React.ReactNode {\n\tif (!React.isValidElement(icon)) return icon;\n\tif ((icon.type as unknown) === Icon) {\n\t\treturn React.cloneElement(\n\t\t\ticon as React.ReactElement<{ fill?: 0 | 1; animateFill?: boolean }>,\n\t\t\t{ fill: selected ? 1 : 0, animateFill: true },\n\t\t);\n\t}\n\treturn icon;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// NavigationBarItem Sub-components\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface ActivePillProps {\n\tshape?: NavigationItemShape;\n\twidth?: number;\n\theight?: number;\n}\n\nfunction ActivePill({\n\tshape = \"pill\",\n\twidth = 56,\n\theight = 32,\n}: ActivePillProps) {\n\tconst { activeIndicatorTransition } = React.useContext(NavigationBarContext);\n\tconst shapeStyle = getNavigationShapeStyle(shape, width, height);\n\n\treturn (\n\t\t<m.div\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-m3-secondary-container pointer-events-none\",\n\t\t\t\tshapeStyle\n\t\t\t\t\t? \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none\"\n\t\t\t\t\t: shape === \"circle\"\n\t\t\t\t\t\t? \"absolute inset-0 rounded-full\"\n\t\t\t\t\t\t: \"absolute inset-0 rounded-full\",\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\tzIndex: 0,\n\t\t\t\t...(shapeStyle ? { width, height } : {}),\n\t\t\t\t...shapeStyle,\n\t\t\t}}\n\t\t\tinitial={{ opacity: 0, scale: 0.5 }}\n\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\texit={{ opacity: 0, scale: 0.5 }}\n\t\t\ttransition={activeIndicatorTransition || SPRING_TRANSITION_EXPRESSIVE}\n\t\t/>\n\t);\n}\n\ninterface HoverStateLayerProps {\n\tshape?: NavigationItemShape;\n\twidth?: number;\n\theight?: number;\n}\n\nfunction HoverStateLayer({\n\tshape = \"pill\",\n\twidth = 56,\n\theight = 32,\n}: HoverStateLayerProps) {\n\tconst shapeStyle = getNavigationShapeStyle(shape, width, height);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-m3-on-surface opacity-0 group-hover:opacity-[0.08] group-focus-visible:opacity-[0.10] active:opacity-[0.10] transition-opacity duration-200 pointer-events-none z-0\",\n\t\t\t\tshapeStyle\n\t\t\t\t\t? \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none\"\n\t\t\t\t\t: shape === \"circle\"\n\t\t\t\t\t\t? \"absolute inset-0 rounded-full\"\n\t\t\t\t\t\t: \"absolute inset-0 rounded-[16px]\",\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\t...(shapeStyle ? { width, height } : {}),\n\t\t\t\t...shapeStyle,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ninterface RippleLayerProps {\n\tripples: ReturnType<typeof useRippleState>[\"ripples\"];\n\tonRippleDone: ReturnType<typeof useRippleState>[\"removeRipple\"];\n\tshape?: NavigationItemShape;\n\twidth?: number;\n\theight?: number;\n}\n\nfunction RippleLayer({\n\tripples,\n\tonRippleDone,\n\tshape = \"pill\",\n\twidth = 56,\n\theight = 32,\n}: RippleLayerProps) {\n\tconst shapeStyle = getNavigationShapeStyle(shape, width, height);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"overflow-hidden pointer-events-none z-0\",\n\t\t\t\tshapeStyle\n\t\t\t\t\t? \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none\"\n\t\t\t\t\t: shape === \"circle\"\n\t\t\t\t\t\t? \"absolute inset-0 rounded-full\"\n\t\t\t\t\t\t: \"absolute inset-0 rounded-[16px]\",\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\t...(shapeStyle ? { width, height } : {}),\n\t\t\t\t...shapeStyle,\n\t\t\t}}\n\t\t>\n\t\t\t<Ripple ripples={ripples} onRippleDone={onRippleDone} />\n\t\t</div>\n\t);\n}\n\ninterface IconContainerProps {\n\tselected: boolean;\n\tbadge?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nfunction IconContainer({ selected, badge, children }: IconContainerProps) {\n\treturn (\n\t\t<div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex items-center justify-center size-6 transition-colors duration-200 shrink-0\",\n\t\t\t\tselected\n\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t\t{badge && (\n\t\t\t\t<span className=\"absolute -top-1 -right-1 flex min-w-3 h-3 items-center justify-center rounded-full bg-m3-error px-1 text-[10px] font-medium leading-none tracking-normal text-m3-on-error ring-[1.5px] ring-m3-surface\">\n\t\t\t\t\t{badge}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// NavigationBarItem\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst NavigationBarItemComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tNavigationBarItemProps\n>(\n\t(\n\t\t{\n\t\t\tselected,\n\t\t\ticon,\n\t\t\tlabel,\n\t\t\tonClick,\n\t\t\tdisabled = false,\n\t\t\tbadge,\n\t\t\tshape: shapeProp,\n\t\t\tshapeSize: shapeSizeProp,\n\t\t\thideLabel = false,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabelProp,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tvariant,\n\t\t\titemLayout,\n\t\t\tshape: contextShape,\n\t\t\tlabelVisibility: contextLabelVisibility,\n\t\t\tshapeSize: contextShapeSize,\n\t\t\titemClassName: contextItemClassName,\n\t\t} = React.useContext(NavigationBarContext);\n\n\t\tconst activeShape = shapeProp ?? contextShape ?? \"pill\";\n\t\tconst isSquare = isSquareShape(activeShape);\n\t\t// shapeSize controls the square dimension of custom shape containers (default 56px)\n\t\tconst resolvedShapeSize = shapeSizeProp ?? contextShapeSize ?? 56;\n\n\t\tconst isForcedHorizontal = itemLayout === \"horizontal\";\n\t\tconst isResponsiveHorizontal =\n\t\t\t(variant === \"flexible\" || variant === \"xr\") && itemLayout === undefined;\n\n\t\t// Label visibility: item-level hideLabel takes priority, then container labelVisibility\n\t\tconst shouldShowLabel =\n\t\t\t!hideLabel &&\n\t\t\t(() => {\n\t\t\t\tif (contextLabelVisibility === \"unlabeled\") return false;\n\t\t\t\tif (contextLabelVisibility === \"auto\") return selected;\n\t\t\t\treturn true; // \"labeled\" (default)\n\t\t\t})();\n\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled,\n\t\t});\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (disabled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\tif (typeof window !== \"undefined\" && window.scrollY > 0) {\n\t\t\t\t\t\twindow.scrollTo({ top: 0, behavior: \"smooth\" });\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.();\n\t\t\t},\n\t\t\t[disabled, selected, onClick],\n\t\t);\n\n\t\tconst filledIcon = cloneIconWithFill(icon, selected);\n\n\t\tconst itemClassName = cn(\n\t\t\t\"group relative flex cursor-pointer transition-colors duration-200 outline-none select-none h-full items-center justify-center min-w-0\",\n\t\t\tvariant === \"xr\"\n\t\t\t\t? isResponsiveHorizontal\n\t\t\t\t\t? \"flex-1 min-[600px]:flex-initial min-[600px]:w-auto\"\n\t\t\t\t\t: isForcedHorizontal\n\t\t\t\t\t\t? \"flex-initial w-auto\"\n\t\t\t\t\t\t: \"flex-1\"\n\t\t\t\t: isForcedHorizontal\n\t\t\t\t\t? \"flex-initial w-auto\"\n\t\t\t\t\t: \"flex-1\",\n\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\tcontextItemClassName,\n\t\t\tclassName,\n\t\t);\n\n\t\t// Icon pill container dimensions — square shapes use resolvedShapeSize × resolvedShapeSize\n\t\tconst iconPillWidth = isSquare ? resolvedShapeSize : 56;\n\t\tconst iconPillHeight = isSquare ? resolvedShapeSize : 32;\n\n\t\tif (asChild && children) {\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\tconst innerContent = (\n\t\t\t\t<>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"relative flex items-center justify-center flex-col gap-y-1 w-full px-1 py-1.5\",\n\t\t\t\t\t\t\tisResponsiveHorizontal &&\n\t\t\t\t\t\t\t\t\"min-[600px]:flex-row min-[600px]:gap-y-0 min-[600px]:gap-x-1.5 min-[600px]:h-10 min-[600px]:px-4 min-[600px]:py-0 min-[600px]:rounded-full min-[600px]:w-auto\",\n\t\t\t\t\t\t\tisForcedHorizontal &&\n\t\t\t\t\t\t\t\t\"flex-row gap-y-0 gap-x-1.5 h-10 px-4 py-0 rounded-full w-auto\",\n\t\t\t\t\t\t\t// When label is hidden and not horizontal, remove bottom gap\n\t\t\t\t\t\t\t!shouldShowLabel && !isForcedHorizontal && \"gap-y-0\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Horizontal active indicator — covers icon + label (only for standard pill layout) */}\n\t\t\t\t\t\t{!isSquare && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"absolute inset-0 z-0 hidden\",\n\t\t\t\t\t\t\t\t\tisResponsiveHorizontal && \"min-[600px]:block\",\n\t\t\t\t\t\t\t\t\tisForcedHorizontal && \"block!\",\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<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t\t<ActivePill shape={activeShape} width={56} height={40} />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t<HoverStateLayer shape={activeShape} width={56} height={40} />\n\t\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\twidth={56}\n\t\t\t\t\t\t\t\t\theight={40}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Icon pill — background visible for custom shapes always, or for pill in vertical layout */}\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\t\"relative flex items-center justify-center shrink-0 z-10\",\n\t\t\t\t\t\t\t\tisSquare ? \"mx-auto\" : \"h-8 w-14 mx-auto rounded-[16px]\",\n\t\t\t\t\t\t\t\t!isSquare &&\n\t\t\t\t\t\t\t\t\tisResponsiveHorizontal &&\n\t\t\t\t\t\t\t\t\t\"min-[600px]:size-6 min-[600px]:w-auto min-[600px]:h-auto\",\n\t\t\t\t\t\t\t\t!isSquare && isForcedHorizontal && \"size-6 w-auto h-auto\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tisSquare\n\t\t\t\t\t\t\t\t\t? { width: resolvedShapeSize, height: resolvedShapeSize }\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"absolute inset-0 z-0\",\n\t\t\t\t\t\t\t\t\t!isSquare && isResponsiveHorizontal && \"min-[600px]:hidden\",\n\t\t\t\t\t\t\t\t\t!isSquare && isForcedHorizontal && \"hidden\",\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<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t\t<ActivePill\n\t\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t<HoverStateLayer\n\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<div className=\"relative z-10 flex size-6 items-center justify-center text-current\">\n\t\t\t\t\t\t\t\t<IconContainer selected={selected} badge={badge}>\n\t\t\t\t\t\t\t\t\t{filledIcon}\n\t\t\t\t\t\t\t\t</IconContainer>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{label && (\n\t\t\t\t\t\t\t<AnimatePresence mode=\"popLayout\" initial={false}>\n\t\t\t\t\t\t\t\t{shouldShowLabel && (\n\t\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\t\tkey=\"nav-label\"\n\t\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, height: 0, scale: 0.85, y: -2 }}\n\t\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, height: \"auto\", scale: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\t\texit={{ opacity: 0, height: 0, scale: 0.85, y: -2 }}\n\t\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION_EXPRESSIVE}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"z-10 transition-colors duration-200 truncate px-1 inline-block overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-surface font-medium\"\n\t\t\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\t\t\t\"text-[12px] leading-4 tracking-[0.5px]\",\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{child.props.children ?? label}\n\t\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t\t<TouchTarget />\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\treturn (\n\t\t\t\t<Slot\n\t\t\t\t\tref={ref as React.Ref<HTMLElement>}\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\taria-current={selected ? \"page\" : undefined}\n\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\t// Always provide aria-label even when label is visually hidden\n\t\t\t\t\t\tariaLabelProp || (typeof label === \"string\" ? label : undefined)\n\t\t\t\t\t}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t>\n\t\t\t\t\t{React.cloneElement(child, { children: innerContent })}\n\t\t\t\t</Slot>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<m.button\n\t\t\t\tref={ref}\n\t\t\t\ttype=\"button\"\n\t\t\t\trole=\"menuitem\"\n\t\t\t\taria-current={selected ? \"page\" : undefined}\n\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\taria-label={\n\t\t\t\t\t// Always provide aria-label even when label is visually hidden\n\t\t\t\t\tariaLabelProp || (typeof label === \"string\" ? label : undefined)\n\t\t\t\t}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\tclassName={itemClassName}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex items-center justify-center flex-col gap-y-1 w-full px-1 py-1.5\",\n\t\t\t\t\t\tisResponsiveHorizontal &&\n\t\t\t\t\t\t\t\"min-[600px]:flex-row min-[600px]:gap-y-0 min-[600px]:gap-x-1.5 min-[600px]:h-10 min-[600px]:px-4 min-[600px]:py-0 min-[600px]:rounded-full min-[600px]:w-auto\",\n\t\t\t\t\t\tisForcedHorizontal &&\n\t\t\t\t\t\t\t\"flex-row gap-y-0 gap-x-1.5 h-10 px-4 py-0 rounded-full w-auto\",\n\t\t\t\t\t\t// When label is hidden and not horizontal, remove bottom gap\n\t\t\t\t\t\t!shouldShowLabel && !isForcedHorizontal && \"gap-y-0\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Horizontal active indicator — covers icon + label (only for standard pill layout) */}\n\t\t\t\t\t{!isSquare && (\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\t\"absolute inset-0 z-0 hidden\",\n\t\t\t\t\t\t\t\tisResponsiveHorizontal && \"min-[600px]:block\",\n\t\t\t\t\t\t\t\tisForcedHorizontal && \"block!\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t<ActivePill shape={activeShape} width={56} height={40} />\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t<HoverStateLayer shape={activeShape} width={56} height={40} />\n\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\twidth={56}\n\t\t\t\t\t\t\t\theight={40}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Icon pill — background visible for custom shapes always, or for pill in vertical layout */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"relative flex items-center justify-center shrink-0 z-10\",\n\t\t\t\t\t\t\tisSquare ? \"mx-auto\" : \"h-8 w-14 mx-auto rounded-[16px]\",\n\t\t\t\t\t\t\t!isSquare &&\n\t\t\t\t\t\t\t\tisResponsiveHorizontal &&\n\t\t\t\t\t\t\t\t\"min-[600px]:size-6 min-[600px]:w-auto min-[600px]:h-auto\",\n\t\t\t\t\t\t\t!isSquare && isForcedHorizontal && \"size-6 w-auto h-auto\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\tisSquare\n\t\t\t\t\t\t\t\t? { width: resolvedShapeSize, height: resolvedShapeSize }\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"absolute inset-0 z-0\",\n\t\t\t\t\t\t\t\t!isSquare && isResponsiveHorizontal && \"min-[600px]:hidden\",\n\t\t\t\t\t\t\t\t!isSquare && isForcedHorizontal && \"hidden\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t<ActivePill\n\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\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</AnimatePresence>\n\t\t\t\t\t\t\t<HoverStateLayer\n\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<div className=\"relative z-10 flex size-6 items-center justify-center text-current\">\n\t\t\t\t\t\t\t<IconContainer selected={selected} badge={badge}>\n\t\t\t\t\t\t\t\t{filledIcon}\n\t\t\t\t\t\t\t</IconContainer>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{label && (\n\t\t\t\t\t\t<AnimatePresence mode=\"popLayout\" initial={false}>\n\t\t\t\t\t\t\t{shouldShowLabel && (\n\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\tkey=\"nav-label\"\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0, height: 0, scale: 0.85, y: -2 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, height: \"auto\", scale: 1, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, height: 0, scale: 0.85, y: -2 }}\n\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION_EXPRESSIVE}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"z-10 transition-colors duration-200 truncate px-1 inline-block overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-surface font-medium\"\n\t\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\t\t\"text-[12px] leading-4 tracking-[0.5px]\",\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{label}\n\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t\t<TouchTarget />\n\t\t\t</m.button>\n\t\t);\n\t},\n);\n\nNavigationBarItemComponent.displayName = \"NavigationBarItem\";\nexport const NavigationBarItem = React.memo(NavigationBarItemComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// NavigationBar Container\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst navContainerVariants = cva(\n\t\"flex items-center justify-center select-none transition-transform duration-300 z-50\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tflexible: \"bottom-0 left-0 right-0 w-full min-h-16 py-1 pb-safe\",\n\t\t\t\tbaseline: \"bottom-0 left-0 right-0 w-full min-h-20 py-1 pb-safe\",\n\t\t\t\txr: \"bottom-6 left-1/2 -translate-x-1/2 w-auto max-w-[calc(100%-2rem)] min-[600px]:max-w-fit min-h-20 min-[600px]:min-h-16 rounded-[48px] px-2 py-1\",\n\t\t\t},\n\t\t\tposition: {\n\t\t\t\tfixed: \"fixed\",\n\t\t\t\tabsolute: \"absolute\",\n\t\t\t},\n\t\t\televated: {\n\t\t\t\ttrue: \"shadow-[0_-1px_3px_rgba(0,0,0,0.1)]\",\n\t\t\t\tfalse: \"shadow-none\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"flexible\",\n\t\t\tposition: \"fixed\",\n\t\t\televated: false,\n\t\t},\n\t},\n);\n\nexport const NavigationBarComponent = React.forwardRef<\n\tHTMLElement,\n\tNavigationBarProps\n>(\n\t(\n\t\t{\n\t\t\tvariant = \"flexible\",\n\t\t\titemLayout,\n\t\t\tshape,\n\t\t\tlabelVisibility,\n\t\t\tshapeSize,\n\t\t\thideOnScroll = false,\n\t\t\televated = false,\n\t\t\tfixed = true,\n\t\t\tscrollContainerRef,\n\t\t\tactiveIndicatorTransition,\n\t\t\tchildren,\n\t\t\titemClassName,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [isVisible, setIsVisible] = React.useState(true);\n\t\tconst lastScrollY = React.useRef(\n\t\t\ttypeof window !== \"undefined\" ? window.scrollY : 0,\n\t\t);\n\n\t\tconst isSquare = isSquareShape(shape);\n\t\tconst effectiveShapeSize = shapeSize ?? (isSquare ? 56 : 32);\n\n\t\tconst computedMinHeight = React.useMemo(() => {\n\t\t\tconst baseHeight = variant === \"baseline\" ? 80 : 64;\n\t\t\tconst requiredHeight =\n\t\t\t\titemLayout === \"horizontal\" || labelVisibility === \"unlabeled\"\n\t\t\t\t\t? effectiveShapeSize + 16\n\t\t\t\t\t: effectiveShapeSize + 32;\n\t\t\treturn Math.max(baseHeight, requiredHeight);\n\t\t}, [variant, itemLayout, labelVisibility, effectiveShapeSize]);\n\n\t\tReact.useEffect(() => {\n\t\t\tif (typeof window === \"undefined\" || !hideOnScroll) {\n\t\t\t\tsetIsVisible(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Do not hide if screen reader or reduced motion is active\n\t\t\tconst prefersReducedMotion = window.matchMedia(\n\t\t\t\t\"(prefers-reduced-motion: reduce)\",\n\t\t\t).matches;\n\t\t\tif (prefersReducedMotion) {\n\t\t\t\tsetIsVisible(true);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet ticking = false;\n\n\t\t\tconst handleScroll = () => {\n\t\t\t\tif (ticking) return;\n\t\t\t\tticking = true;\n\t\t\t\twindow.requestAnimationFrame(() => {\n\t\t\t\t\tconst currentScrollY = scrollContainerRef?.current\n\t\t\t\t\t\t? scrollContainerRef.current.scrollTop\n\t\t\t\t\t\t: window.scrollY;\n\n\t\t\t\t\tif (currentScrollY <= 0 || currentScrollY < lastScrollY.current) {\n\t\t\t\t\t\tsetIsVisible(true);\n\t\t\t\t\t} else if (currentScrollY > lastScrollY.current) {\n\t\t\t\t\t\tsetIsVisible(false);\n\t\t\t\t\t}\n\n\t\t\t\t\tlastScrollY.current = currentScrollY;\n\t\t\t\t\tticking = false;\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tconst target = scrollContainerRef?.current || window;\n\n\t\t\ttarget.addEventListener(\"scroll\", handleScroll, { passive: true });\n\t\t\treturn () => target.removeEventListener(\"scroll\", handleScroll);\n\t\t}, [hideOnScroll, scrollContainerRef]);\n\n\t\tconst navBaseClasses = cn(\n\t\t\tnavContainerVariants({\n\t\t\t\tvariant,\n\t\t\t\televated,\n\t\t\t\tposition: fixed ? \"fixed\" : \"absolute\",\n\t\t\t}),\n\t\t\tvariant === \"xr\"\n\t\t\t\t? \"bg-m3-surface border border-white/5 shadow-xl\"\n\t\t\t\t: \"bg-m3-surface-container\",\n\t\t\tclassName,\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<NavigationBarContext.Provider\n\t\t\t\t\tvalue={{\n\t\t\t\t\t\tvariant,\n\t\t\t\t\t\titemLayout,\n\t\t\t\t\t\tshape,\n\t\t\t\t\t\tlabelVisibility,\n\t\t\t\t\t\tshapeSize,\n\t\t\t\t\t\tactiveIndicatorTransition,\n\t\t\t\t\t\titemClassName,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<m.nav\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\trole=\"navigation\"\n\t\t\t\t\t\taria-label=\"Main navigation\"\n\t\t\t\t\t\tclassName={navBaseClasses}\n\t\t\t\t\t\tstyle={{ minHeight: computedMinHeight, ...style }}\n\t\t\t\t\t\tinitial={false}\n\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\ty: isVisible\n\t\t\t\t\t\t\t\t? \"0%\"\n\t\t\t\t\t\t\t\t: variant === \"xr\"\n\t\t\t\t\t\t\t\t\t? \"calc(100% + 40px)\"\n\t\t\t\t\t\t\t\t\t: \"100%\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ type: \"tween\", duration: 0.3, ease: \"easeInOut\" }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\trole=\"menubar\"\n\t\t\t\t\t\t\taria-orientation=\"horizontal\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex w-full h-full mx-auto items-center justify-center\",\n\t\t\t\t\t\t\t\tvariant === \"xr\"\n\t\t\t\t\t\t\t\t\t? \"gap-0 min-[600px]:gap-1.5 px-1\"\n\t\t\t\t\t\t\t\t\t: \"max-w-7xl gap-1.5\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</m.nav>\n\t\t\t\t</NavigationBarContext.Provider>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nNavigationBarComponent.displayName = \"NavigationBar\";\nexport const NavigationBar = React.memo(NavigationBarComponent);\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport {\n\tAnimatePresence,\n\tdomMax,\n\tLazyMotion,\n\tm,\n\ttype Transition,\n} from \"motion/react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../icon\";\nimport { Ripple, useRippleState } from \"../ripple\";\nimport {\n\tSPRING_TRANSITION,\n\tSPRING_TRANSITION_EXPRESSIVE,\n} from \"../shared/constants\";\nimport { TouchTarget } from \"../shared/touch-target\";\nimport {\n\tgetNavigationShapeStyle,\n\tisSquareShape,\n\ttype NavigationItemShape,\n} from \"./navigation-shape-utils\";\n\nexport type { NavigationItemShape };\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types & Constants\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport type NavigationRailVariant = \"collapsed\" | \"expanded\" | \"modal\" | \"xr\";\nexport type NavigationRailLabelVisibility = \"labeled\" | \"auto\" | \"unlabeled\";\nexport type NavigationRailActiveIndicatorWidth = \"hug\" | \"fill\";\n\nexport interface NavigationRailItemProps {\n\tselected: boolean;\n\ticon: React.ReactNode;\n\tlabel?: React.ReactNode;\n\tonClick?: () => void;\n\tdisabled?: boolean;\n\tbadge?: React.ReactNode;\n\t/** Shape of the item active indicator / icon container (pill, circle, sunny, flower, etc.) */\n\tshape?: NavigationItemShape;\n\t/** Override size (width & height) of the shape container in px. Default: 56 for square shapes, 32h×56w for pill */\n\tshapeSize?: number;\n\t/**\n\t * Width behavior of the active indicator when expanded with pill shape.\n\t * - \"hug\" (default): hugs the icon + label contents (MD3 Expressive style)\n\t * - \"fill\": fills the full width of the container (baseline navigation drawer style)\n\t */\n\tactiveIndicatorWidth?: NavigationRailActiveIndicatorWidth;\n\t\"aria-label\"?: string;\n\tclassName?: string;\n\tasChild?: boolean;\n\tchildren?: React.ReactNode;\n}\n\nexport interface NavigationRailProps {\n\tvariant?: NavigationRailVariant;\n\tlabelVisibility?: NavigationRailLabelVisibility;\n\t/** Default shape of navigation rail items (pill, circle, sunny, flower, etc.) */\n\tshape?: NavigationItemShape;\n\t/** Default size (width & height) for square shape containers in px. Default: 56 */\n\tshapeSize?: number;\n\t/**\n\t * Default width behavior of the active indicator when expanded with pill shape.\n\t * - \"hug\" (default): hugs the icon + label contents (MD3 Expressive style)\n\t * - \"fill\": fills the full width of the container (baseline navigation drawer style)\n\t */\n\tactiveIndicatorWidth?: NavigationRailActiveIndicatorWidth;\n\theader?: React.ReactNode;\n\tfab?: React.ReactNode;\n\tfabPlacement?: \"contained\" | \"spatialized\";\n\tfooter?: React.ReactNode;\n\tnarrow?: boolean;\n\topen?: boolean;\n\tonClose?: () => void;\n\tactiveIndicatorTransition?: Transition;\n\tchildren: React.ReactNode;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n}\n\nconst NavigationRailContext = React.createContext<{\n\tvariant: NavigationRailVariant;\n\tlabelVisibility: NavigationRailLabelVisibility;\n\tshape?: NavigationItemShape;\n\tshapeSize?: number;\n\tactiveIndicatorWidth?: NavigationRailActiveIndicatorWidth;\n\tactiveIndicatorTransition?: Transition;\n}>({\n\tvariant: \"collapsed\",\n\tlabelVisibility: \"labeled\",\n\tactiveIndicatorWidth: \"hug\",\n});\n\nconst MD3_MODAL_TRANSITION = {\n\ttype: \"tween\",\n\tease: [0.05, 0.7, 0.1, 1],\n\tduration: 0.3,\n} as const;\n\n// ─────────────────────────────────────────────────────────────────────────────\n// CVA Variants\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst railContainerVariants = cva(\n\t\"flex flex-col overflow-y-auto overflow-x-hidden select-none transition-colors duration-300\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tcollapsed:\n\t\t\t\t\t\"items-center h-full pt-11 pb-14 shadow-none bg-m3-surface rounded-none\",\n\t\t\t\texpanded:\n\t\t\t\t\t\"items-start h-full pt-11 pb-14 shadow-none bg-m3-surface rounded-none\",\n\t\t\t\tmodal:\n\t\t\t\t\t\"bg-m3-surface shadow-lg rounded-r-[var(--m3-shape-corner-large)] h-full pt-11 pb-14\",\n\t\t\t\txr: \"h-fit py-5 rounded-[48px] shadow-xl bg-m3-surface border border-white/5\",\n\t\t\t},\n\t\t\tnarrow: {\n\t\t\t\ttrue: \"w-20\",\n\t\t\t\tfalse: \"w-24\",\n\t\t\t},\n\t\t},\n\t\tcompoundVariants: [\n\t\t\t{ variant: \"expanded\", className: \"min-w-[13.75rem] max-w-[22.5rem]\" },\n\t\t\t{ variant: \"modal\", className: \"min-w-[13.75rem] max-w-[22.5rem]\" },\n\t\t],\n\t\tdefaultVariants: {\n\t\t\tvariant: \"collapsed\",\n\t\t\tnarrow: false,\n\t\t},\n\t},\n);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction cloneIconWithFill(\n\ticon: React.ReactNode,\n\tselected: boolean,\n): React.ReactNode {\n\tif (!React.isValidElement(icon)) return icon;\n\tif ((icon.type as unknown) === Icon) {\n\t\treturn React.cloneElement(\n\t\t\ticon as React.ReactElement<{ fill?: 0 | 1; animateFill?: boolean }>,\n\t\t\t{ fill: selected ? 1 : 0, animateFill: true },\n\t\t);\n\t}\n\treturn icon;\n}\n\nfunction getMenuItems(container: HTMLElement): HTMLElement[] {\n\treturn Array.from(\n\t\tcontainer.querySelectorAll<HTMLElement>(\n\t\t\t'[role=\"menuitem\"]:not([aria-disabled=\"true\"])',\n\t\t),\n\t);\n}\n\nfunction setFocusedItem(items: HTMLElement[], index: number) {\n\tfor (const item of items) item.tabIndex = -1;\n\tconst target = items[index];\n\tif (target) {\n\t\ttarget.tabIndex = 0;\n\t\ttarget.focus();\n\t}\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// NavigationRailItem Sub-components\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface ActivePillProps {\n\tlayoutId: string;\n\tdisableInitial?: boolean;\n\tshape?: NavigationItemShape;\n\twidth?: number;\n\theight?: number;\n}\n\nfunction ActivePill({\n\tlayoutId,\n\tdisableInitial = false,\n\tshape = \"pill\",\n\twidth = 56,\n\theight = 32,\n}: ActivePillProps) {\n\tconst { activeIndicatorTransition } = React.useContext(NavigationRailContext);\n\tconst shapeStyle = getNavigationShapeStyle(shape, width, height);\n\n\treturn (\n\t\t<m.div\n\t\t\tlayoutId={layoutId}\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-m3-secondary-container pointer-events-none\",\n\t\t\t\tshapeStyle\n\t\t\t\t\t? \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none\"\n\t\t\t\t\t: \"absolute inset-0 rounded-full\",\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\tzIndex: 0,\n\t\t\t\toriginX: 0.5,\n\t\t\t\toriginY: 0.5,\n\t\t\t\t...(shapeStyle ? { width, height } : {}),\n\t\t\t\t...shapeStyle,\n\t\t\t}}\n\t\t\tinitial={disableInitial ? false : { opacity: 0, scale: 0.5 }}\n\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\texit={{ opacity: 0, scale: 0.5, transition: { duration: 0.15 } }}\n\t\t\ttransition={activeIndicatorTransition || SPRING_TRANSITION_EXPRESSIVE}\n\t\t/>\n\t);\n}\n\ninterface HoverStateLayerProps {\n\tshape?: NavigationItemShape;\n\twidth?: number;\n\theight?: number;\n}\n\nfunction HoverStateLayer({\n\tshape = \"pill\",\n\twidth = 56,\n\theight = 32,\n}: HoverStateLayerProps) {\n\tconst shapeStyle = getNavigationShapeStyle(shape, width, height);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-m3-on-surface opacity-0 group-hover:opacity-[0.08] transition-opacity duration-200 pointer-events-none z-0\",\n\t\t\t\tshapeStyle\n\t\t\t\t\t? \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none\"\n\t\t\t\t\t: \"absolute inset-0 rounded-full\",\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\t...(shapeStyle ? { width, height } : {}),\n\t\t\t\t...shapeStyle,\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ninterface RippleLayerProps {\n\tripples: ReturnType<typeof useRippleState>[\"ripples\"];\n\tonRippleDone: ReturnType<typeof useRippleState>[\"removeRipple\"];\n\tshape?: NavigationItemShape;\n\twidth?: number;\n\theight?: number;\n}\n\nfunction RippleLayer({\n\tripples,\n\tonRippleDone,\n\tshape = \"pill\",\n\twidth = 56,\n\theight = 32,\n}: RippleLayerProps) {\n\tconst shapeStyle = getNavigationShapeStyle(shape, width, height);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"overflow-hidden pointer-events-none z-0\",\n\t\t\t\tshapeStyle\n\t\t\t\t\t? \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-none\"\n\t\t\t\t\t: \"absolute inset-0 rounded-full\",\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\t...(shapeStyle ? { width, height } : {}),\n\t\t\t\t...shapeStyle,\n\t\t\t}}\n\t\t>\n\t\t\t<Ripple ripples={ripples} onRippleDone={onRippleDone} />\n\t\t</div>\n\t);\n}\n\ninterface IconContainerProps {\n\tselected: boolean;\n\tbadge?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nfunction IconContainer({ selected, badge, children }: IconContainerProps) {\n\treturn (\n\t\t<div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex items-center justify-center size-6 transition-colors duration-200\",\n\t\t\t\tselected\n\t\t\t\t\t? \"text-m3-on-secondary-container\"\n\t\t\t\t\t: \"text-m3-on-surface-variant\",\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t\t{badge && (\n\t\t\t\t<span className=\"absolute -top-1 -right-1 flex min-w-3 h-3 items-center justify-center rounded-full bg-m3-error px-1 text-[10px] font-medium leading-none tracking-normal text-m3-on-error ring-[1.5px] ring-m3-surface\">\n\t\t\t\t\t{badge}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// NavigationRailItem\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst NavigationRailItemComponent = React.forwardRef<\n\tHTMLButtonElement,\n\tNavigationRailItemProps\n>(\n\t(\n\t\t{\n\t\t\tselected,\n\t\t\ticon,\n\t\t\tlabel,\n\t\t\tonClick,\n\t\t\tdisabled = false,\n\t\t\tbadge,\n\t\t\tshape: shapeProp,\n\t\t\tshapeSize: shapeSizeProp,\n\t\t\tactiveIndicatorWidth: activeIndicatorWidthProp,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabelProp,\n\t\t\tasChild = false,\n\t\t\tchildren,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tvariant,\n\t\t\tlabelVisibility,\n\t\t\tshape: contextShape,\n\t\t\tshapeSize: contextShapeSize,\n\t\t\tactiveIndicatorWidth: contextActiveIndicatorWidth,\n\t\t} = React.useContext(NavigationRailContext);\n\n\t\tconst activeShape = shapeProp ?? contextShape ?? \"pill\";\n\t\tconst isSquare = isSquareShape(activeShape);\n\t\t// shapeSize controls the square dimension of custom shape containers (default 56px)\n\t\tconst resolvedShapeSize = shapeSizeProp ?? contextShapeSize ?? 56;\n\t\tconst activeIndicatorWidth =\n\t\t\tactiveIndicatorWidthProp ?? contextActiveIndicatorWidth ?? \"hug\";\n\n\t\tconst isExpanded = variant === \"expanded\" || variant === \"modal\";\n\t\tconst isModal = variant === \"modal\";\n\t\tconst enableLayout = !isModal;\n\t\tconst isExpandedPill = isExpanded && !isSquare;\n\t\tconst expandedPillWidthClass =\n\t\t\tactiveIndicatorWidth === \"fill\" ? \"w-full\" : \"w-fit\";\n\n\t\tconst activePillId = `rail-pill-${React.useId()}`;\n\t\tconst { ripples, onPointerDown, removeRipple } = useRippleState({\n\t\t\tdisabled,\n\t\t});\n\n\t\tconst showLabel =\n\t\t\tisExpanded ||\n\t\t\tlabelVisibility === \"labeled\" ||\n\t\t\t(labelVisibility === \"auto\" && selected);\n\n\t\tconst handleClick = React.useCallback(\n\t\t\t(e: React.MouseEvent<HTMLButtonElement>) => {\n\t\t\t\tif (disabled) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonClick?.();\n\t\t\t},\n\t\t\t[disabled, onClick],\n\t\t);\n\n\t\tconst filledIcon = cloneIconWithFill(icon, selected);\n\n\t\tconst labelInitial = isModal\n\t\t\t? false\n\t\t\t: { opacity: 0, x: isExpanded ? -12 : 0, y: isExpanded ? 0 : -8 };\n\n\t\tconst itemClassName = cn(\n\t\t\t\"group relative flex cursor-pointer transition-colors duration-200 outline-none select-none\",\n\t\t\t\"focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-offset-2 rounded-full\",\n\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\tisExpanded\n\t\t\t\t? \"w-full flex-row items-center px-3 h-14\"\n\t\t\t\t: \"w-full flex-col justify-center h-14\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst iconPillWidth = isSquare ? resolvedShapeSize : 56;\n\t\tconst iconPillHeight = isSquare ? resolvedShapeSize : 32;\n\n\t\tif (asChild && children) {\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\tconst innerContent = (\n\t\t\t\t<>\n\t\t\t\t\t{/* Pill container - adapts layout for expanded vs collapsed */}\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tlayout={enableLayout}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"relative flex z-10\",\n\t\t\t\t\t\t\tisExpanded\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t\"flex-row items-center h-14 px-4 gap-x-3 rounded-full\",\n\t\t\t\t\t\t\t\t\t\texpandedPillWidthClass,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: \"flex-col items-center justify-center w-full gap-y-1 rounded-full\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isExpandedPill && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t\t<ActivePill\n\t\t\t\t\t\t\t\t\t\t\tlayoutId={activePillId}\n\t\t\t\t\t\t\t\t\t\t\tdisableInitial={isModal}\n\t\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t<HoverStateLayer shape={activeShape} />\n\t\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Icon pill container */}\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tlayout={enableLayout}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"relative flex items-center justify-center shrink-0 z-10\",\n\t\t\t\t\t\t\t\tisSquare\n\t\t\t\t\t\t\t\t\t? \"mx-auto\"\n\t\t\t\t\t\t\t\t\t: isExpandedPill\n\t\t\t\t\t\t\t\t\t\t? \"size-6\"\n\t\t\t\t\t\t\t\t\t\t: \"h-8 w-14 mx-auto rounded-full\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tisSquare\n\t\t\t\t\t\t\t\t\t? { width: resolvedShapeSize, height: resolvedShapeSize }\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!isExpandedPill && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t\t\t<ActivePill\n\t\t\t\t\t\t\t\t\t\t\t\tlayoutId={activePillId}\n\t\t\t\t\t\t\t\t\t\t\t\tdisableInitial={isModal}\n\t\t\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t\t<HoverStateLayer\n\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\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\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\tlayout={enableLayout ? \"position\" : false}\n\t\t\t\t\t\t\t\tclassName=\"relative z-10 flex size-6 items-center justify-center text-current\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconContainer selected={selected} badge={badge}>\n\t\t\t\t\t\t\t\t\t{filledIcon}\n\t\t\t\t\t\t\t\t</IconContainer>\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t</m.div>\n\n\t\t\t\t\t\t<AnimatePresence mode=\"popLayout\">\n\t\t\t\t\t\t\t{showLabel && (label || child.props.children) && (\n\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\tkey=\"rail-label\"\n\t\t\t\t\t\t\t\t\tlayout={enableLayout ? \"position\" : false}\n\t\t\t\t\t\t\t\t\tinitial={labelInitial}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, x: 0, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, transition: { duration: 0.1 } }}\n\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"z-10 transition-colors duration-200 whitespace-nowrap\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? isExpandedPill\n\t\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container font-medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface font-medium\"\n\t\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\t\tisExpanded\n\t\t\t\t\t\t\t\t\t\t\t? \"text-sm tracking-wide text-left\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-xs tracking-wide\",\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{child.props.children ?? label}\n\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t</m.div>\n\n\t\t\t\t\t<TouchTarget />\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\trole=\"menuitem\"\n\t\t\t\t\t\taria-current={selected ? \"page\" : undefined}\n\t\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\tariaLabelProp || (typeof label === \"string\" ? label : undefined)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t\t\ttabIndex={-1}\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\tlayout={enableLayout}\n\t\t\t\t\tref={ref}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\trole=\"menuitem\"\n\t\t\t\t\taria-current={selected ? \"page\" : undefined}\n\t\t\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\t\t\taria-label={\n\t\t\t\t\t\tariaLabelProp || (typeof label === \"string\" ? label : undefined)\n\t\t\t\t\t}\n\t\t\t\t\tonClick={handleClick}\n\t\t\t\t\tonPointerDown={onPointerDown}\n\t\t\t\t\tclassName={itemClassName}\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t>\n\t\t\t\t\t{/* Pill container - adapts layout for expanded vs collapsed */}\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tlayout={enableLayout}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"relative flex z-10\",\n\t\t\t\t\t\t\tisExpanded\n\t\t\t\t\t\t\t\t? cn(\n\t\t\t\t\t\t\t\t\t\t\"flex-row items-center h-14 px-4 gap-x-3 rounded-full\",\n\t\t\t\t\t\t\t\t\t\texpandedPillWidthClass,\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t: \"flex-col items-center justify-center w-full gap-y-1 rounded-full\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isExpandedPill && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t\t<ActivePill\n\t\t\t\t\t\t\t\t\t\t\tlayoutId={activePillId}\n\t\t\t\t\t\t\t\t\t\t\tdisableInitial={isModal}\n\t\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t<HoverStateLayer shape={activeShape} />\n\t\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Icon pill container */}\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tlayout={enableLayout}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"relative flex items-center justify-center shrink-0 z-10\",\n\t\t\t\t\t\t\t\tisSquare\n\t\t\t\t\t\t\t\t\t? \"mx-auto\"\n\t\t\t\t\t\t\t\t\t: isExpandedPill\n\t\t\t\t\t\t\t\t\t\t? \"size-6\"\n\t\t\t\t\t\t\t\t\t\t: \"h-8 w-14 mx-auto rounded-full\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tisSquare\n\t\t\t\t\t\t\t\t\t? { width: resolvedShapeSize, height: resolvedShapeSize }\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!isExpandedPill && (\n\t\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t\t{selected && (\n\t\t\t\t\t\t\t\t\t\t\t<ActivePill\n\t\t\t\t\t\t\t\t\t\t\t\tlayoutId={activePillId}\n\t\t\t\t\t\t\t\t\t\t\t\tdisableInitial={isModal}\n\t\t\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t\t\t<HoverStateLayer\n\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<RippleLayer\n\t\t\t\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\t\t\t\tshape={activeShape}\n\t\t\t\t\t\t\t\t\t\twidth={iconPillWidth}\n\t\t\t\t\t\t\t\t\t\theight={iconPillHeight}\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\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\tlayout={enableLayout ? \"position\" : false}\n\t\t\t\t\t\t\t\tclassName=\"relative z-10 flex size-6 items-center justify-center text-current\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconContainer selected={selected} badge={badge}>\n\t\t\t\t\t\t\t\t\t{filledIcon}\n\t\t\t\t\t\t\t\t</IconContainer>\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t</m.div>\n\n\t\t\t\t\t\t<AnimatePresence mode=\"popLayout\">\n\t\t\t\t\t\t\t{showLabel && label && (\n\t\t\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\t\t\tkey=\"rail-label\"\n\t\t\t\t\t\t\t\t\tlayout={enableLayout ? \"position\" : false}\n\t\t\t\t\t\t\t\t\tinitial={labelInitial}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1, x: 0, y: 0 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0, transition: { duration: 0.1 } }}\n\t\t\t\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"z-10 transition-colors duration-200 whitespace-nowrap\",\n\t\t\t\t\t\t\t\t\t\tselected\n\t\t\t\t\t\t\t\t\t\t\t? isExpandedPill\n\t\t\t\t\t\t\t\t\t\t\t\t? \"text-m3-on-secondary-container font-medium\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"text-m3-on-surface font-medium\"\n\t\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\t\tisExpanded\n\t\t\t\t\t\t\t\t\t\t\t? \"text-sm tracking-wide text-left\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-xs tracking-wide\",\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{label}\n\t\t\t\t\t\t\t\t</m.span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t</m.div>\n\n\t\t\t\t\t<TouchTarget />\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nNavigationRailItemComponent.displayName = \"NavigationRailItem\";\nexport const NavigationRailItem = React.memo(NavigationRailItemComponent);\n\n// ─────────────────────────────────────────────────────────────────────────────\n// NavigationRail Container\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction useRoving(navRef: React.RefObject<HTMLElement | null>) {\n\tReact.useEffect(() => {\n\t\tif (!navRef.current) return;\n\t\tconst items = getMenuItems(navRef.current);\n\t\tconst selected = items.find(\n\t\t\t(el) => el.getAttribute(\"aria-current\") === \"page\",\n\t\t);\n\n\t\tfor (const item of items) item.tabIndex = -1;\n\t\tconst firstFocusable = selected ?? items[0];\n\t\tif (firstFocusable) firstFocusable.tabIndex = 0;\n\t}, [navRef]);\n\n\treturn React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLElement>) => {\n\t\t\tif (!navRef.current) return;\n\t\t\tconst items = getMenuItems(navRef.current);\n\t\t\tif (items.length === 0) return;\n\n\t\t\tconst currentIndex = items.indexOf(document.activeElement as HTMLElement);\n\n\t\t\tconst keyMap: Record<string, () => number> = {\n\t\t\t\tArrowDown: () =>\n\t\t\t\t\tcurrentIndex < items.length - 1 ? currentIndex + 1 : 0,\n\t\t\t\tArrowRight: () =>\n\t\t\t\t\tcurrentIndex < items.length - 1 ? currentIndex + 1 : 0,\n\t\t\t\tArrowUp: () => (currentIndex > 0 ? currentIndex - 1 : items.length - 1),\n\t\t\t\tArrowLeft: () =>\n\t\t\t\t\tcurrentIndex > 0 ? currentIndex - 1 : items.length - 1,\n\t\t\t\tHome: () => 0,\n\t\t\t\tEnd: () => items.length - 1,\n\t\t\t};\n\n\t\t\tconst getNextIndex = keyMap[e.key];\n\n\t\t\tif (getNextIndex) {\n\t\t\t\te.preventDefault();\n\t\t\t\tsetFocusedItem(items, getNextIndex());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(e.key === \" \" || e.key === \"Enter\") &&\n\t\t\t\titems.includes(document.activeElement as HTMLElement)\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t\t(document.activeElement as HTMLElement).click();\n\t\t\t}\n\t\t},\n\t\t[navRef],\n\t);\n}\n\nconst NavigationRailComponent = React.forwardRef<\n\tHTMLElement,\n\tNavigationRailProps\n>(\n\t(\n\t\t{\n\t\t\tvariant = \"collapsed\",\n\t\t\tlabelVisibility = \"labeled\",\n\t\t\tshape,\n\t\t\tshapeSize,\n\t\t\tactiveIndicatorWidth = \"hug\",\n\t\t\theader,\n\t\t\tfab,\n\t\t\tfabPlacement = \"contained\",\n\t\t\tfooter,\n\t\t\tnarrow = false,\n\t\t\topen = false,\n\t\t\tonClose,\n\t\t\tactiveIndicatorTransition,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isModal = variant === \"modal\";\n\t\tconst isExpanded = variant === \"expanded\" || variant === \"modal\";\n\t\tconst isXr = variant === \"xr\";\n\t\tconst isSpatial = isXr && fabPlacement === \"spatialized\";\n\t\tconst applyAnimation = !isXr || !isSpatial;\n\n\t\tconst navRef = React.useRef<HTMLElement>(null);\n\t\tconst handleKeyDown = useRoving(navRef);\n\n\t\tconst setRefs = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\tnavRef.current = 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],\n\t\t);\n\n\t\tconst navBaseClasses = cn(railContainerVariants({ variant, narrow }));\n\t\tconst modalPositioning = isModal ? \"fixed left-0 top-0 z-[100]\" : \"\";\n\n\t\tconst navHeaderSpacing = (() => {\n\t\t\tif (!isXr) return \"mb-6 min-h-10\";\n\t\t\tif (fabPlacement === \"contained\") return fab ? \"mb-10\" : \"mb-5\";\n\t\t\treturn \"mb-5\";\n\t\t})();\n\n\t\tconst navElement = (\n\t\t\t<m.nav\n\t\t\t\tkey=\"md3-nav-rail\"\n\t\t\t\tlayout={!isModal}\n\t\t\t\tref={isSpatial ? undefined : setRefs}\n\t\t\t\trole=\"navigation\"\n\t\t\t\taria-label=\"Main navigation\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\tnavBaseClasses,\n\t\t\t\t\t!isSpatial && modalPositioning,\n\t\t\t\t\t!isSpatial && isModal && applyAnimation && \"will-change-transform\",\n\t\t\t\t\t!isSpatial && className,\n\t\t\t\t)}\n\t\t\t\tstyle={isSpatial ? undefined : style}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tinitial={isModal && applyAnimation ? { x: \"-100%\" } : false}\n\t\t\t\tanimate={isModal && applyAnimation ? { x: 0 } : false}\n\t\t\t\texit={isModal && applyAnimation ? { x: \"-100%\" } : undefined}\n\t\t\t\ttransition={isModal ? MD3_MODAL_TRANSITION : SPRING_TRANSITION}\n\t\t\t>\n\t\t\t\t{(header || (fab && !isSpatial)) && (\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tlayout\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full flex-col justify-start shrink-0 empty:hidden\",\n\t\t\t\t\t\t\tisExpanded ? \"items-start px-3\" : \"items-center\",\n\t\t\t\t\t\t\tnavHeaderSpacing,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{header}\n\t\t\t\t\t\t{header && fab && !isSpatial && (\n\t\t\t\t\t\t\t<div className={isXr ? \"h-1\" : \"h-4\"} />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!isSpatial && fab}\n\t\t\t\t\t</m.div>\n\t\t\t\t)}\n\n\t\t\t\t<div\n\t\t\t\t\trole=\"menubar\"\n\t\t\t\t\taria-orientation=\"vertical\"\n\t\t\t\t\tclassName=\"flex flex-col flex-1 w-full gap-y-5\"\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\n\t\t\t\t{footer && (\n\t\t\t\t\t<div className=\"flex w-full flex-col items-center justify-end mt-auto shrink-0 pt-4 empty:hidden\">\n\t\t\t\t\t\t{footer}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</m.nav>\n\t\t);\n\n\t\tconst spatialFabSize = narrow\n\t\t\t? \"size-20 rounded-[40px]\"\n\t\t\t: \"size-24 rounded-[48px]\";\n\n\t\tconst spatialWrapper = (\n\t\t\t<m.div\n\t\t\t\tkey=\"md3-nav-wrapper\"\n\t\t\t\tref={setRefs}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex flex-col items-center gap-y-5 pointer-events-none\",\n\t\t\t\t\tmodalPositioning,\n\t\t\t\t\t\"m-6\",\n\t\t\t\t\tisModal && \"will-change-transform\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={style}\n\t\t\t\tinitial={isModal ? { x: \"-100%\" } : false}\n\t\t\t\tanimate={isModal ? { x: 0 } : false}\n\t\t\t\texit={isModal ? { x: \"-100%\" } : undefined}\n\t\t\t\ttransition={isModal ? MD3_MODAL_TRANSITION : SPRING_TRANSITION}\n\t\t\t>\n\t\t\t\t{fab && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex shrink-0 items-center justify-center pointer-events-auto\",\n\t\t\t\t\t\t\tspatialFabSize,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{fab}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t{React.cloneElement(\n\t\t\t\t\tnavElement as React.ReactElement<{ className?: string }>,\n\t\t\t\t\t{\n\t\t\t\t\t\tclassName: cn(navBaseClasses, \"pointer-events-auto\"),\n\t\t\t\t\t},\n\t\t\t\t)}\n\t\t\t</m.div>\n\t\t);\n\n\t\tconst finalNavElement = isSpatial ? spatialWrapper : navElement;\n\n\t\tconst contextValue = {\n\t\t\tvariant,\n\t\t\tlabelVisibility,\n\t\t\tshape,\n\t\t\tshapeSize,\n\t\t\tactiveIndicatorWidth,\n\t\t\tactiveIndicatorTransition,\n\t\t};\n\n\t\tif (isModal) {\n\t\t\tif (typeof document === \"undefined\") return null;\n\n\t\t\treturn createPortal(\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<NavigationRailContext.Provider value={contextValue}>\n\t\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t\t{open && (\n\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\tkey=\"md3-nav-backdrop\"\n\t\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\t\ttransition={{ duration: 0.2, ease: \"linear\" }}\n\t\t\t\t\t\t\t\t\tclassName=\"fixed inset-0 bg-black/40 z-40 will-change-[opacity]\"\n\t\t\t\t\t\t\t\t\tonClick={onClose}\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{open && finalNavElement}\n\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t</NavigationRailContext.Provider>\n\t\t\t\t</LazyMotion>,\n\t\t\t\tdocument.body,\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<NavigationRailContext.Provider value={contextValue}>\n\t\t\t\t\t{finalNavElement}\n\t\t\t\t</NavigationRailContext.Provider>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nNavigationRailComponent.displayName = \"NavigationRail\";\nexport const NavigationRail = React.memo(NavigationRailComponent);\n","/**\n * @file use-search-keyboard.ts\n * Keyboard navigation hook for the MD3 Search component.\n *\n * Handles:\n * - ArrowDown / ArrowUp → navigate through suggestions (role=\"option\")\n * - Enter → submit search or select active suggestion\n * - Escape → close the SearchView\n */\n\nimport * as React from \"react\";\nimport type { UseSearchKeyboardReturn } from \"../search.types\";\n\ninterface UseSearchKeyboardOptions {\n\t/** Whether the SearchView is currently open. */\n\tactive: boolean;\n\t/** Callback to close the SearchView. */\n\tonActiveChange: (active: boolean) => void;\n\t/** Callback for search submission. */\n\tonSearch: (query: string) => void;\n\t/** Current search query. */\n\tquery: string;\n\t/** Total number of suggestion items in the listbox. */\n\titemCount: number;\n\t/** Called when user selects a specific suggestion by index. */\n\tonSelectSuggestion?: (index: number) => void;\n}\n\n/**\n * Manages keyboard navigation for the Search component.\n *\n * Complies with WAI-ARIA Combobox pattern:\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/\n */\nexport function useSearchKeyboard({\n\tactive,\n\tonActiveChange,\n\tonSearch,\n\tquery,\n\titemCount,\n\tonSelectSuggestion,\n}: UseSearchKeyboardOptions): UseSearchKeyboardReturn {\n\tconst [activeIndex, setActiveIndex] = React.useState(-1);\n\n\t// Reset active index when SearchView closes or query changes.\n\t// Done during render phase to prevent double-renders on every keystroke,\n\t// which would otherwise cause severe layout thrashing.\n\tconst resetKeyRef = React.useRef(`${active}:${query}`);\n\tconst currentKey = `${active}:${query}`;\n\tif (resetKeyRef.current !== currentKey) {\n\t\tresetKeyRef.current = currentKey;\n\t\tsetActiveIndex(-1);\n\t}\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent) => {\n\t\t\tif (!active) return;\n\n\t\t\tswitch (e.key) {\n\t\t\t\tcase \"ArrowDown\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetActiveIndex((i) => (i < itemCount - 1 ? i + 1 : i));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"ArrowUp\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetActiveIndex((i) => (i > -1 ? i - 1 : -1));\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"Enter\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tif (activeIndex >= 0 && onSelectSuggestion) {\n\t\t\t\t\t\tonSelectSuggestion(activeIndex);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tonSearch(query);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"Escape\": {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tonActiveChange(false);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tactive,\n\t\t\tactiveIndex,\n\t\t\titemCount,\n\t\t\tonActiveChange,\n\t\t\tonSearch,\n\t\t\tonSelectSuggestion,\n\t\t\tquery,\n\t\t],\n\t);\n\n\tconst resetActiveIndex = React.useCallback(() => {\n\t\tsetActiveIndex(-1);\n\t}, []);\n\n\treturn { activeIndex, handleKeyDown, resetActiveIndex };\n}\n","/**\n * @file search.tokens.ts\n * MD3 Expressive Search — Design tokens ported from:\n *   - SearchBarTokens.kt (v0_210)\n *   - SearchViewTokens.kt (v0_210)\n *\n * All dimensional values are in px (1dp = 1px on web).\n * Colors reference CSS custom properties — do NOT hardcode hex.\n * @see docs/m3/search/SearchBarTokens.kt\n * @see docs/m3/search/SearchViewTokens.kt\n */\nimport {\n\tDEFAULT_SPATIAL_SPRING,\n\tFAST_SPATIAL_SPRING,\n\tSLOW_SPATIAL_SPRING,\n} from \"../shared/motion-tokens\";\n// ─── Dimensional Tokens ───────────────────────────────────────────────────────\n\n/**\n * Height and shape tokens for Search variants.\n * Maps directly from MD3 Kotlin token files.\n */\nexport const SearchTokens = {\n\t// ── Heights ─────────────────────────────────────────────────────────────\n\theights: {\n\t\t/** SearchBarTokens.ContainerHeight = 56dp */\n\t\tbar: 56,\n\t\t/** SearchViewTokens.DockedHeaderContainerHeight = 56dp */\n\t\tdockedHeader: 56,\n\t\t/** SearchViewTokens.FullScreenHeaderContainerHeight = 72dp */\n\t\tfullScreenHeader: 72,\n\t},\n\n\t// ── Avatar ────────────────────────────────────────────────────────────\n\t/** SearchBarTokens.AvatarSize = 30dp */\n\tavatarSize: 30,\n\n\t// ── Icon ───────────────────────────────────────────────────────────────\n\t/** Standard icon size for leading/trailing icons. */\n\ticonSize: 20,\n\t/** Touch target for interactive icons per MD3 a11y spec. */\n\ticonTouchTarget: 48,\n\n\t// ── Gap ────────────────────────────────────────────────────────────────\n\t/** Gap between SearchBar and results list when hasGap=true. */\n\tdropdownGap: 2,\n} as const;\n\n// ─── Color Tokens ─────────────────────────────────────────────────────────────\n\n/**\n * CSS custom property references for Search colors.\n * Maps to --md-sys-color-* tokens in the MD3 theme system.\n *\n * SearchBarTokens.kt:\n * - ContainerColor → SurfaceContainerHigh\n * - LeadingIconColor → OnSurface\n * - TrailingIconColor → OnSurfaceVariant\n * - InputTextColor → OnSurface\n * - SupportingTextColor → OnSurfaceVariant (placeholder)\n *\n * SearchViewTokens.kt:\n * - ContainerColor → SurfaceContainerHigh\n * - DividerColor → Outline\n */\nexport const SEARCH_COLORS = {\n\t/** SearchBarTokens.ContainerColor → surface-container-high */\n\tcontainer: \"var(--md-sys-color-surface-container-high)\",\n\t/** SearchBarTokens.LeadingIconColor → on-surface */\n\tleadingIcon: \"var(--md-sys-color-on-surface)\",\n\t/** SearchBarTokens.TrailingIconColor → on-surface-variant */\n\ttrailingIcon: \"var(--md-sys-color-on-surface-variant)\",\n\t/** SearchBarTokens.InputTextColor → on-surface */\n\tinputText: \"var(--md-sys-color-on-surface)\",\n\t/** SearchBarTokens.SupportingTextColor → on-surface-variant (placeholder) */\n\tsupportingText: \"var(--md-sys-color-on-surface-variant)\",\n\t/** SearchViewTokens.DividerColor → outline */\n\tdivider: \"var(--md-sys-color-outline)\",\n\t/** Focus indicator → secondary */\n\tfocusIndicator: \"var(--md-sys-color-secondary)\",\n\t/** State layer overlay for interactive hover/press */\n\tstateLayer: \"var(--md-sys-color-on-surface)\",\n} as const;\n\n/**\n * Elevation utility classes for Search containers.\n * SearchBarTokens.ContainerElevation = Level3\n * SearchViewTokens.ContainerElevation = Level3\n */\nexport const SEARCH_ELEVATION = {\n\tlevel3: \"elevation-3\",\n} as const;\n\n// ─── Typography Tokens ────────────────────────────────────────────────────────\n\n/**\n * SearchBarTokens.InputTextFont = BodyLarge (16sp / 24sp line-height).\n * SearchBarTokens.SupportingTextFont = BodyLarge.\n */\nexport const SEARCH_TYPOGRAPHY = {\n\t/** BodyLarge — used for input text and placeholder. */\n\tbodyLarge: \"text-[16px] leading-6 font-normal tracking-[0.5px]\",\n} as const;\n\nexport const SEARCH_BAR_EXPAND_SPRING = FAST_SPATIAL_SPRING;\n\nexport const SEARCH_DOCKED_REVEAL_SPRING = DEFAULT_SPATIAL_SPRING;\n\nexport const SEARCH_FULLSCREEN_SPRING = SLOW_SPATIAL_SPRING;\n\nexport const SEARCH_BAR_EXIT_SPRING = FAST_SPATIAL_SPRING;\n","/**\n * @file animated-placeholder.tsx\n * MD3 Expressive Search — Animated placeholder overlay.\n *\n * Replaces the native `::placeholder` with a GPU-accelerated `translateX`\n * animation so the placeholder text can smoothly slide from its alignment\n * position (center / right) to left when the search input is focused.\n *\n * Implementation notes:\n * - Only `transform: translateX` is animated → no layout triggers, no paint.\n * - Container width is measured once via `useLayoutEffect` (before paint) to\n *   avoid a first-render flash, then kept fresh via `ResizeObserver`.\n * - xOffset is stored in `useState` so Framer Motion picks up changes and\n *   re-animates smoothly on container resize.\n * - The span is never unmounted — only opacity-toggled — to preserve the\n *   measurement ref between renders.\n */\n\nimport { m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SEARCH_COLORS, SEARCH_TYPOGRAPHY } from \"./search.tokens\";\n\n/** Spring tuned to match MD3 Standard Decelerate curve. */\nconst PLACEHOLDER_SPRING = {\n\ttype: \"spring\" as const,\n\tstiffness: 350,\n\tdamping: 30,\n\tmass: 0.8,\n};\n\ninterface AnimatedPlaceholderProps {\n\t/** Placeholder text to display. */\n\ttext: string;\n\t/** Alignment of the placeholder when idle (not focused). @default \"left\" */\n\ttextAlign: \"left\" | \"center\" | \"right\";\n\t/**\n\t * Whether the placeholder should be visible.\n\t * Pass `!query` — hide when the user has typed something.\n\t */\n\tvisible: boolean;\n\t/**\n\t * Whether the search is in an active/focused state.\n\t * When `true`, the placeholder snaps to `left` regardless of `textAlign`.\n\t */\n\tfocused: boolean;\n\t/**\n\t * The `<input>` element that this component wraps.\n\t * It should have `w-full` instead of `flex-1` since this wrapper\n\t * takes over the `flex-1` role in the parent flex layout.\n\t */\n\tchildren: React.ReactNode;\n\t/** Extra className forwarded to the wrapper div. */\n\tclassName?: string;\n}\n\n/**\n * Wraps a search `<input>` with an animated placeholder overlay.\n *\n * The wrapper div occupies `flex-1` so it fits seamlessly in the\n * horizontal flex layout used by search bar headers. The children\n * (the `<input>`) should use `w-full` to fill the wrapper.\n *\n * Accessibility: `aria-label` on the `<input>` carries the placeholder\n * text for screen readers; this span is `aria-hidden=\"true\"`.\n */\nexport function AnimatedPlaceholder({\n\ttext,\n\ttextAlign,\n\tvisible,\n\tfocused,\n\tchildren,\n\tclassName,\n}: AnimatedPlaceholderProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst containerRef = React.useRef<HTMLDivElement>(null);\n\tconst spanRef = React.useRef<HTMLSpanElement | null>(null);\n\n\t// Offset in pixels from left when idle. 0 means no animation (left-aligned).\n\tconst [xOffset, setXOffset] = React.useState(0);\n\n\tconst recalculate = React.useCallback(() => {\n\t\tconst container = containerRef.current;\n\t\tconst span = spanRef.current;\n\t\tif (!container || !span || textAlign === \"left\") {\n\t\t\tsetXOffset(0);\n\t\t\treturn;\n\t\t}\n\t\tconst containerWidth = container.offsetWidth;\n\t\tconst textWidth = span.offsetWidth;\n\t\tif (textAlign === \"center\") {\n\t\t\tsetXOffset(Math.max(0, (containerWidth - textWidth) / 2));\n\t\t} else {\n\t\t\t// right\n\t\t\tsetXOffset(Math.max(0, containerWidth - textWidth));\n\t\t}\n\t}, [textAlign]);\n\n\t// Measure synchronously before first paint to prevent a position flash.\n\tReact.useLayoutEffect(() => {\n\t\trecalculate();\n\t}, [recalculate]);\n\n\t// Keep measurement fresh when the container is resized.\n\tReact.useEffect(() => {\n\t\tconst container = containerRef.current;\n\t\tif (!container) return;\n\t\tconst observer = new ResizeObserver(recalculate);\n\t\tobserver.observe(container);\n\t\treturn () => observer.disconnect();\n\t}, [recalculate]);\n\n\t// When focused or no longer visible (user typed), snap to left (x=0).\n\tconst targetX = focused || !visible ? 0 : xOffset;\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"relative flex-1 min-w-0\", className)}\n\t\t>\n\t\t\t{children}\n\n\t\t\t{/* Animated placeholder — decorative only, aria-hidden */}\n\t\t\t<m.span\n\t\t\t\tref={(el) => {\n\t\t\t\t\tspanRef.current = el;\n\t\t\t\t}}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"pointer-events-none absolute inset-y-0 left-0\",\n\t\t\t\t\t\"flex items-center whitespace-nowrap select-none\",\n\t\t\t\t\tSEARCH_TYPOGRAPHY.bodyLarge,\n\t\t\t\t)}\n\t\t\t\tstyle={{ color: SEARCH_COLORS.supportingText }}\n\t\t\t\tanimate={{\n\t\t\t\t\tx: targetX,\n\t\t\t\t\topacity: visible ? 1 : 0,\n\t\t\t\t}}\n\t\t\t\ttransition={shouldReduceMotion ? { duration: 0 } : PLACEHOLDER_SPRING}\n\t\t\t>\n\t\t\t\t{text}\n\t\t\t</m.span>\n\t\t</div>\n\t);\n}\n","/**\n * @file search-bar.tsx\n * MD3 Expressive SearchBar — Collapsed state.\n *\n * Renders a pill-shaped search bar (CornerFull, h-56px).\n * When focused/clicked → calls onActiveChange(true) to open SearchView.\n *\n * Option B (MD3 morphing): SearchBar is wrapped in its own AnimatePresence\n * with mode=\"popLayout\". When SearchView opens, SearchBar plays an exit\n * animation (opacity → 0, scale → 0.95) before unmounting, releasing the\n * shared layoutId so SearchView can claim it and morph from the same origin.\n *\n * Role: combobox (WAI-ARIA Search Combobox pattern).\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { StateLayer } from \"../shared/state-layer\";\nimport { AnimatedPlaceholder } from \"./animated-placeholder\";\nimport {\n\tSEARCH_BAR_EXIT_SPRING,\n\tSEARCH_BAR_EXPAND_SPRING,\n\tSEARCH_COLORS,\n\tSEARCH_ELEVATION,\n\tSearchTokens,\n} from \"./search.tokens\";\nimport type { SearchInternalProps, SearchProps } from \"./search.types\";\n\n/** Default search icon (Material Symbols). */\nfunction DefaultSearchIcon() {\n\treturn (\n\t\t<span\n\t\t\tclassName=\"material-symbols-rounded select-none leading-none\"\n\t\t\tstyle={{ fontSize: SearchTokens.iconSize }}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\tsearch\n\t\t</span>\n\t);\n}\n\ntype SearchBarProps = Pick<\n\tSearchProps,\n\t| \"query\"\n\t| \"onQueryChange\"\n\t| \"onSearch\"\n\t| \"active\"\n\t| \"onActiveChange\"\n\t| \"leadingIcon\"\n\t| \"trailingIcon\"\n\t| \"avatar\"\n\t| \"placeholder\"\n\t| \"textAlign\"\n\t| \"className\"\n\t| \"aria-label\"\n> &\n\tSearchInternalProps & {\n\t\t/** KeyDown handler from useSearchKeyboard. */\n\t\tonKeyDown: (e: React.KeyboardEvent) => void;\n\t\t/** Currently highlighted suggestion index (-1 = none). */\n\t\tactiveIndex: number;\n\t};\n\n/**\n * SearchBar — collapsed state of the MD3 Search component.\n *\n * Uses Framer Motion `layout` + shared `layoutId` to morph into\n * SearchView when active. Wrapped in AnimatePresence with mode=\"popLayout\"\n * so it exits (fades/scales out) before SearchView claims the layoutId.\n */\nexport function SearchBar({\n\tquery,\n\tonQueryChange,\n\tonSearch,\n\tactive,\n\tonActiveChange,\n\tleadingIcon,\n\ttrailingIcon,\n\tavatar,\n\tplaceholder = \"Search\",\n\ttextAlign = \"left\",\n\tclassName,\n\t\"aria-label\": ariaLabel = \"Search\",\n\tsearchId,\n\tlistboxId,\n\tonKeyDown,\n\tactiveIndex,\n}: SearchBarProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\n\tconst prevActiveRef = React.useRef(active);\n\tconst isRestoringFocusRef = React.useRef(false);\n\n\tconst [isHovered, setIsHovered] = React.useState(false);\n\tconst [isPressed, setIsPressed] = React.useState(false);\n\tconst [isFocused, setIsFocused] = React.useState(false);\n\n\t// When SearchView opens, focus moves to SearchView's input.\n\t// When SearchView closes (true → false), restore focus here.\n\tReact.useEffect(() => {\n\t\tlet rafId: number;\n\t\tif (prevActiveRef.current === true && active === false) {\n\t\t\tisRestoringFocusRef.current = true;\n\t\t\tinputRef.current?.focus();\n\t\t\t// Reset after a tick to allow the focus event to fire\n\t\t\trafId = requestAnimationFrame(() => {\n\t\t\t\tisRestoringFocusRef.current = false;\n\t\t\t});\n\t\t}\n\t\tprevActiveRef.current = active;\n\t\treturn () => {\n\t\t\tif (rafId) cancelAnimationFrame(rafId);\n\t\t};\n\t}, [active]);\n\n\tconst handleFocus = () => {\n\t\tsetIsFocused(true);\n\t\tif (!active && !isRestoringFocusRef.current) {\n\t\t\tonActiveChange(true);\n\t\t}\n\t};\n\n\tconst handleBlur = () => {\n\t\tsetIsFocused(false);\n\t};\n\n\tconst handleFormSubmit = (e: React.FormEvent) => {\n\t\te.preventDefault();\n\t\tonSearch(query);\n\t};\n\n\t// aria-activedescendant points to the highlighted suggestion\n\tconst activeDescendant =\n\t\tactiveIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined;\n\n\treturn (\n\t\t/*\n\t\t * AnimatePresence mode=\"popLayout\":\n\t\t * When SearchView opens (active=true), SearchBar plays its exit animation\n\t\t * first, then unmounts — releasing the shared layoutId for SearchView to\n\t\t * claim and morph from the pill shape.\n\t\t */\n\t\t<AnimatePresence mode=\"popLayout\">\n\t\t\t{!active && (\n\t\t\t\t<m.div\n\t\t\t\t\tkey={searchId}\n\t\t\t\t\tlayout={!shouldReduceMotion}\n\t\t\t\t\tlayoutId={shouldReduceMotion ? undefined : searchId}\n\t\t\t\t\ttransition={shouldReduceMotion ? undefined : SEARCH_BAR_EXPAND_SPRING}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative group select-none\",\n\t\t\t\t\t\tSEARCH_ELEVATION.level3,\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ height: SearchTokens.heights.bar }}\n\t\t\t\t\tinitial={shouldReduceMotion ? false : { opacity: 0, scale: 0.95 }}\n\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\texit={\n\t\t\t\t\t\tshouldReduceMotion\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: { opacity: 0, scale: 0.95, transition: SEARCH_BAR_EXIT_SPRING }\n\t\t\t\t\t}\n\t\t\t\t\tonPointerEnter={() => setIsHovered(true)}\n\t\t\t\t\tonPointerLeave={() => {\n\t\t\t\t\t\tsetIsHovered(false);\n\t\t\t\t\t\tsetIsPressed(false);\n\t\t\t\t\t}}\n\t\t\t\t\tonPointerDown={() => setIsPressed(true)}\n\t\t\t\t\tonPointerUp={() => setIsPressed(false)}\n\t\t\t\t\tonPointerCancel={() => setIsPressed(false)}\n\t\t\t\t>\n\t\t\t\t\t{/* Background layer — rounded-full per SearchBarTokens.ContainerShape */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute inset-0 rounded-full overflow-hidden\"\n\t\t\t\t\t\tstyle={{ backgroundColor: SEARCH_COLORS.container }}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* StateLayer provides hover (8%) and pressed (12%) interactive feedback */}\n\t\t\t\t\t\t<StateLayer\n\t\t\t\t\t\t\thovered={isHovered}\n\t\t\t\t\t\t\tfocused={isFocused}\n\t\t\t\t\t\t\tpressed={isPressed}\n\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.stateLayer }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* <search> is the semantic element for role=\"search\" */}\n\t\t\t\t\t<search\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\tclassName=\"relative flex h-full items-center gap-2 rounded-full px-4\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<form className=\"contents\" onSubmit={handleFormSubmit}>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"flex shrink-0 items-center justify-center\"\n\t\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.leadingIcon }}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{leadingIcon ?? <DefaultSearchIcon />}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t{/* AnimatedPlaceholder wraps the input to provide a smooth\n\t\t\t\t\t\t\t    translateX animation from textAlign → left on focus. */}\n\t\t\t\t\t\t\t<AnimatedPlaceholder\n\t\t\t\t\t\t\t\ttext={placeholder}\n\t\t\t\t\t\t\t\ttextAlign={textAlign}\n\t\t\t\t\t\t\t\tvisible={!query}\n\t\t\t\t\t\t\t\tfocused={active}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* role=\"combobox\" per WAI-ARIA combobox pattern */}\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\t\tid={searchId}\n\t\t\t\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\t\taria-expanded={active}\n\t\t\t\t\t\t\t\t\taria-controls={listboxId}\n\t\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\t\taria-activedescendant={activeDescendant}\n\t\t\t\t\t\t\t\t\taria-label={placeholder}\n\t\t\t\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"w-full bg-transparent border-none outline-none\",\n\t\t\t\t\t\t\t\t\t\t\"text-[16px] leading-6 font-normal tracking-[0.5px]\",\n\t\t\t\t\t\t\t\t\t\t\"placeholder:text-transparent\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.inputText }}\n\t\t\t\t\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onQueryChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</AnimatedPlaceholder>\n\n\t\t\t\t\t\t\t{(trailingIcon || avatar) && (\n\t\t\t\t\t\t\t\t<div className=\"flex shrink-0 items-center gap-2\">\n\t\t\t\t\t\t\t\t\t{trailingIcon && (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex shrink-0 items-center justify-center\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.trailingIcon }}\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{avatar && (\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tclassName=\"flex shrink-0 items-center justify-center rounded-full overflow-hidden\"\n\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\twidth: SearchTokens.avatarSize,\n\t\t\t\t\t\t\t\t\t\t\t\theight: SearchTokens.avatarSize,\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{avatar}\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</search>\n\t\t\t\t</m.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","import * as React from \"react\";\n\n/**\n * MD3 Expressive Search Context\n * Shared state for the Search orchestrator and its children.\n */\ninterface SearchContextValue {\n\t/** Unique ID for the results listbox, used for aria-controls. */\n\tlistboxId: string;\n\t/** Currently highlighted suggestion index. -1 = none. */\n\tactiveIndex: number;\n}\n\nconst SearchContext = React.createContext<SearchContextValue | null>(null);\n\n/**\n * Provider for Search component state.\n * Internal use only within the library.\n */\nexport function SearchProvider({\n\tchildren,\n\tvalue,\n}: {\n\tchildren: React.ReactNode;\n\tvalue: SearchContextValue;\n}) {\n\treturn (\n\t\t<SearchContext.Provider value={value}>{children}</SearchContext.Provider>\n\t);\n}\n\n/**\n * Hook to access Search state from children (e.g., search items).\n */\nexport function useSearch() {\n\tconst context = React.useContext(SearchContext);\n\tif (!context) {\n\t\t// If used outside Search, return defaults instead of throwing to avoid crashing simple use cases\n\t\treturn { listboxId: \"\", activeIndex: -1 };\n\t}\n\treturn context;\n}\n","import { useEffect, useRef } from \"react\";\n\n/**\n * Hook to detect clicks outside of a specified element.\n *\n * @param handler - Callback function to execute when a click outside occurs.\n * @param enabled - Whether the listener is active.\n * @returns A RefObject to be attached to the target element.\n */\nexport function useClickOutside<T extends HTMLElement>(\n\thandler: () => void,\n\tenabled = true,\n) {\n\tconst ref = useRef<T>(null);\n\n\tuseEffect(() => {\n\t\tif (!enabled) return;\n\n\t\tconst listener = (event: MouseEvent | TouchEvent) => {\n\t\t\tconst el = ref.current;\n\t\t\tif (!el || el.contains(event.target as Node)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandler();\n\t\t};\n\n\t\tdocument.addEventListener(\"mousedown\", listener);\n\t\tdocument.addEventListener(\"touchstart\", listener);\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousedown\", listener);\n\t\t\tdocument.removeEventListener(\"touchstart\", listener);\n\t\t};\n\t}, [handler, enabled]);\n\n\treturn ref;\n}\n","import * as React from \"react\";\n\n/**\n * Focuses `inputRef` when `active` becomes true, using a double-rAF\n * to wait for Framer Motion's layout animation to finish painting.\n */\nexport function useSearchViewFocus(\n\tinputRef: React.RefObject<HTMLInputElement | null>,\n\tactive: boolean,\n): void {\n\tReact.useEffect(() => {\n\t\tif (!active) return;\n\t\tlet raf2: number;\n\t\tconst raf1 = requestAnimationFrame(() => {\n\t\t\traf2 = requestAnimationFrame(() => {\n\t\t\t\tinputRef.current?.focus();\n\t\t\t});\n\t\t});\n\t\treturn () => {\n\t\t\tcancelAnimationFrame(raf1);\n\t\t\tif (raf2) cancelAnimationFrame(raf2);\n\t\t};\n\t}, [active, inputRef]);\n}\n","import { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport type * as React from \"react\";\nimport { IconButton } from \"../buttons/icon-button\";\nimport { SEARCH_COLORS, SearchTokens } from \"./search.tokens\";\n\ninterface TrailingActionProps {\n\tquery: string;\n\ttrailingIcon?: React.ReactNode;\n\tavatar?: React.ReactNode;\n\tonClear: () => void;\n}\n\n/** Clear button when query is non-empty, otherwise flexible trailing icon + avatar slots. */\nexport function TrailingAction({\n\tquery,\n\ttrailingIcon,\n\tavatar,\n\tonClear,\n}: TrailingActionProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\n\treturn (\n\t\t<div className=\"flex shrink-0 items-center gap-2\">\n\t\t\t<AnimatePresence mode=\"wait\" initial={false}>\n\t\t\t\t{query ? (\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tkey=\"clear-action\"\n\t\t\t\t\t\tinitial={shouldReduceMotion ? false : { opacity: 0, scale: 0.8 }}\n\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\texit={shouldReduceMotion ? {} : { opacity: 0, scale: 0.8 }}\n\t\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\t\tclassName=\"flex items-center justify-center\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.trailingIcon }}\n\t\t\t\t\t\t\taria-label=\"Clear search\"\n\t\t\t\t\t\t\tonClick={onClear}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"material-symbols-rounded select-none leading-none\"\n\t\t\t\t\t\t\t\tstyle={{ fontSize: 20 }}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tclose\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</m.div>\n\t\t\t\t) : (\n\t\t\t\t\ttrailingIcon && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"trailing-icon\"\n\t\t\t\t\t\t\tinitial={shouldReduceMotion ? false : { opacity: 0, scale: 0.8 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\t\t\t\t\texit={shouldReduceMotion ? {} : { opacity: 0, scale: 0.8 }}\n\t\t\t\t\t\t\ttransition={{ duration: 0.15 }}\n\t\t\t\t\t\t\tclassName=\"flex shrink-0 items-center justify-center\"\n\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.trailingIcon }}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\n\t\t\t{avatar && (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"flex shrink-0 items-center justify-center rounded-full overflow-hidden\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\twidth: SearchTokens.avatarSize,\n\t\t\t\t\t\theight: SearchTokens.avatarSize,\n\t\t\t\t\t}}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t>\n\t\t\t\t\t{avatar}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","/**\n * @file search-view-docked.tsx\n * MD3 Expressive SearchView — Docked variant.\n *\n * Displays as a popup dropdown below the SearchBar.\n * Recommended for medium and large screens (tablets, desktops).\n *\n * Shape: CornerExtraLarge (rounded-[28px]) per SearchViewTokens.DockedContainerShape.\n * Header height: 56dp per SearchViewTokens.DockedHeaderContainerHeight.\n *\n * Animation (Option B — MD3 morphing):\n * - Shares `layoutId` with SearchBar. After SearchBar exits via its own\n *   AnimatePresence (mode=\"popLayout\"), this view claims the layoutId and\n *   Framer Motion morphs the pill shape → rounded-[28px] container.\n * - Uses mode=\"popLayout\" so SearchBar can re-enter after this exits.\n * - Focus: double-rAF pattern syncs focus with layout animation frame.\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\nimport { cn } from \"../../lib/utils\";\nimport { AnimatedPlaceholder } from \"./animated-placeholder\";\nimport { useSearchViewFocus } from \"./hooks/use-search-view-focus\";\nimport {\n\tSEARCH_COLORS,\n\tSEARCH_DOCKED_REVEAL_SPRING,\n\tSEARCH_ELEVATION,\n\tSearchTokens,\n} from \"./search.tokens\";\nimport type { SearchInternalProps, SearchProps } from \"./search.types\";\nimport { TrailingAction } from \"./trailing-action\";\n\n/** Default search icon (Material Symbols). */\nfunction DefaultSearchIcon() {\n\treturn (\n\t\t<span\n\t\t\tclassName=\"material-symbols-rounded select-none leading-none\"\n\t\t\tstyle={{ fontSize: SearchTokens.iconSize }}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\tsearch\n\t\t</span>\n\t);\n}\n\ntype SearchViewDockedProps = Pick<\n\tSearchProps,\n\t| \"query\"\n\t| \"onQueryChange\"\n\t| \"onSearch\"\n\t| \"active\"\n\t| \"onActiveChange\"\n\t| \"leadingIcon\"\n\t| \"trailingIcon\"\n\t| \"avatar\"\n\t| \"placeholder\"\n\t| \"textAlign\"\n\t| \"styleType\"\n\t| \"hasGap\"\n\t| \"children\"\n\t| \"viewClassName\"\n\t| \"aria-label\"\n> &\n\tSearchInternalProps & {\n\t\tonKeyDown: (e: React.KeyboardEvent) => void;\n\t\tactiveIndex: number;\n\t};\n\nexport function SearchViewDocked({\n\tquery,\n\tonQueryChange,\n\tonSearch,\n\tactive,\n\tonActiveChange,\n\tleadingIcon,\n\ttrailingIcon,\n\tavatar,\n\tplaceholder = \"Search\",\n\ttextAlign = \"left\",\n\tstyleType = \"contained\",\n\thasGap = false,\n\tchildren,\n\tviewClassName,\n\t\"aria-label\": ariaLabel = \"Search\",\n\tsearchId,\n\tlistboxId,\n\tonKeyDown,\n\tactiveIndex,\n}: SearchViewDockedProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\n\tuseSearchViewFocus(inputRef, active);\n\n\tconst dropdownRef = useClickOutside<HTMLDivElement>(() => {\n\t\tonActiveChange(false);\n\t}, active);\n\n\tconst handleFormSubmit = (e: React.FormEvent) => {\n\t\te.preventDefault();\n\t\tonSearch(query);\n\t};\n\n\tconst activeDescendant =\n\t\tactiveIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined;\n\n\treturn (\n\t\t/*\n\t\t * mode=\"popLayout\": when SearchView exits, it plays exit animation first,\n\t\t * then unmounts — freeing the layoutId for SearchBar to re-enter and morph back.\n\t\t */\n\t\t<AnimatePresence mode=\"popLayout\">\n\t\t\t{active && (\n\t\t\t\t<m.div\n\t\t\t\t\tref={dropdownRef}\n\t\t\t\t\tkey={`${searchId}-view`}\n\t\t\t\t\tlayout={!shouldReduceMotion}\n\t\t\t\t\tlayoutId={shouldReduceMotion ? undefined : searchId}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t// DockedContainerShape = CornerExtraLarge = 28dp radius\n\t\t\t\t\t\t\"rounded-[28px] overflow-hidden\",\n\t\t\t\t\t\tSEARCH_ELEVATION.level3,\n\t\t\t\t\t\tviewClassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ backgroundColor: SEARCH_COLORS.container }}\n\t\t\t\t\tinitial={shouldReduceMotion ? {} : { opacity: 0, y: -8 }}\n\t\t\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\t\t\texit={shouldReduceMotion ? {} : { opacity: 0, y: -8 }}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tshouldReduceMotion ? { duration: 0 } : SEARCH_DOCKED_REVEAL_SPRING\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{/* Header row — h-56px per DockedHeaderContainerHeight */}\n\t\t\t\t\t<search\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\tclassName=\"flex items-center gap-2 px-4\"\n\t\t\t\t\t\tstyle={{ height: SearchTokens.heights.dockedHeader }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<form className=\"contents\" onSubmit={handleFormSubmit}>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName=\"flex shrink-0 items-center justify-center\"\n\t\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.leadingIcon }}\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{leadingIcon ?? <DefaultSearchIcon />}\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<AnimatedPlaceholder\n\t\t\t\t\t\t\t\ttext={placeholder}\n\t\t\t\t\t\t\t\ttextAlign={textAlign}\n\t\t\t\t\t\t\t\tvisible={!query}\n\t\t\t\t\t\t\t\tfocused={active}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\t\tid={`${searchId}-view`}\n\t\t\t\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\t\taria-expanded={true}\n\t\t\t\t\t\t\t\t\taria-controls={listboxId}\n\t\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\t\taria-activedescendant={activeDescendant}\n\t\t\t\t\t\t\t\t\taria-label={placeholder}\n\t\t\t\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"w-full bg-transparent border-none outline-none\",\n\t\t\t\t\t\t\t\t\t\t\"text-[16px] leading-6 font-normal tracking-[0.5px]\",\n\t\t\t\t\t\t\t\t\t\t\"placeholder:text-transparent\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.inputText }}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onQueryChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</AnimatedPlaceholder>\n\n\t\t\t\t\t\t\t<TrailingAction\n\t\t\t\t\t\t\t\tquery={query}\n\t\t\t\t\t\t\t\ttrailingIcon={trailingIcon}\n\t\t\t\t\t\t\t\tavatar={avatar}\n\t\t\t\t\t\t\t\tonClear={() => onQueryChange(\"\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</search>\n\n\t\t\t\t\t{/* hasGap: 2dp gap between header and results. */}\n\t\t\t\t\t{hasGap && children && <div className=\"h-0.5\" aria-hidden=\"true\" />}\n\n\t\t\t\t\t{/* Divider for \"divided\" styleType */}\n\t\t\t\t\t{styleType === \"divided\" && children && (\n\t\t\t\t\t\t<hr\n\t\t\t\t\t\t\tclassName=\"border-0 border-t\"\n\t\t\t\t\t\t\tstyle={{ borderColor: SEARCH_COLORS.divider }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Results / Suggestions listbox */}\n\t\t\t\t\t{children && (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tid={listboxId}\n\t\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\t\taria-label={`${ariaLabel} results`}\n\t\t\t\t\t\t\tclassName=\"min-h-[120px]\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</m.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n}\n","/**\n * @file search-view-fullscreen.tsx\n * MD3 Expressive SearchView — FullScreen variant.\n *\n * Renders a full-screen overlay via React Portal.\n * Using Portal avoids z-index stacking context issues and ensures\n * the overlay always covers the entire viewport correctly.\n *\n * Animation (Option B — MD3 morphing):\n * - Shares `layoutId` with SearchBar. After SearchBar exits via its own\n *   AnimatePresence (mode=\"popLayout\"), this view claims the layoutId and\n *   Framer Motion morphs the pill shape → full-screen rect (CornerFull → CornerNone).\n * - mode=\"popLayout\" on this AnimatePresence enables SearchBar to re-enter\n *   after this view exits.\n * - Focus: double-rAF pattern syncs focus with layout animation frame.\n *\n * Header height: 72dp per SearchViewTokens.FullScreenHeaderContainerHeight.\n * ESC key closes the view (handled by useSearchKeyboard).\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../lib/utils\";\nimport { IconButton } from \"../buttons/icon-button\";\nimport { AnimatedPlaceholder } from \"./animated-placeholder\";\nimport { useSearchViewFocus } from \"./hooks/use-search-view-focus\";\nimport {\n\tSEARCH_COLORS,\n\tSEARCH_FULLSCREEN_SPRING,\n\tSearchTokens,\n} from \"./search.tokens\";\nimport type { SearchInternalProps, SearchProps } from \"./search.types\";\nimport { TrailingAction } from \"./trailing-action\";\n\n/** Back arrow icon for FullScreen header. */\nfunction ArrowBackIcon() {\n\treturn (\n\t\t<span\n\t\t\tclassName=\"material-symbols-rounded select-none leading-none\"\n\t\t\tstyle={{ fontSize: 24 }}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\tarrow_back\n\t\t</span>\n\t);\n}\n\ntype SearchViewFullScreenProps = Pick<\n\tSearchProps,\n\t| \"query\"\n\t| \"onQueryChange\"\n\t| \"onSearch\"\n\t| \"active\"\n\t| \"onActiveChange\"\n\t| \"leadingIcon\"\n\t| \"trailingIcon\"\n\t| \"avatar\"\n\t| \"placeholder\"\n\t| \"textAlign\"\n\t| \"styleType\"\n\t| \"children\"\n\t| \"viewClassName\"\n\t| \"aria-label\"\n> &\n\tSearchInternalProps & {\n\t\tonKeyDown: (e: React.KeyboardEvent) => void;\n\t\tactiveIndex: number;\n\t};\n\n/**\n * SearchView FullScreen — full-screen overlay via React Portal.\n *\n * The `layoutId` shared with SearchBar enables Framer Motion to animate\n * the shape morphing from the pill (rounded-full) to a full-screen rect.\n *\n * Contained style: no divider, background preserved.\n * Divided style: HorizontalDivider between header and results.\n */\nexport function SearchViewFullScreen({\n\tquery,\n\tonQueryChange,\n\tonSearch,\n\tactive,\n\tonActiveChange,\n\tleadingIcon,\n\ttrailingIcon,\n\tavatar,\n\tplaceholder = \"Search\",\n\ttextAlign = \"left\",\n\tstyleType = \"contained\",\n\tchildren,\n\tviewClassName,\n\t\"aria-label\": ariaLabel = \"Search\",\n\tsearchId,\n\tlistboxId,\n\tonKeyDown,\n\tactiveIndex,\n}: SearchViewFullScreenProps) {\n\tconst shouldReduceMotion = useReducedMotion();\n\tconst inputRef = React.useRef<HTMLInputElement>(null);\n\n\tuseSearchViewFocus(inputRef, active);\n\n\t// Avoid SSR mismatch — only portal on client.\n\tconst [mounted, setMounted] = React.useState(false);\n\tReact.useEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\tconst handleFormSubmit = (e: React.FormEvent) => {\n\t\te.preventDefault();\n\t\tonSearch(query);\n\t};\n\n\tconst handleEscape = (e: React.KeyboardEvent) => {\n\t\tif (e.key === \"Escape\") {\n\t\t\te.stopPropagation();\n\t\t\tonActiveChange(false);\n\t\t}\n\t};\n\n\tconst activeDescendant =\n\t\tactiveIndex >= 0 ? `${listboxId}-option-${activeIndex}` : undefined;\n\n\tif (!mounted) return null;\n\n\tconst content = (\n\t\t/*\n\t\t * mode=\"popLayout\": when FullScreen exits, it plays exit animation first,\n\t\t * then unmounts — freeing the layoutId for SearchBar to re-enter and morph back\n\t\t * to the pill shape.\n\t\t */\n\t\t<AnimatePresence mode=\"popLayout\">\n\t\t\t{active && (\n\t\t\t\t<m.div\n\t\t\t\t\tkey={`${searchId}-fs`}\n\t\t\t\t\tlayoutId={shouldReduceMotion ? undefined : searchId}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed inset-0 z-50 flex flex-col overflow-hidden\",\n\t\t\t\t\t\t// CornerNone — shape is resolved by Framer Motion layout animation\n\t\t\t\t\t\t\"rounded-none\",\n\t\t\t\t\t\tviewClassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ backgroundColor: SEARCH_COLORS.container }}\n\t\t\t\t\tinitial={shouldReduceMotion ? {} : { opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={shouldReduceMotion ? {} : { opacity: 0 }}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tshouldReduceMotion ? { duration: 0 } : SEARCH_FULLSCREEN_SPRING\n\t\t\t\t\t}\n\t\t\t\t\tonKeyDown={handleEscape}\n\t\t\t\t>\n\t\t\t\t\t{/* Header — h-72px per FullScreenHeaderContainerHeight */}\n\t\t\t\t\t<search\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\tclassName=\"flex shrink-0 items-center gap-2 px-4\"\n\t\t\t\t\t\tstyle={{ height: SearchTokens.heights.fullScreenHeader }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<form className=\"contents\" onSubmit={handleFormSubmit}>\n\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.leadingIcon }}\n\t\t\t\t\t\t\t\taria-label=\"Close search\"\n\t\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\tonActiveChange(false);\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{leadingIcon ?? <ArrowBackIcon />}\n\t\t\t\t\t\t\t</IconButton>\n\n\t\t\t\t\t\t\t<AnimatedPlaceholder\n\t\t\t\t\t\t\t\ttext={placeholder}\n\t\t\t\t\t\t\t\ttextAlign={textAlign}\n\t\t\t\t\t\t\t\tvisible={!query}\n\t\t\t\t\t\t\t\tfocused={active}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\t\tid={`${searchId}-fs`}\n\t\t\t\t\t\t\t\t\ttype=\"search\"\n\t\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\t\taria-expanded={true}\n\t\t\t\t\t\t\t\t\taria-controls={listboxId}\n\t\t\t\t\t\t\t\t\taria-autocomplete=\"list\"\n\t\t\t\t\t\t\t\t\taria-activedescendant={activeDescendant}\n\t\t\t\t\t\t\t\t\taria-label={placeholder}\n\t\t\t\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"w-full bg-transparent border-none outline-none\",\n\t\t\t\t\t\t\t\t\t\t\"text-[16px] leading-6 font-normal tracking-[0.5px]\",\n\t\t\t\t\t\t\t\t\t\t\"placeholder:text-transparent\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ color: SEARCH_COLORS.inputText }}\n\t\t\t\t\t\t\t\t\tonChange={(e) => onQueryChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</AnimatedPlaceholder>\n\n\t\t\t\t\t\t\t<TrailingAction\n\t\t\t\t\t\t\t\tquery={query}\n\t\t\t\t\t\t\t\ttrailingIcon={trailingIcon}\n\t\t\t\t\t\t\t\tavatar={avatar}\n\t\t\t\t\t\t\t\tonClear={() => onQueryChange(\"\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</search>\n\n\t\t\t\t\t{/* Divider for \"divided\" styleType */}\n\t\t\t\t\t{styleType === \"divided\" && (\n\t\t\t\t\t\t<hr\n\t\t\t\t\t\t\tclassName=\"border-0 border-t shrink-0\"\n\t\t\t\t\t\t\tstyle={{ borderColor: SEARCH_COLORS.divider }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Results / Suggestions listbox — scrollable area */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tid={listboxId}\n\t\t\t\t\t\trole=\"listbox\"\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\taria-label={`${ariaLabel} results`}\n\t\t\t\t\t\tclassName=\"flex-1 overflow-y-auto outline-none\"\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\tif (e.target === e.currentTarget) onActiveChange(false);\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\te.target === e.currentTarget &&\n\t\t\t\t\t\t\t\t(e.key === \"Enter\" || e.key === \" \")\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\tonActiveChange(false);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</m.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n\n\treturn createPortal(content, document.body);\n}\n","/**\n * @file search.tsx\n * MD3 Expressive Search — Orchestrator component.\n *\n * Composes SearchBar (collapsed) + SearchView (expanded) into a single\n * developer-facing API. Routes to the correct SearchView variant based on props.\n *\n * Developer usage:\n * ```tsx\n * const [query, setQuery] = useState(\"\");\n * const [active, setActive] = useState(false);\n *\n * <Search\n *   query={query}\n *   onQueryChange={setQuery}\n *   onSearch={(q) => doSearch(q)}\n *   active={active}\n *   onActiveChange={setActive}\n *   variant=\"docked\"\n *   styleType=\"contained\"\n * >\n *   {results.map((r) => (\n *     <div key={r.id} id={`${YOUR_LISTBOX_ID}-option-0`} role=\"option\">\n *       {r.label}\n *     </div>\n *   ))}\n * </Search>\n * ```\n */\n\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport { useSearchKeyboard } from \"./hooks/use-search-keyboard\";\nimport type { SearchProps } from \"./search.types\";\nimport { SearchBar } from \"./search-bar\";\nimport { SearchProvider, useSearch } from \"./search-context\";\nimport { SearchViewDocked } from \"./search-view-docked\";\nimport { SearchViewFullScreen } from \"./search-view-fullscreen\";\n\n/**\n * MD3 Expressive Search — Orchestrator component.\n *\n * Renders a SearchBar (collapsed pill) and the appropriate SearchView\n * (docked popup or fullscreen overlay) based on `variant`.\n *\n * The component is fully controlled:\n * - `active` / `onActiveChange` manage open/close state.\n * - `query` / `onQueryChange` manage input value.\n *\n * Shared `searchId` (React.useId) links SearchBar and SearchView via\n * Framer Motion `layoutId` for seamless animated transitions.\n */\nfunction SearchComponent({\n\tquery,\n\tonQueryChange,\n\tonSearch,\n\tactive,\n\tonActiveChange,\n\tvariant = \"docked\",\n\tstyleType = \"contained\",\n\thasGap = false,\n\tleadingIcon,\n\ttrailingIcon,\n\tavatar,\n\tplaceholder = \"Search\",\n\ttextAlign = \"left\",\n\tchildren,\n\tid,\n\t\"aria-label\": ariaLabel = \"Search\",\n\tclassName,\n\tviewClassName,\n}: SearchProps) {\n\tconst generatedId = React.useId();\n\tconst searchId = id ?? generatedId;\n\tconst listboxId = `${searchId}-listbox`;\n\n\tconst itemCount = React.Children.count(children);\n\n\tconst { activeIndex, handleKeyDown } = useSearchKeyboard({\n\t\tactive,\n\t\tonActiveChange,\n\t\tonSearch,\n\t\tquery,\n\t\titemCount,\n\t});\n\n\tconst sharedProps = {\n\t\tquery,\n\t\tonQueryChange,\n\t\tonSearch,\n\t\tactive,\n\t\tonActiveChange,\n\t\tleadingIcon,\n\t\ttrailingIcon,\n\t\tavatar,\n\t\tplaceholder,\n\t\ttextAlign,\n\t\t\"aria-label\": ariaLabel,\n\t\tsearchId,\n\t\tlistboxId,\n\t\tonKeyDown: handleKeyDown,\n\t\tactiveIndex,\n\t} as const;\n\n\treturn (\n\t\t<SearchProvider value={{ activeIndex, listboxId }}>\n\t\t\t<m.div className={className} style={{ minHeight: 56 }}>\n\t\t\t\t<SearchBar {...sharedProps} />\n\t\t\t\t{variant === \"fullscreen\" ? (\n\t\t\t\t\t<SearchViewFullScreen\n\t\t\t\t\t\t{...sharedProps}\n\t\t\t\t\t\tstyleType={styleType}\n\t\t\t\t\t\tviewClassName={viewClassName}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SearchViewFullScreen>\n\t\t\t\t) : (\n\t\t\t\t\t<SearchViewDocked\n\t\t\t\t\t\t{...sharedProps}\n\t\t\t\t\t\tstyleType={styleType}\n\t\t\t\t\t\thasGap={hasGap}\n\t\t\t\t\t\tviewClassName={viewClassName}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</SearchViewDocked>\n\t\t\t\t)}\n\t\t\t</m.div>\n\t\t</SearchProvider>\n\t);\n}\n\n/** MD3 Expressive Search component with `Search.useSearch` context accessor. */\nexport const Search = Object.assign(SearchComponent, { useSearch });\n","import * as React from \"react\";\n\nexport interface UseVirtualListOptions {\n\t/** Initial and increment batch size for rendering items. Default: 50 */\n\tbatchSize?: number;\n\t/** Root margin for IntersectionObserver to trigger pre-fetching next batch. Default: \"100px\" */\n\trootMargin?: string;\n\t/** The element used as the viewport for checking visibility of the target. Default: null (browser viewport) */\n\troot?: Element | Document | null;\n}\n\nexport interface UseVirtualListReturn<T> {\n\t/** Slice of items currently visible / mounted in DOM */\n\tvisibleItems: T[];\n\t/** True if there are remaining items not yet mounted */\n\thasMore: boolean;\n\t/** Ref to attach to the sentinel bottom element */\n\tsentinelRef: React.RefObject<HTMLDivElement | null>;\n\t/** Reset visible items count back to batchSize */\n\treset: () => void;\n\t/** Current number of visible items */\n\tvisibleCount: number;\n}\n\n/**\n * Lightweight slice-based progressive virtualization hook using IntersectionObserver.\n * Zero external dependencies. Ideal for menus, dropdowns, and popup lists.\n */\nexport function useVirtualList<T>(\n\titems: T[],\n\toptions: UseVirtualListOptions = {},\n): UseVirtualListReturn<T> {\n\tconst { batchSize = 50, rootMargin = \"100px\", root = null } = options;\n\tconst [visibleCount, setVisibleCount] = React.useState(batchSize);\n\tconst sentinelRef = React.useRef<HTMLDivElement | null>(null);\n\n\t// Reset visibleCount when items array changes or is reset\n\tReact.useEffect(() => {\n\t\tvoid items;\n\t\tsetVisibleCount(batchSize);\n\t}, [items, batchSize]);\n\n\tconst hasMore = visibleCount < items.length;\n\n\tReact.useEffect(() => {\n\t\tconst target = sentinelRef.current;\n\t\tif (!target || !hasMore) return;\n\n\t\tif (typeof IntersectionObserver === \"undefined\") {\n\t\t\tsetVisibleCount(items.length);\n\t\t\treturn;\n\t\t}\n\n\t\tconst observer = new IntersectionObserver(\n\t\t\t(entries) => {\n\t\t\t\tconst [entry] = entries;\n\t\t\t\tif (entry?.isIntersecting) {\n\t\t\t\t\tsetVisibleCount((prev) => Math.min(prev + batchSize, items.length));\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\troot: root ?? null,\n\t\t\t\trootMargin,\n\t\t\t},\n\t\t);\n\n\t\tobserver.observe(target);\n\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [hasMore, batchSize, items.length, rootMargin, root]);\n\n\tconst visibleItems = React.useMemo(\n\t\t() => items.slice(0, visibleCount),\n\t\t[items, visibleCount],\n\t);\n\n\tconst reset = React.useCallback(() => {\n\t\tsetVisibleCount(batchSize);\n\t}, [batchSize]);\n\n\treturn {\n\t\tvisibleItems,\n\t\thasMore,\n\t\tsentinelRef,\n\t\treset,\n\t\tvisibleCount,\n\t};\n}\n","import * as React from \"react\";\n\nexport interface ToolbarContextValue {\n\torientation: \"horizontal\" | \"vertical\";\n\titemClassName?: string;\n}\n\nexport const ToolbarContext = React.createContext<ToolbarContextValue | null>(\n\tnull,\n);\n\nexport function useToolbarContext() {\n\treturn React.useContext(ToolbarContext);\n}\n","/**\n * @file text-field.tokens.ts\n * MD3 design token mapping for the TextField component.\n *\n * All color values reference CSS custom properties defined by the MD3 theme.\n * Do NOT use raw hex values — always use CSS variables.\n *\n * @see https://m3.material.io/components/text-fields/specs\n */\n\n// ─── Color Tokens ────────────────────────────────────────────────────────────\n\nexport const TF_COLORS = {\n\t/** Filled container background */\n\tfilledBg: \"var(--md-sys-color-surface-container-highest)\",\n\t/** Input text color */\n\tinputText: \"var(--md-sys-color-on-surface)\",\n\t/** Label (unfloated) + icons + prefix/suffix + supporting text */\n\tonSurfaceVariant: \"var(--md-sys-color-on-surface-variant)\",\n\t/** Focused active indicator / outline, floated label */\n\tprimary: \"var(--md-sys-color-primary)\",\n\t/** Error indicator / outline / label / icon / supporting text */\n\terror: \"var(--md-sys-color-error)\",\n\t/** Outlined border (enabled) */\n\toutline: \"var(--md-sys-color-outline)\",\n\t/** Transparent */\n\ttransparent: \"transparent\",\n} as const;\n\n// ─── Size Tokens ──────────────────────────────────────────────────────────────\n\nexport const TF_SIZE = {\n\t/** Container height — normal */\n\theight: 56,\n\t/** Container height — dense variant */\n\tdenseHeight: 48,\n\t/** Active indicator height — enabled */\n\tindicatorThin: 1,\n\t/** Active indicator height — focused */\n\tindicatorThick: 2,\n\t/** Outline stroke width — enabled */\n\toutlineThin: 1,\n\t/** Outline stroke width — focused */\n\toutlineThick: 2,\n\t/** Corner radius — all variants */\n\tcornerRadius: 4,\n\t/** Leading/Trailing icon size */\n\ticonSize: 24,\n\t/** Padding inline start (no leading icon) */\n\tpaddingStart: 16,\n\t/** Padding inline start (with leading icon) */\n\tpaddingStartWithIcon: 12,\n\t/** Padding inline end */\n\tpaddingEnd: 16,\n\t/** Padding inline end (with trailing icon) */\n\tpaddingEndWithIcon: 12,\n\t/** Notch extra padding per side on outlined label gap */\n\tnotchPadding: 4,\n} as const;\n\n// ─── Typography Tokens ────────────────────────────────────────────────────────\n\nexport const TF_TYPOGRAPHY = {\n\t/** Body Large — input text, unfloated label */\n\tbodyLargePx: 16,\n\t/** Body Small — floated label, supporting text, counter */\n\tbodySmallPx: 12,\n\t/** Scale ratio when label floats: 12/16 = 0.75 */\n\tlabelScaleRatio: 12 / 16,\n} as const;\n\n// ─── Tailwind Class Snippets ──────────────────────────────────────────────────\n\n/**\n * Tailwind utility classes for key TextField elements.\n * Use via cn() — do NOT use these as standalone strings without merging.\n */\nexport const TF_CLASSES = {\n\t// Container\n\tfilledContainer:\n\t\t\"bg-[var(--md-sys-color-surface-container-highest)] rounded-tl-[4px] rounded-tr-[4px] rounded-bl-none rounded-br-none\",\n\toutlinedContainer: \"bg-transparent rounded-[4px]\",\n\n\t// Input\n\tinput:\n\t\t\"bg-transparent outline-none w-full text-base text-[var(--md-sys-color-on-surface)] caret-[var(--md-sys-color-primary)] placeholder:text-[var(--md-sys-color-on-surface-variant)]\",\n\tinputNoSpinner:\n\t\t\"[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\",\n\n\t// States\n\tdisabled: \"opacity-[0.38] pointer-events-none cursor-not-allowed\",\n\n\t// Supporting text\n\tsupportingText: \"text-xs text-[var(--md-sys-color-on-surface-variant)] px-4\",\n\terrorText: \"text-xs text-[var(--md-sys-color-error)] px-4\",\n\n\t// Prefix / Suffix\n\tprefixSuffix:\n\t\t\"text-base text-[var(--md-sys-color-on-surface-variant)] select-none shrink-0\",\n\n\t// State layer (hover)\n\tstateLayer:\n\t\t\"absolute inset-0 bg-[var(--md-sys-color-on-surface)] opacity-0 transition-opacity duration-150 pointer-events-none rounded-[inherit]\",\n} as const;\n","/**\n * @file active-indicator.tsx\n * Animated bottom border line for the MD3 Filled TextField.\n * Expands height from 1px → 2px and color changes on focus.\n */\n\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_INDICATOR_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS, TF_SIZE } from \"../text-field.tokens\";\n\nexport interface ActiveIndicatorProps {\n\tisFocused: boolean;\n\tisError: boolean;\n\tisDisabled: boolean;\n\tisHovered: boolean;\n\tprefersReduced: boolean;\n}\n\n/**\n * MD3 Active Indicator — the bottom border line for Filled TextField.\n *\n * Animates:\n * - `height`: 1px (enabled) → 2px (focused)\n * - `backgroundColor`: on-surface-variant → primary (focused) → error\n * - `scaleX`: 0 → 1 expanding from center on focus in\n *\n * @see https://m3.material.io/components/text-fields/specs#filled-text-field\n */\nexport const ActiveIndicator = React.memo(function ActiveIndicator({\n\tisFocused,\n\tisError,\n\tisDisabled,\n\tisHovered,\n\tprefersReduced,\n}: ActiveIndicatorProps) {\n\tconst duration = prefersReduced ? 0 : MD3_INDICATOR_DURATION;\n\tconst ease = MD3_STANDARD_EASING;\n\n\tconst height =\n\t\tisFocused || isError ? TF_SIZE.indicatorThick : TF_SIZE.indicatorThin;\n\n\tlet backgroundColor: string;\n\tif (isError) {\n\t\tbackgroundColor = TF_COLORS.error;\n\t} else if (isFocused) {\n\t\tbackgroundColor = TF_COLORS.primary;\n\t} else if (isHovered && !isDisabled) {\n\t\tbackgroundColor = TF_COLORS.inputText;\n\t} else {\n\t\tbackgroundColor = TF_COLORS.onSurfaceVariant;\n\t}\n\n\treturn (\n\t\t<m.div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute bottom-0 left-0 right-0 origin-center\"\n\t\t\tanimate={{ height, backgroundColor }}\n\t\t\ttransition={{ duration, ease }}\n\t\t/>\n\t);\n});\n\nActiveIndicator.displayName = \"ActiveIndicator\";\n","/**\n * @file floating-label.tsx\n * Animated floating label for MD3 TextField.\n * Animates between inline (body large) and floated (body small) positions.\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport {\n\tMD3_LABEL_FLOAT_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS, TF_TYPOGRAPHY } from \"../text-field.tokens\";\n\nexport interface FloatingLabelProps {\n\t/** The label text content. */\n\ttext: string;\n\t/** Whether the label is in the floated (small) position. */\n\tisFloated: boolean;\n\t/** Whether the field is currently focused. */\n\tisFocused: boolean;\n\t/** Whether the field is in error state. */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n\t/** 'filled' or 'outlined' — determines vertical y offset. */\n\tvariant: \"filled\" | \"outlined\";\n\t/** Container height in px (56 normal, 48 dense). */\n\tcontainerHeight: number;\n\t/** Whether to skip animations (prefers-reduced-motion). */\n\tprefersReduced: boolean;\n\t/** Whether the required asterisk should be shown. */\n\tshowAsterisk: boolean;\n\t/** ID of the label element, for associating with a containing element. */\n\thtmlFor?: string;\n\t/** Ref callback so the parent can measure label width for the outlined notch. */\n\tlabelRef?: React.Ref<HTMLSpanElement>;\n\t/** Whether there is a leading icon. */\n\thasLeading?: boolean;\n}\n\n/**\n * Calculates the y-translation (in px) for the floated label position.\n *\n * For FILLED: move up from vertical center to the top inline padding area.\n * For OUTLINED: move up so the label sits on the top border line.\n *\n * The label starts at y=0 (vertically centered by flex parent).\n * When floated, it moves upward by `offset` pixels.\n */\nfunction getFloatedY(\n\tvariant: \"filled\" | \"outlined\",\n\tcontainerHeight: number,\n): number {\n\t// Label body-large line height ≈ 24px (16px * 1.5)\n\t// Label body-small line height ≈ 16px (12px * 1.33)\n\t// Floated container top-padding: 8px from top of container\n\tconst labelSmallHeight = 16;\n\tconst paddingTop = 8;\n\n\tif (variant === \"filled\") {\n\t\t// Center of container → top-padding area\n\t\t// Center is at containerHeight/2, floated center is at paddingTop + labelSmallHeight/2\n\t\tconst floatedCenter = paddingTop + labelSmallHeight / 2;\n\t\tconst unfloatedCenter = containerHeight / 2;\n\t\treturn -(unfloatedCenter - floatedCenter);\n\t}\n\t// Outlined: label sits on the border line (y = 0 relative to container top)\n\t// We move up by half the container height to reach the border\n\treturn -(containerHeight / 2);\n}\n\n/**\n * Returns the label color based on current state.\n */\nfunction getLabelColor(\n\tisFloated: boolean,\n\tisFocused: boolean,\n\tisError: boolean,\n\tisDisabled: boolean,\n): string {\n\tif (isDisabled) return TF_COLORS.onSurfaceVariant;\n\tif (isError) return TF_COLORS.error;\n\tif (isFloated && isFocused) return TF_COLORS.primary;\n\treturn TF_COLORS.onSurfaceVariant;\n}\n\n/**\n * MD3 Expressive Floating Label.\n *\n * Animates y-position, scale, and color when the label floats.\n * Uses `transformOrigin: 'left center'` so scaling anchors at the start.\n *\n * @accessibility\n * Rendered as a `<label>` with `htmlFor` linking to the `<input>`.\n * When floated, visual size changes but the semantic label is unchanged.\n */\nexport const FloatingLabel = React.memo(function FloatingLabel({\n\ttext,\n\tisFloated,\n\tisFocused,\n\tisError,\n\tisDisabled,\n\tvariant,\n\tcontainerHeight,\n\tprefersReduced,\n\tshowAsterisk,\n\thtmlFor,\n\tlabelRef,\n\thasLeading = false,\n}: FloatingLabelProps) {\n\tconst duration = prefersReduced ? 0 : MD3_LABEL_FLOAT_DURATION;\n\tconst ease = MD3_STANDARD_EASING;\n\n\tconst y = isFloated ? getFloatedY(variant, containerHeight) : 0;\n\tconst x = variant === \"outlined\" && isFloated && hasLeading ? -36 : 0;\n\tconst scale = isFloated ? TF_TYPOGRAPHY.labelScaleRatio : 1;\n\tconst color = getLabelColor(isFloated, isFocused, isError, isDisabled);\n\n\treturn (\n\t\t<m.label\n\t\t\thtmlFor={htmlFor}\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute pointer-events-none select-none origin-[left_center] leading-6 text-base whitespace-nowrap\",\n\t\t\t\t\"px-1 -mx-1\", // Clear the notch gap and keep text aligned\n\t\t\t\t\"left-4\",\n\t\t\t\tisDisabled && \"opacity-[0.38]\",\n\t\t\t)}\n\t\t\tanimate={{ y, x, scale, color }}\n\t\t\ttransition={{ duration, ease }}\n\t\t\tstyle={{\n\t\t\t\ttop: (containerHeight - 24) / 2, // 24px is the resting line-height\n\t\t\t\ttransformOrigin: \"left center\",\n\t\t\t\tzIndex: 1,\n\t\t\t}}\n\t\t>\n\t\t\t<span ref={labelRef} className=\"inline-block relative\">\n\t\t\t\t{text}\n\t\t\t\t<AnimatePresence>\n\t\t\t\t\t{showAsterisk && (\n\t\t\t\t\t\t<m.span\n\t\t\t\t\t\t\tkey=\"asterisk\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\ttransition={{ duration: prefersReduced ? 0 : 0.1 }}\n\t\t\t\t\t\t\tclassName=\"ml-0.5 text-m3-error\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t*\n\t\t\t\t\t\t</m.span>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</span>\n\t\t</m.label>\n\t);\n});\n\nFloatingLabel.displayName = \"FloatingLabel\";\n","/**\n * @file leading-icon.tsx\n * Leading icon slot for MD3 TextField.\n */\n\nimport * as React from \"react\";\nimport { TF_COLORS } from \"../text-field.tokens\";\n\nexport interface LeadingIconProps {\n\t/** Icon node — should be 24×24px. */\n\tchildren: React.ReactNode;\n\t/** Whether the field is in error state (changes icon color). */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n}\n\n/**\n * MD3 Leading Icon wrapper.\n *\n * Decorative — `aria-hidden=\"true\"`.\n * Color: `on-surface-variant` (default), `error` (error state).\n * Size: 24×24px icon, 48×56px touch target via flex alignment.\n *\n * @see https://m3.material.io/components/text-fields/specs#anatomy\n */\nexport const LeadingIcon = React.memo(function LeadingIcon({\n\tchildren,\n\tisError,\n\tisDisabled,\n}: LeadingIconProps) {\n\tconst color =\n\t\tisError && !isDisabled ? TF_COLORS.error : TF_COLORS.onSurfaceVariant;\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"flex items-center justify-center shrink-0 w-6 h-6 ml-3\"\n\t\t\tstyle={{ color }}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n});\n\nLeadingIcon.displayName = \"LeadingIcon\";\n","/**\n * @file outline-container.tsx\n * MD3-compliant outlined border with animated notch for the Outlined TextField.\n *\n * Implementation: 3-segment approach inspired by Material Web's fieldset/legend pattern.\n * The top border is split into: [left-segment] [notch-gap] [right-segment].\n * The notch-gap width animates from 0 → (labelWidth × scaleRatio + 8px) when label floats.\n *\n * This mirrors Material Web's implementation without requiring <fieldset> semantics.\n *\n * @see https://github.com/material-components/material-web/tree/main/textfield\n * @see https://m3.material.io/components/text-fields/specs#outlined-text-field\n */\n\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_INDICATOR_DURATION,\n\tMD3_LABEL_FLOAT_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS, TF_SIZE, TF_TYPOGRAPHY } from \"../text-field.tokens\";\n\nexport interface OutlineContainerProps {\n\t/** Whether the label is in the floated position. */\n\tisFloated: boolean;\n\t/** Whether the field is focused. */\n\tisFocused: boolean;\n\t/** Whether the field is in error state. */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n\t/** Whether the field is hovered. */\n\tisHovered: boolean;\n\t/**\n\t * Measured width of the label element in its full (unfloated) size.\n\t * The notch width = labelWidth × scaleRatio + 2×notchPadding.\n\t */\n\tlabelWidth: number;\n\t/** Whether to disable animations. */\n\tprefersReduced: boolean;\n}\n\n/**\n * Determines the outline border color based on current state.\n */\nfunction getOutlineColor(\n\tisFocused: boolean,\n\tisError: boolean,\n\tisHovered: boolean,\n\tisDisabled: boolean,\n): string {\n\tif (isDisabled) return TF_COLORS.onSurfaceVariant;\n\tif (isError) return TF_COLORS.error;\n\tif (isFocused) return TF_COLORS.primary;\n\tif (isHovered) return TF_COLORS.inputText;\n\treturn TF_COLORS.outline;\n}\n\n/**\n * MD3 Outlined TextField container with animated notch.\n *\n * The notch gap expands/collapses in sync with the FloatingLabel animation,\n * creating the visual effect of the label breaking through the border.\n *\n * Accessibility: `aria-hidden=\"true\"` — purely decorative border.\n */\nexport const OutlineContainer = React.memo(function OutlineContainer({\n\tisFloated,\n\tisFocused,\n\tisError,\n\tisDisabled,\n\tisHovered,\n\tlabelWidth,\n\tprefersReduced,\n}: OutlineContainerProps) {\n\tconst colorDuration = prefersReduced ? 0 : MD3_INDICATOR_DURATION;\n\tconst notchDuration = prefersReduced ? 0 : MD3_LABEL_FLOAT_DURATION;\n\tconst ease = MD3_STANDARD_EASING;\n\n\tconst borderColor = getOutlineColor(\n\t\tisFocused,\n\t\tisError,\n\t\tisHovered,\n\t\tisDisabled,\n\t);\n\tconst borderWidth =\n\t\tisFocused || isError ? TF_SIZE.outlineThick : TF_SIZE.outlineThin;\n\n\t// Calculate offset for notch (always 16px from the edge in M3 Outlined)\n\tconst leftSegmentWidth = TF_SIZE.paddingStart;\n\n\tconst isNotched = isFloated && labelWidth > 0;\n\n\t/**\n\t * Notch width calculation:\n\t * When floated with label: label is scaled to 0.75, so its displayed width = labelWidth × 0.75\n\t * Add 2 × notchPadding (4px each side) for spacing inside the notch gap.\n\t * When unfloated or no label: 0 (no gap in the border).\n\t */\n\tconst notchWidth = isNotched\n\t\t? labelWidth * TF_TYPOGRAPHY.labelScaleRatio + TF_SIZE.notchPadding * 2\n\t\t: 0;\n\n\tconst borderTransition = { duration: colorDuration, ease };\n\tconst notchTransition = { duration: notchDuration, ease };\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"absolute inset-0 pointer-events-none flex rounded-[inherit]\"\n\t\t>\n\t\t\t{/* Left segment — left + bottom + top borders */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"rounded-tl-[inherit] rounded-bl-[inherit]\"\n\t\t\t\tstyle={{ width: leftSegmentWidth - TF_SIZE.notchPadding }}\n\t\t\t\tanimate={{\n\t\t\t\t\tborderColor,\n\t\t\t\t\tborderWidth,\n\t\t\t\t\tborderStyle: \"solid\",\n\t\t\t\t\tborderRightWidth: 0,\n\t\t\t\t}}\n\t\t\t\ttransition={borderTransition}\n\t\t\t/>\n\n\t\t\t{/* Center (notch) segment */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"flex flex-col shrink-0\"\n\t\t\t\tstyle={{ minWidth: 0 }}\n\t\t\t\tanimate={{ width: notchWidth }}\n\t\t\t\ttransition={notchTransition}\n\t\t\t>\n\t\t\t\t{/* Top border of notch: transparent when notched */}\n\t\t\t\t<m.div\n\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\tstyle={{ height: borderWidth }}\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\tborderTopColor: borderColor,\n\t\t\t\t\t\topacity: isNotched ? 0 : 1,\n\t\t\t\t\t\tborderTopWidth: borderWidth,\n\t\t\t\t\t\tborderTopStyle: \"solid\",\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={borderTransition}\n\t\t\t\t/>\n\t\t\t\t{/* Bottom border (always present) */}\n\t\t\t\t<m.div\n\t\t\t\t\tclassName=\"flex-1\"\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\tborderBottomColor: borderColor,\n\t\t\t\t\t\tborderBottomWidth: borderWidth,\n\t\t\t\t\t\tborderBottomStyle: \"solid\",\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={borderTransition}\n\t\t\t\t/>\n\t\t\t</m.div>\n\n\t\t\t{/* Right segment — full height, right + bottom + top borders */}\n\t\t\t<m.div\n\t\t\t\tclassName=\"flex-1 rounded-tr-[inherit] rounded-br-[inherit]\"\n\t\t\t\tanimate={{\n\t\t\t\t\tborderColor,\n\t\t\t\t\tborderWidth,\n\t\t\t\t\tborderStyle: \"solid\",\n\t\t\t\t\tborderLeftWidth: 0,\n\t\t\t\t}}\n\t\t\t\ttransition={borderTransition}\n\t\t\t/>\n\t\t</div>\n\t);\n});\n\nOutlineContainer.displayName = \"OutlineContainer\";\n","/**\n * @file prefix-suffix.tsx\n * Prefix and suffix text for MD3 TextField.\n * Visible only when the label is floated (or when there is no label).\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_LABEL_FLOAT_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_CLASSES } from \"../text-field.tokens\";\n\nexport interface PrefixSuffixProps {\n\ttext: string;\n\ttype: \"prefix\" | \"suffix\";\n\t/** Whether the label is floated (controls visibility). */\n\tvisible: boolean;\n\t/** Disable animations. */\n\tprefersReduced: boolean;\n}\n\n/**\n * MD3 Prefix / Suffix Text.\n *\n * Animates in/out in sync with the floating label using AnimatePresence.\n * Hidden when label is in the inline position (would overlap the label).\n *\n * @accessibility\n * `aria-hidden=\"true\"` — decorative. Screen readers read the full value in context.\n */\nexport const PrefixSuffix = React.memo(function PrefixSuffix({\n\ttext,\n\ttype,\n\tvisible,\n\tprefersReduced,\n}: PrefixSuffixProps) {\n\tconst duration = prefersReduced ? 0 : MD3_LABEL_FLOAT_DURATION;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{visible && (\n\t\t\t\t<m.span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tclassName={`${TF_CLASSES.prefixSuffix} ${type === \"suffix\" ? \"ml-0.5\" : \"mr-0.5\"}`}\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t\t\t>\n\t\t\t\t\t{text}\n\t\t\t\t</m.span>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n});\n\nPrefixSuffix.displayName = \"PrefixSuffix\";\n","/**\n * @file supporting-text.tsx\n * Supporting text, error text, and character counter for MD3 TextField.\n *\n * Animates in/out using AnimatePresence. Uses aria-live for accessibility.\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_STANDARD_EASING,\n\tMD3_SUPPORTING_DURATION,\n} from \"../../shared/constants\";\nimport { TF_COLORS } from \"../text-field.tokens\";\n\nexport interface SupportingTextProps {\n\t/** Helper text shown in normal state. */\n\tsupportingText?: string;\n\t/** Error message — shown instead of supportingText when isError=true. */\n\terrorText?: string;\n\t/** Whether field is in error state. */\n\tisError: boolean;\n\t/** Current character count (value.length). */\n\tcharCount?: number;\n\t/** Maximum character limit. Counter shown only when maxLength is set. */\n\tmaxLength?: number;\n\t/** ID for aria-describedby linking from the input. */\n\tid: string;\n\t/** Disable animations. */\n\tprefersReduced: boolean;\n}\n\n/**\n * AnimatePresence wrapper for text content changes.\n * Fades out old text, fades in new text.\n */\nfunction AnimatedText({\n\ttext,\n\tmotionKey,\n\tclassName,\n\tariaLive,\n\tduration,\n}: {\n\ttext: string;\n\tmotionKey: string;\n\tclassName: string;\n\tariaLive?: \"polite\" | \"off\";\n\tduration: number;\n}) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={motionKey}\n\t\t\tclassName={className}\n\t\t\tinitial={{ opacity: 0, y: -4 }}\n\t\t\tanimate={{ opacity: 1, y: 0 }}\n\t\t\texit={{ opacity: 0, y: -4 }}\n\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t\taria-live={ariaLive}\n\t\t>\n\t\t\t{text}\n\t\t</m.span>\n\t);\n}\n\n/**\n * MD3 Supporting Text area.\n *\n * Layout: [helper/error text] [character counter]\n * - Error text replaces supporting text when isError=true.\n * - Character counter shows only when maxLength is provided.\n * - Both use aria-live=\"polite\" to announce changes to screen readers.\n * - Animates in/out with opacity + y-offset via AnimatePresence.\n *\n * @accessibility\n * - Error text: `aria-live=\"polite\"` — screen readers announce when error appears.\n * - Counter: `aria-live=\"polite\"` — announces count changes.\n */\nexport const SupportingText = React.memo(function SupportingText({\n\tsupportingText,\n\terrorText,\n\tisError,\n\tcharCount,\n\tmaxLength,\n\tid,\n\tprefersReduced,\n}: SupportingTextProps) {\n\tconst duration = prefersReduced ? 0 : MD3_SUPPORTING_DURATION;\n\n\tconst activeText = isError && errorText ? errorText : supportingText;\n\tconst isOverLimit = maxLength !== undefined && (charCount ?? 0) > maxLength;\n\n\t// Determine counter color\n\tconst counterColor = isOverLimit\n\t\t? TF_COLORS.error\n\t\t: TF_COLORS.onSurfaceVariant;\n\n\tif (!activeText && maxLength === undefined) return null;\n\n\treturn (\n\t\t<m.div\n\t\t\tclassName=\"flex items-start justify-between gap-2 mt-1 px-4\"\n\t\t\tinitial={{ opacity: 0, height: 0 }}\n\t\t\tanimate={{ opacity: 1, height: \"auto\" }}\n\t\t\texit={{ opacity: 0, height: 0 }}\n\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t>\n\t\t\t{/* Left: helper or error text */}\n\t\t\t<div id={id} className=\"flex-1 min-w-0\">\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{activeText && (\n\t\t\t\t\t\t<AnimatedText\n\t\t\t\t\t\t\tkey={isError && errorText ? \"error\" : \"helper\"}\n\t\t\t\t\t\t\tmotionKey={\n\t\t\t\t\t\t\t\tisError && errorText\n\t\t\t\t\t\t\t\t\t? `error-${errorText}`\n\t\t\t\t\t\t\t\t\t: `helper-${supportingText}`\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttext={activeText}\n\t\t\t\t\t\t\tclassName={`text-xs leading-4 block ${\n\t\t\t\t\t\t\t\tisError ? \"text-m3-error\" : \"text-m3-on-surface-variant\"\n\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\tariaLive=\"polite\"\n\t\t\t\t\t\t\tduration={duration}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\n\t\t\t{/* Right: character counter */}\n\t\t\t{maxLength !== undefined && typeof charCount === \"number\" && (\n\t\t\t\t<m.span\n\t\t\t\t\tclassName=\"text-xs leading-4 tabular-nums shrink-0\"\n\t\t\t\t\tanimate={{ color: counterColor }}\n\t\t\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t\t\t\taria-live=\"polite\"\n\t\t\t\t\taria-atomic=\"true\"\n\t\t\t\t>\n\t\t\t\t\t{charCount} / {maxLength}\n\t\t\t\t</m.span>\n\t\t\t)}\n\t\t</m.div>\n\t);\n});\n\nSupportingText.displayName = \"SupportingText\";\n","/**\n * @file trailing-icon.tsx\n * Trailing icon slot for MD3 TextField.\n *\n * Supports three built-in modes:\n * - 'clear': ✕ button, visible when field has value\n * - 'password-toggle': eye icon, toggles password visibility\n * - 'custom': renders the `children` prop\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tMD3_ICON_SWAP_DURATION,\n\tMD3_STANDARD_EASING,\n} from \"../../shared/constants\";\nimport { TF_COLORS } from \"../text-field.tokens\";\nimport type { TextFieldTrailingIconMode } from \"../text-field.types\";\n\nexport interface TrailingIconProps {\n\tmode: TextFieldTrailingIconMode;\n\t/** Custom icon content (used when mode='custom'). */\n\tchildren?: React.ReactNode;\n\t/** Current input value — used to determine if clear button is visible. */\n\tvalue: string;\n\t/** Whether password is currently visible (for password-toggle mode). */\n\tshowPassword?: boolean;\n\t/** Fires when clear button is clicked. */\n\tonClear?: () => void;\n\t/** Fires when password visibility toggle is clicked. */\n\tonPasswordToggle?: () => void;\n\t/** Whether the field is in error state. */\n\tisError: boolean;\n\t/** Whether the field is disabled. */\n\tisDisabled: boolean;\n\t/** Disable animations. */\n\tprefersReduced: boolean;\n}\n\n/** Animated icon wrapper with scale + opacity transition. */\nfunction AnimatedIconSlot({\n\tchildren,\n\tmotionKey,\n\tduration,\n}: {\n\tchildren: React.ReactNode;\n\tmotionKey: string;\n\tduration: number;\n}) {\n\treturn (\n\t\t<m.span\n\t\t\tkey={motionKey}\n\t\t\tclassName=\"flex items-center justify-center\"\n\t\t\tinitial={{ opacity: 0, scale: 0 }}\n\t\t\tanimate={{ opacity: 1, scale: 1 }}\n\t\t\texit={{ opacity: 0, scale: 0 }}\n\t\t\ttransition={{ duration, ease: MD3_STANDARD_EASING }}\n\t\t>\n\t\t\t{children}\n\t\t</m.span>\n\t);\n}\n\n/** Eye icon (password visible). */\nfunction EyeOpenIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\" />\n\t\t</svg>\n\t);\n}\n\n/** Eye-off icon (password hidden). */\nfunction EyeOffIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"24\"\n\t\t\theight=\"24\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\" />\n\t\t</svg>\n\t);\n}\n\n/** ✕ Clear icon. */\nfunction ClearIcon() {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"20\"\n\t\t\theight=\"20\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z\" />\n\t\t</svg>\n\t);\n}\n\n/**\n * MD3 Trailing Icon.\n *\n * Touch target: 48×48px (padding extends the hit area beyond the 24×24 icon).\n *\n * @accessibility\n * - Clear button: `aria-label=\"Clear input\"`\n * - Password toggle: `aria-label=\"Show password\"` / `\"Hide password\"`\n * - Custom: no aria — consumer provides accessible markup\n */\nexport const TrailingIcon = React.memo(function TrailingIcon({\n\tmode,\n\tchildren,\n\tvalue,\n\tshowPassword = false,\n\tonClear,\n\tonPasswordToggle,\n\tisError,\n\tisDisabled,\n\tprefersReduced,\n}: TrailingIconProps) {\n\tconst duration = prefersReduced ? 0 : MD3_ICON_SWAP_DURATION;\n\n\tconst iconColor =\n\t\tisError && !isDisabled ? TF_COLORS.error : TF_COLORS.onSurfaceVariant;\n\n\t// Touch target button styles: 48×48px, centered icon\n\tconst btnClass =\n\t\t\"relative flex items-center justify-center w-12 h-12 -mr-1 rounded-full cursor-pointer outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-m3-primary)] transition-colors hover:bg-[var(--color-m3-on-surface)]/8 active:bg-[var(--color-m3-on-surface)]/12 disabled:pointer-events-none\";\n\n\tif (mode === \"clear\") {\n\t\tconst hasValue = value.length > 0;\n\t\treturn (\n\t\t\t<AnimatePresence>\n\t\t\t\t{hasValue && (\n\t\t\t\t\t<AnimatedIconSlot motionKey=\"clear\" duration={duration}>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\taria-label=\"Clear input\"\n\t\t\t\t\t\t\tonClick={onClear}\n\t\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\t\ttabIndex={isDisabled ? -1 : 0}\n\t\t\t\t\t\t\tclassName={btnClass}\n\t\t\t\t\t\t\tstyle={{ color: iconColor }}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ClearIcon />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</AnimatedIconSlot>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\t}\n\n\tif (mode === \"password-toggle\") {\n\t\treturn (\n\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t<AnimatedIconSlot\n\t\t\t\t\tmotionKey={showPassword ? \"eye-off\" : \"eye-on\"}\n\t\t\t\t\tduration={duration}\n\t\t\t\t>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={showPassword ? \"Hide password\" : \"Show password\"}\n\t\t\t\t\t\tonClick={onPasswordToggle}\n\t\t\t\t\t\tdisabled={isDisabled}\n\t\t\t\t\t\ttabIndex={isDisabled ? -1 : 0}\n\t\t\t\t\t\tclassName={btnClass}\n\t\t\t\t\t\tstyle={{ color: iconColor }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{showPassword ? <EyeOffIcon /> : <EyeOpenIcon />}\n\t\t\t\t\t</button>\n\t\t\t\t</AnimatedIconSlot>\n\t\t\t</AnimatePresence>\n\t\t);\n\t}\n\n\tif (mode === \"custom\" && children) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName=\"flex items-center justify-center w-6 h-6 mr-3\"\n\t\t\t\tstyle={{ color: iconColor }}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn null;\n});\n\nTrailingIcon.displayName = \"TrailingIcon\";\n","/**\n * @file text-field.tsx\n * MD3 Expressive TextField — Filled & Outlined variants.\n *\n * Features:\n * - Floating label animation (Framer Motion)\n * - Filled (active indicator) and Outlined (notch border) variants\n * - Controlled & uncontrolled value handling\n * - Built-in clear button, password toggle\n * - Prefix / suffix text\n * - Supporting text, error text, character counter\n * - Leading & trailing icon slots\n * - Textarea support\n * - Native form validation + imperative handle\n * - Full WCAG AA accessibility\n * - prefers-reduced-motion support\n *\n * @see https://m3.material.io/components/text-fields/overview\n */\n\nimport { domMax, LazyMotion, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ScrollArea } from \"../scroll-area\";\nimport { useToolbarContext } from \"../toolbar/toolbar-context\";\nimport { ActiveIndicator } from \"./subcomponents/active-indicator\";\nimport { FloatingLabel } from \"./subcomponents/floating-label\";\nimport { LeadingIcon } from \"./subcomponents/leading-icon\";\nimport { OutlineContainer } from \"./subcomponents/outline-container\";\nimport { PrefixSuffix } from \"./subcomponents/prefix-suffix\";\nimport { SupportingText } from \"./subcomponents/supporting-text\";\nimport { TrailingIcon } from \"./subcomponents/trailing-icon\";\nimport { TF_SIZE } from \"./text-field.tokens\";\nimport type { TextFieldHandle, TextFieldProps } from \"./text-field.types\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\n/** Textarea line height in px — matches leading-6 (1.5rem at 16px base). */\nconst LINE_HEIGHT_PX = 24;\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nconst TextFieldComponent = React.forwardRef<TextFieldHandle, TextFieldProps>(\n\t(\n\t\t{\n\t\t\t// Core\n\t\t\tvariant = \"filled\",\n\t\t\tlabel,\n\t\t\tvalue: valueProp,\n\t\t\tdefaultValue = \"\",\n\t\t\tonChange,\n\t\t\t// Input config\n\t\t\ttype = \"text\",\n\t\t\tplaceholder,\n\t\t\tname,\n\t\t\tid: idProp,\n\t\t\tautoComplete,\n\t\t\tinputMode,\n\t\t\tautoResize = false,\n\t\t\tmaxRows,\n\t\t\trows = autoResize ? 1 : 2,\n\t\t\tcols,\n\t\t\ttextDirection,\n\t\t\t// Validation\n\t\t\trequired = false,\n\t\t\tnoAsterisk = false,\n\t\t\terror: errorProp = false,\n\t\t\terrorText,\n\t\t\tminLength,\n\t\t\tmaxLength,\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t\tpattern,\n\t\t\tmultiple,\n\t\t\t// Supporting text\n\t\t\tsupportingText,\n\t\t\t// Decorators\n\t\t\tprefixText,\n\t\t\tsuffixText,\n\t\t\tleadingIcon,\n\t\t\ttrailingIcon,\n\t\t\ttrailingIconMode = \"none\",\n\t\t\t// States\n\t\t\tdisabled = false,\n\t\t\treadOnly = false,\n\t\t\tnoSpinner = false,\n\t\t\t// Form\n\t\t\tform,\n\t\t\t// Accessibility\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-describedby\": ariaDescribedby,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\t// Layout\n\t\t\tclassName,\n\t\t\tfullWidth = true,\n\t\t\tdense = false,\n\t\t\t// ScrollArea\n\t\t\tscrollAreaType = \"hover\",\n\t\t\t// Callbacks\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\tonKeyDown,\n\t\t\tonKeyUp,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\t\tconst toolbarContext = useToolbarContext();\n\t\tconst isInToolbar = !!toolbarContext;\n\n\t\t// ── Props Override (Toolbar) ──────────────────────────────────────────\n\t\tconst resolvedDense = isInToolbar ? true : dense;\n\t\tconst resolvedLabel = isInToolbar ? undefined : label;\n\n\t\t// ── IDs ───────────────────────────────────────────────────────────────\n\t\tconst generatedId = React.useId();\n\t\tconst inputId = idProp ?? `tf-${generatedId}`;\n\t\tconst supportingId = `${inputId}-supporting`;\n\n\t\t// ── Value state ───────────────────────────────────────────────────────\n\t\tconst isControlled = valueProp !== undefined;\n\t\tconst [internalValue, setInternalValue] = React.useState(defaultValue);\n\t\tconst currentValue = isControlled ? (valueProp as string) : internalValue;\n\n\t\t// ── Interaction state ─────────────────────────────────────────────────\n\t\tconst [isFocused, setIsFocused] = React.useState(false);\n\t\t// Hover color changes are handled by CSS (group-hover/tf) for a11y compliance.\n\n\t\t// ── Password toggle ───────────────────────────────────────────────────\n\t\tconst [showPassword, setShowPassword] = React.useState(false);\n\t\tconst resolvedInputType =\n\t\t\ttype === \"password\" && showPassword ? \"text\" : type;\n\n\t\t// ── Native validation error ───────────────────────────────────────────\n\t\tconst [nativeError, setNativeError] = React.useState(\"\");\n\n\t\t// ── Label width for outlined notch ────────────────────────────────────\n\t\tconst [labelWidth, setLabelWidth] = React.useState(0);\n\n\t\t// ── Derived state ─────────────────────────────────────────────────────\n\t\tconst hasValue = currentValue.length > 0;\n\t\t/** Label is floated when focused OR when there is a value. */\n\t\tconst isFloated = isFocused || hasValue;\n\t\tconst isError =\n\t\t\terrorProp ||\n\t\t\t!!nativeError ||\n\t\t\t(maxLength !== undefined && currentValue.length > maxLength);\n\t\tconst containerHeight = resolvedDense\n\t\t\t? TF_SIZE.denseHeight\n\t\t\t: TF_SIZE.height;\n\t\tconst showAsterisk = required && !noAsterisk;\n\n\t\t// ── Refs ──────────────────────────────────────────────────────────────\n\t\tconst inputRef = React.useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n\t\tconst labelSpanRef = React.useRef<HTMLSpanElement>(null);\n\n\t\t// Measure label span width for outlined notch (once on mount)\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (labelSpanRef.current) {\n\t\t\t\tsetLabelWidth(labelSpanRef.current.offsetWidth);\n\t\t\t}\n\t\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t\t}, []); // mount only — label text changes are rare in production\n\n\t\t// ── Auto-resize textarea ──────────────────────────────────────────────\n\t\tReact.useLayoutEffect(() => {\n\t\t\tif (type !== \"textarea\" || !inputRef.current) return;\n\t\t\tconst textarea = inputRef.current as HTMLTextAreaElement;\n\n\t\t\tif (autoResize) {\n\t\t\t\t// currentValue in deps triggers re-measure on each keystroke\n\t\t\t\tvoid currentValue;\n\t\t\t\ttextarea.style.height = \"auto\";\n\t\t\t\ttextarea.style.height = `${textarea.scrollHeight}px`;\n\n\t\t\t\tif (maxRows) {\n\t\t\t\t\ttextarea.style.maxHeight = `${maxRows * LINE_HEIGHT_PX}px`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hide native scrollbar — ScrollArea handles it\n\t\t\ttextarea.style.overflowY = \"hidden\";\n\t\t}, [type, autoResize, maxRows, currentValue]);\n\n\t\t// ── Handlers ──────────────────────────────────────────────────────────\n\n\t\tconst handleValueChange = React.useCallback(\n\t\t\t(newValue: string) => {\n\t\t\t\tif (!isControlled) setInternalValue(newValue);\n\t\t\t\t// Clear native validation error when user types\n\t\t\t\tsetNativeError(\"\");\n\t\t\t\t(inputRef.current as HTMLInputElement)?.setCustomValidity?.(\"\");\n\t\t\t},\n\t\t\t[isControlled],\n\t\t);\n\n\t\tconst handleChange = React.useCallback(\n\t\t\t(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n\t\t\t\tconst newVal = e.target.value;\n\t\t\t\thandleValueChange(newVal);\n\t\t\t\tonChange?.(newVal, e);\n\t\t\t},\n\t\t\t[handleValueChange, onChange],\n\t\t);\n\n\t\tconst handleFocus = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n\t\t\t\tsetIsFocused(true);\n\t\t\t\tonFocus?.(e);\n\t\t\t},\n\t\t\t[onFocus],\n\t\t);\n\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n\t\t\t\tsetIsFocused(false);\n\t\t\t\t// Run native validation on blur\n\t\t\t\tconst el = inputRef.current as HTMLInputElement;\n\t\t\t\tif (el && !el.validity.valid) {\n\t\t\t\t\tsetNativeError(el.validationMessage);\n\t\t\t\t} else {\n\t\t\t\t\tsetNativeError(\"\");\n\t\t\t\t}\n\t\t\t\tonBlur?.(e);\n\t\t\t},\n\t\t\t[onBlur],\n\t\t);\n\n\t\tconst handleClear = React.useCallback(() => {\n\t\t\thandleValueChange(\"\");\n\t\t\tonChange?.(\"\", {\n\t\t\t\ttarget: { value: \"\" },\n\t\t\t} as React.ChangeEvent<HTMLInputElement>);\n\t\t\tinputRef.current?.focus();\n\t\t}, [handleValueChange, onChange]);\n\n\t\tconst handlePasswordToggle = React.useCallback(() => {\n\t\t\tsetShowPassword((prev) => !prev);\n\t\t\tinputRef.current?.focus();\n\t\t}, []);\n\n\t\t// ── Imperative Handle ─────────────────────────────────────────────────\n\t\tReact.useImperativeHandle(\n\t\t\tref,\n\t\t\t() => ({\n\t\t\t\tfocus: () => inputRef.current?.focus(),\n\t\t\t\tblur: () => inputRef.current?.blur(),\n\t\t\t\tselect: () => (inputRef.current as HTMLInputElement)?.select?.(),\n\t\t\t\tclear: () => handleValueChange(\"\"),\n\t\t\t\tsetCustomValidity: (msg: string) =>\n\t\t\t\t\t(inputRef.current as HTMLInputElement)?.setCustomValidity?.(msg),\n\t\t\t\tcheckValidity: () =>\n\t\t\t\t\t(inputRef.current as HTMLInputElement)?.checkValidity?.() ?? true,\n\t\t\t\treportValidity: () => {\n\t\t\t\t\tconst el = inputRef.current as HTMLInputElement;\n\t\t\t\t\tconst valid = el?.reportValidity?.() ?? true;\n\t\t\t\t\tif (!valid) setNativeError(el?.validationMessage ?? \"\");\n\t\t\t\t\treturn valid;\n\t\t\t\t},\n\t\t\t\tgetValue: () => currentValue,\n\t\t\t\tgetInputElement: () => inputRef.current,\n\t\t\t}),\n\t\t\t[currentValue, handleValueChange],\n\t\t);\n\n\t\t// ── ARIA describedby ──────────────────────────────────────────────────\n\t\tconst hasSupporting = !!(\n\t\t\tsupportingText ||\n\t\t\terrorText ||\n\t\t\tmaxLength !== undefined\n\t\t);\n\t\tconst computedDescribedby =\n\t\t\t[hasSupporting ? supportingId : \"\", ariaDescribedby ?? \"\"]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.join(\" \") || undefined;\n\n\t\t// ── Input classes ─────────────────────────────────────────────────────\n\t\tconst inputClass = cn(\n\t\t\t\"bg-transparent outline-none w-full\",\n\t\t\t!resolvedLabel || isInToolbar ? \"self-center\" : \"self-end\",\n\t\t\t\"text-base leading-6 text-m3-on-surface\",\n\t\t\t\"caret-[var(--color-m3-primary)]\",\n\t\t\t\"placeholder:text-m3-on-surface-variant/60\",\n\t\t\tnoSpinner &&\n\t\t\t\ttype === \"number\" &&\n\t\t\t\t\"[appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none\",\n\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t);\n\n\t\t// Shared input element props\n\t\tconst inputProps = {\n\t\t\tid: inputId,\n\t\t\tname,\n\t\t\tvalue: currentValue,\n\t\t\tplaceholder: !resolvedLabel || isFloated ? (placeholder ?? \"\") : \"\",\n\t\t\tdisabled,\n\t\t\treadOnly,\n\t\t\trequired,\n\t\t\tminLength,\n\t\t\tmaxLength,\n\t\t\tautoComplete,\n\t\t\tinputMode,\n\t\t\tform,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-labelledby\": ariaLabelledby,\n\t\t\t\"aria-describedby\": computedDescribedby,\n\t\t\t\"aria-invalid\": isError || undefined,\n\t\t\t\"aria-required\": required || undefined,\n\t\t\tonChange: handleChange,\n\t\t\tonFocus: handleFocus,\n\t\t\tonBlur: handleBlur,\n\t\t\tonKeyDown,\n\t\t\tonKeyUp,\n\t\t};\n\n\t\t// ── Container classes ─────────────────────────────────────────────────\n\t\tconst hasLeading = !!leadingIcon;\n\t\t// ALWAYS 16px gap between text and container/icons\n\t\tconst paddingStart = \"pl-4\";\n\t\tconst paddingEnd = \"pr-4\";\n\n\t\tconst containerClass = cn(\n\t\t\t\"relative flex items-center\",\n\t\t\tvariant === \"filled\"\n\t\t\t\t? isInToolbar\n\t\t\t\t\t? \"bg-transparent\"\n\t\t\t\t\t: \"bg-[var(--color-m3-surface-container-highest)] rounded-tl-sm rounded-tr-sm\"\n\t\t\t\t: \"bg-transparent rounded-sm\",\n\t\t\tfullWidth ? \"w-full\" : \"w-fit\",\n\t\t);\n\n\t\tconst innerClass = cn(\n\t\t\t\"relative flex flex-col flex-1 min-w-0 h-full\",\n\t\t\tpaddingStart,\n\t\t\tpaddingEnd,\n\t\t\tisInToolbar || !resolvedLabel\n\t\t\t\t? \"justify-center\"\n\t\t\t\t: variant === \"filled\"\n\t\t\t\t\t? resolvedDense\n\t\t\t\t\t\t? \"pt-5 pb-2\"\n\t\t\t\t\t\t: \"pt-6 pb-2\"\n\t\t\t\t\t: resolvedDense\n\t\t\t\t\t\t? \"py-3\"\n\t\t\t\t\t\t: \"py-4\",\n\t\t);\n\n\t\tconst wrapperClass = cn(\n\t\t\t\"group/tf inline-flex flex-col\",\n\t\t\tfullWidth ? \"w-full\" : \"w-fit\",\n\t\t\tdisabled && \"opacity-[0.38] pointer-events-none\",\n\t\t\tclassName,\n\t\t);\n\n\t\tconst containerHeightClass = resolvedDense ? \"h-12\" : \"h-14\";\n\n\t\t// ── Render ────────────────────────────────────────────────────────────\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div className={wrapperClass}>\n\t\t\t\t\t{/* Main container */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\tcontainerClass,\n\t\t\t\t\t\t\ttype !== \"textarea\" && containerHeightClass,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Outlined border with animated notch */}\n\t\t\t\t\t\t{variant === \"outlined\" && !isInToolbar && (\n\t\t\t\t\t\t\t<OutlineContainer\n\t\t\t\t\t\t\t\tisFloated={isFloated}\n\t\t\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\tisHovered={false}\n\t\t\t\t\t\t\t\tlabelWidth={labelWidth}\n\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Hover state layer (filled only) */}\n\t\t\t\t\t\t{variant === \"filled\" && !isInToolbar && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"absolute inset-0 pointer-events-none rounded-[inherit] bg-m3-on-surface\",\n\t\t\t\t\t\t\t\t\t\"opacity-0 transition-opacity duration-150\",\n\t\t\t\t\t\t\t\t\t\"group-hover/tf:opacity-[0.08]\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Leading icon */}\n\t\t\t\t\t\t{leadingIcon && (\n\t\t\t\t\t\t\t<LeadingIcon isError={isError} isDisabled={disabled}>\n\t\t\t\t\t\t\t\t{leadingIcon}\n\t\t\t\t\t\t\t</LeadingIcon>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Inner column: floating label + input row */}\n\t\t\t\t\t\t<div className={innerClass}>\n\t\t\t\t\t\t\t{/* Floating label — absolutely positioned over the inner region */}\n\t\t\t\t\t\t\t{resolvedLabel && (\n\t\t\t\t\t\t\t\t<FloatingLabel\n\t\t\t\t\t\t\t\t\ttext={resolvedLabel}\n\t\t\t\t\t\t\t\t\tisFloated={isFloated}\n\t\t\t\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t\t\tcontainerHeight={containerHeight}\n\t\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t\t\tshowAsterisk={showAsterisk}\n\t\t\t\t\t\t\t\t\thtmlFor={inputId}\n\t\t\t\t\t\t\t\t\tlabelRef={labelSpanRef}\n\t\t\t\t\t\t\t\t\thasLeading={hasLeading}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t{/* Input row: prefix + input/textarea + suffix */}\n\t\t\t\t\t\t\t<div className=\"flex items-center w-full\">\n\t\t\t\t\t\t\t\t{prefixText && (\n\t\t\t\t\t\t\t\t\t<PrefixSuffix\n\t\t\t\t\t\t\t\t\t\ttext={prefixText}\n\t\t\t\t\t\t\t\t\t\ttype=\"prefix\"\n\t\t\t\t\t\t\t\t\t\tvisible={isFloated}\n\t\t\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{type === \"textarea\" ? (\n\t\t\t\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\t\t\t\ttype={scrollAreaType}\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full flex-1\"\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\theight: !autoResize ? rows * LINE_HEIGHT_PX : undefined,\n\t\t\t\t\t\t\t\t\t\t\tmaxHeight:\n\t\t\t\t\t\t\t\t\t\t\t\tautoResize && maxRows\n\t\t\t\t\t\t\t\t\t\t\t\t\t? maxRows * LINE_HEIGHT_PX\n\t\t\t\t\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tviewportClassName=\"max-h-[inherit]\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\t\t\t\tref={inputRef as React.Ref<HTMLTextAreaElement>}\n\t\t\t\t\t\t\t\t\t\t\trows={rows}\n\t\t\t\t\t\t\t\t\t\t\tcols={cols}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\tinputClass,\n\t\t\t\t\t\t\t\t\t\t\t\t\"resize-none mt-2\",\n\t\t\t\t\t\t\t\t\t\t\t\tautoResize ? \"h-auto\" : \"h-full\",\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ direction: textDirection || undefined }}\n\t\t\t\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\t\tref={inputRef as React.Ref<HTMLInputElement>}\n\t\t\t\t\t\t\t\t\t\ttype={type === \"password\" ? resolvedInputType : type}\n\t\t\t\t\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\t\t\t\t\tpattern={pattern}\n\t\t\t\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\t\t\t\tclassName={inputClass}\n\t\t\t\t\t\t\t\t\t\tstyle={{ direction: textDirection || undefined }}\n\t\t\t\t\t\t\t\t\t\t{...inputProps}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{suffixText && (\n\t\t\t\t\t\t\t\t\t<PrefixSuffix\n\t\t\t\t\t\t\t\t\t\ttext={suffixText}\n\t\t\t\t\t\t\t\t\t\ttype=\"suffix\"\n\t\t\t\t\t\t\t\t\t\tvisible={isFloated}\n\t\t\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Trailing icon: clear, password-toggle, or custom */}\n\t\t\t\t\t\t{(trailingIconMode !== \"none\" || trailingIcon) && (\n\t\t\t\t\t\t\t<TrailingIcon\n\t\t\t\t\t\t\t\tmode={trailingIcon ? \"custom\" : trailingIconMode}\n\t\t\t\t\t\t\t\tvalue={currentValue}\n\t\t\t\t\t\t\t\tshowPassword={showPassword}\n\t\t\t\t\t\t\t\tonClear={handleClear}\n\t\t\t\t\t\t\t\tonPasswordToggle={handlePasswordToggle}\n\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{trailingIcon}\n\t\t\t\t\t\t\t</TrailingIcon>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Active indicator: bottom border line (filled variant only) */}\n\t\t\t\t\t\t{variant === \"filled\" && !isInToolbar && (\n\t\t\t\t\t\t\t<ActiveIndicator\n\t\t\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\t\tisDisabled={disabled}\n\t\t\t\t\t\t\t\tisHovered={false}\n\t\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t{/* Supporting text area: helper text + character counter */}\n\t\t\t\t\t{hasSupporting && (\n\t\t\t\t\t\t<SupportingText\n\t\t\t\t\t\t\tsupportingText={supportingText}\n\t\t\t\t\t\t\terrorText={errorText ?? (nativeError || undefined)}\n\t\t\t\t\t\t\tisError={isError}\n\t\t\t\t\t\t\tcharCount={\n\t\t\t\t\t\t\t\tmaxLength !== undefined ? currentValue.length : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmaxLength={maxLength}\n\t\t\t\t\t\t\tid={supportingId}\n\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nTextFieldComponent.displayName = \"TextField\";\n\n/**\n * MD3 Expressive TextField.\n *\n * Supports `filled` and `outlined` variants, floating label animation,\n * prefix/suffix, leading/trailing icons, supporting text, character counter,\n * textarea mode, clear button, password toggle, and native form validation.\n *\n * @example\n * ```tsx\n * // Filled (default)\n * <TextField label=\"Email\" type=\"email\" />\n *\n * // Outlined with error\n * <TextField variant=\"outlined\" label=\"Username\" error errorText=\"Already taken\" />\n *\n * // With clear button\n * <TextField label=\"Search\" trailingIconMode=\"clear\" />\n *\n * // Password with toggle\n * <TextField label=\"Password\" type=\"password\" trailingIconMode=\"password-toggle\" />\n *\n * // With character counter\n * <TextField label=\"Bio\" maxLength={140} supportingText=\"Describe yourself\" />\n * ```\n *\n * @see https://m3.material.io/components/text-fields/overview\n */\nexport const TextField = React.memo(TextFieldComponent);\n","// ─── M3 Expressive Select — Select Component (Exposed Dropdown & Autocomplete) ──\nimport * as React from \"react\";\nimport { useVirtualList } from \"../../hooks/useVirtualList\";\nimport { cn } from \"../../lib/utils\";\nimport { Icon } from \"../icon\";\nimport { Menu, MenuContent, MenuItem, MenuTrigger } from \"../menu\";\nimport { ProgressIndicator } from \"../progress-indicator\";\nimport { TextField } from \"../text-field\";\n\nimport type { TextFieldHandle } from \"../text-field/text-field.types\";\nimport type { SelectOption, SelectProps } from \"./select.types\";\n\n/**\n * M3 Expressive Select component (Exposed Dropdown Menu & Autocomplete).\n *\n * Implements Material 3 Exposed Dropdown Menu spec (Figma Node `58966:3961`).\n * Features progressive slice virtualization and server-side/async search via `onSearchChange`.\n *\n * @example\n * // Standard Exposed Dropdown Menu\n * <Select\n *   label=\"City\"\n *   options={[\n *     { label: \"Hanoi\", value: \"hn\" },\n *     { label: \"Ho Chi Minh City\", value: \"hcm\" }\n *   ]}\n *   value={city}\n *   onChange={(val) => setCity(val)}\n * />\n *\n * @example\n * // Searchable Autocomplete (Local filtering)\n * <Select\n *   searchable\n *   label=\"Search Employee\"\n *   options={userList}\n *   onChange={(val, opt) => setSelected(opt)}\n * />\n *\n * @example\n * // Searchable Autocomplete (Async / Server-side search)\n * <Select\n *   searchable\n *   loading={isLoading}\n *   label=\"Search Countries\"\n *   options={searchResults}\n *   onSearchChange={(query) => fetchCountries(query)}\n *   onChange={(val, opt) => setSelectedCountry(opt)}\n * />\n */\nexport const Select = React.forwardRef<TextFieldHandle, SelectProps>(\n\t(\n\t\t{\n\t\t\toptions,\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue,\n\t\t\tonChange,\n\t\t\tonSearchChange,\n\t\t\tsearchable = false,\n\t\t\tloading = false,\n\t\t\tmaxVisible = 50,\n\t\t\tmaxHeight = \"360px\",\n\t\t\tplaceholder,\n\t\t\tlabel,\n\t\t\tsupportingText,\n\t\t\tcolorVariant = \"standard\",\n\t\t\tmenuVariant = \"expressive\",\n\t\t\tshowDividers = true,\n\t\t\tseparatorStyle,\n\t\t\temptyText = \"No options found\",\n\t\t\tmatchTriggerWidth = true,\n\t\t\tdisabled = false,\n\t\t\tclassName,\n\t\t\tvariant = \"outlined\",\n\t\t\trenderOption,\n\t\t\trenderContent,\n\t\t\tchildren,\n\t\t\t...restProps\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [internalValue, setInternalValue] = React.useState(\n\t\t\t() => defaultValue ?? \"\",\n\t\t);\n\t\tconst isControlled = controlledValue !== undefined;\n\t\tconst currentValue = isControlled ? controlledValue : internalValue;\n\n\t\tconst [open, setOpen] = React.useState(false);\n\t\tconst openRef = React.useRef(open);\n\t\topenRef.current = open;\n\n\t\tconst [searchQuery, setSearchQuery] = React.useState(\"\");\n\t\tconst [scrollViewport, setScrollViewport] =\n\t\t\tReact.useState<HTMLDivElement | null>(null);\n\n\t\t// Find selected option object\n\t\tconst selectedOption = React.useMemo(\n\t\t\t() => options.find((opt) => opt.value === currentValue),\n\t\t\t[options, currentValue],\n\t\t);\n\n\t\t// Determine display text for input\n\t\tconst displayValue = searchable\n\t\t\t? open\n\t\t\t\t? searchQuery\n\t\t\t\t: (selectedOption?.label ?? \"\")\n\t\t\t: (selectedOption?.label ?? \"\");\n\n\t\t// Filter options:\n\t\t// When `onSearchChange` is provided, internal filtering is disabled (consumer passes filtered list)\n\t\tconst filteredOptions = React.useMemo(() => {\n\t\t\tif (onSearchChange) return options;\n\t\t\tif (!searchable || !searchQuery.trim()) return options;\n\t\t\tconst query = searchQuery.toLowerCase();\n\t\t\treturn options.filter((opt) => opt.label.toLowerCase().includes(query));\n\t\t}, [options, searchable, searchQuery, onSearchChange]);\n\n\t\t// Progressive virtualization using IntersectionObserver with ScrollArea viewport as root\n\t\tconst { visibleItems, hasMore, sentinelRef } = useVirtualList(\n\t\t\tfilteredOptions,\n\t\t\t{\n\t\t\t\tbatchSize: maxVisible,\n\t\t\t\troot: scrollViewport,\n\t\t\t},\n\t\t);\n\n\t\tconst handleSelect = React.useCallback(\n\t\t\t(option: SelectOption) => {\n\t\t\t\tif (option.disabled) return;\n\t\t\t\tif (!isControlled) {\n\t\t\t\t\tsetInternalValue(option.value);\n\t\t\t\t}\n\t\t\t\tonChange?.(option.value, option);\n\t\t\t\tsetOpen(false);\n\t\t\t\tsetSearchQuery(\"\");\n\t\t\t},\n\t\t\t[isControlled, onChange],\n\t\t);\n\n\t\tconst handleInputChange = React.useCallback(\n\t\t\t(inputValue: string) => {\n\t\t\t\tif (searchable) {\n\t\t\t\t\tsetSearchQuery(inputValue);\n\t\t\t\t\tif (!openRef.current) setOpen(true);\n\t\t\t\t\tonSearchChange?.(inputValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[searchable, onSearchChange],\n\t\t);\n\n\t\tconst handleInputFocus = React.useCallback(() => {\n\t\t\tif (!disabled && !openRef.current) {\n\t\t\t\tsetOpen(true);\n\t\t\t\tif (searchable) {\n\t\t\t\t\tsetSearchQuery(\"\");\n\t\t\t\t\tonSearchChange?.(\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}, [disabled, searchable, onSearchChange]);\n\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLInputElement>) => {\n\t\t\t\tif (e.key === \"ArrowDown\" && !openRef.current) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tsetOpen(true);\n\t\t\t\t} else if (e.key === \"Escape\" && openRef.current) {\n\t\t\t\t\tsetOpen(false);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\tconst resolvedSeparatorStyle =\n\t\t\tseparatorStyle ?? (showDividers ? \"divider\" : \"none\");\n\n\t\treturn (\n\t\t\t<Menu\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={setOpen}\n\t\t\t\tcolorVariant={colorVariant}\n\t\t\t\tvariant={menuVariant}\n\t\t\t\tmodal={false}\n\t\t\t>\n\t\t\t\t<MenuTrigger asChild>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"w-full\"\n\t\t\t\t\t\tonPointerDown={\n\t\t\t\t\t\t\tsearchable\n\t\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\t\t// In searchable mode, the user is interacting with an editable text input.\n\t\t\t\t\t\t\t\t\t\t// Prevent Radix DropdownMenu.Trigger from intercepting pointerdown (which toggles open/closed\n\t\t\t\t\t\t\t\t\t\t// and calls preventDefault(), blocking text selection and native input focus).\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\t\t\t\t\t\tif (!openRef.current) {\n\t\t\t\t\t\t\t\t\t\t\t\tsetOpen(true);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t(e.target as HTMLElement)?.focus?.();\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\tsupportingText={supportingText}\n\t\t\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\treadOnly={!searchable}\n\t\t\t\t\t\t\tvalue={displayValue}\n\t\t\t\t\t\t\tonChange={handleInputChange}\n\t\t\t\t\t\t\tonFocus={handleInputFocus}\n\t\t\t\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\tsearchable ? \"cursor-text\" : \"cursor-pointer\",\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\ttrailingIcon={\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tname=\"arrow_drop_down\"\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"transition-transform duration-200 cursor-pointer\",\n\t\t\t\t\t\t\t\t\t\topen && \"rotate-180\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tonClick={\n\t\t\t\t\t\t\t\t\t\tsearchable\n\t\t\t\t\t\t\t\t\t\t\t? (e) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetOpen((prev) => !prev);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</MenuTrigger>\n\t\t\t\t<MenuContent\n\t\t\t\t\tmatchTriggerWidth={matchTriggerWidth}\n\t\t\t\t\tseparatorStyle={resolvedSeparatorStyle}\n\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\tonViewportRef={setScrollViewport}\n\t\t\t\t\tclassName=\"p-1\"\n\t\t\t\t\tonCloseAutoFocus={(e: Event) => {\n\t\t\t\t\t\tif (searchable) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t\tonFocusOutside={(e: Event) => {\n\t\t\t\t\t\tif (searchable) {\n\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{children ? (\n\t\t\t\t\t\tchildren\n\t\t\t\t\t) : renderContent ? (\n\t\t\t\t\t\trenderContent({\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tfilteredOptions,\n\t\t\t\t\t\t\tvisibleOptions: visibleItems,\n\t\t\t\t\t\t\thasMore,\n\t\t\t\t\t\t\tsentinelRef,\n\t\t\t\t\t\t\tcurrentValue,\n\t\t\t\t\t\t\tselectedOption,\n\t\t\t\t\t\t\tsearchQuery,\n\t\t\t\t\t\t\thandleSelect,\n\t\t\t\t\t\t\temptyText,\n\t\t\t\t\t\t\tloading,\n\t\t\t\t\t\t})\n\t\t\t\t\t) : loading ? (\n\t\t\t\t\t\t<SelectLoading />\n\t\t\t\t\t) : filteredOptions.length > 0 ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{visibleItems.map((option, index) => {\n\t\t\t\t\t\t\t\tif (renderOption) {\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<React.Fragment key={option.value}>\n\t\t\t\t\t\t\t\t\t\t\t{renderOption(option, {\n\t\t\t\t\t\t\t\t\t\t\t\tselected: option.value === currentValue,\n\t\t\t\t\t\t\t\t\t\t\t\tdisabled: option.disabled,\n\t\t\t\t\t\t\t\t\t\t\t\thandleSelect: () => handleSelect(option),\n\t\t\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\t\t\t\t\tselected={option.value === currentValue}\n\t\t\t\t\t\t\t\t\t\tdisabled={option.disabled}\n\t\t\t\t\t\t\t\t\t\tleadingIcon={option.leadingIcon}\n\t\t\t\t\t\t\t\t\t\tsupportingText={option.supportingText}\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleSelect(option)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t{hasMore && (\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tref={sentinelRef}\n\t\t\t\t\t\t\t\t\tclassName=\"h-2 w-full shrink-0 pointer-events-none\"\n\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<SelectEmpty>{emptyText}</SelectEmpty>\n\t\t\t\t\t)}\n\t\t\t\t</MenuContent>\n\t\t\t</Menu>\n\t\t);\n\t},\n);\nSelect.displayName = \"Select\";\n\nfunction SelectLoading() {\n\treturn (\n\t\t<div className=\"flex items-center justify-center p-4\">\n\t\t\t<ProgressIndicator\n\t\t\t\tvariant=\"circular\"\n\t\t\t\tsize={24}\n\t\t\t\ttrackHeight={3}\n\t\t\t\taria-label=\"Loading options...\"\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction SelectEmpty({\n\tchildren,\n\tisGapVariant: _isGapVariant,\n\titemPosition: _itemPosition,\n\tindex: _index,\n\tcount: _count,\n\t...props\n}: {\n\tchildren?: React.ReactNode;\n\tisGapVariant?: boolean;\n\titemPosition?: string;\n\tindex?: number;\n\tcount?: number;\n} & React.HTMLAttributes<HTMLDivElement>) {\n\treturn (\n\t\t<div\n\t\t\t{...props}\n\t\t\tclassName=\"px-4 py-3 text-body-medium text-m3-on-surface-variant text-center select-none\"\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * useShapeMorph — React hook for shape morphing animations.\n *\n * Manages the Morph instance and animated progress value, returning a\n * CSS clip-path string that updates with every animation frame.\n *\n * @example\n * const { clipPath, handlers } = useShapeMorph({\n *   shape: \"circle\",\n *   morphTo: \"flower\",\n *   morphOn: \"hover\",\n *   width: 200,\n *   height: 200,\n * });\n *\n * return <div style={{ clipPath }} {...handlers}>{children}</div>;\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { resolveShape } from \"../../shapes/catalog/md3-expressive-shapes\";\nimport { Morph } from \"../../shapes/morph/morph\";\nimport {\n\tinterpolatePath,\n\ttoClipPath,\n} from \"../../shapes/render/shape-rendering\";\nimport type {\n\tMorphTrigger,\n\tShapeMorphOptions,\n\tShapeRef,\n\tUseShapeMorphResult,\n} from \"./types\";\n\ninterface UseShapeMorphOptions {\n\tshape: ShapeRef;\n\tmorphTo?: ShapeRef;\n\tmorphOn?: MorphTrigger;\n\tmorphOptions?: ShapeMorphOptions;\n\tscrollProgress?: number;\n\twidth: number;\n\theight: number;\n\tdisabled?: boolean;\n}\n\n/** Returns true if the user prefers reduced motion. */\nfunction prefersReducedMotion(): boolean {\n\tif (typeof window === \"undefined\") return false;\n\treturn window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n}\n\n/**\n * Hook for shape morphing with animated clip-path output.\n */\nexport function useShapeMorph({\n\tshape,\n\tmorphTo,\n\tmorphOn = \"hover\",\n\tmorphOptions,\n\tscrollProgress,\n\twidth,\n\theight,\n\tdisabled = false,\n}: UseShapeMorphOptions): UseShapeMorphResult {\n\tconst duration = morphOptions?.duration ?? 0.3;\n\tconst easing = morphOptions?.easing ?? \"ease-in-out\";\n\tconst easingFunction = useMemo(() => getEasingFunction(easing), [easing]);\n\n\t// ─── Memoize shape instances ─────────────────────────────────────────\n\tconst startShape = useMemo(() => resolveShape(shape), [shape]);\n\tconst endShape = useMemo(\n\t\t() => (morphTo ? resolveShape(morphTo) : null),\n\t\t[morphTo],\n\t);\n\n\t// ─── Memoize Morph instance ──────────────────────────────────────────\n\tconst morph = useMemo(\n\t\t() => (endShape ? new Morph(startShape, endShape) : null),\n\t\t[startShape, endShape],\n\t);\n\n\t// ─── Animation state ─────────────────────────────────────────────────\n\tconst [isActive, setIsActive] = useState(false);\n\tconst [clipPath, setClipPath] = useState<string>(() =>\n\t\ttoClipPath(startShape, width, height),\n\t);\n\n\t// Animation tracking\n\tconst animRef = useRef<number | null>(null);\n\tconst startTimeRef = useRef<number>(0);\n\tconst startProgressRef = useRef<number>(0);\n\tconst targetProgressRef = useRef<number>(0);\n\tconst currentProgressRef = useRef<number>(0);\n\n\t// ─── Update clip-path when dimensions change ──────────────────────────\n\tuseEffect(() => {\n\t\tif (morph) {\n\t\t\tsetClipPath(\n\t\t\t\tinterpolatePath(morph, currentProgressRef.current, width, height),\n\t\t\t);\n\t\t} else {\n\t\t\tsetClipPath(toClipPath(startShape, width, height));\n\t\t}\n\t}, [width, height, startShape, morph]);\n\n\t// ─── Scroll-driven mode ──────────────────────────────────────────────\n\tuseEffect(() => {\n\t\tif (morphOn !== \"scroll\" || !morph || scrollProgress === undefined) return;\n\t\tconst p = Math.max(0, Math.min(1, scrollProgress));\n\t\tcurrentProgressRef.current = p;\n\t\tsetClipPath(interpolatePath(morph, p, width, height));\n\t}, [scrollProgress, morphOn, morph, width, height]);\n\n\t// ─── Animation loop ──────────────────────────────────────────────────\n\tconst animate = useCallback(\n\t\t(timestamp: number) => {\n\t\t\tif (!morph) return;\n\t\t\tconst elapsed = timestamp - startTimeRef.current;\n\t\t\tconst durationMs = duration * 1000;\n\t\t\tconst rawT = Math.min(elapsed / durationMs, 1);\n\t\t\tconst ease = easingFunction(rawT);\n\t\t\tconst progress =\n\t\t\t\tstartProgressRef.current +\n\t\t\t\t(targetProgressRef.current - startProgressRef.current) * ease;\n\t\t\tcurrentProgressRef.current = progress;\n\t\t\tsetClipPath(interpolatePath(morph, progress, width, height));\n\n\t\t\tif (rawT < 1) {\n\t\t\t\tanimRef.current = requestAnimationFrame(animate);\n\t\t\t} else {\n\t\t\t\tanimRef.current = null;\n\t\t\t}\n\t\t},\n\t\t[morph, duration, easingFunction, width, height],\n\t);\n\n\tconst startAnimation = useCallback(\n\t\t(toProgress: number) => {\n\t\t\tif (!morph) return;\n\t\t\tif (prefersReducedMotion()) {\n\t\t\t\tcurrentProgressRef.current = toProgress;\n\t\t\t\tsetClipPath(interpolatePath(morph, toProgress, width, height));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (animRef.current !== null) cancelAnimationFrame(animRef.current);\n\t\t\tstartProgressRef.current = currentProgressRef.current;\n\t\t\ttargetProgressRef.current = toProgress;\n\t\t\tstartTimeRef.current = performance.now();\n\t\t\tanimRef.current = requestAnimationFrame(animate);\n\t\t},\n\t\t[morph, animate, width, height],\n\t);\n\n\t// Cleanup on unmount\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (animRef.current !== null) cancelAnimationFrame(animRef.current);\n\t\t};\n\t}, []);\n\n\t// ─── Actions ─────────────────────────────────────────────────────────\n\tconst activate = useCallback(() => {\n\t\tif (disabled || !morph) return;\n\t\tsetIsActive(true);\n\t\tstartAnimation(1);\n\t}, [disabled, morph, startAnimation]);\n\n\tconst deactivate = useCallback(() => {\n\t\tif (disabled || !morph) return;\n\t\tsetIsActive(false);\n\t\tstartAnimation(0);\n\t}, [disabled, morph, startAnimation]);\n\n\tconst setProgress = useCallback(\n\t\t(progress: number) => {\n\t\t\tif (!morph) return;\n\t\t\tconst p = Math.max(0, Math.min(1, progress));\n\t\t\tcurrentProgressRef.current = p;\n\t\t\tsetIsActive(p >= 0.5);\n\t\t\tsetClipPath(interpolatePath(morph, p, width, height));\n\t\t},\n\t\t[morph, width, height],\n\t);\n\n\t// ─── Event handlers ──────────────────────────────────────────────────\n\tconst handlers = useMemo(() => {\n\t\tif (!morphTo || disabled) return {};\n\t\tif (morphOn === \"hover\") {\n\t\t\treturn { onMouseEnter: activate, onMouseLeave: deactivate };\n\t\t}\n\t\tif (morphOn === \"click\") {\n\t\t\treturn {\n\t\t\t\tonClick: () => {\n\t\t\t\t\tif (isActive) deactivate();\n\t\t\t\t\telse activate();\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tif (morphOn === \"focus\") {\n\t\t\treturn { onFocus: activate, onBlur: deactivate };\n\t\t}\n\t\treturn {};\n\t}, [morphTo, disabled, morphOn, activate, deactivate, isActive]);\n\n\treturn { clipPath, isActive, activate, deactivate, setProgress, handlers };\n}\n\n// ─── Easing ──────────────────────────────────────────────────────────────────\n\nfunction easeCubicInOut(t: number): number {\n\treturn t < 0.5 ? 4 * t * t * t : 1 - (-2 * t + 2) ** 3 / 2;\n}\n\nfunction cubicBezier(\n\tx1: number,\n\ty1: number,\n\tx2: number,\n\ty2: number,\n): (t: number) => number {\n\treturn (t: number) => {\n\t\tif (t === 0 || t === 1) return t;\n\n\t\t// Newton-Raphson method for solving x(t_param) = t\n\t\tlet tParam = t;\n\t\tfor (let i = 0; i < 8; i++) {\n\t\t\tconst x =\n\t\t\t\t3 * (1 - tParam) ** 2 * tParam * x1 +\n\t\t\t\t3 * (1 - tParam) * tParam ** 2 * x2 +\n\t\t\t\ttParam ** 3;\n\t\t\tconst dx =\n\t\t\t\t3 * (1 - tParam) ** 2 * x1 +\n\t\t\t\t6 * (1 - tParam) * tParam * (x2 - x1) +\n\t\t\t\t3 * tParam ** 2 * (1 - x2);\n\t\t\tif (Math.abs(dx) < 1e-6) break;\n\t\t\ttParam -= (x - t) / dx;\n\t\t}\n\n\t\t// Calculate y(t_param)\n\t\treturn (\n\t\t\t3 * (1 - tParam) ** 2 * tParam * y1 +\n\t\t\t3 * (1 - tParam) * tParam ** 2 * y2 +\n\t\t\ttParam ** 3\n\t\t);\n\t};\n}\n\nfunction getEasingFunction(easing: string | number[]): (t: number) => number {\n\tif (Array.isArray(easing)) {\n\t\tif (easing.length === 4) {\n\t\t\tconst [x1, y1, x2, y2] = easing;\n\t\t\treturn cubicBezier(x1, y1, x2, y2);\n\t\t}\n\t\treturn easeCubicInOut;\n\t}\n\n\tswitch (easing) {\n\t\tcase \"linear\":\n\t\t\treturn (t) => t;\n\t\tcase \"ease-in\":\n\t\t\treturn (t) => t * t * t;\n\t\tcase \"ease-out\":\n\t\t\treturn (t) => 1 - (1 - t) ** 3;\n\t\tdefault:\n\t\t\treturn easeCubicInOut;\n\t}\n}\n","/**\n * ShapeMedia — wraps any UI element (image, video, button, div) with an MD3\n * Expressive shape clip-path, with optional shape morphing animation.\n *\n * @example\n * // Static shape\n * <ShapeMedia shape=\"sunny\" width={200} height={200}>\n *   <img src=\"/photo.jpg\" alt=\"A sunny photo\" />\n * </ShapeMedia>\n *\n * @example\n * // Shape morph on hover\n * <ShapeMedia shape=\"circle\" morphTo=\"flower\" morphOn=\"hover\" width={200} height={200}>\n *   <img src=\"/avatar.jpg\" alt=\"Avatar\" />\n * </ShapeMedia>\n */\n\nimport { type CSSProperties, useEffect, useRef, useState } from \"react\";\nimport type { ShapeMediaProps } from \"./types\";\nimport { useShapeMorph } from \"./useShapeMorph\";\n\n/**\n * ShapeMedia wraps children in a shape clip-path with optional morphing animation.\n *\n * @remarks\n * - Requires \"use client\" (uses ResizeObserver, animation APIs).\n * - Use ShapeMediaServer for SSR-only static rendering.\n * - Automatically handles `prefers-reduced-motion`.\n *\n * @param props - {@link ShapeMediaProps}\n */\nexport function ShapeMedia({\n\tshape,\n\tmorphTo,\n\tmorphOn = \"hover\",\n\tmorphOptions,\n\tscrollProgress,\n\twidth: widthProp,\n\theight: heightProp,\n\tchildren,\n\tclassName,\n\tstyle,\n\t\"aria-label\": ariaLabel,\n\trole,\n\tdisabled,\n}: ShapeMediaProps): React.JSX.Element {\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst [measuredWidth, setMeasuredWidth] = useState(widthProp ?? 0);\n\tconst [measuredHeight, setMeasuredHeight] = useState(heightProp ?? 0);\n\n\tconst width = widthProp ?? measuredWidth;\n\tconst height = heightProp ?? measuredHeight;\n\n\t// ─── ResizeObserver: auto-measure if no explicit dimensions ──────────\n\tuseEffect(() => {\n\t\tif (widthProp !== undefined && heightProp !== undefined) return;\n\t\tconst el = containerRef.current;\n\t\tif (!el) return;\n\t\tconst observer = new ResizeObserver(([entry]) => {\n\t\t\tconst { width: w, height: h } = entry.contentRect;\n\t\t\tsetMeasuredWidth(Math.round(w));\n\t\t\tsetMeasuredHeight(Math.round(h));\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [widthProp, heightProp]);\n\n\t// ─── Shape morph ──────────────────────────────────────────────────────\n\tconst { clipPath, handlers } = useShapeMorph({\n\t\tshape,\n\t\tmorphTo,\n\t\tmorphOn,\n\t\tmorphOptions,\n\t\tscrollProgress,\n\t\twidth: Math.max(width, 1),\n\t\theight: Math.max(height, 1),\n\t\tdisabled,\n\t});\n\n\t// ─── Accessibility ────────────────────────────────────────────────────\n\tconst resolvedRole = role ?? (ariaLabel ? \"img\" : \"presentation\");\n\tconst accessibilityProps = ariaLabel\n\t\t? { role: resolvedRole, \"aria-label\": ariaLabel }\n\t\t: { role: resolvedRole };\n\n\tconst computedStyle: CSSProperties = {\n\t\t...style,\n\t\tclipPath,\n\t\toverflow: \"hidden\",\n\t\tposition: \"relative\",\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={className}\n\t\t\tstyle={computedStyle}\n\t\t\t{...accessibilityProps}\n\t\t\t{...handlers}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * ShapeIcon — simplified fixed-size shape wrapper for icons and small elements.\n * Morphs to a circle on hover by default.\n *\n * @example\n * <ShapeIcon shape=\"sunny\" size={48}>\n *   <StarIcon />\n * </ShapeIcon>\n */\n\nimport type { CSSProperties } from \"react\";\nimport { ShapeMedia } from \"./shape-media\";\nimport type { ShapeIconProps } from \"./types\";\n\n/**\n * ShapeIcon renders a fixed-size shape with icon content inside.\n */\nexport function ShapeIcon({\n\tshape,\n\tmorphTo,\n\tsize = 48,\n\tchildren,\n\tclassName,\n\tstyle,\n\tcolor,\n\t\"aria-label\": ariaLabel,\n}: ShapeIconProps): React.JSX.Element {\n\tconst computedStyle: CSSProperties = {\n\t\twidth: size,\n\t\theight: size,\n\t\tdisplay: \"flex\",\n\t\talignItems: \"center\",\n\t\tjustifyContent: \"center\",\n\t\tbackgroundColor: color,\n\t\t...style,\n\t};\n\n\treturn (\n\t\t<ShapeMedia\n\t\t\tshape={shape}\n\t\t\tmorphTo={morphTo}\n\t\t\tmorphOn={morphTo ? \"hover\" : \"none\"}\n\t\t\twidth={size}\n\t\t\theight={size}\n\t\t\tclassName={className}\n\t\t\tstyle={computedStyle}\n\t\t\taria-label={ariaLabel}\n\t\t>\n\t\t\t{children}\n\t\t</ShapeMedia>\n\t);\n}\n","/**\n * ShapeMediaServer — SSR-safe static variant of ShapeMedia.\n *\n * Renders a static clip-path without any client-side JavaScript or hydration.\n * Use this in Next.js Server Components or any SSR context where you don't\n * need morphing animation.\n *\n * @example\n * // In a Next.js Server Component\n * import { ShapeMediaServer } from \"@bug-on/m3-expressive\";\n *\n * export default function ProfileCard() {\n *   return (\n *     <ShapeMediaServer shape=\"sunny\" width={200} height={200}>\n *       <img src=\"/avatar.jpg\" alt=\"Profile\" />\n *     </ShapeMediaServer>\n *   );\n * }\n */\n\nimport type { CSSProperties, ReactNode } from \"react\";\nimport { resolveShape } from \"../../shapes/catalog/md3-expressive-shapes\";\nimport { toClipPath } from \"../../shapes/render/shape-rendering\";\nimport type { ShapeRef } from \"./types\";\n\ninterface ShapeMediaServerProps {\n\t/** The shape to render. */\n\tshape: ShapeRef;\n\t/** Width in pixels. */\n\twidth: number;\n\t/** Height in pixels. */\n\theight: number;\n\t/** Children to render inside the clipped area. */\n\tchildren?: ReactNode;\n\t/** Additional CSS class names. */\n\tclassName?: string;\n\t/** Inline styles. */\n\tstyle?: CSSProperties;\n\t/** ARIA label. */\n\t\"aria-label\"?: string;\n\t/** ARIA role. */\n\trole?: string;\n}\n\n/**\n * SSR-safe shape clip-path wrapper. No animations, no JS required.\n */\nexport function ShapeMediaServer({\n\tshape,\n\twidth,\n\theight,\n\tchildren,\n\tclassName,\n\tstyle,\n\t\"aria-label\": ariaLabel,\n\trole,\n}: ShapeMediaServerProps): React.JSX.Element {\n\tconst polygon = resolveShape(shape);\n\tconst clipPath = toClipPath(polygon, width, height);\n\tconst resolvedRole = role ?? (ariaLabel ? \"img\" : \"presentation\");\n\tconst accessibilityProps = ariaLabel\n\t\t? { role: resolvedRole, \"aria-label\": ariaLabel }\n\t\t: { role: resolvedRole };\n\n\tconst computedStyle: CSSProperties = {\n\t\t...style,\n\t\tclipPath,\n\t\toverflow: \"hidden\",\n\t\tposition: \"relative\",\n\t};\n\n\treturn (\n\t\t<div className={className} style={computedStyle} {...accessibilityProps}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n","/**\n * ShapeSvg — renders a shape as an inline SVG path element.\n * Useful for decorative shapes, loading skeletons, and outlines.\n * Supports morphed rendering via a `progress` prop.\n *\n * @example\n * // Static shape\n * <ShapeSvg shape=\"sunny\" width={200} height={200} fill=\"#6750A4\" />\n *\n * @example\n * // Morphed shape (controlled externally)\n * <ShapeSvg shape=\"circle\" morphTo=\"flower\" progress={0.5} width={200} height={200} />\n */\n\nimport { useMemo } from \"react\";\nimport { resolveShape } from \"../../shapes/catalog/md3-expressive-shapes\";\nimport { Morph } from \"../../shapes/morph/morph\";\nimport { toSvgPath } from \"../../shapes/render/shape-rendering\";\nimport type { ShapeSvgProps } from \"./types\";\n\n/**\n * ShapeSvg renders a shape or morphed shape as a plain SVG path.\n */\nexport function ShapeSvg({\n\tshape,\n\tmorphTo,\n\tprogress = 0,\n\twidth = 100,\n\theight = 100,\n\tfill = \"currentColor\",\n\tstroke = \"none\",\n\tstrokeWidth = 0,\n\tclassName,\n\tstyle,\n\t\"aria-label\": ariaLabel,\n}: ShapeSvgProps): React.JSX.Element {\n\tconst startPolygon = useMemo(() => resolveShape(shape), [shape]);\n\tconst endPolygon = useMemo(\n\t\t() => (morphTo ? resolveShape(morphTo) : null),\n\t\t[morphTo],\n\t);\n\tconst morph = useMemo(\n\t\t() => (endPolygon ? new Morph(startPolygon, endPolygon) : null),\n\t\t[startPolygon, endPolygon],\n\t);\n\n\tconst pathData = useMemo(() => {\n\t\tconst cubics = morph ? morph.asCubics(progress) : startPolygon.cubics;\n\t\treturn toSvgPath(cubics, width, height);\n\t}, [morph, progress, startPolygon, width, height]);\n\n\treturn (\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox={`0 0 ${width} ${height}`}\n\t\t\twidth={width}\n\t\t\theight={height}\n\t\t\tclassName={className}\n\t\t\tstyle={style}\n\t\t\taria-label={ariaLabel}\n\t\t\trole={ariaLabel ? \"img\" : \"presentation\"}\n\t\t\taria-hidden={!ariaLabel}\n\t\t>\n\t\t\t<path\n\t\t\t\td={pathData}\n\t\t\t\tfill={fill}\n\t\t\t\tstroke={stroke}\n\t\t\t\tstrokeWidth={strokeWidth}\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n","/**\n * @file sheets/shared/drag-handle.tsx\n *\n * Visual drag handle for Bottom Sheet components.\n *\n * MD3 spec:\n * - Padding top/bottom: 22dp (\"Drag handle padding top/bottom: 22dp\")\n * - Width: 32dp, Height: 4dp, corner-full radius\n * - Color: on-surface-variant @ 40% opacity\n * - Touch target: top 48dp of sheet is interactive (py-[22px])\n * - When interactive: renders as `<button>`, Tab-focusable, Space/Enter cycles snap points\n * - When decorative: purely visual, no semantics\n *\n * @see https://m3.material.io/components/sheets-bottom/guidelines#handle\n * @see https://m3.material.io/components/sheets-bottom/accessibility\n */\n\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { DragHandleProps } from \"./types\";\n\nconst INDICATOR = \"h-1 w-8 rounded-full bg-m3-on-surface-variant/40\";\n\nexport const DragHandle = React.forwardRef<HTMLDivElement, DragHandleProps>(\n\t({ className, onCycle, \"aria-label\": ariaLabel }, ref) => {\n\t\tconst isInteractive = Boolean(onCycle);\n\n\t\tif (isInteractive) {\n\t\t\t/**\n\t\t\t * Interactive variant: native `<button>` wrapping the indicator bar.\n\t\t\t * Using `<button>` satisfies both `noStaticElementInteractions` and\n\t\t\t * `useAriaPropsSupportedByRole` lint rules without any overrides.\n\t\t\t */\n\t\t\treturn (\n\t\t\t\t<button\n\t\t\t\t\tref={ref as unknown as React.Ref<HTMLButtonElement>}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={ariaLabel ?? \"Adjust sheet height\"}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex items-center justify-center w-full pt-[30px] pb-[22px] shrink-0\",\n\t\t\t\t\t\t\"cursor-pointer bg-transparent border-0\",\n\t\t\t\t\t\t\"rounded-sm outline-none focus-visible:ring-[3px] focus-visible:ring-m3-on-surface-variant focus-visible:ring-offset-2\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tonClick={onCycle}\n\t\t\t\t\tdata-testid=\"sheet-drag-handle\"\n\t\t\t\t>\n\t\t\t\t\t<div className={INDICATOR} />\n\t\t\t\t</button>\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * Decorative variant: plain `<div>`, no semantics.\n\t\t * Purely visual — does not appear in the accessibility tree.\n\t\t */\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\taria-hidden\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center justify-center w-full pt-[30px] pb-[22px] shrink-0\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tdata-testid=\"sheet-drag-handle\"\n\t\t\t>\n\t\t\t\t<div className={INDICATOR} />\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nDragHandle.displayName = \"DragHandle\";\n","/**\n * @file sheets/shared/utils.ts\n *\n * Shared utility helpers for Bottom Sheet and Side Sheet components.\n */\n\nimport { DEFAULT_SPATIAL_SPRING } from \"../../shared/motion-tokens\";\nimport type { SheetEdge } from \"./types\";\n\n// ─── Divider resolution ───────────────────────────────────────────────────────\n\ntype DividerProp = boolean | { header?: boolean; footer?: boolean } | undefined;\n\n/**\n * Normalizes the `divider` prop into an explicit `{ header, footer }` object.\n */\nexport function resolveDividers(divider: DividerProp): {\n\theader: boolean;\n\tfooter: boolean;\n} {\n\tif (divider === false) return { header: false, footer: false };\n\tif (divider === undefined || divider === true) {\n\t\treturn { header: true, footer: true };\n\t}\n\treturn { header: divider.header ?? true, footer: divider.footer ?? true };\n}\n\n// ─── Sheet animation ──────────────────────────────────────────────────────────\n\n/**\n * Builds slide-in/out animation config for a Side Sheet based on its edge.\n */\nexport function buildSideSheetAnim(edge: SheetEdge) {\n\tconst exitX = edge === \"end\" ? \"100%\" : \"-100%\";\n\treturn {\n\t\tinitial: { x: exitX, opacity: 0.6 },\n\t\tanimate: { x: 0, opacity: 1, transition: DEFAULT_SPATIAL_SPRING },\n\t\texit: {\n\t\t\tx: exitX,\n\t\t\topacity: 0,\n\t\t\ttransition: { duration: 0.22, ease: \"easeIn\" as const },\n\t\t},\n\t} as const;\n}\n\n// ─── Default Sheet Styles ──────────────────────────────────────────────────────\n\n/**\n * Default background color class name for Bottom and Side Sheets.\n * Follows MD3 surfaceContainerLow token.\n */\nexport const DEFAULT_SHEET_BG = \"bg-m3-surface-container-low\";\n","/**\n * @file sheets/bottom-sheet/use-bottom-sheet.ts\n *\n * Custom hook encapsulating drag-to-dismiss and snap point gesture logic\n * for Bottom Sheet components, using manual touch/pointer events to allow\n * seamless scroll-to-drag handoffs without locking native nested scrolling.\n */\n\nimport { animate, useMotionValue, useTransform } from \"motion/react\";\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport type { BottomSheetSnapPoint } from \"../shared/types\";\n\nconst useIsomorphicLayoutEffect =\n\ttypeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst DISMISS_THRESHOLD = 0.4;\nconst DISMISS_VELOCITY_THRESHOLD = 600;\nconst DEFAULT_SAFE_AREA_OFFSET = 56;\nconst BOUNDARY_DAMPENING_ZONE = 80;\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nconst parseSnapPoint = (\n\tsnap: BottomSheetSnapPoint,\n\tviewportHeight: number,\n\tnaturalHeight: number,\n\tsafeAreaOffset: number,\n\tparsedMaxHeight: number,\n\thasUserSnapPoints: boolean,\n): number => {\n\tconst absoluteMaxHeight = viewportHeight - safeAreaOffset;\n\tconst capHeight = hasUserSnapPoints\n\t\t? absoluteMaxHeight\n\t\t: Math.min(absoluteMaxHeight, parsedMaxHeight);\n\n\tif (typeof snap === \"number\") return Math.min(snap, capHeight);\n\tif (snap === \"full\") return capHeight;\n\tif (snap === \"fit\" || snap === \"max-content\")\n\t\treturn Math.min(\n\t\t\tnaturalHeight,\n\t\t\tMath.min(absoluteMaxHeight, parsedMaxHeight),\n\t\t);\n\tif (snap === \"partiallyExpanded\")\n\t\treturn Math.min(Math.floor(viewportHeight * 0.5), capHeight);\n\n\tif (typeof snap === \"string\") {\n\t\tif (snap.endsWith(\"%\")) {\n\t\t\treturn Math.min((parseFloat(snap) / 100) * viewportHeight, capHeight);\n\t\t}\n\t\tif (snap.endsWith(\"px\")) {\n\t\t\treturn Math.min(parseFloat(snap), capHeight);\n\t\t}\n\t\tif (snap.endsWith(\"dvh\") || snap.endsWith(\"vh\")) {\n\t\t\treturn Math.min((parseFloat(snap) / 100) * viewportHeight, capHeight);\n\t\t}\n\t}\n\n\treturn Math.min(naturalHeight, capHeight);\n};\n\nconst measureSafeAreaOffset = (): number => {\n\tif (typeof document === \"undefined\") return DEFAULT_SAFE_AREA_OFFSET;\n\tconst el = document.createElement(\"div\");\n\tel.style.cssText =\n\t\t\"position:absolute;top:0;height:max(56px,env(safe-area-inset-top,0px));visibility:hidden;pointer-events:none\";\n\tdocument.body.appendChild(el);\n\tconst height = el.offsetHeight;\n\tdocument.body.removeChild(el);\n\treturn height;\n};\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface UseBottomSheetOptions {\n\tisOpen: boolean;\n\tonClose: () => void;\n\tsnapPoints?: BottomSheetSnapPoint[];\n\tdefaultSnapPoint?: BottomSheetSnapPoint;\n\tonSnapChange?: (snapPoint: BottomSheetSnapPoint) => void;\n\tgesturesEnabled?: boolean;\n\tisModal?: boolean;\n\tmaxHeight?: string;\n}\n\nexport interface UseBottomSheetReturn {\n\tscope: React.RefCallback<HTMLDivElement | null>;\n\ty: ReturnType<typeof useMotionValue<number>>;\n\tscrimOpacity: ReturnType<typeof useTransform<number, number>>;\n\tactiveSnapPoint: BottomSheetSnapPoint;\n\tisContentScrollable: boolean;\n\tsnapTo: (snapPoint: BottomSheetSnapPoint) => void;\n\tcycleSnapPoint: () => void;\n\tdragConstraints: { top: number; bottom: number };\n}\n\n// ─── Hook ─────────────────────────────────────────────────────────────────────\n\nexport function useBottomSheet({\n\tisOpen,\n\tonClose,\n\tsnapPoints,\n\tdefaultSnapPoint,\n\tonSnapChange,\n\tgesturesEnabled = true,\n\tisModal = false,\n\tmaxHeight,\n}: UseBottomSheetOptions): UseBottomSheetReturn {\n\tconst [scopeNode, setScopeNode] = useState<HTMLDivElement | null>(null);\n\tconst scopeNodeRef = useRef<HTMLDivElement | null>(null);\n\n\tconst scope = useCallback((node: HTMLDivElement | null) => {\n\t\tscopeNodeRef.current = node;\n\t\tsetScopeNode(node);\n\t}, []) as React.RefCallback<HTMLDivElement | null> & {\n\t\tcurrent: HTMLDivElement | null;\n\t};\n\n\tObject.defineProperty(scope, \"current\", {\n\t\tget: () => scopeNodeRef.current,\n\t\tset: (v) => {\n\t\t\tscopeNodeRef.current = v;\n\t\t},\n\t\tconfigurable: true,\n\t});\n\n\tconst y = useMotionValue(\n\t\ttypeof window !== \"undefined\"\n\t\t\t? window.visualViewport\n\t\t\t\t? window.visualViewport.height\n\t\t\t\t: window.innerHeight\n\t\t\t: 800,\n\t);\n\n\tconst [dimensions, setDimensions] = useState({\n\t\tviewportHeight:\n\t\t\ttypeof window !== \"undefined\"\n\t\t\t\t? window.visualViewport\n\t\t\t\t\t? window.visualViewport.height\n\t\t\t\t\t: window.innerHeight\n\t\t\t\t: 800,\n\t\tnaturalHeight: 0,\n\t\tsafeAreaOffset: DEFAULT_SAFE_AREA_OFFSET,\n\t});\n\n\tconst hasMeasuredAfterOpen = useRef(false);\n\n\tconst measureDimensions = useCallback(() => {\n\t\tconst node = scopeNodeRef.current;\n\t\tif (!node) return;\n\n\t\tconst viewportHeight = window.visualViewport\n\t\t\t? window.visualViewport.height\n\t\t\t: window.innerHeight;\n\t\tconst safeAreaOffset = measureSafeAreaOffset();\n\n\t\tconst viewport = node.querySelector(\"[data-radix-scroll-area-viewport]\");\n\t\tlet naturalHeight = node.scrollHeight;\n\n\t\tif (viewport) {\n\t\t\tlet nonScrollableHeight = 0;\n\t\t\tfor (let i = 0; i < node.children.length; i++) {\n\t\t\t\tconst child = node.children[i] as HTMLElement;\n\t\t\t\tif (!child.contains(viewport) && child !== viewport) {\n\t\t\t\t\tnonScrollableHeight += child.offsetHeight;\n\t\t\t\t}\n\t\t\t}\n\t\t\tnaturalHeight = nonScrollableHeight + viewport.scrollHeight;\n\t\t}\n\n\t\tif (naturalHeight > 0) hasMeasuredAfterOpen.current = true;\n\n\t\tsetDimensions((prev) => {\n\t\t\tif (\n\t\t\t\tprev.viewportHeight === viewportHeight &&\n\t\t\t\tprev.naturalHeight === naturalHeight &&\n\t\t\t\tprev.safeAreaOffset === safeAreaOffset\n\t\t\t) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\treturn { viewportHeight, naturalHeight, safeAreaOffset };\n\t\t});\n\t}, []);\n\n\tuseIsomorphicLayoutEffect(() => {\n\t\tif (!isOpen || !scopeNode) return;\n\t\tmeasureDimensions();\n\n\t\tconst observer = new ResizeObserver(measureDimensions);\n\t\tconst viewport = scopeNode.querySelector(\n\t\t\t\"[data-radix-scroll-area-viewport]\",\n\t\t);\n\n\t\tif (viewport) {\n\t\t\tobserver.observe(viewport);\n\t\t\tif (viewport.firstElementChild)\n\t\t\t\tobserver.observe(viewport.firstElementChild);\n\t\t} else {\n\t\t\tobserver.observe(scopeNode);\n\t\t}\n\n\t\twindow.addEventListener(\"resize\", measureDimensions);\n\t\treturn () => {\n\t\t\tobserver.disconnect();\n\t\t\twindow.removeEventListener(\"resize\", measureDimensions);\n\t\t};\n\t}, [isOpen, scopeNode, measureDimensions]);\n\n\tuseIsomorphicLayoutEffect(() => {\n\t\tconst vv = window.visualViewport;\n\t\tif (!isOpen || !vv) return;\n\t\tconst handleResize = () => {\n\t\t\tdocument.documentElement.style.setProperty(\n\t\t\t\t\"--sheet-vh\",\n\t\t\t\t`${vv.height}px`,\n\t\t\t);\n\t\t\tmeasureDimensions();\n\t\t};\n\t\tvv.addEventListener(\"resize\", handleResize);\n\t\thandleResize();\n\t\treturn () => vv.removeEventListener(\"resize\", handleResize);\n\t}, [isOpen, measureDimensions]);\n\n\tconst { viewportHeight, naturalHeight, safeAreaOffset } = dimensions;\n\n\tconst parsedMaxHeight = useMemo(() => {\n\t\tif (!maxHeight) return viewportHeight - safeAreaOffset;\n\t\tif (maxHeight.endsWith(\"px\")) return parseFloat(maxHeight);\n\t\tif (maxHeight.endsWith(\"dvh\") || maxHeight.endsWith(\"vh\")) {\n\t\t\treturn (parseFloat(maxHeight) / 100) * viewportHeight;\n\t\t}\n\t\tif (maxHeight.endsWith(\"%\")) {\n\t\t\treturn (parseFloat(maxHeight) / 100) * viewportHeight;\n\t\t}\n\t\treturn parseFloat(maxHeight) || viewportHeight - safeAreaOffset;\n\t}, [maxHeight, viewportHeight, safeAreaOffset]);\n\n\tconst snaps = useMemo((): BottomSheetSnapPoint[] => {\n\t\tif (snapPoints) return snapPoints;\n\t\tif (isModal) return [\"partiallyExpanded\", \"full\"];\n\t\treturn [\"fit\"];\n\t}, [snapPoints, isModal]);\n\n\tconst allowsViewportSnapExpansion =\n\t\tsnapPoints !== undefined || snaps.length > 1;\n\n\tconst snapHeights = useMemo(\n\t\t() =>\n\t\t\tsnaps.map((snap) =>\n\t\t\t\tparseSnapPoint(\n\t\t\t\t\tsnap,\n\t\t\t\t\tviewportHeight,\n\t\t\t\t\tnaturalHeight,\n\t\t\t\t\tsafeAreaOffset,\n\t\t\t\t\tparsedMaxHeight,\n\t\t\t\t\tallowsViewportSnapExpansion,\n\t\t\t\t),\n\t\t\t),\n\t\t[\n\t\t\tsnaps,\n\t\t\tviewportHeight,\n\t\t\tnaturalHeight,\n\t\t\tsafeAreaOffset,\n\t\t\tparsedMaxHeight,\n\t\t\tallowsViewportSnapExpansion,\n\t\t],\n\t);\n\n\tconst maxSheetHeight = useMemo(\n\t\t() => viewportHeight - safeAreaOffset,\n\t\t[viewportHeight, safeAreaOffset],\n\t);\n\n\tconst snapYValues = useMemo(\n\t\t() => snapHeights.map((h) => Math.max(0, maxSheetHeight - h)),\n\t\t[snapHeights, maxSheetHeight],\n\t);\n\n\tconst sortedSnaps = useMemo(() => {\n\t\tconst combined = snaps.map((point, idx) => ({\n\t\t\tpoint,\n\t\t\theight: snapHeights[idx],\n\t\t\ty: snapYValues[idx],\n\t\t}));\n\t\treturn combined.sort((a, b) => b.y - a.y);\n\t}, [snaps, snapHeights, snapYValues]);\n\n\tconst [activeSnapIndex, setActiveSnapIndex] = useState(0);\n\n\tconst activeSnapPoint = useMemo(\n\t\t() => sortedSnaps[activeSnapIndex]?.point ?? \"fit\",\n\t\t[sortedSnaps, activeSnapIndex],\n\t);\n\n\tconst isContentScrollable = useMemo(\n\t\t() => sortedSnaps.length <= 1 || activeSnapIndex === sortedSnaps.length - 1,\n\t\t[sortedSnaps, activeSnapIndex],\n\t);\n\n\tconst lowestSnapY = useMemo(() => sortedSnaps[0]?.y ?? 300, [sortedSnaps]);\n\tconst scrimOpacity = useTransform(y, [lowestSnapY, maxSheetHeight], [1, 0]);\n\n\tconst defaultSnap = useMemo(\n\t\t() => defaultSnapPoint ?? snaps[0] ?? \"fit\",\n\t\t[defaultSnapPoint, snaps],\n\t);\n\n\tconst prevIsOpen = useRef(isOpen);\n\n\tuseIsomorphicLayoutEffect(() => {\n\t\tif (isOpen && !prevIsOpen.current) {\n\t\t\ty.set(viewportHeight);\n\t\t\thasMeasuredAfterOpen.current = false;\n\t\t\tconst defaultIdx = sortedSnaps.findIndex((s) => s.point === defaultSnap);\n\t\t\tsetActiveSnapIndex(defaultIdx !== -1 ? defaultIdx : 0);\n\t\t} else if (!isOpen && prevIsOpen.current) {\n\t\t\tsetDimensions((prev) => ({ ...prev, naturalHeight: 0 }));\n\t\t\tvoid animate(y, viewportHeight, {\n\t\t\t\ttype: \"tween\",\n\t\t\t\tduration: 0.22,\n\t\t\t\tease: \"easeIn\",\n\t\t\t});\n\t\t}\n\t\tprevIsOpen.current = isOpen;\n\t}, [isOpen, y, viewportHeight, sortedSnaps, defaultSnap]);\n\n\tuseEffect(() => {\n\t\tif (!isOpen || sortedSnaps.length === 0 || naturalHeight === 0) return;\n\t\tif (!hasMeasuredAfterOpen.current) return;\n\n\t\tconst targetY = sortedSnaps[activeSnapIndex]?.y;\n\t\tif (targetY === undefined) return;\n\n\t\tvoid animate(y, targetY, { type: \"spring\", stiffness: 300, damping: 30 });\n\t}, [isOpen, sortedSnaps, activeSnapIndex, y, naturalHeight]);\n\n\tconst snapTo = useCallback(\n\t\t(snapPoint: BottomSheetSnapPoint) => {\n\t\t\tconst idx = sortedSnaps.findIndex((s) => s.point === snapPoint);\n\t\t\tif (idx === -1) return;\n\t\t\tsetActiveSnapIndex(idx);\n\t\t\tvoid animate(y, sortedSnaps[idx].y, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tstiffness: 300,\n\t\t\t\tdamping: 30,\n\t\t\t});\n\t\t\tonSnapChange?.(snapPoint);\n\t\t},\n\t\t[sortedSnaps, y, onSnapChange],\n\t);\n\n\tconst cycleSnapPoint = useCallback(() => {\n\t\tconst nextIdx = activeSnapIndex + 1;\n\t\tif (nextIdx >= sortedSnaps.length) {\n\t\t\tonClose();\n\t\t} else {\n\t\t\tsetActiveSnapIndex(nextIdx);\n\t\t\tvoid animate(y, sortedSnaps[nextIdx].y, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tstiffness: 300,\n\t\t\t\tdamping: 30,\n\t\t\t});\n\t\t\tonSnapChange?.(sortedSnaps[nextIdx].point);\n\t\t}\n\t}, [activeSnapIndex, sortedSnaps, y, onClose, onSnapChange]);\n\n\tconst dragConstraints = useMemo(\n\t\t() => ({\n\t\t\ttop: Math.max(0, sortedSnaps[sortedSnaps.length - 1]?.y ?? 0),\n\t\t\tbottom: viewportHeight,\n\t\t}),\n\t\t[sortedSnaps, viewportHeight],\n\t);\n\n\t// Seamless Manual Drag Gesture Handling (Touch + Mouse)\n\tuseEffect(() => {\n\t\tif (!isOpen || !gesturesEnabled || !scopeNode) return;\n\n\t\tconst node = scopeNode;\n\t\tconst viewport = node.querySelector(\n\t\t\t\"[data-radix-scroll-area-viewport]\",\n\t\t) as HTMLElement | null;\n\n\t\tlet startY = 0;\n\t\tlet initialSheetY = 0;\n\t\tlet isDragging = false;\n\t\tlet lastY = 0;\n\t\tlet lastTime = 0;\n\t\tlet velocity = 0;\n\t\tlet activeInput: \"touch\" | \"mouse\" | null = null;\n\t\tlet dragStartTarget: EventTarget | null = null;\n\t\tlet lastTouchTime = 0;\n\t\tlet preventNextClick = false;\n\n\t\tconst MOUSE_DRAG_THRESHOLD = 5;\n\n\t\tconst updateVelocity = (currentY: number) => {\n\t\t\tconst currentTime = performance.now();\n\t\t\tconst deltaTime = currentTime - lastTime;\n\t\t\tif (deltaTime > 0) {\n\t\t\t\tvelocity = ((currentY - lastY) / deltaTime) * 1000;\n\t\t\t}\n\t\t\tlastY = currentY;\n\t\t\tlastTime = currentTime;\n\t\t};\n\n\t\tconst tryStartDrag = (deltaY: number): boolean => {\n\t\t\tif (viewport?.contains(dragStartTarget as Node)) {\n\t\t\t\tconst isAtHighestSnap = activeSnapIndex === sortedSnaps.length - 1;\n\n\t\t\t\tif (!isAtHighestSnap) {\n\t\t\t\t\tisDragging = true;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tconst scrollTop = viewport.scrollTop;\n\t\t\t\tconst isPullingDown = deltaY > 0;\n\t\t\t\tif (!isDragging) {\n\t\t\t\t\tif (scrollTop <= 0 && isPullingDown) {\n\t\t\t\t\t\tisDragging = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tisDragging = true;\n\t\t\treturn true;\n\t\t};\n\n\t\tconst applyDragPosition = (deltaY: number) => {\n\t\t\tlet nextY = initialSheetY + deltaY;\n\t\t\tif (nextY < dragConstraints.top) {\n\t\t\t\tconst overdrag = dragConstraints.top - nextY;\n\t\t\t\tnextY = dragConstraints.top - overdrag * 0.15;\n\t\t\t}\n\t\t\ty.set(nextY);\n\t\t};\n\n\t\tconst finalizeDrag = () => {\n\t\t\tif (!isDragging) return;\n\t\t\tpreventNextClick = true;\n\t\t\tisDragging = false;\n\n\t\t\tconst currentY = y.get();\n\t\t\tconst lowestSnap = sortedSnaps[0];\n\t\t\tconst lowestY = lowestSnap?.y ?? viewportHeight;\n\t\t\tconst lowestHeight = lowestSnap?.height ?? 200;\n\n\t\t\tlet finalVelocity = velocity;\n\t\t\tif (finalVelocity > 0) {\n\t\t\t\tconst distanceToFloor = Math.max(0, currentY - lowestY);\n\t\t\t\tif (distanceToFloor < BOUNDARY_DAMPENING_ZONE) {\n\t\t\t\t\tconst factor = distanceToFloor / BOUNDARY_DAMPENING_ZONE;\n\t\t\t\t\tfinalVelocity *= factor * factor;\n\t\t\t\t\tif (velocity >= DISMISS_VELOCITY_THRESHOLD) {\n\t\t\t\t\t\tfinalVelocity = Math.max(\n\t\t\t\t\t\t\tfinalVelocity,\n\t\t\t\t\t\t\tDISMISS_VELOCITY_THRESHOLD * 0.1,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst dragOffset = Math.max(0, currentY - lowestY);\n\t\t\tconst shouldDismiss =\n\t\t\t\tfinalVelocity > DISMISS_VELOCITY_THRESHOLD ||\n\t\t\t\tdragOffset > lowestHeight * DISMISS_THRESHOLD;\n\n\t\t\tif (shouldDismiss) {\n\t\t\t\tonClose();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Snap to closest\n\t\t\tlet closestIdx = 0;\n\t\t\tlet minDiff = Infinity;\n\t\t\tfor (let i = 0; i < sortedSnaps.length; i++) {\n\t\t\t\tconst diff = Math.abs(sortedSnaps[i].y - currentY);\n\t\t\t\tif (diff < minDiff) {\n\t\t\t\t\tminDiff = diff;\n\t\t\t\t\tclosestIdx = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tsetActiveSnapIndex(closestIdx);\n\t\t\tvoid animate(y, sortedSnaps[closestIdx].y, {\n\t\t\t\ttype: \"spring\",\n\t\t\t\tstiffness: 380,\n\t\t\t\tdamping: 31.19,\n\t\t\t});\n\t\t\tonSnapChange?.(sortedSnaps[closestIdx].point);\n\t\t};\n\n\t\t// ── Touch handlers ──────────────────────────────────────────────────\n\t\tconst onTouchStart = (e: TouchEvent) => {\n\t\t\tlastTouchTime = Date.now();\n\t\t\tactiveInput = \"touch\";\n\t\t\tdragStartTarget = e.target;\n\t\t\tstartY = e.touches[0].clientY;\n\t\t\tinitialSheetY = y.get();\n\t\t\tisDragging = false;\n\t\t\tlastY = startY;\n\t\t\tlastTime = performance.now();\n\t\t\tvelocity = 0;\n\t\t};\n\n\t\tconst onTouchMove = (e: TouchEvent) => {\n\t\t\tif (!e.touches[0] || activeInput !== \"touch\") return;\n\t\t\tconst currentY = e.touches[0].clientY;\n\t\t\tconst deltaY = currentY - startY;\n\t\t\tupdateVelocity(currentY);\n\n\t\t\tif (tryStartDrag(deltaY)) {\n\t\t\t\te.preventDefault();\n\t\t\t\tapplyDragPosition(deltaY);\n\t\t\t}\n\t\t};\n\n\t\tconst onTouchEnd = () => {\n\t\t\tif (activeInput !== \"touch\") return;\n\t\t\tactiveInput = null;\n\t\t\tfinalizeDrag();\n\t\t\tdragStartTarget = null;\n\t\t};\n\n\t\t// ── Mouse handlers (desktop drag support) ───────────────────────────\n\t\tconst onMouseDown = (e: MouseEvent) => {\n\t\t\tif (e.button !== 0) return;\n\t\t\t// Ignore synthesized mouse events after touch interaction\n\t\t\tif (Date.now() - lastTouchTime < 500) return;\n\t\t\tactiveInput = \"mouse\";\n\t\t\tdragStartTarget = e.target;\n\t\t\tstartY = e.clientY;\n\t\t\tinitialSheetY = y.get();\n\t\t\tisDragging = false;\n\t\t\tlastY = startY;\n\t\t\tlastTime = performance.now();\n\t\t\tvelocity = 0;\n\t\t};\n\n\t\tconst onMouseMove = (e: MouseEvent) => {\n\t\t\tif (activeInput !== \"mouse\") return;\n\t\t\tconst currentY = e.clientY;\n\t\t\tconst deltaY = currentY - startY;\n\n\t\t\t// Require minimum movement to distinguish click from drag\n\t\t\tif (!isDragging && Math.abs(deltaY) < MOUSE_DRAG_THRESHOLD) return;\n\n\t\t\tupdateVelocity(currentY);\n\n\t\t\tif (tryStartDrag(deltaY)) {\n\t\t\t\te.preventDefault();\n\t\t\t\tdocument.body.style.userSelect = \"none\";\n\t\t\t\tapplyDragPosition(deltaY);\n\t\t\t}\n\t\t};\n\n\t\tconst onMouseUp = () => {\n\t\t\tif (activeInput !== \"mouse\") return;\n\t\t\tactiveInput = null;\n\t\t\tdocument.body.style.userSelect = \"\";\n\t\t\tfinalizeDrag();\n\t\t\tdragStartTarget = null;\n\t\t};\n\n\t\t// ── Click prevention after drag ─────────────────────────────────────\n\t\tconst onClickCapture = (e: MouseEvent) => {\n\t\t\tif (preventNextClick) {\n\t\t\t\te.stopPropagation();\n\t\t\t\tpreventNextClick = false;\n\t\t\t}\n\t\t};\n\n\t\t// Register events\n\t\tnode.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n\t\tnode.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n\t\tnode.addEventListener(\"touchend\", onTouchEnd);\n\t\tnode.addEventListener(\"touchcancel\", onTouchEnd);\n\t\tnode.addEventListener(\"mousedown\", onMouseDown);\n\t\tdocument.addEventListener(\"mousemove\", onMouseMove);\n\t\tdocument.addEventListener(\"mouseup\", onMouseUp);\n\t\tnode.addEventListener(\"click\", onClickCapture, true);\n\n\t\treturn () => {\n\t\t\tnode.removeEventListener(\"touchstart\", onTouchStart);\n\t\t\tnode.removeEventListener(\"touchmove\", onTouchMove);\n\t\t\tnode.removeEventListener(\"touchend\", onTouchEnd);\n\t\t\tnode.removeEventListener(\"touchcancel\", onTouchEnd);\n\t\t\tnode.removeEventListener(\"mousedown\", onMouseDown);\n\t\t\tdocument.removeEventListener(\"mousemove\", onMouseMove);\n\t\t\tdocument.removeEventListener(\"mouseup\", onMouseUp);\n\t\t\tnode.removeEventListener(\"click\", onClickCapture, true);\n\t\t\tdocument.body.style.userSelect = \"\";\n\t\t};\n\t}, [\n\t\tisOpen,\n\t\tgesturesEnabled,\n\t\tsortedSnaps,\n\t\tactiveSnapIndex,\n\t\ty,\n\t\tdragConstraints.top,\n\t\tviewportHeight,\n\t\tonClose,\n\t\tonSnapChange,\n\t\tscopeNode,\n\t]);\n\n\treturn {\n\t\tscope,\n\t\ty,\n\t\tscrimOpacity,\n\t\tactiveSnapPoint,\n\t\tisContentScrollable,\n\t\tsnapTo,\n\t\tcycleSnapPoint,\n\t\tdragConstraints,\n\t};\n}\n","/**\n * @file sheets/bottom-sheet/bottom-sheet.tsx\n *\n * Standard (non-modal) Bottom Sheet following MD3 specification.\n *\n * - Slide-up animation with DEFAULT_SPATIAL_SPRING\n * - Drag-to-dismiss with seamless nested scroll handling\n * - Visual Viewport API for mobile keyboard resize\n * - WAI-ARIA: `role=\"dialog\"`, `aria-modal=\"false\"`\n * - SSR-safe portal rendering\n *\n * @see https://m3.material.io/components/sheets-bottom/overview\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../../lib/utils\";\nimport { ScrollArea } from \"../../scroll-area\";\nimport { DEFAULT_SPATIAL_SPRING } from \"../../shared/motion-tokens\";\nimport { DragHandle } from \"../shared/drag-handle\";\nimport type { BaseSheetProps, BottomSheetSnapPoint } from \"../shared/types\";\nimport { DEFAULT_SHEET_BG, resolveDividers } from \"../shared/utils\";\nimport { useBottomSheet } from \"./use-bottom-sheet\";\n\n// ─── Animation constants ───────────────────────────────────────────────────────\n\nconst SHEET_ANIM = {\n\tinitial: { opacity: 0.6 },\n\tanimate: { opacity: 1, transition: DEFAULT_SPATIAL_SPRING },\n\texit: {\n\t\topacity: 0,\n\t\ttransition: { duration: 0.22, ease: \"easeIn\" as const },\n\t},\n} as const;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the standard (non-modal) Bottom Sheet.\n */\nexport interface BottomSheetProps extends BaseSheetProps {\n\t/**\n\t * Maximum height of the sheet.\n\t * @default \"90dvh\"\n\t */\n\tmaxHeight?: string;\n\n\t/**\n\t * Hide the drag handle visual indicator.\n\t * @default false\n\t */\n\thideHandle?: boolean;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nconst ABSOLUTE_MAX_HEIGHT =\n\t\"calc(100dvh - max(56px, env(safe-area-inset-top, 0px)))\";\n\nfunction resolveMaxHeight(\n\tmaxHeight: string,\n\tsnapPoints?: BottomSheetSnapPoint[],\n): string {\n\tif (maxHeight === \"90dvh\" && snapPoints && snapPoints.length > 0)\n\t\treturn ABSOLUTE_MAX_HEIGHT;\n\treturn maxHeight;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Standard (non-modal) Bottom Sheet that slides up from the bottom edge.\n *\n * Does NOT trap focus or block background interaction. Use `BottomSheetModal`\n * for blocking behaviour.\n *\n * @example\n * ```tsx\n * <BottomSheet isOpen={isOpen} onClose={() => setIsOpen(false)}>\n *   <p>Sheet content</p>\n * </BottomSheet>\n * ```\n */\nexport const BottomSheet = React.forwardRef<HTMLDivElement, BottomSheetProps>(\n\t(\n\t\t{\n\t\t\tisOpen,\n\t\t\tonClose,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tmaxHeight = \"90dvh\",\n\t\t\thideHandle = false,\n\t\t\tportal = true,\n\t\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\theader,\n\t\t\tfooter,\n\t\t\tdivider,\n\t\t\tscrollAreaProps,\n\t\t\tsnapPoints,\n\t\t\tdefaultSnapPoint,\n\t\t\tonSnapChange,\n\t\t\tgesturesEnabled = true,\n\t\t\tcontainerColor,\n\t\t\tsheetMaxWidth,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst { scope, y, isContentScrollable, snapTo, cycleSnapPoint } =\n\t\t\tuseBottomSheet({\n\t\t\t\tisOpen,\n\t\t\t\tonClose,\n\t\t\t\tsnapPoints,\n\t\t\t\tdefaultSnapPoint,\n\t\t\t\tonSnapChange,\n\t\t\t\tgesturesEnabled,\n\t\t\t\tisModal: false,\n\t\t\t\tmaxHeight: resolveMaxHeight(maxHeight, snapPoints),\n\t\t\t});\n\n\t\t// Expose snapTo on the DOM node for programmatic control\n\t\tReact.useEffect(() => {\n\t\t\tconst node = (scope as unknown as { current: HTMLDivElement | null })\n\t\t\t\t.current;\n\t\t\tif (node) {\n\t\t\t\t(\n\t\t\t\t\tnode as HTMLDivElement & {\n\t\t\t\t\t\tsnapTo: (sp: BottomSheetSnapPoint) => void;\n\t\t\t\t\t}\n\t\t\t\t).snapTo = snapTo;\n\t\t\t}\n\t\t}, [snapTo, scope]);\n\n\t\tconst [mounted, setMounted] = React.useState(false);\n\t\tReact.useEffect(() => {\n\t\t\tsetMounted(true);\n\t\t}, []);\n\n\t\tconst resolvedDividers = React.useMemo(\n\t\t\t() => resolveDividers(divider),\n\t\t\t[divider],\n\t\t);\n\t\tconst resolvedSheetMaxWidth = React.useMemo(() => {\n\t\t\tif (sheetMaxWidth === undefined)\n\t\t\t\treturn \"var(--m3-bottom-sheet-max-width, 640px)\";\n\t\t\tif (typeof sheetMaxWidth === \"number\") return `${sheetMaxWidth}px`;\n\t\t\treturn sheetMaxWidth;\n\t\t}, [sheetMaxWidth]);\n\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLDivElement | null) => {\n\t\t\t\tscope(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[scope, ref],\n\t\t);\n\n\t\tconst content = (\n\t\t\t<AnimatePresence>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tref={mergedRef}\n\t\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\t\taria-modal=\"false\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"fixed bottom-0 z-50\",\n\t\t\t\t\t\t\t\"left-0 right-0 mx-auto\",\n\t\t\t\t\t\t\t\"rounded-t-[28px]\",\n\t\t\t\t\t\t\t!containerColor && DEFAULT_SHEET_BG,\n\t\t\t\t\t\t\t\"flex flex-col overflow-hidden\",\n\t\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-inset\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackgroundColor: containerColor,\n\t\t\t\t\t\t\t// Container must span the full available viewport height so that\n\t\t\t\t\t\t\t// snap points above the default maxHeight (e.g. \"full\", \"70%\")\n\t\t\t\t\t\t\t// can reveal their content via the y (translateY) offset mechanism.\n\t\t\t\t\t\t\theight: \"var(--sheet-vh, 100dvh)\",\n\t\t\t\t\t\t\tmaxHeight: ABSOLUTE_MAX_HEIGHT,\n\t\t\t\t\t\t\tmaxWidth: resolvedSheetMaxWidth,\n\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\t{...SHEET_ANIM}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!hideHandle && <DragHandle onCycle={cycleSnapPoint} />}\n\n\t\t\t\t\t\t{header && <div className=\"shrink-0 px-6 pb-4\">{header}</div>}\n\t\t\t\t\t\t{header && resolvedDividers.header && (\n\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\ttype=\"hover\"\n\t\t\t\t\t\t\t{...scrollAreaProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex-1 min-h-0 min-w-0\",\n\t\t\t\t\t\t\t\tscrollAreaProps?.className,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tviewportClassName={cn(\n\t\t\t\t\t\t\t\t\"px-6 pb-6 overscroll-contain\",\n\t\t\t\t\t\t\t\theader ? \"pt-4\" : \"\",\n\t\t\t\t\t\t\t\tscrollAreaProps?.viewportClassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tviewportProps={{\n\t\t\t\t\t\t\t\t...scrollAreaProps?.viewportProps,\n\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t...scrollAreaProps?.viewportProps?.style,\n\t\t\t\t\t\t\t\t\toverflowY: isContentScrollable ? \"auto\" : \"hidden\",\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{children}\n\t\t\t\t\t\t</ScrollArea>\n\n\t\t\t\t\t\t{footer && resolvedDividers.footer && (\n\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{footer && <div className=\"shrink-0 px-6 pt-4 pb-6\">{footer}</div>}\n\t\t\t\t\t</m.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\n\t\tif (portal) {\n\t\t\tif (!mounted) return null;\n\t\t\treturn createPortal(content, document.body);\n\t\t}\n\n\t\treturn content;\n\t},\n);\n\nBottomSheet.displayName = \"BottomSheet\";\n","/**\n * @file sheets/shared/scrim.tsx\n *\n * Animated backdrop overlay (Scrim) for Modal Sheet variants.\n *\n * Supports animated opacity via `style.opacity` (MotionValue) so the scrim\n * fades in real-time as the user drags the sheet toward dismiss position.\n *\n * @see https://m3.material.io/components/sheets-bottom/guidelines#b0025900-5e5b-4c4a-9a76-e0d09d63afdb\n */\n\nimport type { MotionStyle } from \"motion/react\";\nimport { m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport type { ScrimProps } from \"./types\";\n\nconst SCRIM_ANIM = {\n\tinitial: { opacity: 0 },\n\tanimate: {\n\t\topacity: 1,\n\t\ttransition: { duration: 0.2, ease: \"easeOut\" as const },\n\t},\n\texit: { opacity: 0, transition: { duration: 0.18, ease: \"easeIn\" as const } },\n} as const;\n\n/**\n * Translucent backdrop rendered behind modal sheet variants.\n * Clicking the scrim triggers `onClick`.\n * Pass `style.opacity` as a MotionValue to link scrim opacity with sheet drag position.\n */\nexport const Scrim = React.forwardRef<HTMLDivElement, ScrimProps>(\n\t({ onClick, className, style }, ref) => (\n\t\t<m.div\n\t\t\tref={ref}\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName={cn(\"fixed inset-0 z-40 bg-black/40\", className)}\n\t\t\tonClick={onClick}\n\t\t\tstyle={style as MotionStyle}\n\t\t\t{...SCRIM_ANIM}\n\t\t/>\n\t),\n);\n\nScrim.displayName = \"Scrim\";\n","/**\n * @file sheets/bottom-sheet/bottom-sheet-modal.tsx\n *\n * Modal Bottom Sheet — blocks background interaction.\n *\n * Android Jetpack Compose parity:\n * - Entry animation: slides up from y=100% (GAP 6 fix)\n * - PartiallyExpanded default: opens at 50% screen (GAP 1 via isModal flag)\n * - sheetMaxWidth: max-width 640px centered (GAP 2 fix)\n * - Scrim opacity linked to drag position via MotionValue (GAP 8 fix)\n * - DragHandle keyboard-accessible with cycle (GAP 3 fix)\n * - gesturesEnabled prop to disable all drag (GAP 7 fix)\n * - containerColor / contentColor props (GAP 9 fix)\n * - IME / Visual Viewport handled by hook (GAP 11 fix)\n *\n * @see https://m3.material.io/components/sheets-bottom/guidelines#modal\n */\n\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { ScrollArea } from \"../../scroll-area\";\nimport { DEFAULT_SPATIAL_SPRING } from \"../../shared/motion-tokens\";\nimport { DragHandle } from \"../shared/drag-handle\";\nimport { Scrim } from \"../shared/scrim\";\nimport type { BaseSheetProps, BottomSheetSnapPoint } from \"../shared/types\";\nimport { DEFAULT_SHEET_BG, resolveDividers } from \"../shared/utils\";\nimport { useBottomSheet } from \"./use-bottom-sheet\";\n\n// ─── Animation constants ───────────────────────────────────────────────────────\n\n/**\n * Entry: slide up from bottom (y: 100% → 0) + fade.\n * Exit: slide back down (y: 0 → 100%) + fade.\n * Mirrors Android AnchoredDraggable defaultSpatialSpec motion.\n */\nconst SHEET_ANIM = {\n\tinitial: { opacity: 0.6 },\n\tanimate: { opacity: 1, transition: DEFAULT_SPATIAL_SPRING },\n\texit: {\n\t\topacity: 0,\n\t\ttransition: { duration: 0.22, ease: \"easeIn\" as const },\n\t},\n} as const;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the modal Bottom Sheet.\n */\nexport interface BottomSheetModalProps extends BaseSheetProps {\n\t/**\n\t * Maximum height of the sheet.\n\t * @default \"90dvh\"\n\t */\n\tmaxHeight?: string;\n\n\t/**\n\t * Hide the drag handle visual indicator.\n\t * @default false\n\t */\n\thideHandle?: boolean;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nconst ABSOLUTE_MAX_HEIGHT =\n\t\"calc(100dvh - max(56px, env(safe-area-inset-top, 0px)))\";\n\nfunction resolveMaxHeight(\n\tmaxHeight: string,\n\tsnapPoints?: BottomSheetSnapPoint[],\n): string {\n\tif (maxHeight === \"90dvh\" && snapPoints && snapPoints.length > 0)\n\t\treturn ABSOLUTE_MAX_HEIGHT;\n\treturn maxHeight;\n}\n\n/** Converts sheetMaxWidth to a CSS string value. */\nfunction resolveSheetMaxWidth(value?: string | number): string {\n\tif (value === undefined) return \"var(--m3-bottom-sheet-max-width, 640px)\";\n\tif (typeof value === \"number\") return `${value}px`;\n\treturn value;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Modal Bottom Sheet that slides up from the bottom edge.\n *\n * Renders into a portal, traps focus, locks body scroll, and blocks\n * background interaction with an animated Scrim.\n *\n * Dismiss by: swiping down, clicking the Scrim, or pressing Escape.\n *\n * @example\n * ```tsx\n * <BottomSheetModal isOpen={isOpen} onClose={() => setIsOpen(false)} aria-labelledby=\"sheet-title\">\n *   <h2 id=\"sheet-title\">Title</h2>\n *   <p>Modal sheet content</p>\n * </BottomSheetModal>\n * ```\n */\nexport const BottomSheetModal = React.forwardRef<\n\tHTMLDivElement,\n\tBottomSheetModalProps\n>(\n\t(\n\t\t{\n\t\t\tisOpen,\n\t\t\tonClose,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tmaxHeight = \"90dvh\",\n\t\t\thideHandle = false,\n\t\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\theader,\n\t\t\tfooter,\n\t\t\tdivider,\n\t\t\tscrollAreaProps,\n\t\t\tsnapPoints,\n\t\t\tdefaultSnapPoint,\n\t\t\tonSnapChange,\n\t\t\tgesturesEnabled = true,\n\t\t\tcontainerColor,\n\t\t\tsheetMaxWidth,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tscope,\n\t\t\ty,\n\t\t\tscrimOpacity,\n\t\t\tisContentScrollable,\n\t\t\tsnapTo,\n\t\t\tcycleSnapPoint,\n\t\t} = useBottomSheet({\n\t\t\tisOpen,\n\t\t\tonClose,\n\t\t\tsnapPoints,\n\t\t\tdefaultSnapPoint,\n\t\t\tonSnapChange,\n\t\t\tgesturesEnabled,\n\t\t\tisModal: true,\n\t\t\tmaxHeight: resolveMaxHeight(maxHeight, snapPoints),\n\t\t});\n\n\t\tReact.useEffect(() => {\n\t\t\tconst node = (scope as unknown as { current: HTMLDivElement | null })\n\t\t\t\t.current;\n\t\t\tif (node) {\n\t\t\t\t(\n\t\t\t\t\tnode as HTMLDivElement & {\n\t\t\t\t\t\tsnapTo: (sp: BottomSheetSnapPoint) => void;\n\t\t\t\t\t}\n\t\t\t\t).snapTo = snapTo;\n\t\t\t}\n\t\t}, [snapTo, scope]);\n\n\t\tconst resolvedDividers = React.useMemo(\n\t\t\t() => resolveDividers(divider),\n\t\t\t[divider],\n\t\t);\n\n\t\tconst resolvedSheetMaxWidth = React.useMemo(\n\t\t\t() => resolveSheetMaxWidth(sheetMaxWidth),\n\t\t\t[sheetMaxWidth],\n\t\t);\n\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLDivElement | null) => {\n\t\t\t\tscope(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[scope, ref],\n\t\t);\n\n\t\treturn (\n\t\t\t<RadixDialog.Root\n\t\t\t\topen={isOpen}\n\t\t\t\tonOpenChange={(open) => !open && onClose()}\n\t\t\t>\n\t\t\t\t<RadixDialog.Portal forceMount>\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{isOpen && (\n\t\t\t\t\t\t\t<RadixDialog.Overlay asChild key=\"scrim\" forceMount>\n\t\t\t\t\t\t\t\t<Scrim onClick={onClose} style={{ opacity: scrimOpacity }} />\n\t\t\t\t\t\t\t</RadixDialog.Overlay>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{isOpen && (\n\t\t\t\t\t\t\t<RadixDialog.Content\n\t\t\t\t\t\t\t\tasChild\n\t\t\t\t\t\t\t\tkey=\"content\"\n\t\t\t\t\t\t\t\tforceMount\n\t\t\t\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\tref={mergedRef}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t// Positioning: fixed at bottom, centered with max-width\n\t\t\t\t\t\t\t\t\t\t\"fixed bottom-0 z-50\",\n\t\t\t\t\t\t\t\t\t\t\"left-0 right-0 mx-auto\",\n\t\t\t\t\t\t\t\t\t\t// Visual style\n\t\t\t\t\t\t\t\t\t\t\"rounded-t-[28px]\",\n\t\t\t\t\t\t\t\t\t\t!containerColor && DEFAULT_SHEET_BG,\n\t\t\t\t\t\t\t\t\t\t\"flex flex-col overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-inset\",\n\t\t\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\tbackgroundColor: containerColor,\n\t\t\t\t\t\t\t\t\t\theight: \"var(--sheet-vh, 100dvh)\",\n\t\t\t\t\t\t\t\t\t\t// Container must span the full available viewport height so that\n\t\t\t\t\t\t\t\t\t\t// snap points above the default maxHeight (e.g. \"full\", \"70%\")\n\t\t\t\t\t\t\t\t\t\t// can reveal their content via the y (translateY) offset mechanism.\n\t\t\t\t\t\t\t\t\t\tmaxHeight: ABSOLUTE_MAX_HEIGHT,\n\t\t\t\t\t\t\t\t\t\tmaxWidth: resolvedSheetMaxWidth,\n\t\t\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t{...SHEET_ANIM}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<RadixDialog.Title className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t{ariaLabel || \"Bottom Sheet\"}\n\t\t\t\t\t\t\t\t\t</RadixDialog.Title>\n\n\t\t\t\t\t\t\t\t\t{!hideHandle && <DragHandle onCycle={cycleSnapPoint} />}\n\n\t\t\t\t\t\t\t\t\t{header && <div className=\"shrink-0 px-6 pb-4\">{header}</div>}\n\t\t\t\t\t\t\t\t\t{header && resolvedDividers.header && (\n\t\t\t\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\t\t\t\ttype=\"hover\"\n\t\t\t\t\t\t\t\t\t\t{...scrollAreaProps}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"flex-1 min-h-0 min-w-0\",\n\t\t\t\t\t\t\t\t\t\t\tscrollAreaProps?.className,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tviewportClassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"px-6 pb-6 overscroll-contain\",\n\t\t\t\t\t\t\t\t\t\t\theader ? \"pt-4\" : \"\",\n\t\t\t\t\t\t\t\t\t\t\tscrollAreaProps?.viewportClassName,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tviewportProps={{\n\t\t\t\t\t\t\t\t\t\t\t...scrollAreaProps?.viewportProps,\n\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\t...scrollAreaProps?.viewportProps?.style,\n\t\t\t\t\t\t\t\t\t\t\t\toverflowY: isContentScrollable ? \"auto\" : \"hidden\",\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t</ScrollArea>\n\n\t\t\t\t\t\t\t\t\t{footer && resolvedDividers.footer && (\n\t\t\t\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t{footer && (\n\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 px-6 pt-4 pb-6\">{footer}</div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t</RadixDialog.Content>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t</RadixDialog.Portal>\n\t\t\t</RadixDialog.Root>\n\t\t);\n\t},\n);\n\nBottomSheetModal.displayName = \"BottomSheetModal\";\n","/**\n * @file sheets/side-sheet/side-sheet.tsx\n *\n * Standard (non-modal) Side Sheet following MD3 specification.\n *\n * - Slides from `start` (left in LTR) or `end` (right in LTR) edge\n * - Coplanar sibling support via `coplanarSiblingRef` — animates adjacent\n *   content's margin using a CSS transition\n * - Inline rendering (no portal) — does not block background interaction\n * - WAI-ARIA: `role=\"complementary\"`\n *\n * @see https://m3.material.io/components/side-sheets/overview\n */\n\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { cn } from \"../../../lib/utils\";\nimport { ScrollArea } from \"../../scroll-area\";\nimport { getMotionTransitionCSS } from \"../../shared/motion-tokens\";\nimport type { BaseSheetProps, SheetEdge } from \"../shared/types\";\nimport { buildSideSheetAnim, resolveDividers } from \"../shared/utils\";\n\nconst COPLANAR_TRANSITION = `margin ${getMotionTransitionCSS(\"default\", \"spatial\")}`;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the standard (non-modal) Side Sheet.\n */\nexport interface SideSheetProps extends BaseSheetProps {\n\t/**\n\t * Which edge the sheet slides in from.\n\t * - `start` — left in LTR, right in RTL\n\t * - `end`   — right in LTR, left in RTL\n\t * @default \"end\"\n\t */\n\tedge?: SheetEdge;\n\n\t/**\n\t * Width of the sheet.\n\t * @default \"360px\"\n\t */\n\twidth?: string;\n\n\t/**\n\t * Ref to the sibling element that should animate its margin when the\n\t * sheet opens/closes (coplanar layout).\n\t *\n\t * @example\n\t * ```tsx\n\t * const mainRef = useRef<HTMLDivElement>(null);\n\t * <main ref={mainRef}>...</main>\n\t * <SideSheet coplanarSiblingRef={mainRef} isOpen={open} onClose={handleClose}>\n\t *   ...\n\t * </SideSheet>\n\t * ```\n\t */\n\tcoplanarSiblingRef?: React.RefObject<HTMLElement | null>;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Standard (non-modal) Side Sheet that slides in from a screen edge.\n *\n * Does NOT block background interaction. Pass `coplanarSiblingRef` to\n * enable automatic margin animation on an adjacent element.\n */\nexport const SideSheet = React.forwardRef<HTMLElement, SideSheetProps>(\n\t(\n\t\t{\n\t\t\tisOpen,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tedge = \"end\",\n\t\t\twidth = \"360px\",\n\t\t\tcoplanarSiblingRef,\n\t\t\tportal = true,\n\t\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\theader,\n\t\t\tfooter,\n\t\t\tdivider,\n\t\t\tscrollAreaProps,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst sheetAnim = React.useMemo(() => buildSideSheetAnim(edge), [edge]);\n\n\t\tconst [mounted, setMounted] = React.useState(false);\n\t\tReact.useEffect(() => {\n\t\t\tsetMounted(true);\n\t\t}, []);\n\n\t\tconst resolvedDividers = React.useMemo(\n\t\t\t() => resolveDividers(divider),\n\t\t\t[divider],\n\t\t);\n\n\t\t// Coplanar sibling margin animation\n\t\tReact.useEffect(() => {\n\t\t\tconst sibling = coplanarSiblingRef?.current;\n\t\t\tif (!sibling) return;\n\n\t\t\tsibling.style.transition = COPLANAR_TRANSITION;\n\t\t\tconst marginProp = edge === \"end\" ? \"marginRight\" : \"marginLeft\";\n\t\t\tsibling.style[marginProp] = isOpen ? width : \"\";\n\n\t\t\treturn () => {\n\t\t\t\tsibling.style.marginRight = \"\";\n\t\t\t\tsibling.style.marginLeft = \"\";\n\t\t\t\tsibling.style.transition = \"\";\n\t\t\t};\n\t\t}, [isOpen, edge, width, coplanarSiblingRef]);\n\n\t\tconst content = (\n\t\t\t<AnimatePresence>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<m.aside\n\t\t\t\t\t\tref={ref as React.Ref<HTMLElement>}\n\t\t\t\t\t\trole=\"complementary\"\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"fixed top-0 bottom-0 z-40\",\n\t\t\t\t\t\t\tedge === \"end\" ? \"right-0\" : \"left-0\",\n\t\t\t\t\t\t\t\"bg-m3-surface-container-low\",\n\t\t\t\t\t\t\t\"flex flex-col overflow-hidden\",\n\t\t\t\t\t\t\tedge === \"end\"\n\t\t\t\t\t\t\t\t? \"border-l border-m3-outline-variant\"\n\t\t\t\t\t\t\t\t: \"border-r border-m3-outline-variant\",\n\t\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-inset\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{ width }}\n\t\t\t\t\t\t{...sheetAnim}\n\t\t\t\t\t>\n\t\t\t\t\t\t{header && <div className=\"shrink-0 px-6 py-4\">{header}</div>}\n\t\t\t\t\t\t{header && resolvedDividers.header && (\n\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\ttype=\"hover\"\n\t\t\t\t\t\t\t{...scrollAreaProps}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex-1 min-h-0 min-w-0\",\n\t\t\t\t\t\t\t\tscrollAreaProps?.className,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tviewportClassName={cn(\n\t\t\t\t\t\t\t\t\"overscroll-contain\",\n\t\t\t\t\t\t\t\tscrollAreaProps?.viewportClassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tviewportProps={scrollAreaProps?.viewportProps}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</ScrollArea>\n\n\t\t\t\t\t\t{footer && resolvedDividers.footer && (\n\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{footer && <div className=\"shrink-0 px-6 py-4\">{footer}</div>}\n\t\t\t\t\t</m.aside>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\n\t\tif (portal) {\n\t\t\tif (!mounted) return null;\n\t\t\treturn createPortal(content, document.body);\n\t\t}\n\n\t\treturn content;\n\t},\n);\n\nSideSheet.displayName = \"SideSheet\";\n","/**\n * @file sheets/side-sheet/side-sheet-modal.tsx\n *\n * Modal Side Sheet — blocks background interaction with a Scrim overlay.\n *\n * Differences from `SideSheet` (standard):\n * - Uses `@radix-ui/react-dialog` for focus trap & scroll lock\n * - Portal rendering outside current DOM tree\n * - Scrim blocks background; clicking it calls `onClose`\n * - Escape key calls `onClose` (Radix built-in)\n * - `aria-modal=\"true\"`\n *\n * @see https://m3.material.io/components/side-sheets/guidelines#modal\n */\n\nimport * as RadixDialog from \"@radix-ui/react-dialog\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../../lib/utils\";\nimport { ScrollArea } from \"../../scroll-area\";\nimport { Scrim } from \"../shared/scrim\";\nimport type { BaseSheetProps, SheetEdge } from \"../shared/types\";\nimport { buildSideSheetAnim, resolveDividers } from \"../shared/utils\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Props for the modal Side Sheet.\n */\nexport interface SideSheetModalProps extends BaseSheetProps {\n\t/**\n\t * Which edge the sheet slides in from.\n\t * @default \"end\"\n\t */\n\tedge?: SheetEdge;\n\n\t/**\n\t * Width of the sheet.\n\t * @default \"360px\"\n\t */\n\twidth?: string;\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\n/**\n * Modal Side Sheet that slides in from a screen edge and blocks background interaction.\n *\n * Dismiss by: clicking the Scrim or pressing Escape.\n *\n * @example\n * ```tsx\n * <SideSheetModal isOpen={isOpen} onClose={() => setIsOpen(false)} edge=\"end\" aria-labelledby=\"panel-title\">\n *   <h2 id=\"panel-title\">Panel</h2>\n *   <p>Modal side content</p>\n * </SideSheetModal>\n * ```\n */\nexport const SideSheetModal = React.forwardRef<\n\tHTMLDivElement,\n\tSideSheetModalProps\n>(\n\t(\n\t\t{\n\t\t\tisOpen,\n\t\t\tonClose,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\tedge = \"end\",\n\t\t\twidth = \"360px\",\n\t\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\theader,\n\t\t\tfooter,\n\t\t\tdivider,\n\t\t\tscrollAreaProps,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst sheetAnim = React.useMemo(() => buildSideSheetAnim(edge), [edge]);\n\t\tconst resolvedDividers = React.useMemo(\n\t\t\t() => resolveDividers(divider),\n\t\t\t[divider],\n\t\t);\n\n\t\treturn (\n\t\t\t<RadixDialog.Root\n\t\t\t\topen={isOpen}\n\t\t\t\tonOpenChange={(open) => !open && onClose()}\n\t\t\t>\n\t\t\t\t<RadixDialog.Portal forceMount>\n\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t{isOpen && (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<RadixDialog.Overlay asChild>\n\t\t\t\t\t\t\t\t\t<Scrim onClick={onClose} />\n\t\t\t\t\t\t\t\t</RadixDialog.Overlay>\n\n\t\t\t\t\t\t\t\t<RadixDialog.Content\n\t\t\t\t\t\t\t\t\tasChild\n\t\t\t\t\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\t\t\t\tonEscapeKeyDown={onClose}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\"fixed top-0 bottom-0 z-50\",\n\t\t\t\t\t\t\t\t\t\t\tedge === \"end\" ? \"right-0\" : \"left-0\",\n\t\t\t\t\t\t\t\t\t\t\t\"bg-m3-surface-container-low\",\n\t\t\t\t\t\t\t\t\t\t\t\"flex flex-col overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\tedge === \"end\"\n\t\t\t\t\t\t\t\t\t\t\t\t? \"border-l border-m3-outline-variant rounded-l-m3-xl\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"border-r border-m3-outline-variant rounded-r-m3-xl\",\n\t\t\t\t\t\t\t\t\t\t\t\"outline-none focus-visible:ring-2 focus-visible:ring-m3-primary focus-visible:ring-inset\",\n\t\t\t\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\tstyle={{ width }}\n\t\t\t\t\t\t\t\t\t\t{...sheetAnim}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RadixDialog.Title className=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\t{ariaLabel || \"Side Sheet\"}\n\t\t\t\t\t\t\t\t\t\t</RadixDialog.Title>\n\n\t\t\t\t\t\t\t\t\t\t{header && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 px-6 py-4\">{header}</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{header && resolvedDividers.header && (\n\t\t\t\t\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t<ScrollArea\n\t\t\t\t\t\t\t\t\t\t\ttype=\"hover\"\n\t\t\t\t\t\t\t\t\t\t\t{...scrollAreaProps}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex-1 min-h-0 min-w-0\",\n\t\t\t\t\t\t\t\t\t\t\t\tscrollAreaProps?.className,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tviewportClassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"overscroll-contain\",\n\t\t\t\t\t\t\t\t\t\t\t\tscrollAreaProps?.viewportClassName,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tviewportProps={scrollAreaProps?.viewportProps}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t\t\t</ScrollArea>\n\n\t\t\t\t\t\t\t\t\t\t{footer && resolvedDividers.footer && (\n\t\t\t\t\t\t\t\t\t\t\t<hr className=\"border-t border-m3-outline-variant w-full shrink-0 m-0\" />\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t{footer && (\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"shrink-0 px-6 py-4\">{footer}</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t\t</RadixDialog.Content>\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t</RadixDialog.Portal>\n\t\t\t</RadixDialog.Root>\n\t\t);\n\t},\n);\n\nSideSheetModal.displayName = \"SideSheetModal\";\n","/**\n * @file useSliderMath.ts\n * MD3 Expressive Slider — Math utility hook.\n *\n * Handles all slider math in one place:\n * - value coercion to [min, max]\n * - step snapping for discrete mode\n * - value ↔ percent conversion\n * - keyboard delta calculation\n * - tick position generation\n *\n * Exported as a pure hook for testability and reuse in both Slider and RangeSlider.\n */\n\nimport { useMemo } from \"react\";\n\n// ─── Pure math helpers (exported for unit testing) ───────────────────────────\n\n/**\n * Clamps `value` to the closed interval `[min, max]`.\n *\n * @example coerceValue(150, 0, 100) → 100\n */\nexport function coerceValue(value: number, min: number, max: number): number {\n\treturn Math.max(min, Math.min(max, value));\n}\n\n/**\n * Rounds `value` to the nearest multiple of `step` relative to `min`.\n * When `step === 0`, returns `value` unchanged (continuous mode).\n *\n * @example snapToStep(23, 0, 10) → 20\n * @example snapToStep(27, 0, 10) → 30\n */\nexport function snapToStep(value: number, min: number, step: number): number {\n\tif (step <= 0) return value;\n\tconst steps = Math.round((value - min) / step);\n\t// Use toPrecision to avoid floating-point drift (e.g., 0.1 + 0.2 issues)\n\treturn Number((min + steps * step).toPrecision(10));\n}\n\n/**\n * Converts a raw value to a 0–1 fraction of the [min, max] range.\n * Returns 0 when max === min (degenerate range).\n *\n * @example valueToPercent(50, 0, 100) → 0.5\n */\nexport function valueToPercent(\n\tvalue: number,\n\tmin: number,\n\tmax: number,\n): number {\n\tif (max === min) return 0;\n\treturn (value - min) / (max - min);\n}\n\n/**\n * Converts a 0–1 fraction to a value within [min, max], then snaps to step.\n * The result is also coerced to [min, max].\n *\n * @example percentToValue(0.5, 0, 100, 10) → 50\n * @example percentToValue(0.23, 0, 100, 10) → 20\n */\nexport function percentToValue(\n\tpercent: number,\n\tmin: number,\n\tmax: number,\n\tstep: number,\n): number {\n\tconst raw = min + percent * (max - min);\n\tconst snapped = snapToStep(raw, min, step);\n\treturn coerceValue(snapped, min, max);\n}\n\n/**\n * Computes the keyboard increment for a given key.\n *\n * Key mappings per WAI-ARIA Slider pattern:\n * - ArrowRight/Up → +step (or +1% of range if continuous)\n * - ArrowLeft/Down → -step (or -1% of range)\n * - PageUp → +10% of range (snapped to step)\n * - PageDown → -10% of range (snapped to step)\n * - Home / End → handled by the caller (jump to min/max)\n *\n * @returns the signed delta to add to current value, or `null` for Home/End.\n */\nexport function getKeyboardDelta(\n\tkey: string,\n\tstep: number,\n\tmin: number,\n\tmax: number,\n): number | null {\n\tconst range = max - min;\n\tconst discreteStep = step > 0 ? step : range / 100; // 1% of range for continuous\n\n\tswitch (key) {\n\t\tcase \"ArrowRight\":\n\t\tcase \"ArrowUp\":\n\t\t\treturn discreteStep;\n\t\tcase \"ArrowLeft\":\n\t\tcase \"ArrowDown\":\n\t\t\treturn -discreteStep;\n\t\tcase \"PageUp\":\n\t\t\treturn step > 0 ? snapToStep(range * 0.1, 0, step) : range * 0.1;\n\t\tcase \"PageDown\":\n\t\t\treturn step > 0 ? -snapToStep(range * 0.1, 0, step) : -(range * 0.1);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\n/**\n * Generates the list of value positions for tick marks.\n * Returns an empty array when `step === 0` (continuous mode).\n *\n * @example generateTicks(0, 100, 10) → [0, 10, 20, ..., 100]\n */\nexport function generateTicks(\n\tmin: number,\n\tmax: number,\n\tstep: number,\n): number[] {\n\tif (step <= 0) return [];\n\tconst ticks: number[] = [];\n\tlet current = min;\n\twhile (current <= max) {\n\t\tticks.push(Number(current.toPrecision(10)));\n\t\tcurrent += step;\n\t}\n\t// Ensure max is included even if floating-point drift skips it\n\tif (ticks[ticks.length - 1] !== max) {\n\t\tticks.push(max);\n\t}\n\treturn ticks;\n}\n\n// ─── Hook ────────────────────────────────────────────────────────────────────\n\nexport interface UseSliderMathOptions {\n\tmin: number;\n\tmax: number;\n\tstep: number;\n}\n\nexport interface UseSliderMathReturn {\n\t/** Clamp value to [min, max]. */\n\tcoerce: (v: number) => number;\n\t/** Snap value to nearest step (no-op if step=0). */\n\tsnap: (v: number) => number;\n\t/** Value → percent [0, 1]. */\n\ttoPercent: (v: number) => number;\n\t/** Percent [0, 1] → snapped value. */\n\tfromPercent: (pct: number) => number;\n\t/**\n\t * Signed delta for a keyboard key.\n\t * Returns `null` for Home/End (jump to min/max, handled by caller).\n\t */\n\tgetKeyDelta: (key: string) => number | null;\n\t/** Tick positions. Empty array in continuous mode. */\n\tticks: number[];\n}\n\n/**\n * Math utility hook for MD3 Slider components.\n *\n * Memoizes all math functions against `min`, `max`, `step` changes.\n * Use this in both `<Slider>` and `<RangeSlider>` to share logic.\n *\n * @example\n * ```ts\n * const { coerce, snap, toPercent, fromPercent, getKeyDelta, ticks } =\n *   useSliderMath({ min: 0, max: 100, step: 10 });\n *\n * const percent = toPercent(value);          // → 0.5 for value=50\n * const newValue = fromPercent(dragPercent); // → 50\n * const delta = getKeyDelta(\"ArrowRight\");   // → 10\n * ```\n */\nexport function useSliderMath({\n\tmin,\n\tmax,\n\tstep,\n}: UseSliderMathOptions): UseSliderMathReturn {\n\treturn useMemo(\n\t\t() => ({\n\t\t\tcoerce: (v: number) => coerceValue(v, min, max),\n\t\t\tsnap: (v: number) => snapToStep(v, min, step),\n\t\t\ttoPercent: (v: number) => valueToPercent(v, min, max),\n\t\t\tfromPercent: (pct: number) => percentToValue(pct, min, max, step),\n\t\t\tgetKeyDelta: (key: string) => getKeyboardDelta(key, step, min, max),\n\t\t\tticks: generateTicks(min, max, step),\n\t\t}),\n\t\t[min, max, step],\n\t);\n}\n","/**\n * @file slider.tokens.ts\n * MD3 Expressive Slider — Design tokens ported from:\n *   - SliderTokens.kt (Jetpack Compose M3 Expressive)\n *   - M3 Expressive visual spec (handle squeeze, gaps, asymmetric radii)\n *\n * All dimensional values are in px (dp equivalents for web).\n * Colors reference CSS custom properties — do NOT hardcode hex.\n * @see docs/m3/sliders/Slider.kt\n */\n\nimport type { MD3Size } from \"../../types/md3\";\n\n// ─── Dimensional tokens ───────────────────────────────────────────────────────\n\n/**\n * Core dimensional design tokens for the MD3 Expressive Slider.\n * Maps directly from SliderTokens.kt to CSS/JS values.\n */\nexport const SliderTokens = {\n\t// ── Track sizes (height for horizontal, width for vertical) ────────────────\n\ttrackSizes: {\n\t\txs: 16,\n\t\tsm: 24,\n\t\tmd: 40,\n\t\tlg: 56,\n\t\txl: 96,\n\t} satisfies Record<MD3Size, number>,\n\n\t// ── Track shapes (border radius) ──────────────────────────────────────────\n\ttrackShapes: {\n\t\txs: 8,\n\t\tsm: 8,\n\t\tmd: 12,\n\t\tlg: 16,\n\t\txl: 28,\n\t} satisfies Record<MD3Size, number>,\n\n\t// ── Thumb (handle) ────────────────────────────────────────────────────────\n\t/** Thumb height grows with track size */\n\tthumbHeights: {\n\t\txs: 44,\n\t\tsm: 44,\n\t\tmd: 52,\n\t\tlg: 68,\n\t\txl: 108,\n\t} satisfies Record<MD3Size, number>,\n\t/**\n\t * Thumb width at rest and on hover.\n\t * MD3 Expressive handle pill: 4dp wide.\n\t */\n\tthumbWidthDefault: 4,\n\t/**\n\t * Thumb width while pressed/dragging.\n\t * \"Squeeze\" animation: 4dp → 2dp (M3 Expressive behavior).\n\t */\n\tthumbWidthPressed: 2,\n\n\t// ── Track–thumb gap ───────────────────────────────────────────────────────\n\t/**\n\t * Transparent gap between the active/inactive track segments and the thumb.\n\t * Maps to ActiveHandleLeadingSpace / ActiveHandleTrailingSpace = 6dp.\n\t *\n\t * This gap is rendered by mathematically subtracting it from the track\n\t * segment width — NOT using margin/padding.\n\t */\n\tthumbGap: 6,\n\n\t// ── Track corner radii ────────────────────────────────────────────────────\n\t/**\n\t * Corner radius on the INNER ends of each track segment (facing the thumb).\n\t * Fixed to 2px according to MD3 Expressive Slider specs (TrackInsideCornerSize).\n\t * Outer ends use `trackSize / 2` (pill cap) — computed inline per component.\n\t */\n\ttrackInnerRadius: 2,\n\n\t// ── Stop indicator / Tick ─────────────────────────────────────────────────\n\t/** Tick dot size (width and height). = 4dp. */\n\ttickSize: 4,\n\n\t// ── Touch target ─────────────────────────────────────────────────────────\n\t/**\n\t * Minimum touch target for the thumb wrapper.\n\t * MD3 requires 48dp minimum touch target for interactive elements.\n\t */\n\tthumbTouchTarget: 48,\n\n\t// ── Value indicator ───────────────────────────────────────────────────────\n\t/** Offset above the thumb center for the value indicator tooltip. */\n\tvalueIndicatorOffset: 52,\n\n\t// ── Inset icon ────────────────────────────────────────────────────────────\n\t/** Standard icon size map for inset icons inside the track. */\n\tinsetIconSizes: {\n\t\txs: 0,\n\t\tsm: 0,\n\t\tmd: 24,\n\t\tlg: 24,\n\t\txl: 32,\n\t} satisfies Record<MD3Size, number>,\n\t/**\n\t * Padding between icon and track edge (horizontal).\n\t * Keeps the icon visually centered within the pill track.\n\t */\n\tinsetIconPadding: 4,\n} as const;\n\n// ─── Color tokens ─────────────────────────────────────────────────────────────\n\n/**\n * CSS custom property references for Slider colors.\n * Maps to --md-sys-color-* tokens in the MD3 theme system.\n *\n * DO NOT hardcode hex/rgba values — these references automatically\n * adapt to light/dark theme.\n */\nexport const SliderColors = {\n\t// ── Track ─────────────────────────────────────────────────────────────────\n\t/** Active track color. Maps to ActiveTrackColor token. */\n\tactiveTrack: \"var(--md-sys-color-primary)\",\n\t/** Inactive track color. Maps to InactiveTrackColor token. */\n\tinactiveTrack: \"var(--md-sys-color-secondary-container)\",\n\t/**\n\t * Disabled track color.\n\t * Uses opacity + on-surface per MD3 disabled state spec.\n\t */\n\tdisabledActiveTrack: \"var(--md-sys-color-on-surface)\",\n\tdisabledInactiveTrack: \"var(--md-sys-color-on-surface)\",\n\n\t// ── Thumb ─────────────────────────────────────────────────────────────────\n\t/** Thumb (handle) color. Maps to HandleColor token. */\n\tthumb: \"var(--md-sys-color-primary)\",\n\t/** Disabled thumb color. */\n\tdisabledThumb: \"var(--md-sys-color-on-surface)\",\n\n\t// ── Value indicator ───────────────────────────────────────────────────────\n\t/** Value indicator (tooltip) background. Maps to InverseSurface. */\n\tvalueIndicatorBg: \"var(--md-sys-color-inverse-surface)\",\n\t/** Value indicator (tooltip) text. Maps to InverseOnSurface. */\n\tvalueIndicatorText: \"var(--md-sys-color-inverse-on-surface)\",\n\n\t// ── Ticks ────────────────────────────────────────────────────────────────\n\t/**\n\t * Tick on the INACTIVE portion of the track.\n\t * Maps to TickMarkInactiveContainerColor (in spec: primary color stands out).\n\t */\n\ttickOnInactive: \"var(--md-sys-color-primary)\",\n\t/**\n\t * Tick on the ACTIVE portion of the track.\n\t * Maps to TickMarkActiveContainerColor (in spec: on-primary contrasts with filled track).\n\t */\n\ttickOnActive: \"var(--md-sys-color-on-primary)\",\n\tdisabledTick: \"var(--md-sys-color-on-surface)\",\n} as const;\n\n// ─── Animation constants ──────────────────────────────────────────────────────\n\n/**\n * FastSpatial spring for thumb width squeeze animation.\n * Equivalent to MotionSchemeKeyTokens.FastSpatial in Compose.\n */\nexport const SLIDER_THUMB_SPRING = {\n\ttype: \"spring\",\n\tstiffness: 500,\n\tdamping: 40,\n} as const;\n\n/**\n * DefaultSpatial spring for thumb position/track updates.\n * Slightly looser feel for position changes.\n */\nexport const SLIDER_POSITION_SPRING = {\n\ttype: \"spring\",\n\tstiffness: 400,\n\tdamping: 38,\n} as const;\n\n/** Color crossfade for active/inactive track color transitions. */\nexport const SLIDER_COLOR_TRANSITION = {\n\tduration: 0.18,\n\tease: \"easeInOut\",\n} as const;\n\n/** Value indicator appear/disappear animation. */\nexport const SLIDER_INDICATOR_TRANSITION = {\n\ttype: \"spring\",\n\tstiffness: 450,\n\tdamping: 32,\n} as const;\n","/**\n * @file slider-thumb.tsx\n * MD3 Expressive Slider — Animated pill-shaped thumb (handle).\n *\n * Design decisions:\n * 1. POINTER EVENTS (not Framer Motion drag): We use React pointer events\n *    + useMotionValue for real-time position tracking without re-render lag.\n *    Framer Motion's `drag` prop adds momentum/inertia that conflicts with MD3\n *    precise positioning; direct pointer handling gives us full control.\n * 2. SQUEEZE ANIMATION: `whileTap` shrinks width from 4px → 2px via spring.\n * 3. INVERTED Y-AXIS: Vertical slider maps bottom=min, top=max by inverting\n *    the pointer delta direction.\n * 4. VALUE INDICATOR: AnimatePresence pill tooltip with teardrop origin point.\n * 5. ACCESSIBILITY: role=slider, full ARIA attributes, keyboard nav.\n * 6. prefers-reduced-motion: Disables all animations for accessibility.\n *\n * @see docs/m3/sliders/Slider.kt#SliderDefaults.Thumb\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MD3Size } from \"../../types/md3\";\nimport { getKeyboardDelta } from \"./hooks/useSliderMath\";\nimport {\n\tSLIDER_INDICATOR_TRANSITION,\n\tSLIDER_THUMB_SPRING,\n\tSliderColors,\n\tSliderTokens,\n} from \"./slider.tokens\";\nimport type { SliderThumbProps } from \"./slider.types\";\n\n// ─── Value Indicator ─────────────────────────────────────────────────────────\n\ninterface ValueIndicatorProps {\n\tvalue: number;\n\tvisible: boolean;\n\torientation: \"horizontal\" | \"vertical\";\n\tformatValue?: (v: number) => string;\n\tprefersReduced: boolean;\n\tsize: MD3Size;\n}\n\n/** Floating value label that appears above/beside thumb on hover/drag. */\nconst ValueIndicator = React.memo(function ValueIndicator({\n\tvalue,\n\tvisible,\n\torientation,\n\tformatValue,\n\tprefersReduced,\n\tsize,\n}: ValueIndicatorProps) {\n\tconst label = formatValue ? formatValue(value) : String(Math.round(value));\n\tconst isHorizontal = orientation === \"horizontal\";\n\n\t// Calculate dynamic offset so tooltip sits above the thumb regardless of size\n\tconst thumbHeight = SliderTokens.thumbHeights[size];\n\t// Container center is 50%. The thumb top is `thumbHeight / 2` from center.\n\t// Add an 8px visual gap to prevent the tooltip from overlapping the thumb.\n\tconst offsetFromCenter = thumbHeight / 2 + 8;\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{visible && (\n\t\t\t\t<m.div\n\t\t\t\t\tkey=\"value-indicator\"\n\t\t\t\t\trole=\"tooltip\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tinitial={\n\t\t\t\t\t\tprefersReduced\n\t\t\t\t\t\t\t? false\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tscale: 0,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\ty: isHorizontal ? 6 : 0,\n\t\t\t\t\t\t\t\t\tx: !isHorizontal ? -6 : 0,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tanimate={{ scale: 1, opacity: 1, y: 0, x: 0 }}\n\t\t\t\t\texit={\n\t\t\t\t\t\tprefersReduced\n\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tscale: 0,\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\ty: isHorizontal ? 6 : 0,\n\t\t\t\t\t\t\t\t\tx: !isHorizontal ? -6 : 0,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttransition={\n\t\t\t\t\t\tprefersReduced ? { duration: 0 } : SLIDER_INDICATOR_TRANSITION\n\t\t\t\t\t}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"absolute pointer-events-none select-none\",\n\t\t\t\t\t\t\"rounded-full px-2.5 py-1 text-xs font-medium leading-none whitespace-nowrap\",\n\t\t\t\t\t\t// Position: above for horizontal, right for vertical\n\t\t\t\t\t\tisHorizontal\n\t\t\t\t\t\t\t? \"-translate-x-1/2 left-1/2\"\n\t\t\t\t\t\t\t: \"translate-y-1/2 bottom-1/2\",\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackgroundColor: SliderColors.valueIndicatorBg,\n\t\t\t\t\t\tcolor: SliderColors.valueIndicatorText,\n\t\t\t\t\t\ttransformOrigin: isHorizontal ? \"bottom center\" : \"center left\",\n\t\t\t\t\t\t...(isHorizontal\n\t\t\t\t\t\t\t? { bottom: `calc(50% + ${offsetFromCenter}px)` }\n\t\t\t\t\t\t\t: { left: `calc(50% + ${offsetFromCenter}px)` }),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</m.div>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n});\n\n// ─── SliderThumb ──────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Slider Thumb (handle).\n *\n * - Pill shape: 4px wide × 44px tall by default.\n * - Squeezes to 2px wide on press/drag (Framer Motion spring).\n * - Floats above track via absolute positioning at `percent` along the track.\n * - Handles pointer drag via React PointerEvents + useMotionValue.\n * - Full keyboard navigation per WAI-ARIA Slider pattern.\n * - Value indicator tooltip with AnimatePresence.\n *\n * @internal — consumed by `<Slider>` and `<RangeSlider>`\n */\nexport const SliderThumb = React.memo(function SliderThumb({\n\tvalue,\n\tpercent,\n\tmin,\n\tmax,\n\tstep,\n\tdisabled,\n\torientation,\n\tshowValueIndicator,\n\ttrackRef,\n\tonValueChange,\n\tonValueChangeEnd,\n\tformatValue,\n\tthumbId,\n\tsize,\n\tvariant,\n\tzIndex = 1,\n\t\"aria-label\": ariaLabel,\n\t\"aria-labelledby\": ariaLabelledBy,\n}: SliderThumbProps) {\n\tconst isHorizontal = orientation === \"horizontal\";\n\n\t// Map percent to [trackInset, 100% - trackInset]\n\t// Cap trackInset to gap + half thumb to prevent ghost segments and allow dragging to edge.\n\tconst insetLimit = SliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\tconst trackInset = Math.min(SliderTokens.trackSizes[size] / 2, insetLimit);\n\tconst posTarget = isHorizontal ? \"left\" : \"bottom\";\n\tconst motionStyle = {\n\t\t[posTarget]: `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`,\n\t};\n\n\tconst prefersReduced = useReducedMotion() ?? false;\n\n\tconst [isDragging, setIsDragging] = React.useState(false);\n\tconst [isHovered, setIsHovered] = React.useState(false);\n\tconst [isFocused, setIsFocused] = React.useState(false);\n\n\t// Track pointer capture ID\n\tconst pointerIdRef = React.useRef<number | null>(null);\n\tconst thumbRef = React.useRef<HTMLDivElement | null>(null);\n\n\tconst showIndicator =\n\t\tshowValueIndicator && (isDragging || isHovered || isFocused);\n\n\t// ── Position calculation ────────────────────────────────────────────────\n\t// Position the thumb center at `percent` along the track.\n\t// Offset by half-thumb to center it on the track line.\n\n\tconst positionStyle: React.CSSProperties = isHorizontal\n\t\t? {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\t...motionStyle,\n\t\t\t\ttop: \"50%\",\n\t\t\t\ttransform: \"translate(-50%, -50%)\",\n\t\t\t\tzIndex,\n\t\t\t}\n\t\t: {\n\t\t\t\tposition: \"absolute\",\n\t\t\t\t...motionStyle,\n\t\t\t\tleft: \"50%\",\n\t\t\t\ttransform: \"translate(-50%, 50%)\",\n\t\t\t\tzIndex,\n\t\t\t};\n\n\t// ── Pointer drag handlers ───────────────────────────────────────────────\n\n\tconst getDeltaFromPointer = React.useCallback(\n\t\t(e: PointerEvent): number => {\n\t\t\tconst trackEl = trackRef.current;\n\t\t\tif (!trackEl) return percent;\n\n\t\t\tconst rect = trackEl.getBoundingClientRect();\n\t\t\tconst space = isHorizontal ? rect.width : rect.height;\n\t\t\tconst insetLimit =\n\t\t\t\tSliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\t\t\tconst trackInset = Math.min(\n\t\t\t\tSliderTokens.trackSizes[size] / 2,\n\t\t\t\tinsetLimit,\n\t\t\t);\n\t\t\tconst safeSpace = space - trackInset * 2;\n\t\t\tif (safeSpace <= 0) return percent;\n\n\t\t\tlet rawPercent: number;\n\t\t\tif (isHorizontal) {\n\t\t\t\trawPercent = (e.clientX - rect.left - trackInset) / safeSpace;\n\t\t\t} else {\n\t\t\t\t// Inverted Y: bottom = min (0%), top = max (100%)\n\t\t\t\trawPercent = (rect.bottom - e.clientY - trackInset) / safeSpace;\n\t\t\t}\n\n\t\t\tconst clamped = Math.max(0, Math.min(1, rawPercent));\n\t\t\tconst range = max - min;\n\t\t\tconst rawValue = min + clamped * range;\n\t\t\tconst snapped =\n\t\t\t\tstep > 0 ? Math.round((rawValue - min) / step) * step + min : rawValue;\n\t\t\treturn Math.max(min, Math.min(max, snapped));\n\t\t},\n\t\t[isHorizontal, max, min, percent, step, trackRef, size],\n\t);\n\n\tconst handlePointerDown = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) return;\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\t(e.currentTarget as HTMLDivElement).setPointerCapture(e.pointerId);\n\t\t\tpointerIdRef.current = e.pointerId;\n\t\t\tsetIsDragging(true);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst handlePointerMove = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (!isDragging || e.pointerId !== pointerIdRef.current) return;\n\t\t\tconst newValue = getDeltaFromPointer(e.nativeEvent);\n\t\t\tonValueChange(newValue);\n\t\t},\n\t\t[isDragging, getDeltaFromPointer, onValueChange],\n\t);\n\n\tconst handlePointerUp = React.useCallback(\n\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\tif (e.pointerId !== pointerIdRef.current) return;\n\t\t\t(e.currentTarget as HTMLDivElement).releasePointerCapture(e.pointerId);\n\t\t\tpointerIdRef.current = null;\n\t\t\tsetIsDragging(false);\n\t\t\tonValueChangeEnd?.(value);\n\t\t},\n\t\t[onValueChangeEnd, value],\n\t);\n\n\t// ── Keyboard navigation ──────────────────────────────────────────────────\n\n\tconst handleKeyDown = React.useCallback(\n\t\t(e: React.KeyboardEvent<HTMLDivElement>) => {\n\t\t\tif (disabled) return;\n\n\t\t\tif (e.key === \"Home\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonValueChange(min);\n\t\t\t\tonValueChangeEnd?.(min);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (e.key === \"End\") {\n\t\t\t\te.preventDefault();\n\t\t\t\tonValueChange(max);\n\t\t\t\tonValueChangeEnd?.(max);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst delta = getKeyboardDelta(e.key, step, min, max);\n\t\t\tif (delta === null) return;\n\t\t\te.preventDefault();\n\n\t\t\tconst newValue = Math.max(min, Math.min(max, value + delta));\n\t\t\tonValueChange(newValue);\n\t\t\tonValueChangeEnd?.(newValue);\n\t\t},\n\t\t[disabled, max, min, onValueChange, onValueChangeEnd, step, value],\n\t);\n\n\t// ── Render ───────────────────────────────────────────────────────────────\n\tconst thumbColor = disabled\n\t\t? SliderColors.disabledThumb\n\t\t: `var(--md-sys-color-${variant})`;\n\n\tconst squeezeSize = isDragging\n\t\t? SliderTokens.thumbWidthPressed\n\t\t: SliderTokens.thumbWidthDefault;\n\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\t...positionStyle,\n\t\t\t\twidth: SliderTokens.thumbTouchTarget,\n\t\t\t\theight: SliderTokens.thumbTouchTarget,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\ttouchAction: \"none\",\n\t\t\t}}\n\t\t\tclassName={cn(\n\t\t\t\t\"cursor-grab\",\n\t\t\t\tisDragging && \"cursor-grabbing\",\n\t\t\t\tdisabled && \"cursor-not-allowed\",\n\t\t\t)}\n\t\t\tonPointerDown={handlePointerDown}\n\t\t\tonPointerMove={handlePointerMove}\n\t\t\tonPointerUp={handlePointerUp}\n\t\t\tonPointerCancel={handlePointerUp}\n\t\t>\n\t\t\t<ValueIndicator\n\t\t\t\tvalue={value}\n\t\t\t\tvisible={showIndicator}\n\t\t\t\torientation={orientation}\n\t\t\t\tformatValue={formatValue}\n\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\tsize={size}\n\t\t\t/>\n\n\t\t\t<m.div\n\t\t\t\tref={thumbRef}\n\t\t\t\tid={thumbId}\n\t\t\t\trole=\"slider\"\n\t\t\t\taria-valuemin={min}\n\t\t\t\taria-valuemax={max}\n\t\t\t\taria-valuenow={value}\n\t\t\t\taria-orientation={orientation}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\tonMouseEnter={() => !disabled && setIsHovered(true)}\n\t\t\t\tonMouseLeave={() => setIsHovered(false)}\n\t\t\t\tanimate={{\n\t\t\t\t\t...(isHorizontal ? { width: squeezeSize } : { height: squeezeSize }),\n\t\t\t\t\tbackgroundColor: thumbColor,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t}}\n\t\t\t\ttransition={prefersReduced ? { duration: 0 } : SLIDER_THUMB_SPRING}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative shrink-0 rounded-full select-none outline-none\",\n\t\t\t\t\t\"focus-visible:outline-2 focus-visible:outline-offset-2\",\n\t\t\t\t\t\"focus-visible:outline-(--md-sys-color-secondary)\",\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\t...(isHorizontal\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\theight: SliderTokens.thumbHeights[size],\n\t\t\t\t\t\t\t\twidth: SliderTokens.thumbWidthDefault,\n\t\t\t\t\t\t\t\twillChange: \"width\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\twidth: SliderTokens.thumbHeights[size],\n\t\t\t\t\t\t\t\theight: SliderTokens.thumbWidthDefault,\n\t\t\t\t\t\t\t\twillChange: \"height\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\tbackgroundColor: thumbColor,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n});\n","/**\n * @file range-slider.tsx\n * MD3 Expressive RangeSlider — Two-thumb slider with crossover prevention.\n *\n * Extends the core Slider architecture with:\n * - Two SliderThumb instances (start + end)\n * - Crossover prevention: start cannot exceed end and vice versa\n * - Z-index management: last-dragged thumb always on top\n * - Active track spans from startPercent to endPercent\n *\n * Design decisions:\n * - The track renders a custom \"range\" segment between the two thumbs.\n * - Each thumb has independent onValueChange callbacks + crossover clamping.\n * - Last-active thumb gets zIndex=2 to appear on top when thumbs are at same position.\n *\n * @see https://m3.material.io/components/sliders/overview\n * @see docs/m3/sliders/Slider.kt#RangeSlider\n */\n\nimport { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MD3Size } from \"../../types/md3\";\nimport { useSliderMath } from \"./hooks/useSliderMath\";\nimport { SliderColors, SliderTokens } from \"./slider.tokens\";\nimport type {\n\tRangeSliderProps,\n\tSliderTrackShape,\n\tSliderVariant,\n} from \"./slider.types\";\nimport { SliderThumb } from \"./slider-thumb\";\n\n// ─── Range Track ─────────────────────────────────────────────────────────────\n\ninterface RangeTrackProps {\n\tstartPercent: number;\n\tendPercent: number;\n\tsize: MD3Size;\n\torientation: \"horizontal\" | \"vertical\";\n\tvariant: SliderVariant;\n\tdisabled: boolean;\n\tticks: number[];\n\tmin: number;\n\tmax: number;\n\ttrackShape?: SliderTrackShape;\n\ttrackRef: React.RefObject<HTMLDivElement | null>;\n\tonTrackPointerDown?: (e: React.PointerEvent<HTMLDivElement>) => void;\n}\n\n/**\n * Track for RangeSlider: renders three segments.\n * Inactive | Gap | Active (range) | Gap | Inactive\n */\nconst RangeTrack = React.memo(function RangeTrack({\n\tstartPercent,\n\tendPercent,\n\tsize,\n\torientation,\n\tvariant,\n\tdisabled,\n\tticks,\n\tmin,\n\tmax,\n\ttrackShape = \"md3\",\n\ttrackRef,\n\tonTrackPointerDown,\n}: RangeTrackProps) {\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst trackPixelSize = SliderTokens.trackSizes[size];\n\tconst thumbHeight = SliderTokens.thumbHeights[size];\n\tconst { thumbGap, thumbWidthDefault, tickSize } = SliderTokens;\n\tconst thumbHalfWidth = thumbWidthDefault / 2;\n\n\tconst activeTrack = disabled\n\t\t? SliderColors.disabledActiveTrack\n\t\t: `var(--md-sys-color-${variant})`;\n\tconst inactiveTrack = disabled\n\t\t? SliderColors.disabledInactiveTrack\n\t\t: `var(--md-sys-color-${variant}-container)`;\n\n\tconst innerR = SliderTokens.trackInnerRadius;\n\n\tlet outerR = trackPixelSize / 2;\n\tif (trackShape === \"md3\") {\n\t\touterR = Math.min(SliderTokens.trackShapes[size], trackPixelSize / 2);\n\t} else if (typeof trackShape === \"number\") {\n\t\touterR = Math.min(trackShape, trackPixelSize / 2);\n\t}\n\n\tif (isHorizontal) {\n\t\tconst insetLimit = thumbGap + thumbWidthDefault / 2;\n\t\tconst trackInset = Math.min(trackPixelSize / 2, insetLimit);\n\t\tconst cxStart = `calc(${trackInset}px + ${startPercent} * (100% - ${trackInset * 2}px))`;\n\t\tconst cxEnd = `calc(${trackInset}px + ${endPercent} * (100% - ${trackInset * 2}px))`;\n\t\tconst gapWithThumbStr = `${thumbGap + thumbHalfWidth}px`;\n\n\t\tconst leadingWidth = `max(0px, calc(${cxStart} - ${gapWithThumbStr}))`;\n\t\tconst activeLeft = `calc(${cxStart} + ${gapWithThumbStr})`;\n\t\tconst activeWidth = `max(0px, calc(${cxEnd} - ${cxStart} - ${gapWithThumbStr} * 2))`;\n\t\tconst trailingLeft = `calc(${cxEnd} + ${gapWithThumbStr})`;\n\t\tconst trailingWidth = `max(0px, calc(100% - (${cxEnd} + ${gapWithThumbStr})))`;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={trackRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-full\",\n\t\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t\t)}\n\t\t\t\tstyle={{ height: thumbHeight }}\n\t\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{/* Leading inactive */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: leadingWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\tborderTopLeftRadius: outerR,\n\t\t\t\t\t\tborderBottomLeftRadius: outerR,\n\t\t\t\t\t\tborderTopRightRadius: innerR,\n\t\t\t\t\t\tborderBottomRightRadius: innerR,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{/* Active middle segment */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: activeLeft,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: activeWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeTrack,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\tborderTopLeftRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\t\tborderBottomLeftRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\t\tborderTopRightRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t\t\tborderBottomRightRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{/* Trailing inactive */}\n\t\t\t\t<div\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: trailingLeft,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: trailingWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\tborderTopLeftRadius: innerR,\n\t\t\t\t\t\tborderBottomLeftRadius: innerR,\n\t\t\t\t\t\tborderTopRightRadius: outerR,\n\t\t\t\t\t\tborderBottomRightRadius: outerR,\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t{/* Ticks for discrete mode */}\n\t\t\t\t{ticks.map((tick) => {\n\t\t\t\t\tconst tickPct = (tick - min) / (max - min);\n\t\t\t\t\tconst isActive = tickPct > startPercent && tickPct < endPercent;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={tick}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\t\twidth: tickSize,\n\t\t\t\t\t\t\t\theight: tickSize,\n\t\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\t\tbackgroundColor: disabled\n\t\t\t\t\t\t\t\t\t? SliderColors.disabledTick\n\t\t\t\t\t\t\t\t\t: isActive\n\t\t\t\t\t\t\t\t\t\t? `var(--md-sys-color-on-${variant})`\n\t\t\t\t\t\t\t\t\t\t: `var(--md-sys-color-${variant})`,\n\t\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t\tleft: `calc(${trackInset}px + ${tickPct} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// ── Vertical range track ──────────────────────────────────────────────────\n\tconst insetLimit = thumbGap + thumbWidthDefault / 2;\n\tconst trackInset = Math.min(trackPixelSize / 2, insetLimit);\n\tconst cyStart = `calc(${trackInset}px + ${startPercent} * (100% - ${trackInset * 2}px))`;\n\tconst cyEnd = `calc(${trackInset}px + ${endPercent} * (100% - ${trackInset * 2}px))`;\n\tconst gapWithThumbStr = `${thumbGap + thumbHalfWidth}px`;\n\n\tconst leadingHeight = `max(0px, calc(${cyStart} - ${gapWithThumbStr}))`;\n\tconst activeBottom = `calc(${cyStart} + ${gapWithThumbStr})`;\n\tconst activeHeight = `max(0px, calc(${cyEnd} - ${cyStart} - ${gapWithThumbStr} * 2))`;\n\tconst trailingBottom = `calc(${cyEnd} + ${gapWithThumbStr})`;\n\tconst trailingHeight = `max(0px, calc(100% - (${cyEnd} + ${gapWithThumbStr})))`;\n\n\treturn (\n\t\t<div\n\t\t\tref={trackRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative h-full\",\n\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t)}\n\t\t\tstyle={{ width: thumbHeight }}\n\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t{/* Bottom inactive */}\n\t\t\t<div\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: leadingHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\tborderBottomLeftRadius: outerR,\n\t\t\t\t\tborderBottomRightRadius: outerR,\n\t\t\t\t\tborderTopLeftRadius: innerR,\n\t\t\t\t\tborderTopRightRadius: innerR,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{/* Active middle */}\n\t\t\t<div\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: activeBottom,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: activeHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: activeTrack,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\tborderBottomLeftRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\tborderBottomRightRadius: startPercent <= 0 ? outerR : innerR,\n\t\t\t\t\tborderTopLeftRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t\tborderTopRightRadius: endPercent >= 1 ? outerR : innerR,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{/* Top inactive */}\n\t\t\t<div\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: trailingBottom,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: trailingHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: inactiveTrack,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\tborderTopLeftRadius: outerR,\n\t\t\t\t\tborderTopRightRadius: outerR,\n\t\t\t\t\tborderBottomLeftRadius: innerR,\n\t\t\t\t\tborderBottomRightRadius: innerR,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t{/* Ticks for discrete mode */}\n\t\t\t{ticks.map((tick) => {\n\t\t\t\tconst tickPct = (tick - min) / (max - min);\n\t\t\t\tconst isActive = tickPct > startPercent && tickPct < endPercent;\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={tick}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\twidth: tickSize,\n\t\t\t\t\t\t\theight: tickSize,\n\t\t\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\t\t\tbackgroundColor: disabled\n\t\t\t\t\t\t\t\t? SliderColors.disabledTick\n\t\t\t\t\t\t\t\t: isActive\n\t\t\t\t\t\t\t\t\t? `var(--md-sys-color-on-${variant})`\n\t\t\t\t\t\t\t\t\t: `var(--md-sys-color-${variant})`,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\tbottom: `calc(${trackInset}px + ${tickPct} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n});\n\n// ─── RangeSlider ──────────────────────────────────────────────────────────────\n\nconst RangeSliderComponent = React.forwardRef<HTMLDivElement, RangeSliderProps>(\n\t(\n\t\t{\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue,\n\t\t\tonValueChange,\n\t\t\tonValueChangeEnd,\n\t\t\tmin = 0,\n\t\t\tmax = 100,\n\t\t\tstep = 0,\n\t\t\torientation = \"horizontal\",\n\t\t\tsize = \"md\",\n\t\t\ttrackShape = \"md3\",\n\t\t\tvariant = \"primary\",\n\t\t\tdisabled = false,\n\t\t\tshowValueIndicator = false,\n\t\t\tshowTicks = false,\n\t\t\tformatValue,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\n\t\t// ── Controlled / Uncontrolled ────────────────────────────────────────\n\t\tconst defaultStart = defaultValue?.[0] ?? min;\n\t\tconst defaultEnd = defaultValue?.[1] ?? max;\n\t\tconst [internalValue, setInternalValue] = React.useState<[number, number]>([\n\t\t\tdefaultStart,\n\t\t\tdefaultEnd,\n\t\t]);\n\n\t\tconst resolvedValue: [number, number] =\n\t\t\tcontrolledValue !== undefined ? controlledValue : internalValue;\n\n\t\tconst { coerce, snap, toPercent, ticks } = useSliderMath({\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t});\n\n\t\t// Safe, snapped values\n\t\tconst startValue = snap(coerce(resolvedValue[0]));\n\t\tconst endValue = snap(coerce(resolvedValue[1]));\n\t\tconst startPercent = toPercent(startValue);\n\t\tconst endPercent = toPercent(endValue);\n\n\t\t// ── Last-active thumb z-index management ────────────────────────────\n\t\t// Whichever thumb was most recently interacted with gets zIndex=2\n\t\tconst [topThumb, setTopThumb] = React.useState<\"start\" | \"end\">(\"end\");\n\n\t\t// ── Track ref ───────────────────────────────────────────────────────\n\t\tconst trackRef = React.useRef<HTMLDivElement>(null);\n\n\t\t// ── Crossover-safe setters ──────────────────────────────────────────\n\t\t// Minimum gap: 1 step (or 1 unit for continuous)\n\t\tconst minGap = step > 0 ? step : (max - min) / 1000;\n\n\t\tconst handleStartChange = React.useCallback(\n\t\t\t(newStart: number) => {\n\t\t\t\tsetTopThumb(\"start\");\n\t\t\t\t// Cannot exceed end thumb\n\t\t\t\tconst clamped = Math.min(newStart, endValue - minGap);\n\t\t\t\tconst final = snap(coerce(clamped));\n\t\t\t\tif (controlledValue === undefined) {\n\t\t\t\t\tsetInternalValue([final, endValue]);\n\t\t\t\t}\n\t\t\t\tonValueChange?.([final, endValue]);\n\t\t\t},\n\t\t\t[controlledValue, coerce, endValue, minGap, onValueChange, snap],\n\t\t);\n\n\t\tconst handleEndChange = React.useCallback(\n\t\t\t(newEnd: number) => {\n\t\t\t\tsetTopThumb(\"end\");\n\t\t\t\t// Cannot go below start thumb\n\t\t\t\tconst clamped = Math.max(newEnd, startValue + minGap);\n\t\t\t\tconst final = snap(coerce(clamped));\n\t\t\t\tif (controlledValue === undefined) {\n\t\t\t\t\tsetInternalValue([startValue, final]);\n\t\t\t\t}\n\t\t\t\tonValueChange?.([startValue, final]);\n\t\t\t},\n\t\t\t[controlledValue, coerce, minGap, onValueChange, snap, startValue],\n\t\t);\n\n\t\tconst handleStartChangeEnd = React.useCallback(\n\t\t\t(v: number) => onValueChangeEnd?.([v, endValue]),\n\t\t\t[endValue, onValueChangeEnd],\n\t\t);\n\n\t\tconst handleEndChangeEnd = React.useCallback(\n\t\t\t(v: number) => onValueChangeEnd?.([startValue, v]),\n\t\t\t[onValueChangeEnd, startValue],\n\t\t);\n\n\t\t// ── Click-to-jump on track ──────────────────────────────────────────\n\t\tconst handleTrackPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tconst trackEl = trackRef.current;\n\t\t\t\tif (!trackEl) return;\n\n\t\t\t\tconst rect = trackEl.getBoundingClientRect();\n\t\t\t\tlet clickPercent: number;\n\n\t\t\t\tconst insetLimit =\n\t\t\t\t\tSliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\t\t\t\tconst trackInset = Math.min(\n\t\t\t\t\tSliderTokens.trackSizes[size] / 2,\n\t\t\t\t\tinsetLimit,\n\t\t\t\t);\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tconst x = e.clientX - rect.left;\n\t\t\t\t\tclickPercent = (x - trackInset) / (rect.width - trackInset * 2);\n\t\t\t\t} else {\n\t\t\t\t\tconst y = rect.bottom - e.clientY;\n\t\t\t\t\tclickPercent = (y - trackInset) / (rect.height - trackInset * 2);\n\t\t\t\t}\n\n\t\t\t\tconst clamped = Math.max(0, Math.min(1, clickPercent));\n\t\t\t\tconst rawValue = min + clamped * (max - min);\n\t\t\t\tconst clickValue = snap(coerce(rawValue));\n\n\t\t\t\t// Move whichever thumb is closer to click point\n\t\t\t\tconst distStart = Math.abs(clickValue - startValue);\n\t\t\t\tconst distEnd = Math.abs(clickValue - endValue);\n\n\t\t\t\tif (distStart <= distEnd) {\n\t\t\t\t\thandleStartChange(clickValue);\n\t\t\t\t} else {\n\t\t\t\t\thandleEndChange(clickValue);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\tcoerce,\n\t\t\t\tdisabled,\n\t\t\t\tendValue,\n\t\t\t\thandleEndChange,\n\t\t\t\thandleStartChange,\n\t\t\t\tisHorizontal,\n\t\t\t\tmax,\n\t\t\t\tmin,\n\t\t\t\tsnap,\n\t\t\t\tstartValue,\n\t\t\t\tsize,\n\t\t\t],\n\t\t);\n\n\t\t// ── IDs ─────────────────────────────────────────────────────────────\n\t\tconst id = React.useId();\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex items-center\",\n\t\t\t\t\t\tisHorizontal ? \"w-full flex-row\" : \"h-full flex-col\",\n\t\t\t\t\t\tdisabled && \"pointer-events-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={isHorizontal ? { minWidth: 0 } : { minHeight: 0 }}\n\t\t\t\t>\n\t\t\t\t\t<RangeTrack\n\t\t\t\t\t\tstartPercent={startPercent}\n\t\t\t\t\t\tendPercent={endPercent}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttrackShape={trackShape}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tticks={showTicks ? ticks : []}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonTrackPointerDown={handleTrackPointerDown}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SliderThumb\n\t\t\t\t\t\tvalue={startValue}\n\t\t\t\t\t\tpercent={startPercent}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tshowValueIndicator={showValueIndicator}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonValueChange={handleStartChange}\n\t\t\t\t\t\tonValueChangeEnd={handleStartChangeEnd}\n\t\t\t\t\t\tformatValue={formatValue}\n\t\t\t\t\t\tthumbId={`${id}-start`}\n\t\t\t\t\t\tzIndex={topThumb === \"start\" ? 2 : 1}\n\t\t\t\t\t\taria-label={ariaLabel ? `${ariaLabel} start` : \"Range start\"}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SliderThumb\n\t\t\t\t\t\tvalue={endValue}\n\t\t\t\t\t\tpercent={endPercent}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tshowValueIndicator={showValueIndicator}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonValueChange={handleEndChange}\n\t\t\t\t\t\tonValueChangeEnd={handleEndChangeEnd}\n\t\t\t\t\t\tformatValue={formatValue}\n\t\t\t\t\t\tthumbId={`${id}-end`}\n\t\t\t\t\t\tzIndex={topThumb === \"end\" ? 2 : 1}\n\t\t\t\t\t\taria-label={ariaLabel ? `${ariaLabel} end` : \"Range end\"}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nRangeSliderComponent.displayName = \"RangeSlider\";\n\n/**\n * MD3 Expressive RangeSlider component.\n *\n * Two-thumb slider where the active track spans between the two thumbs.\n * Thumbs cannot cross each other (crossover prevention built in).\n *\n * @example\n * ```tsx\n * // Controlled\n * <RangeSlider\n *   value={[20, 80]}\n *   onValueChange={([start, end]) => setRange([start, end])}\n *   aria-label=\"Price range\"\n * />\n *\n * // Discrete\n * <RangeSlider defaultValue={[0, 100]} step={10} />\n *\n * // Vertical\n * <div className=\"h-64\">\n *   <RangeSlider defaultValue={[25, 75]} orientation=\"vertical\" />\n * </div>\n * ```\n *\n * @see https://m3.material.io/components/sliders/overview\n */\nexport const RangeSlider = React.memo(RangeSliderComponent);\n","/**\n * @file slider-track.tsx\n * MD3 Expressive Slider — Track with asymmetric corner radii, 6px thumb gaps,\n * discrete tick marks, and centered-mode support.\n *\n * Design decisions:\n * 1. GAP MATH: The 6px gap between track and thumb is calculated mathematically\n *    using CSS calc() — NOT using margin/padding which would break layout.\n * 2. ASYMMETRIC RADII: Inner corners (facing thumb) = 2px; outer ends = size/2 (pill cap).\n * 3. CENTERED MODE: Active segment spans from 50% outward to thumb, not from min.\n * 4. TICKS: 4×4px dots positioned absolutely along track center axis.\n *    Color differs on active vs inactive portions of the track.\n * 5. VERTICAL: Uses height/top instead of width/left, with inverted axis\n *    (bottom=0%, top=100%) per MD3 vertical spec.\n *\n * @see docs/m3/sliders/Slider.kt#SliderDefaults.Track\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { MD3Size } from \"../../types/md3\";\nimport { SliderColors, SliderTokens } from \"./slider.tokens\";\nimport type {\n\tSliderOrientation,\n\tSliderTrackProps,\n\tSliderVariant,\n} from \"./slider.types\";\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/**\n * Returns border-radius for a horizontal track segment.\n * @param isLeading - whether this segment is on the leading (left) side of the thumb\n */\nfunction getHorizontalRadius(\n\tisLeading: boolean,\n\tinnerR: number,\n\touterR: number,\n): React.CSSProperties {\n\tif (isLeading) {\n\t\treturn {\n\t\t\tborderTopLeftRadius: outerR,\n\t\t\tborderBottomLeftRadius: outerR,\n\t\t\tborderTopRightRadius: innerR,\n\t\t\tborderBottomRightRadius: innerR,\n\t\t};\n\t}\n\treturn {\n\t\tborderTopLeftRadius: innerR,\n\t\tborderBottomLeftRadius: innerR,\n\t\tborderTopRightRadius: outerR,\n\t\tborderBottomRightRadius: outerR,\n\t};\n}\n\n/** Border-radius for a vertical track segment. */\nfunction getVerticalRadius(\n\tisLeading: boolean,\n\tinnerR: number,\n\touterR: number,\n): React.CSSProperties {\n\tif (isLeading) {\n\t\treturn {\n\t\t\tborderBottomLeftRadius: outerR,\n\t\t\tborderBottomRightRadius: outerR,\n\t\t\tborderTopLeftRadius: innerR,\n\t\t\tborderTopRightRadius: innerR,\n\t\t};\n\t}\n\treturn {\n\t\tborderTopLeftRadius: outerR,\n\t\tborderTopRightRadius: outerR,\n\t\tborderBottomLeftRadius: innerR,\n\t\tborderBottomRightRadius: innerR,\n\t};\n}\n\n/** All-inner-radius shorthand for centered active segments (no pill caps). */\nconst allInnerRadius = (innerR: number): React.CSSProperties => ({\n\tborderTopLeftRadius: innerR,\n\tborderBottomLeftRadius: innerR,\n\tborderTopRightRadius: innerR,\n\tborderBottomRightRadius: innerR,\n});\n\n// ─── Inset Icon ───────────────────────────────────────────────────────────────\n\ninterface InsetIconProps {\n\t/** The icon node to render. */\n\ticon: React.ReactNode;\n\t/** Whether the icon is currently positioned on the active (filled) segment. */\n\tisOnActiveSegment: boolean;\n\t/** The computed 'left' (horizontal) or 'bottom' (vertical) CSS value. */\n\tposition: string;\n\torientation: SliderOrientation;\n\t/** Physical track height/width in px. */\n\ttrackSize: number;\n\t/** Size token for looking up tokens (e.g. 'xl') */\n\tsizeToken: MD3Size;\n\tdisabled: boolean;\n\t/** Color variant to match leading/trailing track. */\n\tvariant: SliderVariant;\n\t/** Suppresses motion when user prefers reduced motion. */\n\tprefersReduced: boolean;\n}\n\n/**\n * Icon rendered inside the slider track.\n *\n * When the key changes (active ↔ inactive swap), AnimatePresence unmounts this\n * with a fade-out, then mounts the new instance with a fade-in at its target\n * position — producing the MD3 \"hop\" effect without any position cross-over.\n * When the key stays the same (e.g. trailing-inactive tracking the thumb),\n * the spring on `left`/`bottom` keeps it smoothly glued to the thumb.\n */\nconst InsetIcon = React.memo(function InsetIcon({\n\ticon,\n\tisOnActiveSegment,\n\tposition,\n\torientation,\n\ttrackSize,\n\tsizeToken,\n\tdisabled,\n\tvariant,\n\tprefersReduced,\n}: InsetIconProps) {\n\tconst iconSize = Math.min(\n\t\tSliderTokens.insetIconSizes[sizeToken],\n\t\tMath.max(4, trackSize - SliderTokens.insetIconPadding * 2),\n\t);\n\n\tconst activeColor = `var(--md-sys-color-on-${variant})`;\n\tconst inactiveColor = `var(--md-sys-color-${variant})`;\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst fastFade = prefersReduced ? { duration: 0 } : { duration: 0.12 };\n\n\treturn (\n\t\t<m.div\n\t\t\taria-hidden=\"true\"\n\t\t\tclassName=\"[&_svg]:w-full [&_svg]:h-full\"\n\t\t\tinitial={{\n\t\t\t\topacity: 0,\n\t\t\t\t...(isHorizontal ? { left: position } : { bottom: position }),\n\t\t\t}}\n\t\t\tanimate={{\n\t\t\t\t[isHorizontal ? \"left\" : \"bottom\"]: position,\n\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\tcolor: isOnActiveSegment ? activeColor : inactiveColor,\n\t\t\t}}\n\t\t\texit={{ opacity: 0, transition: fastFade }}\n\t\t\ttransition={\n\t\t\t\tprefersReduced\n\t\t\t\t\t? { duration: 0 }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tleft: { type: \"spring\", stiffness: 500, damping: 40 },\n\t\t\t\t\t\t\tbottom: { type: \"spring\", stiffness: 500, damping: 40 },\n\t\t\t\t\t\t\topacity: fastFade,\n\t\t\t\t\t\t\tcolor: fastFade,\n\t\t\t\t\t\t}\n\t\t\t}\n\t\t\tstyle={{\n\t\t\t\tposition: \"absolute\",\n\t\t\t\twidth: iconSize,\n\t\t\t\theight: iconSize,\n\t\t\t\tdisplay: \"flex\",\n\t\t\t\talignItems: \"center\",\n\t\t\t\tjustifyContent: \"center\",\n\t\t\t\tpointerEvents: \"none\",\n\t\t\t\tzIndex: 1,\n\t\t\t\twillChange: isHorizontal ? \"left\" : \"bottom\",\n\t\t\t\t...(isHorizontal\n\t\t\t\t\t? { top: \"50%\", transform: \"translateY(-50%)\" }\n\t\t\t\t\t: { left: \"50%\", transform: \"translateX(-50%)\" }),\n\t\t\t}}\n\t\t>\n\t\t\t{icon}\n\t\t</m.div>\n\t);\n});\n\n// ─── Tick Marks ───────────────────────────────────────────────────────────────\n\ninterface TicksProps {\n\tticks: number[];\n\tmin: number;\n\tmax: number;\n\tpercent: number;\n\torientation: \"horizontal\" | \"vertical\";\n\tvariant: SliderVariant;\n\tdisabled: boolean;\n\t/** Pre-computed track inset — avoids recalculating in every tick render. */\n\ttrackInset: number;\n}\n\n/** Renders tick dot markers for discrete slider mode. */\nfunction Ticks({\n\tticks,\n\tmin,\n\tmax,\n\tpercent,\n\torientation,\n\tvariant,\n\tisCentered,\n\tdisabled,\n\ttrackInset,\n}: TicksProps & { isCentered?: boolean }) {\n\tif (ticks.length === 0) return null;\n\tconst { thumbGap, thumbWidthDefault, tickSize } = SliderTokens;\n\n\treturn (\n\t\t<>\n\t\t\t{ticks.map((tick) => {\n\t\t\t\tconst tickPercent = (tick - min) / (max - min);\n\t\t\t\tconst isOnActive = isCentered\n\t\t\t\t\t? percent >= 0.5\n\t\t\t\t\t\t? tickPercent >= 0.5 && tickPercent <= percent\n\t\t\t\t\t\t: tickPercent <= 0.5 && tickPercent >= percent\n\t\t\t\t\t: tickPercent <= percent;\n\n\t\t\t\t// Skip ticks that would be visually hidden inside the thumb gap\n\t\t\t\tconst thumbStart = percent - (thumbGap + thumbWidthDefault / 2) / 100;\n\t\t\t\tconst thumbEnd = percent + (thumbGap + thumbWidthDefault / 2) / 100;\n\t\t\t\tif (tickPercent > thumbStart && tickPercent < thumbEnd) return null;\n\n\t\t\t\tconst color = disabled\n\t\t\t\t\t? SliderColors.disabledTick\n\t\t\t\t\t: isOnActive\n\t\t\t\t\t\t? `var(--md-sys-color-on-${variant})`\n\t\t\t\t\t\t: `var(--md-sys-color-${variant})`;\n\n\t\t\t\tconst style: React.CSSProperties = {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: tickSize,\n\t\t\t\t\theight: tickSize,\n\t\t\t\t\tborderRadius: \"50%\",\n\t\t\t\t\tbackgroundColor: color,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t...(orientation === \"horizontal\"\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tleft: `calc(${trackInset}px + ${tickPercent} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t// Vertical: bottom=0%, top=100% (inverted Y-axis)\n\t\t\t\t\t\t\t\tbottom: `calc(${trackInset}px + ${tickPercent} * (100% - ${trackInset * 2}px) - ${tickSize / 2}px)`,\n\t\t\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t};\n\n\t\t\t\treturn <div key={tick} style={style} aria-hidden=\"true\" />;\n\t\t\t})}\n\t\t</>\n\t);\n}\n\n// ─── SliderTrack ──────────────────────────────────────────────────────────────\n\n/**\n * MD3 Expressive Slider Track.\n */\nexport const SliderTrack = React.memo(function SliderTrack({\n\tpercent,\n\tsize,\n\torientation,\n\tvariant,\n\tisCentered,\n\tmin,\n\tmax,\n\tdisabled,\n\ttrackRef,\n\tonTrackPointerDown,\n\tticks = [],\n\tinsetIcon,\n\tinsetIconAtMin,\n\tinsetIconTrailing,\n\tinsetIconAtMax,\n\tvalue,\n\ttrackShape = \"md3\",\n}: Omit<SliderTrackProps, \"step\"> & { ticks?: number[] }) {\n\tconst isHorizontal = orientation === \"horizontal\";\n\tconst trackPixelSize = SliderTokens.trackSizes[size];\n\tconst thumbHeight = SliderTokens.thumbHeights[size];\n\tconst { thumbGap, thumbWidthDefault, trackInnerRadius } = SliderTokens;\n\tconst innerR = trackInnerRadius;\n\n\tlet outerR = trackPixelSize / 2;\n\tif (trackShape === \"md3\") {\n\t\touterR = Math.min(SliderTokens.trackShapes[size], trackPixelSize / 2);\n\t} else if (typeof trackShape === \"number\") {\n\t\touterR = Math.min(trackShape, trackPixelSize / 2);\n\t}\n\n\tconst thumbHalfWidth = thumbWidthDefault / 2;\n\tconst gapWithThumbStr = `${thumbGap + thumbHalfWidth}px`;\n\n\t// ── Inset icon state ─────────────────────────────────────────────────────\n\tconst hasAnyInsetIcon = Boolean(insetIcon || insetIconTrailing);\n\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t// Measure actual track width to compute placement threshold.\n\tconst [trackWidth, setTrackWidth] = React.useState(0);\n\tReact.useLayoutEffect(() => {\n\t\tconst el = trackRef.current;\n\t\tif (!el || !hasAnyInsetIcon) return;\n\t\t// Initial measure\n\t\tsetTrackWidth(isHorizontal ? el.clientWidth : el.clientHeight);\n\t\t// Update on resize\n\t\tconst ro = new ResizeObserver(() => {\n\t\t\tsetTrackWidth(isHorizontal ? el.clientWidth : el.clientHeight);\n\t\t});\n\t\tro.observe(el);\n\t\treturn () => ro.disconnect();\n\t}, [hasAnyInsetIcon, isHorizontal, trackRef]);\n\n\t// Minimum percent required to keep icon on the active segment.\n\t// = (iconSize + 2*padding + gap + halfThumb) / trackWidth\n\tconst activeIconSize = Math.min(\n\t\tSliderTokens.insetIconSizes[size],\n\t\tMath.max(4, trackPixelSize - SliderTokens.insetIconPadding * 2),\n\t);\n\n\tconst iconTotalWidth =\n\t\tactiveIconSize +\n\t\tSliderTokens.insetIconPadding * 2 +\n\t\tthumbGap +\n\t\tthumbHalfWidth;\n\tconst iconThreshold = trackWidth > 0 ? iconTotalWidth / trackWidth : 0.15;\n\n\t// Ref-based hysteresis — avoids a setState re-render cycle (which caused a\n\t// 1-frame lag flicker). A dead-zone of 4% prevents rapid toggling when the\n\t// thumb is near the switch boundary during fast drags.\n\t// Enter active when: remaining space < threshold\n\t// Exit active when:  remaining space > threshold + 4%  (dead-zone)\n\tconst HYSTERESIS_GAP = 0.04;\n\tconst trailingActiveRef = React.useRef(1 - percent <= iconThreshold);\n\tconst leadingActiveRef = React.useRef(percent > iconThreshold);\n\n\t// Trailing icon hysteresis\n\tconst trailingPercent = 1 - percent;\n\tif (trailingActiveRef.current) {\n\t\tif (trailingPercent > iconThreshold + HYSTERESIS_GAP) {\n\t\t\ttrailingActiveRef.current = false;\n\t\t}\n\t} else {\n\t\tif (trailingPercent <= iconThreshold) {\n\t\t\ttrailingActiveRef.current = true;\n\t\t}\n\t}\n\tconst trailingOnActive = trailingActiveRef.current;\n\n\t// Leading icon hysteresis\n\tif (leadingActiveRef.current) {\n\t\tif (percent <= iconThreshold - HYSTERESIS_GAP) {\n\t\t\tleadingActiveRef.current = false;\n\t\t}\n\t} else {\n\t\tif (percent > iconThreshold) {\n\t\t\tleadingActiveRef.current = true;\n\t\t}\n\t}\n\tconst leadingOnActive = leadingActiveRef.current;\n\n\t// Resolve which icon to show (swap at min)\n\tconst isAtMin = value !== undefined && value <= min;\n\tconst resolvedLeadingIcon =\n\t\tisAtMin && insetIconAtMin ? insetIconAtMin : insetIcon;\n\n\tconst isAtMax = value !== undefined && value >= max;\n\tconst resolvedTrailingIcon =\n\t\tisAtMax && insetIconAtMax ? insetIconAtMax : insetIconTrailing;\n\n\t// ── Colors ───────────────────────────────────────────────────────────────\n\tconst activeColor = disabled\n\t\t? SliderColors.disabledActiveTrack\n\t\t: `var(--md-sys-color-${variant})`;\n\tconst inactiveColor = disabled\n\t\t? SliderColors.disabledInactiveTrack\n\t\t: `var(--md-sys-color-${variant}-container)`;\n\tconst insetLimit = SliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\tconst trackInset = Math.min(trackPixelSize / 2, insetLimit);\n\n\t// Icon positions in CSS (computed after trackInset is available)\n\tconst gapTotal = thumbGap + thumbHalfWidth;\n\tconst thumbCenter = `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`;\n\n\t// Leading Icon positions\n\tconst leadingActiveLeft = `${trackInset + SliderTokens.insetIconPadding}px`;\n\tconst leadingInactiveLeft = `calc(${thumbCenter} + ${gapTotal}px + ${SliderTokens.insetIconPadding}px)`;\n\n\t// Trailing Icon positions\n\tconst trailingInactiveLeft = `calc(100% - ${trackInset}px - ${activeIconSize}px - ${SliderTokens.insetIconPadding}px)`;\n\tconst trailingActiveLeft = `calc(${thumbCenter} - ${gapTotal}px - ${activeIconSize}px - ${SliderTokens.insetIconPadding}px)`;\n\n\t// ── Horizontal layout ────────────────────────────────────────────────────\n\tif (isHorizontal) {\n\t\tconst cxStr = `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`;\n\n\t\tconst segments: React.ReactNode[] = [];\n\n\t\tif (!isCentered) {\n\t\t\tconst leftSegmentWidth = `max(0px, calc(${cxStr} - ${gapWithThumbStr}))`;\n\t\t\tconst rightSegmentLeft = `calc(${cxStr} + ${gapWithThumbStr})`;\n\t\t\tconst rightSegmentWidth = `max(0px, calc(100% - (${cxStr} + ${gapWithThumbStr})))`;\n\n\t\t\t// Leading Segment\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"left\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: leftSegmentWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getHorizontalRadius(true, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Trailing Segment\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"right\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tleft: rightSegmentLeft,\n\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\twidth: rightSegmentWidth,\n\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getHorizontalRadius(false, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\t\t} else {\n\t\t\t// Centered mode\n\t\t\tconst halfCenterGap = SliderTokens.thumbGap / 2;\n\n\t\t\tif (percent >= 0.5) {\n\t\t\t\t// Left base segment (Inactive)\n\t\t\t\tconst leftBaseWidth = `max(0px, min(calc(50% - ${halfCenterGap}px), calc(${cxStr} - ${gapWithThumbStr})))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"left-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: leftBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(true, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Center active segment\n\t\t\t\tconst centerActiveLeft = `calc(50% + ${halfCenterGap}px)`;\n\t\t\t\tconst centerActiveWidth = `max(0px, calc(${cxStr} - ${gapWithThumbStr} - (50% + ${halfCenterGap}px)))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: centerActiveLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: centerActiveWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Right base segment (Inactive)\n\t\t\t\tconst rightBaseLeft = `calc(${cxStr} + ${gapWithThumbStr})`;\n\t\t\t\tconst rightBaseWidth = `max(0px, calc(100% - (${cxStr} + ${gapWithThumbStr})))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"right-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: rightBaseLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: rightBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(false, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// Left base segment (Inactive)\n\t\t\t\tconst leftBaseWidth = `max(0px, calc(${cxStr} - ${gapWithThumbStr}))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"left-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: 0,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: leftBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(true, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Center active segment\n\t\t\t\tconst centerActiveLeft = `calc(${cxStr} + ${gapWithThumbStr})`;\n\t\t\t\tconst centerActiveWidth = `max(0px, calc(50% - ${halfCenterGap}px - (${cxStr} + ${gapWithThumbStr})))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: centerActiveLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: centerActiveWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\n\t\t\t\t// Right base segment (Inactive)\n\t\t\t\tconst rightBaseLeft = `max(calc(50% + ${halfCenterGap}px), calc(${cxStr} + ${gapWithThumbStr}))`;\n\t\t\t\tconst rightBaseWidth = `max(0px, calc(100% - max(calc(50% + ${halfCenterGap}px), calc(${cxStr} + ${gapWithThumbStr}))))`;\n\t\t\t\tsegments.push(\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey=\"right-base\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\t\tleft: rightBaseLeft,\n\t\t\t\t\t\t\ttop: \"50%\",\n\t\t\t\t\t\t\ttransform: \"translateY(-50%)\",\n\t\t\t\t\t\t\twidth: rightBaseWidth,\n\t\t\t\t\t\t\theight: trackPixelSize,\n\t\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t\t...getHorizontalRadius(false, innerR, outerR),\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={trackRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative w-full\",\n\t\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t\t)}\n\t\t\t\tstyle={{ height: thumbHeight }}\n\t\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{segments}\n\t\t\t\t{ticks.length > 0 && (\n\t\t\t\t\t<Ticks\n\t\t\t\t\t\tticks={ticks}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tpercent={percent}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tisCentered={isCentered}\n\t\t\t\t\t\ttrackInset={trackInset}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t{/* Inset Icons (Leading & Trailing) */}\n\t\t\t\t{/* Leading icon: key changes on min-swap OR active↔inactive swap → fade transition */}\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{resolvedLeadingIcon && (\n\t\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\t\tisAtMin\n\t\t\t\t\t\t\t\t\t? \"lead-min\"\n\t\t\t\t\t\t\t\t\t: leadingOnActive\n\t\t\t\t\t\t\t\t\t\t? \"lead-active\"\n\t\t\t\t\t\t\t\t\t\t: \"lead-inactive\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ticon={resolvedLeadingIcon}\n\t\t\t\t\t\t\tisOnActiveSegment={leadingOnActive}\n\t\t\t\t\t\t\tposition={\n\t\t\t\t\t\t\t\tleadingOnActive ? leadingActiveLeft : leadingInactiveLeft\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\n\t\t\t\t{/* Trailing icon: key changes on max-swap OR active↔inactive swap → fade transition */}\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{resolvedTrailingIcon && (\n\t\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\t\tisAtMax\n\t\t\t\t\t\t\t\t\t? \"trail-max\"\n\t\t\t\t\t\t\t\t\t: trailingOnActive\n\t\t\t\t\t\t\t\t\t\t? \"trail-active\"\n\t\t\t\t\t\t\t\t\t\t: \"trail-inactive\"\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ticon={resolvedTrailingIcon}\n\t\t\t\t\t\t\tisOnActiveSegment={trailingOnActive}\n\t\t\t\t\t\t\tposition={\n\t\t\t\t\t\t\t\ttrailingOnActive ? trailingActiveLeft : trailingInactiveLeft\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</div>\n\t\t);\n\t}\n\n\t// ── Vertical layout ───────────────────────────────────────────────────────\n\tconst cyStr = `calc(${trackInset}px + ${percent} * (100% - ${trackInset * 2}px))`;\n\n\tconst segments: React.ReactNode[] = [];\n\n\tif (!isCentered) {\n\t\tconst bottomSegmentHeight = `max(0px, calc(${cyStr} - ${gapWithThumbStr}))`;\n\t\tconst topSegmentBottom = `calc(${cyStr} + ${gapWithThumbStr})`;\n\t\tconst topSegmentHeight = `max(0px, calc(100% - (${cyStr} + ${gapWithThumbStr})))`;\n\n\t\t// Bottom segment\n\t\tsegments.push(\n\t\t\t<div\n\t\t\t\tkey=\"bottom\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: bottomSegmentHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t...getVerticalRadius(true, innerR, outerR),\n\t\t\t\t}}\n\t\t\t/>,\n\t\t);\n\n\t\t// Top segment\n\t\tsegments.push(\n\t\t\t<div\n\t\t\t\tkey=\"top\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tbottom: topSegmentBottom,\n\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\theight: topSegmentHeight,\n\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t...getVerticalRadius(false, innerR, outerR),\n\t\t\t\t}}\n\t\t\t/>,\n\t\t);\n\t} else {\n\t\t// Centered mode (Vertical is inverted: bottom=0%, top=100%)\n\t\tconst halfCenterGap = SliderTokens.thumbGap / 2;\n\n\t\tif (percent >= 0.5) {\n\t\t\t// Bottom base segment (Inactive)\n\t\t\tconst bottomBaseHeight = `max(0px, min(calc(50% - ${halfCenterGap}px), calc(${cyStr} - ${gapWithThumbStr})))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"bottom-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: bottomBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(true, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Center active segment\n\t\t\tconst centerActiveBottom = `calc(50% + ${halfCenterGap}px)`;\n\t\t\tconst centerActiveHeight = `max(0px, calc(${cyStr} - ${gapWithThumbStr} - (50% + ${halfCenterGap}px)))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: centerActiveBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: centerActiveHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Top base segment (Inactive)\n\t\t\tconst topBaseBottom = `calc(${cyStr} + ${gapWithThumbStr})`;\n\t\t\tconst topBaseHeight = `max(0px, calc(100% - (${cyStr} + ${gapWithThumbStr})))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"top-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: topBaseBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: topBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(false, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\t\t} else {\n\t\t\t// Bottom base segment (Inactive)\n\t\t\tconst bottomBaseHeight = `max(0px, calc(${cyStr} - ${gapWithThumbStr}))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"bottom-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: 0,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: bottomBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(true, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Center active segment\n\t\t\tconst centerActiveBottom = `calc(${cyStr} + ${gapWithThumbStr})`;\n\t\t\tconst centerActiveHeight = `max(0px, calc(50% - ${halfCenterGap}px - (${cyStr} + ${gapWithThumbStr})))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"center-active\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: centerActiveBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: centerActiveHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: activeColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...allInnerRadius(innerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\n\t\t\t// Top base segment (Inactive)\n\t\t\tconst topBaseBottom = `max(calc(50% + ${halfCenterGap}px), calc(${cyStr} + ${gapWithThumbStr}))`;\n\t\t\tconst topBaseHeight = `max(0px, calc(100% - max(calc(50% + ${halfCenterGap}px), calc(${cyStr} + ${gapWithThumbStr}))))`;\n\t\t\tsegments.push(\n\t\t\t\t<div\n\t\t\t\t\tkey=\"top-base\"\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\tbottom: topBaseBottom,\n\t\t\t\t\t\tleft: \"50%\",\n\t\t\t\t\t\ttransform: \"translateX(-50%)\",\n\t\t\t\t\t\theight: topBaseHeight,\n\t\t\t\t\t\twidth: trackPixelSize,\n\t\t\t\t\t\tbackgroundColor: inactiveColor,\n\t\t\t\t\t\topacity: disabled ? 0.38 : 1,\n\t\t\t\t\t\t...getVerticalRadius(false, innerR, outerR),\n\t\t\t\t\t}}\n\t\t\t\t/>,\n\t\t\t);\n\t\t}\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={trackRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative h-full\",\n\t\t\t\tdisabled ? \"cursor-not-allowed\" : \"cursor-pointer\",\n\t\t\t)}\n\t\t\tstyle={{ width: thumbHeight }}\n\t\t\tonPointerDown={onTrackPointerDown}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t{segments}\n\t\t\t{ticks.length > 0 && (\n\t\t\t\t<Ticks\n\t\t\t\t\tticks={ticks}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tpercent={percent}\n\t\t\t\t\torientation={orientation}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tisCentered={isCentered}\n\t\t\t\t\ttrackInset={trackInset}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{/* Inset Icons (Leading & Trailing) */}\n\t\t\t{/* Leading icon: key changes on min-swap OR active↔inactive swap → fade transition */}\n\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t{resolvedLeadingIcon && (\n\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\tisAtMin\n\t\t\t\t\t\t\t\t? \"lead-min\"\n\t\t\t\t\t\t\t\t: leadingOnActive\n\t\t\t\t\t\t\t\t\t? \"lead-active\"\n\t\t\t\t\t\t\t\t\t: \"lead-inactive\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={resolvedLeadingIcon}\n\t\t\t\t\t\tisOnActiveSegment={leadingOnActive}\n\t\t\t\t\t\tposition={leadingOnActive ? leadingActiveLeft : leadingInactiveLeft}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\n\t\t\t{/* Trailing icon: key changes on max-swap OR active↔inactive swap → fade transition */}\n\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t{resolvedTrailingIcon && (\n\t\t\t\t\t<InsetIcon\n\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\tisAtMax\n\t\t\t\t\t\t\t\t? \"trail-max\"\n\t\t\t\t\t\t\t\t: trailingOnActive\n\t\t\t\t\t\t\t\t\t? \"trail-active\"\n\t\t\t\t\t\t\t\t\t: \"trail-inactive\"\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon={resolvedTrailingIcon}\n\t\t\t\t\t\tisOnActiveSegment={trailingOnActive}\n\t\t\t\t\t\tposition={\n\t\t\t\t\t\t\ttrailingOnActive ? trailingActiveLeft : trailingInactiveLeft\n\t\t\t\t\t\t}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\ttrackSize={trackPixelSize}\n\t\t\t\t\t\tsizeToken={size}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tprefersReduced={prefersReduced}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</div>\n\t);\n});\n","/**\n * @file slider.tsx\n * MD3 Expressive Slider — Main composition component.\n *\n * Supports:\n * - Controlled and uncontrolled usage patterns\n * - Horizontal and vertical orientations\n * - Discrete mode (step snapping + tick marks)\n * - Centered active track (isCentered)\n * - Value indicator tooltip\n * - Full keyboard navigation (ARIA Slider pattern)\n * - Click-to-jump on track\n *\n * Architecture: Flat (no Context needed for single thumb variant).\n * Track + Thumb are internal sub-components composed here.\n *\n * @see https://m3.material.io/components/sliders/overview\n * @see docs/m3/sliders/Slider.kt\n */\n\nimport { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useSliderMath } from \"./hooks/useSliderMath\";\nimport { SliderTokens } from \"./slider.tokens\";\nimport type { SliderProps } from \"./slider.types\";\nimport { SliderThumb } from \"./slider-thumb\";\nimport { SliderTrack } from \"./slider-track\";\n\n// ─── Slider ───────────────────────────────────────────────────────────────────\n\nconst SliderComponent = React.forwardRef<HTMLDivElement, SliderProps>(\n\t(\n\t\t{\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue,\n\t\t\tonValueChange,\n\t\t\tonValueChangeEnd,\n\t\t\tmin = 0,\n\t\t\tmax = 100,\n\t\t\tstep = 0,\n\t\t\torientation = \"horizontal\",\n\t\t\tsize = \"md\",\n\t\t\ttrackShape = \"md3\",\n\t\t\tvariant = \"primary\",\n\t\t\tisCentered = false,\n\t\t\tdisabled = false,\n\t\t\tshowValueIndicator = false,\n\t\t\tshowTicks = false,\n\t\t\tinsetIcon,\n\t\t\tinsetIconAtMin,\n\t\t\tinsetIconTrailing,\n\t\t\tinsetIconAtMax,\n\t\t\tformatValue,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t\"aria-labelledby\": ariaLabelledBy,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\n\t\t// ── Controlled / Uncontrolled state ────────────────────────────────────\n\t\tconst midpoint = min + (max - min) / 2;\n\t\tconst initialValue = defaultValue ?? midpoint;\n\t\tconst [internalValue, setInternalValue] = React.useState(initialValue);\n\t\tconst resolvedValue =\n\t\t\tcontrolledValue !== undefined ? controlledValue : internalValue;\n\n\t\tconst { coerce, snap, toPercent, ticks } = useSliderMath({\n\t\t\tmin,\n\t\t\tmax,\n\t\t\tstep,\n\t\t});\n\n\t\tconst safeValue = snap(coerce(resolvedValue));\n\t\tconst percent = toPercent(safeValue);\n\n\t\t// ── Track ref (for click-to-jump + thumb drag constraint) ──────────────\n\t\tconst trackRef = React.useRef<HTMLDivElement>(null);\n\n\t\t// ── onChange handler ───────────────────────────────────────────────────\n\t\tconst handleValueChange = React.useCallback(\n\t\t\t(newValue: number) => {\n\t\t\t\tconst clamped = snap(coerce(newValue));\n\t\t\t\tif (controlledValue === undefined) {\n\t\t\t\t\tsetInternalValue(clamped);\n\t\t\t\t}\n\t\t\t\tonValueChange?.(clamped);\n\t\t\t},\n\t\t\t[coerce, controlledValue, onValueChange, snap],\n\t\t);\n\n\t\tconst handleValueChangeEnd = React.useCallback(\n\t\t\t(newValue: number) => {\n\t\t\t\tonValueChangeEnd?.(snap(coerce(newValue)));\n\t\t\t},\n\t\t\t[coerce, onValueChangeEnd, snap],\n\t\t);\n\n\t\t// ── Click-to-jump on track ─────────────────────────────────────────────\n\t\tconst handleTrackPointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLDivElement>) => {\n\t\t\t\tif (disabled) return;\n\t\t\t\tconst trackEl = trackRef.current;\n\t\t\t\tif (!trackEl) return;\n\n\t\t\t\tconst rect = trackEl.getBoundingClientRect();\n\t\t\t\tlet clickPercent: number;\n\n\t\t\t\tconst insetLimit =\n\t\t\t\t\tSliderTokens.thumbGap + SliderTokens.thumbWidthDefault / 2;\n\t\t\t\tconst trackInset = Math.min(\n\t\t\t\t\tSliderTokens.trackSizes[size] / 2,\n\t\t\t\t\tinsetLimit,\n\t\t\t\t);\n\n\t\t\t\tif (isHorizontal) {\n\t\t\t\t\tconst x = e.clientX - rect.left;\n\t\t\t\t\tclickPercent = (x - trackInset) / (rect.width - trackInset * 2);\n\t\t\t\t} else {\n\t\t\t\t\tconst y = rect.bottom - e.clientY;\n\t\t\t\t\tclickPercent = (y - trackInset) / (rect.height - trackInset * 2);\n\t\t\t\t}\n\n\t\t\t\tconst clamped = Math.max(0, Math.min(1, clickPercent));\n\t\t\t\tconst rawValue = min + clamped * (max - min);\n\t\t\t\tconst newValue = snap(coerce(rawValue));\n\t\t\t\thandleValueChange(newValue);\n\t\t\t},\n\t\t\t[coerce, disabled, handleValueChange, isHorizontal, max, min, snap, size],\n\t\t);\n\n\t\t// ── Generate unique IDs for ARIA ───────────────────────────────────────\n\t\tconst id = React.useId();\n\t\tconst thumbId = `slider-thumb-${id}`;\n\n\t\t// ── Inset icon guard (MD3 spec) ───────────────────────────────────────────\n\t\t// Only track sizes >= 40dp support inset icon. Not valid with isCentered.\n\t\tconst supportsInsetIcon =\n\t\t\t!isCentered && SliderTokens.trackSizes[size] >= 40;\n\t\tconst hasAnyInsetIcon = !!(insetIcon || insetIconTrailing);\n\t\tif (hasAnyInsetIcon && !supportsInsetIcon) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[Slider] insetIcon is only supported on track sizes >= 40dp (e.g. xl track sizes). \" +\n\t\t\t\t\t\"See MD3 spec: https://m3.material.io/components/sliders/specs\",\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex items-center\",\n\t\t\t\t\t\tisHorizontal ? \"w-full flex-row\" : \"h-full flex-col\",\n\t\t\t\t\t\tdisabled && \"pointer-events-none\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={isHorizontal ? { minWidth: 0 } : { minHeight: 0 }}\n\t\t\t\t>\n\t\t\t\t\t<SliderTrack\n\t\t\t\t\t\tpercent={percent}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\ttrackShape={trackShape}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tisCentered={isCentered}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonTrackPointerDown={handleTrackPointerDown}\n\t\t\t\t\t\tticks={showTicks ? ticks : []}\n\t\t\t\t\t\tinsetIcon={supportsInsetIcon ? insetIcon : undefined}\n\t\t\t\t\t\tinsetIconAtMin={supportsInsetIcon ? insetIconAtMin : undefined}\n\t\t\t\t\t\tinsetIconTrailing={\n\t\t\t\t\t\t\tsupportsInsetIcon ? insetIconTrailing : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinsetIconAtMax={supportsInsetIcon ? insetIconAtMax : undefined}\n\t\t\t\t\t\tvalue={safeValue}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<SliderThumb\n\t\t\t\t\t\tvalue={safeValue}\n\t\t\t\t\t\tpercent={percent}\n\t\t\t\t\t\tmin={min}\n\t\t\t\t\t\tmax={max}\n\t\t\t\t\t\tstep={step}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\torientation={orientation}\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\tshowValueIndicator={showValueIndicator}\n\t\t\t\t\t\ttrackRef={trackRef}\n\t\t\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\t\t\tonValueChangeEnd={handleValueChangeEnd}\n\t\t\t\t\t\tformatValue={formatValue}\n\t\t\t\t\t\tthumbId={thumbId}\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\taria-labelledby={ariaLabelledBy}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nSliderComponent.displayName = \"Slider\";\n\n/**\n * MD3 Expressive Slider component.\n *\n * A pill-shaped vertical handle that slides along a rounded track.\n * Supports continuous and discrete (step) modes, horizontal/vertical\n * orientations, and centered active track.\n *\n * Features:\n * - M3 Expressive handle: 4px pill that squeezes to 2px on press\n * - 6px transparent gap between track and thumb\n * - Asymmetric corner radii: outer ends=9999px, inner ends=2px\n * - Tick marks for discrete mode\n * - Optional floating value indicator tooltip\n * - Full keyboard navigation per WAI-ARIA Slider pattern\n *\n * @example\n * ```tsx\n * // Basic controlled\n * <Slider value={volume} onValueChange={setVolume} aria-label=\"Volume\" />\n *\n * // Discrete with ticks\n * <Slider defaultValue={0} step={10} min={0} max={100} />\n *\n * // Vertical orientation\n * <div className=\"h-64\">\n *   <Slider defaultValue={50} orientation=\"vertical\" aria-label=\"Brightness\" />\n * </div>\n *\n * // Centered active track\n * <Slider defaultValue={0} isCentered showValueIndicator />\n *\n * // Large track with value tooltip\n * <Slider defaultValue={50} trackSize=\"l\" showValueIndicator\n *   formatValue={(v) => `${v}%`} />\n * ```\n *\n * @see https://m3.material.io/components/sliders/overview\n */\nexport const Slider = React.memo(SliderComponent);\n","/**\n * @file snackbar.tsx\n *\n * MD3 Expressive Snackbar component.\n *\n * Architecture:\n * - `Snackbar`         → Pure display component (motion.div, role=\"status\", aria-live=\"polite\")\n * - `SnackbarHost`     → AnimatePresence container + queue flush (place once in layout)\n * - `SnackbarProvider` → Context provider that wires SnackbarHost + exposes `useSnackbar`\n * - `useSnackbarState` → Low-level ref-based queue hook (mutex pattern)\n * - `useSnackbar`      → Consumer hook for imperative `showSnackbar(visuals)` calls\n *\n * Queue strategy:\n * - One snackbar visible at a time (MD3 spec).\n * - Subsequent `showSnackbar()` calls are enqueued, shown as soon as current one dismisses.\n * - Cleanup: on unmount, all pending promises resolve as 'dismissed'.\n *\n * @see https://m3.material.io/components/snackbar/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 { IconButton } from \"../buttons/icon-button\";\nimport { Icon } from \"../icon\";\nimport { DEFAULT_SPATIAL_SPRING } from \"../shared/motion-tokens\";\n\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst DURATION_MAP = {\n\tshort: 4000,\n\tlong: 7000,\n} as const;\n\nconst RESULT = {\n\tACTION: \"action-performed\",\n\tDISMISSED: \"dismissed\",\n} as const satisfies Record<string, SnackbarResult>;\n\n// ─── Animation Config (Framer Motion — NOT CSS transitions) ──────────────────\n\n// MD3 default.spatial: stiffness=380, dampingRatio=0.8 → Framer damping ≈ 31.19\nconst SNACKBAR_SPRING = DEFAULT_SPATIAL_SPRING;\n\nconst SNACKBAR_ANIM = {\n\tinitial: { opacity: 0, y: 56, scale: 0.9 },\n\tanimate: {\n\t\topacity: 1,\n\t\ty: 0,\n\t\tscale: 1,\n\t\ttransition: SNACKBAR_SPRING,\n\t},\n\texit: {\n\t\topacity: 0,\n\t\ty: 24,\n\t\tscale: 0.95,\n\t\ttransition: { duration: 0.2, ease: \"easeIn\" as const },\n\t},\n} as const;\n\nconst REDUCED_MOTION_ANIM = {\n\tinitial: { opacity: 0 },\n\tanimate: { opacity: 1 },\n\texit: { opacity: 0 },\n} as const;\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Duration preset for the snackbar auto-dismiss timer.\n * - `'short'` → 4 000 ms (default, MD3 spec)\n * - `'long'`  → 7 000 ms\n * - `number`  → custom milliseconds\n */\nexport type SnackbarDuration = \"short\" | \"long\" | number;\n\n/**\n * Resolution value returned by the `showSnackbar()` promise.\n * - `'action-performed'` → user clicked the action button\n * - `'dismissed'`        → auto-dismissed or close button clicked\n */\nexport type SnackbarResult = \"action-performed\" | \"dismissed\";\n\n/**\n * Visual configuration for a single snackbar instance.\n */\nexport interface SnackbarVisuals {\n\t/** Main message text. */\n\tmessage: string;\n\t/** Label for the optional action button. */\n\tactionLabel?: string;\n\t/** When `true`, renders a close (X) icon button. @default false */\n\twithDismissAction?: boolean;\n\t/**\n\t * When `true`, renders the action button below the message (Column layout).\n\t * Use when both message and actionLabel are long.\n\t * @default false\n\t */\n\tactionOnNewLine?: boolean;\n\t/**\n\t * Auto-dismiss duration.\n\t * @default 'short' (4 000 ms)\n\t */\n\tduration?: SnackbarDuration;\n\t/** Additional className applied to the snackbar container. */\n\tclassName?: string;\n}\n\n/**\n * Internal runtime data for a currently-displayed snackbar.\n * Includes the resolve callback to settle the caller's promise.\n */\nexport interface SnackbarData {\n\t/** Unique key for AnimatePresence element diffing. */\n\tid: string;\n\t/** Visual configuration. */\n\tvisuals: SnackbarVisuals;\n\t/** Settles the promise returned by `showSnackbar()`. */\n\tresolve: (result: SnackbarResult) => void;\n}\n\n/** Props for the pure `Snackbar` display component. */\nexport interface SnackbarProps {\n\t/** Runtime data including message, actions, and resolve callback. */\n\tdata: SnackbarData;\n\t/** Additional className merged onto the snackbar container. */\n\tclassName?: string;\n}\n\n/** Props for the `SnackbarHost` component. */\nexport interface SnackbarHostProps {\n\t/** State returned by `useSnackbarState()`. */\n\tstate: UseSnackbarStateReturn;\n\t/** Additional className applied to the fixed host wrapper. */\n\tclassName?: string;\n}\n\n// ─── Internal Queue Item ──────────────────────────────────────────────────────\n\ninterface QueueItem {\n\tvisuals: SnackbarVisuals;\n\tresolve: (result: SnackbarResult) => void;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction resolveDuration(duration: SnackbarDuration | undefined): number {\n\tif (duration === undefined) return DURATION_MAP.short;\n\tif (typeof duration === \"number\") return duration;\n\treturn DURATION_MAP[duration];\n}\n\nfunction generateId(): string {\n\treturn typeof crypto !== \"undefined\" && crypto.randomUUID\n\t\t? crypto.randomUUID()\n\t\t: Math.random().toString(36).slice(2);\n}\n\nfunction toSnackbarData(item: QueueItem): SnackbarData {\n\treturn { id: generateId(), visuals: item.visuals, resolve: item.resolve };\n}\n\n// ─── useSnackbarState hook ────────────────────────────────────────────────────\n\n/** Return type of `useSnackbarState`. */\nexport interface UseSnackbarStateReturn {\n\t/** Currently visible snackbar data, or `null` when idle. */\n\tcurrent: SnackbarData | null;\n\t/**\n\t * Show a snackbar with the given visuals.\n\t * Returns a promise that resolves when the snackbar is dismissed or the action is triggered.\n\t */\n\tshowSnackbar: (visuals: SnackbarVisuals) => Promise<SnackbarResult>;\n\t/** Internal dismiss handler — called by `SnackbarHost`. */\n\t_dismiss: (result: SnackbarResult) => void;\n}\n\n/**\n * Low-level hook that manages the snackbar queue and current state.\n *\n * Uses a `ref`-based queue (mutex pattern) so that enqueueing never\n * triggers a re-render storm — only the state transition does.\n *\n * @example\n * ```tsx\n * // Used internally by SnackbarProvider\n * const state = useSnackbarState();\n * return <SnackbarHost state={state} />;\n * ```\n */\nexport function useSnackbarState(): UseSnackbarStateReturn {\n\tconst [current, setCurrent] = React.useState<SnackbarData | null>(null);\n\tconst queueRef = React.useRef<QueueItem[]>([]);\n\n\tconst showSnackbar = React.useCallback(\n\t\t(visuals: SnackbarVisuals): Promise<SnackbarResult> => {\n\t\t\treturn new Promise<SnackbarResult>((resolve) => {\n\t\t\t\tconst item: QueueItem = { visuals, resolve };\n\t\t\t\tsetCurrent((prev) => {\n\t\t\t\t\tif (prev === null) return toSnackbarData(item);\n\t\t\t\t\tqueueRef.current.push(item);\n\t\t\t\t\treturn prev;\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\t[],\n\t);\n\n\tconst _dismiss = React.useCallback((result: SnackbarResult) => {\n\t\tsetCurrent((prev) => {\n\t\t\tif (prev) prev.resolve(result);\n\t\t\tconst next = queueRef.current.shift();\n\t\t\treturn next ? toSnackbarData(next) : null;\n\t\t});\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\tfor (const item of queueRef.current) {\n\t\t\t\titem.resolve(RESULT.DISMISSED);\n\t\t\t}\n\t\t\tqueueRef.current = [];\n\t\t};\n\t}, []);\n\n\treturn { current, showSnackbar, _dismiss };\n}\n\n// ─── Snackbar (Pure Display Component) ───────────────────────────────────────\n\n/**\n * MD3 Expressive Snackbar — pure display component.\n *\n * Renders a single snackbar with message, optional action button, and\n * optional dismiss icon button. Handles its own auto-dismiss timer.\n *\n * @remarks\n * - Uses `role=\"status\"` + `aria-live=\"polite\"` for screen reader announcements.\n * - All entrance/exit animation is handled by the parent `SnackbarHost` via\n *   `AnimatePresence` + `SNACKBAR_ANIM`.\n * - Do NOT render this component directly — use `SnackbarHost`.\n *\n * @example\n * ```tsx\n * // Internal usage inside SnackbarHost — not for direct use\n * <Snackbar data={currentSnackbarData} />\n * ```\n */\nexport const Snackbar = React.memo(function Snackbar({\n\tdata,\n\tclassName,\n}: SnackbarProps) {\n\tconst { visuals, resolve } = data;\n\tconst {\n\t\tmessage,\n\t\tactionLabel,\n\t\twithDismissAction = false,\n\t\tactionOnNewLine = false,\n\t\tduration,\n\t} = visuals;\n\n\tconst reducedMotion = useReducedMotion();\n\tconst durationMs = resolveDuration(duration);\n\n\tReact.useEffect(() => {\n\t\tconst timer = setTimeout(() => resolve(RESULT.DISMISSED), durationMs);\n\t\treturn () => clearTimeout(timer);\n\t}, [resolve, durationMs]);\n\n\tconst handleAction = React.useCallback(\n\t\t() => resolve(RESULT.ACTION),\n\t\t[resolve],\n\t);\n\n\tconst handleDismiss = React.useCallback(\n\t\t() => resolve(RESULT.DISMISSED),\n\t\t[resolve],\n\t);\n\n\tconst hasActions = actionLabel || withDismissAction;\n\tconst anim = reducedMotion ? REDUCED_MOTION_ANIM : SNACKBAR_ANIM;\n\n\treturn (\n\t\t<m.div\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t\taria-atomic=\"true\"\n\t\t\t{...anim}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex items-center gap-2\",\n\t\t\t\t\"min-w-72 max-w-142 w-max\",\n\t\t\t\t\"rounded-sm px-4 py-3 shadow-md\",\n\t\t\t\t\"text-m3-inverse-on-surface bg-m3-inverse-surface\",\n\t\t\t\tactionOnNewLine ? \"flex-col items-start\" : \"flex-row\",\n\t\t\t\tclassName,\n\t\t\t\tvisuals.className,\n\t\t\t)}\n\t\t>\n\t\t\t<span className=\"flex-1 text-sm leading-5 font-normal\">{message}</span>\n\n\t\t\t{hasActions && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex shrink-0 items-center gap-1\",\n\t\t\t\t\t\tactionOnNewLine && \"self-end\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{actionLabel && (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={handleAction}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"inline-flex items-center justify-center\",\n\t\t\t\t\t\t\t\t\"h-10 px-3 py-2.5 rounded-sm\",\n\t\t\t\t\t\t\t\t\"text-sm font-medium leading-5 whitespace-nowrap\",\n\t\t\t\t\t\t\t\t\"text-m3-inverse-primary\",\n\t\t\t\t\t\t\t\t\"hover:bg-m3-inverse-primary/8 focus-visible:bg-m3-inverse-primary/12 active:bg-m3-inverse-primary/12\",\n\t\t\t\t\t\t\t\t\"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-m3-inverse-primary\",\n\t\t\t\t\t\t\t\t\"transition-colors select-none cursor-pointer\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{actionLabel}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{withDismissAction && (\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tcolorStyle=\"standard\"\n\t\t\t\t\t\t\taria-label=\"Dismiss notification\"\n\t\t\t\t\t\t\tonClick={handleDismiss}\n\t\t\t\t\t\t\tclassName=\"text-m3-inverse-on-surface hover:bg-m3-inverse-on-surface/8 active:bg-m3-inverse-on-surface/12 focus-visible:ring-m3-inverse-primary\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Icon name=\"close\" aria-hidden=\"true\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</m.div>\n\t);\n});\n\nSnackbar.displayName = \"Snackbar\";\n\n// ─── SnackbarHost ─────────────────────────────────────────────────────────────\n\n/**\n * MD3 SnackbarHost — renders the AnimatePresence container for snackbar queue.\n *\n * Place this once in your app layout. It will show snackbars one at a time,\n * dequeuing the next one as each dismisses.\n *\n * @example\n * ```tsx\n * // Typically used inside SnackbarProvider — not directly\n * const state = useSnackbarState();\n * <SnackbarHost state={state} />\n * ```\n */\nexport function SnackbarHost({ state, className }: SnackbarHostProps) {\n\tconst { current, _dismiss } = state;\n\n\tconst wrappedData = React.useMemo<SnackbarData | null>(() => {\n\t\tif (!current) return null;\n\t\treturn { ...current, resolve: _dismiss };\n\t}, [current, _dismiss]);\n\n\treturn (\n\t\t<LazyMotion features={domMax} strict>\n\t\t\t<section\n\t\t\t\taria-label=\"Snackbar notifications\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"fixed bottom-4 left-1/2 -translate-x-1/2 z-50\",\n\t\t\t\t\t\"flex flex-col items-center pointer-events-none\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t{wrappedData && (\n\t\t\t\t\t\t<div key={wrappedData.id} className=\"pointer-events-auto\">\n\t\t\t\t\t\t\t<Snackbar data={wrappedData} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</AnimatePresence>\n\t\t\t</section>\n\t\t</LazyMotion>\n\t);\n}\n\nSnackbarHost.displayName = \"SnackbarHost\";\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface SnackbarContextValue {\n\tshowSnackbar: (visuals: SnackbarVisuals) => Promise<SnackbarResult>;\n}\n\nexport const SnackbarContext = React.createContext<SnackbarContextValue | null>(\n\tnull,\n);\n\n// ─── SnackbarProvider ─────────────────────────────────────────────────────────\n\n/**\n * MD3 SnackbarProvider — context provider for imperative snackbar API.\n *\n * Wrap your application (or a section of it) with this provider.\n * Then use `useSnackbar()` in any descendant to show snackbars.\n *\n * @example\n * ```tsx\n * // In your root layout:\n * <SnackbarProvider>\n *   <App />\n * </SnackbarProvider>\n *\n * // In any component:\n * const { showSnackbar } = useSnackbar();\n * await showSnackbar({ message: 'Saved!', actionLabel: 'Undo' });\n * ```\n */\nexport function SnackbarProvider({ children }: { children: React.ReactNode }) {\n\tconst state = useSnackbarState();\n\n\tconst contextValue = React.useMemo<SnackbarContextValue>(\n\t\t() => ({ showSnackbar: state.showSnackbar }),\n\t\t[state.showSnackbar],\n\t);\n\n\treturn (\n\t\t<SnackbarContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t\t<SnackbarHost state={state} />\n\t\t</SnackbarContext.Provider>\n\t);\n}\n\nSnackbarProvider.displayName = \"SnackbarProvider\";\n\n// ─── useSnackbar hook ─────────────────────────────────────────────────────────\n\n/**\n * Hook that returns the `showSnackbar` function from the nearest `SnackbarProvider`.\n *\n * @throws {Error} if used outside of a `SnackbarProvider`.\n *\n * @example\n * ```tsx\n * function SaveButton() {\n *   const { showSnackbar } = useSnackbar();\n *\n *   const handleSave = async () => {\n *     const result = await showSnackbar({\n *       message: 'Changes saved',\n *       actionLabel: 'Undo',\n *     });\n *     if (result === 'action-performed') undoSave();\n *   };\n *\n *   return <button onClick={handleSave}>Save</button>;\n * }\n * ```\n */\nexport function useSnackbar(): SnackbarContextValue {\n\tconst ctx = React.useContext(SnackbarContext);\n\tif (!ctx) {\n\t\tthrow new Error(\"useSnackbar must be used within a <SnackbarProvider>.\");\n\t}\n\treturn ctx;\n}\n","/**\n * @file tabs.tsx\n * MD3 Expressive Tabs — Root context provider and state manager.\n * Implements compound component pattern (similar to Radix UI).\n * Spec: https://m3.material.io/components/tabs/overview\n */\n\nimport { domMax, LazyMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport type { TabsContextValue, TabsProps } from \"./tabs.types\";\n\n// ─── Context ───────────────────────────────────────────────────────────────────\n\nconst TabsContext = React.createContext<TabsContextValue | null>(null);\n\n/**\n * Hook to consume the Tabs context.\n * Throws if used outside a `<Tabs>` root.\n * @internal\n */\nexport function useTabsContext(): TabsContextValue {\n\tconst ctx = React.useContext(TabsContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t\"[MD3 Tabs] Component must be used within a <Tabs> root. \" +\n\t\t\t\t\"Ensure <TabsList>, <Tab>, and <TabsContent> are descendants of <Tabs>.\",\n\t\t);\n\t}\n\treturn ctx;\n}\n\n// ─── Tabs Root ─────────────────────────────────────────────────────────────────\n\nconst TabsComponent = React.forwardRef<HTMLDivElement, TabsProps>(\n\t(\n\t\t{\n\t\t\tvalue: controlledValue,\n\t\t\tdefaultValue = \"\",\n\t\t\tonValueChange,\n\t\t\tautoActivate = false,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t},\n\t\tref,\n\t) => {\n\t\t// ── State: selected value (controlled + uncontrolled) ──────────────────\n\t\tconst [internalValue, setInternalValue] = React.useState(defaultValue);\n\t\tconst isControlled = controlledValue !== undefined;\n\t\tconst value = isControlled ? controlledValue : internalValue;\n\n\t\tconst handleValueChange = React.useCallback(\n\t\t\t(newValue: string) => {\n\t\t\t\tif (!isControlled) setInternalValue(newValue);\n\t\t\t\tonValueChange?.(newValue);\n\t\t\t},\n\t\t\t[isControlled, onValueChange],\n\t\t);\n\n\t\t// ── State: keyboard focus (roving tabindex) ────────────────────────────\n\t\t// focusedValue is separate from `value` so focus can move without selecting.\n\t\tconst [focusedValue, setFocusedValue] = React.useState(value);\n\n\t\t// Sync focusedValue when controlled value changes externally\n\t\tReact.useEffect(() => {\n\t\t\tsetFocusedValue(value);\n\t\t}, [value]);\n\n\t\t// ── Registered tabs registry ───────────────────────────────────────────\n\t\t// Tabs register/unregister themselves to enable ArrowKey navigation.\n\t\tconst [tabValues, setTabValues] = React.useState<string[]>([]);\n\n\t\tconst registerTab = React.useCallback((tabValue: string) => {\n\t\t\tsetTabValues((prev) => {\n\t\t\t\tif (prev.includes(tabValue)) return prev;\n\t\t\t\treturn [...prev, tabValue];\n\t\t\t});\n\t\t}, []);\n\n\t\tconst unregisterTab = React.useCallback((tabValue: string) => {\n\t\t\tsetTabValues((prev) => prev.filter((v) => v !== tabValue));\n\t\t}, []);\n\n\t\t// ── Auto-select first enabled tab when no defaultValue is provided ─────\n\t\t// Mirrors Google's behavior: if no tab is active, select the first one.\n\t\tconst hasAutoSelected = React.useRef(false);\n\n\t\t// ── Disabled tab tracking ──────────────────────────────────────────────\n\t\tconst [disabledValues, setDisabledValues] = React.useState<Set<string>>(\n\t\t\tnew Set(),\n\t\t);\n\n\t\tconst markTabDisabled = React.useCallback(\n\t\t\t(tabValue: string, disabled: boolean) => {\n\t\t\t\tsetDisabledValues((prev) => {\n\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\tif (disabled) {\n\t\t\t\t\t\tnext.add(tabValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext.delete(tabValue);\n\t\t\t\t\t}\n\t\t\t\t\treturn next;\n\t\t\t\t});\n\t\t\t},\n\t\t\t[],\n\t\t);\n\n\t\t// Auto-select first enabled tab if no value is set\n\t\tReact.useEffect(() => {\n\t\t\tif (isControlled || hasAutoSelected.current || tabValues.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (value && tabValues.includes(value)) {\n\t\t\t\thasAutoSelected.current = true;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst firstEnabled = tabValues.find((v) => !disabledValues.has(v));\n\t\t\tif (firstEnabled) {\n\t\t\t\thasAutoSelected.current = true;\n\t\t\t\tsetInternalValue(firstEnabled);\n\t\t\t\tsetFocusedValue(firstEnabled);\n\t\t\t}\n\t\t}, [tabValues, disabledValues, isControlled, value]);\n\n\t\t// ── Unique layout group ID for Framer Motion ───────────────────────────\n\t\tconst id = React.useId();\n\t\tconst layoutGroupId = `tabs-${id}`;\n\n\t\t// ── Context value ──────────────────────────────────────────────────────\n\t\tconst contextValue = React.useMemo<TabsContextValue>(\n\t\t\t() => ({\n\t\t\t\tvalue,\n\t\t\t\tonValueChange: handleValueChange,\n\t\t\t\tfocusedValue,\n\t\t\t\tsetFocusedValue,\n\t\t\t\ttabValues,\n\t\t\t\tregisterTab,\n\t\t\t\tunregisterTab,\n\t\t\t\tlayoutGroupId,\n\t\t\t\tdisabledValues,\n\t\t\t\tmarkTabDisabled,\n\t\t\t\tautoActivate,\n\t\t\t}),\n\t\t\t[\n\t\t\t\tvalue,\n\t\t\t\thandleValueChange,\n\t\t\t\tfocusedValue,\n\t\t\t\ttabValues,\n\t\t\t\tregisterTab,\n\t\t\t\tunregisterTab,\n\t\t\t\tlayoutGroupId,\n\t\t\t\tdisabledValues,\n\t\t\t\tmarkTabDisabled,\n\t\t\t\tautoActivate,\n\t\t\t],\n\t\t);\n\n\t\treturn (\n\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t<TabsContext.Provider value={contextValue}>\n\t\t\t\t\t<div ref={ref} className={cn(\"w-full\", className)}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</TabsContext.Provider>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nTabsComponent.displayName = \"Tabs\";\n\n/**\n * MD3 Expressive Tabs root component.\n *\n * Manages tab selection state and provides context to all\n * compound sub-components. Supports both controlled and\n * uncontrolled usage.\n *\n * @example\n * ```tsx\n * // Uncontrolled\n * <Tabs defaultValue=\"flights\">\n *   <TabsList variant=\"primary\">\n *     <Tab value=\"flights\">Flights</Tab>\n *     <Tab value=\"trips\">Trips</Tab>\n *   </TabsList>\n *   <TabsContent value=\"flights\">Flight content</TabsContent>\n *   <TabsContent value=\"trips\">Trip content</TabsContent>\n * </Tabs>\n *\n * // Controlled\n * const [tab, setTab] = useState(\"flights\");\n * <Tabs value={tab} onValueChange={setTab}>...</Tabs>\n *\n * // Auto-activate mode (focus = select)\n * <Tabs defaultValue=\"flights\" autoActivate>...</Tabs>\n * ```\n *\n * @see https://m3.material.io/components/tabs/overview\n */\nexport const Tabs = React.memo(TabsComponent);\n\n// ─── TabsListContext ───────────────────────────────────────────────────────────\n\n/**\n * Secondary context carrying variant + scrollable from <TabsList>.\n * Separate from TabsContext so Tabs root doesn't need these props —\n * they belong to the list, not the root.\n * @internal\n */\nexport interface TabsListContextValue {\n\tvariant: \"primary\" | \"secondary\";\n\tscrollable: boolean;\n}\n\nexport const TabsListContext = React.createContext<TabsListContextValue | null>(\n\tnull,\n);\n\n/**\n * Hook to consume TabsList-level context (variant, scrollable).\n * @internal\n */\nexport function useTabsListContext(): TabsListContextValue {\n\tconst ctx = React.useContext(TabsListContext);\n\t// Fallback to sensible defaults instead of throwing, since\n\t// Tab might be rendered without explicit context in tests.\n\treturn ctx ?? { variant: \"primary\", scrollable: false };\n}\n","/**\n * @file tabs.tokens.ts\n * MD3 Expressive Tabs — Design tokens ported from:\n *   - PrimaryNavigationTabTokens.kt (v0_162)\n *   - SecondaryNavigationTabTokens.kt (v0_162)\n *\n * All dimensional values are in px (dp equivalent for web).\n * @see docs/m3/tabs/PrimaryNavigationTabTokens.kt\n * @see docs/m3/tabs/SecondaryNavigationTabTokens.kt\n */\n\n/**\n * Dimensional design tokens for the MD3 Tabs component.\n *\n * Maps directly from the `.kt` token files to CSS/JS values.\n * Use as the single source of truth for sizing.\n */\nexport const TabsTokens = {\n\t// ── Container ─────────────────────────────────────────────────────────────\n\t/** ContainerHeight = 48dp (text-only tab) */\n\tcontainerHeight: 48,\n\t/** IconAndLabelTextContainerHeight = 64dp (tab with icon + label stacked) */\n\tcontainerHeightWithIcon: 64,\n\n\t// ── Indicator ─────────────────────────────────────────────────────────────\n\t/** ActiveIndicatorHeight (Primary) = 3dp */\n\tprimaryIndicatorHeight: 3,\n\t/** ActiveIndicatorHeight (Secondary) = 2dp */\n\tsecondaryIndicatorHeight: 2,\n\t/**\n\t * ActiveIndicatorShape = 3dp top-left and top-right (per MD3 token, not a full pill).\n\t * Google reference: `var(--_active-indicator-shape)` resolves to `3px 3px 0 0` effectively.\n\t */\n\tindicatorBorderRadius: \"3px 3px 0 0\",\n\n\t// ── Icon ──────────────────────────────────────────────────────────────────\n\t/** IconSize = 24dp */\n\ticonSize: 24,\n\n\t// ── Scrollable layout ─────────────────────────────────────────────────────\n\t/**\n\t * Edge start/end padding for scrollable mode = 52px.\n\t * Per MD3 spec: tabs have padding on both leading and trailing edges.\n\t */\n\tscrollableEdgePadding: 52,\n\t/** Minimum tab width in scrollable mode = 90px. */\n\tscrollableMinTabWidth: 90,\n\n\t// ── Divider (Secondary only) ───────────────────────────────────────────────\n\t/** DividerHeight = 1dp */\n\tdividerHeight: 1,\n\n\t// ── Focus ring ────────────────────────────────────────────────────────────\n\t/**\n\t * Focus ring border-radius = 8px.\n\t * Google reference: `focus-ring.theme({ shape: 8px })` in _tab.scss.\n\t */\n\tfocusRingBorderRadius: 8,\n} as const;\n\n// ── MD3 Color token references (CSS custom properties) ────────────────────────\n\n/**\n * CSS custom property references for Tabs colors.\n * Maps to `--md-sys-color-*` tokens in the MD3 theme system.\n *\n * DO NOT hardcode hex values — use these references for automatic\n * light/dark theme adaptation.\n */\nexport const TabsColors = {\n\t// ── Primary variant ───────────────────────────────────────────────────────\n\t/** Primary: ActiveLabelTextColor / ActiveIconColor = Primary */\n\tprimaryActiveText: \"var(--md-sys-color-primary)\",\n\t/** Primary: InactiveLabelTextColor / InactiveIconColor = OnSurfaceVariant */\n\tprimaryInactiveText: \"var(--md-sys-color-on-surface-variant)\",\n\t/** Primary: ActiveIndicatorColor = Primary */\n\tprimaryIndicator: \"var(--md-sys-color-primary)\",\n\n\t// ── Secondary variant ─────────────────────────────────────────────────────\n\t/** Secondary: ActiveLabelTextColor / ActiveIconColor = OnSurface */\n\tsecondaryActiveText: \"var(--md-sys-color-on-surface)\",\n\t/** Secondary: InactiveLabelTextColor / InactiveIconColor = OnSurfaceVariant */\n\tsecondaryInactiveText: \"var(--md-sys-color-on-surface-variant)\",\n\t/** Secondary: Indicator color = Primary (same as primary variant) */\n\tsecondaryIndicator: \"var(--md-sys-color-primary)\",\n\t/** Secondary: DividerColor = SurfaceVariant */\n\tdivider: \"var(--md-sys-color-surface-variant)\",\n\n\t// ── Shared ────────────────────────────────────────────────────────────────\n\t/** ContainerColor = Surface */\n\tcontainer: \"var(--md-sys-color-surface)\",\n\t/** Focus ring indicator = Secondary */\n\tfocusIndicator: \"var(--md-sys-color-secondary)\",\n\n\t// ── State overlays ────────────────────────────────────────────────────────\n\t/** Hover state layer (primary active) */\n\tprimaryActiveHover: \"var(--md-sys-color-primary)\",\n\t/** Hover state layer (inactive, both variants) */\n\tinactiveHover: \"var(--md-sys-color-on-surface)\",\n} as const;\n\n// ── Animation constants ────────────────────────────────────────────────────────\n\n/** Spring transition for the sliding indicator (FastSpatial equivalent). */\nexport const TABS_INDICATOR_SPRING = {\n\ttype: \"spring\",\n\tstiffness: 500,\n\tdamping: 40,\n} as const;\n\n/** Color transition for label/icon color animate (active ↔ inactive). */\nexport const TABS_COLOR_TRANSITION = {\n\tduration: 0.2,\n\tease: \"easeInOut\",\n} as const;\n\n/** Content fade transition when switching tabs. */\nexport const TABS_CONTENT_TRANSITION = {\n\tduration: 0.15,\n\tease: \"easeInOut\",\n} as const;\n","/**\n * @file tab.tsx\n * MD3 Expressive Tab — Individual tab button with Framer Motion indicator.\n *\n * Design decisions:\n * 1. PRIMARY indicator nested inside content wrapper → width = content width (not full button).\n * 2. SECONDARY indicator outside content wrapper → `inset-x-0` = full button width.\n * 3. ROVING TABINDEX (WAI-ARIA): only focused tab has tabIndex=0; ArrowKey moves focus, Enter/Space selects.\n * 4. DISABLED tabs are skipped in ArrowKey navigation.\n * 5. RTL: ArrowLeft/Right directions are swapped when `direction: rtl` is detected.\n * 6. INLINE ICON: icon beside label, height stays 48dp (stacked = 64dp).\n * 7. AUTO-ACTIVATE: when parent `<Tabs autoActivate>`, ArrowKey also selects.\n *\n * @see https://m3.material.io/components/tabs/overview\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\n\nimport { m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { BadgedBox } from \"../badge\";\nimport { useTabsContext, useTabsListContext } from \"./tabs\";\nimport {\n\tTABS_COLOR_TRANSITION,\n\tTABS_INDICATOR_SPRING,\n\tTabsColors,\n\tTabsTokens,\n} from \"./tabs.tokens\";\nimport type { TabProps } from \"./tabs.types\";\n\n// ─── Constants ──────────────────────────────────────────────────────────────────\n\n/** Minimum indicator width per MD3 spec (24dp). */\nconst INDICATOR_MIN_WIDTH = 24;\n\n// ─── Tab ───────────────────────────────────────────────────────────────────────\n\nconst TabComponent = React.forwardRef<HTMLButtonElement, TabProps>(\n\t(\n\t\t{\n\t\t\tvalue,\n\t\t\ticon,\n\t\t\tinlineIcon = false,\n\t\t\tdisabled = false,\n\t\t\tbadge,\n\t\t\tclassName,\n\t\t\tchildren,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tvalue: selectedValue,\n\t\t\tonValueChange,\n\t\t\tfocusedValue,\n\t\t\tsetFocusedValue,\n\t\t\ttabValues,\n\t\t\tregisterTab,\n\t\t\tunregisterTab,\n\t\t\tlayoutGroupId,\n\t\t\tdisabledValues,\n\t\t\tmarkTabDisabled,\n\t\t\tautoActivate,\n\t\t} = useTabsContext();\n\n\t\tconst { variant, scrollable } = useTabsListContext();\n\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\tconst isActive = selectedValue === value;\n\t\tconst isFocused = focusedValue === value;\n\t\tconst hasIcon = icon != null;\n\t\tconst isStackedIcon = hasIcon && !inlineIcon;\n\n\t\t// ── Refs ───────────────────────────────────────────────────────────────\n\t\tconst buttonRef = React.useRef<HTMLButtonElement | null>(null);\n\t\tconst isFirstMount = React.useRef(true);\n\n\t\t// Merge forwarded ref with internal ref\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLButtonElement | null) => {\n\t\t\t\tbuttonRef.current = 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],\n\t\t);\n\n\t\t// ── Register/unregister with parent context on mount/unmount ──────────\n\t\tReact.useEffect(() => {\n\t\t\tregisterTab(value);\n\t\t\treturn () => unregisterTab(value);\n\t\t}, [value, registerTab, unregisterTab]);\n\n\t\t// ── Sync disabled state with parent context ────────────────────────────\n\t\tReact.useEffect(() => {\n\t\t\tmarkTabDisabled(value, disabled);\n\t\t\treturn () => markTabDisabled(value, false);\n\t\t}, [value, disabled, markTabDisabled]);\n\n\t\t// ── Keyboard navigation ────────────────────────────────────────────────\n\t\tconst handleKeyDown = React.useCallback(\n\t\t\t(e: React.KeyboardEvent<HTMLButtonElement>) => {\n\t\t\t\tconst isRtl = buttonRef.current\n\t\t\t\t\t? getComputedStyle(buttonRef.current).direction === \"rtl\"\n\t\t\t\t\t: false;\n\n\t\t\t\tconst enabledValues = tabValues.filter((v) => !disabledValues.has(v));\n\t\t\t\tconst currentIndex = enabledValues.indexOf(value);\n\n\t\t\t\tswitch (e.key) {\n\t\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\tcase \"ArrowLeft\": {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tconst goForward = isRtl\n\t\t\t\t\t\t\t? e.key === \"ArrowLeft\"\n\t\t\t\t\t\t\t: e.key === \"ArrowRight\";\n\t\t\t\t\t\tconst nextIndex = goForward\n\t\t\t\t\t\t\t? (currentIndex + 1) % enabledValues.length\n\t\t\t\t\t\t\t: (currentIndex - 1 + enabledValues.length) %\n\t\t\t\t\t\t\t\tenabledValues.length;\n\t\t\t\t\t\tconst nextValue = enabledValues[nextIndex];\n\t\t\t\t\t\tif (nextValue) {\n\t\t\t\t\t\t\tsetFocusedValue(nextValue);\n\t\t\t\t\t\t\tif (autoActivate) onValueChange(nextValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Home\": {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tconst firstValue = enabledValues[0];\n\t\t\t\t\t\tif (firstValue) {\n\t\t\t\t\t\t\tsetFocusedValue(firstValue);\n\t\t\t\t\t\t\tif (autoActivate) onValueChange(firstValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"End\": {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tconst lastValue = enabledValues[enabledValues.length - 1];\n\t\t\t\t\t\tif (lastValue) {\n\t\t\t\t\t\t\tsetFocusedValue(lastValue);\n\t\t\t\t\t\t\tif (autoActivate) onValueChange(lastValue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"Enter\":\n\t\t\t\t\tcase \" \": {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif (!disabled) onValueChange(value);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\t[\n\t\t\t\ttabValues,\n\t\t\t\tdisabledValues,\n\t\t\t\tvalue,\n\t\t\t\tdisabled,\n\t\t\t\tsetFocusedValue,\n\t\t\t\tonValueChange,\n\t\t\t\tautoActivate,\n\t\t\t],\n\t\t);\n\n\t\t// Focus DOM node when focusedValue changes via keyboard (skip initial mount)\n\t\tReact.useEffect(() => {\n\t\t\tif (isFirstMount.current) {\n\t\t\t\tisFirstMount.current = false;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isFocused && buttonRef.current) {\n\t\t\t\tbuttonRef.current.focus({ preventScroll: true });\n\t\t\t}\n\t\t}, [isFocused]);\n\n\t\t// ── Auto-scroll active tab into view (scrollable mode) ─────────────────\n\t\t// Horizontally scrolls the nearest overflow-x container to reveal the\n\t\t// active tab. Uses scrollTo (not scrollIntoView) to avoid vertical page jumps.\n\t\tReact.useEffect(() => {\n\t\t\tif (!isActive || !scrollable || !buttonRef.current) return;\n\n\t\t\tconst btn = buttonRef.current;\n\t\t\tlet container: HTMLElement | null = btn.parentElement;\n\t\t\twhile (container) {\n\t\t\t\tconst { overflowX } = getComputedStyle(container);\n\t\t\t\tif (overflowX === \"auto\" || overflowX === \"scroll\") break;\n\t\t\t\tcontainer = container.parentElement;\n\t\t\t}\n\t\t\tif (!container) return;\n\n\t\t\tconst btnRect = btn.getBoundingClientRect();\n\t\t\tconst containerRect = container.getBoundingClientRect();\n\t\t\tconst overflowLeft = containerRect.left - btnRect.left;\n\t\t\tconst overflowRight = btnRect.right - containerRect.right;\n\n\t\t\tif (overflowLeft > 0) {\n\t\t\t\tcontainer.scrollTo({\n\t\t\t\t\tleft: container.scrollLeft - overflowLeft,\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t});\n\t\t\t} else if (overflowRight > 0) {\n\t\t\t\tcontainer.scrollTo({\n\t\t\t\t\tleft: container.scrollLeft + overflowRight,\n\t\t\t\t\tbehavior: \"smooth\",\n\t\t\t\t});\n\t\t\t}\n\t\t}, [isActive, scrollable]);\n\n\t\t// ── Derived tokens ─────────────────────────────────────────────────────\n\t\tconst containerHeight = isStackedIcon\n\t\t\t? TabsTokens.containerHeightWithIcon\n\t\t\t: TabsTokens.containerHeight;\n\n\t\tconst activeColor =\n\t\t\tvariant === \"primary\"\n\t\t\t\t? TabsColors.primaryActiveText\n\t\t\t\t: TabsColors.secondaryActiveText;\n\n\t\tconst inactiveColor =\n\t\t\tvariant === \"primary\"\n\t\t\t\t? TabsColors.primaryInactiveText\n\t\t\t\t: TabsColors.secondaryInactiveText;\n\n\t\tconst indicatorColor =\n\t\t\tvariant === \"primary\"\n\t\t\t\t? TabsColors.primaryIndicator\n\t\t\t\t: TabsColors.secondaryIndicator;\n\n\t\tconst indicatorLayoutId = `${layoutGroupId}-indicator`;\n\n\t\tconst colorTransition = prefersReduced\n\t\t\t? { duration: 0 }\n\t\t\t: TABS_COLOR_TRANSITION;\n\t\tconst springTransition = prefersReduced\n\t\t\t? { duration: 0 }\n\t\t\t: TABS_INDICATOR_SPRING;\n\n\t\t// ── IDs for ARIA wiring ────────────────────────────────────────────────\n\t\tconst tabId = `${layoutGroupId}-tab-${value}`;\n\t\tconst panelId = `${layoutGroupId}-panel-${value}`;\n\n\t\t// ── Content wrapper layout ─────────────────────────────────────────────\n\t\t// inlineIcon → flex-row; stacked icon → flex-col gap-0.5; text only → flex-col\n\t\tconst contentFlexClass = inlineIcon\n\t\t\t? \"flex-row gap-2\"\n\t\t\t: isStackedIcon\n\t\t\t\t? \"flex-col gap-0.5\"\n\t\t\t\t: \"flex-col gap-0\";\n\n\t\t// Badge placement\n\t\tconst shouldWrapIconWithBadge = isStackedIcon && badge != null;\n\t\tconst shouldAppendInlineBadge = !isStackedIcon && badge != null;\n\n\t\treturn (\n\t\t\t<button\n\t\t\t\tref={mergedRef}\n\t\t\t\tid={tabId}\n\t\t\t\ttype=\"button\"\n\t\t\t\trole=\"tab\"\n\t\t\t\taria-selected={isActive}\n\t\t\t\taria-controls={panelId}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\tdisabled={disabled}\n\t\t\t\ttabIndex={isFocused ? 0 : -1}\n\t\t\t\tonClick={() => {\n\t\t\t\t\tif (!disabled) {\n\t\t\t\t\t\tonValueChange(value);\n\t\t\t\t\t\tsetFocusedValue(value);\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tonFocus={() => setFocusedValue(value)}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"relative inline-flex items-center justify-center\",\n\t\t\t\t\t\"cursor-pointer select-none\",\n\t\t\t\t\tscrollable ? \"shrink-0\" : \"flex-1\",\n\t\t\t\t\t\"focus-visible:outline-2 focus-visible:outline-offset-2\",\n\t\t\t\t\t\"focus-visible:outline-(--md-sys-color-secondary)\",\n\t\t\t\t\t\"focus-visible:rounded-lg\",\n\t\t\t\t\t\"rounded-none\",\n\t\t\t\t\tdisabled && \"pointer-events-none opacity-[0.38]\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{\n\t\t\t\t\theight: containerHeight,\n\t\t\t\t\tzIndex: isActive ? 1 : 0,\n\t\t\t\t\t...(scrollable && { minWidth: TabsTokens.scrollableMinTabWidth }),\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{/*\n\t\t\t\t * Content wrapper — PRIMARY INDICATOR TECHNIQUE:\n\t\t\t\t * Indicator lives inside this wrapper → width matches content (not button).\n\t\t\t\t * inlineIcon: flex-row places icon beside label, height stays 48dp.\n\t\t\t\t */}\n\t\t\t\t<m.div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"relative flex h-full items-center justify-center\",\n\t\t\t\t\t\tcontentFlexClass,\n\t\t\t\t\t)}\n\t\t\t\t\tanimate={{ color: isActive ? activeColor : inactiveColor }}\n\t\t\t\t\ttransition={colorTransition}\n\t\t\t\t>\n\t\t\t\t\t{/* Icon (optional) — 24dp per MD3 token */}\n\t\t\t\t\t{hasIcon && (\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\taria-hidden={!shouldWrapIconWithBadge ? \"true\" : undefined}\n\t\t\t\t\t\t\tclassName={cn(\"flex shrink-0 items-center justify-center\")}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\twidth: TabsTokens.iconSize,\n\t\t\t\t\t\t\t\theight: TabsTokens.iconSize,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shouldWrapIconWithBadge ? (\n\t\t\t\t\t\t\t\t<BadgedBox badge={badge}>\n\t\t\t\t\t\t\t\t\t<span aria-hidden=\"true\">{icon}</span>\n\t\t\t\t\t\t\t\t</BadgedBox>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span className=\"size-full\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Label text — TitleSmall per MD3 typography token */}\n\t\t\t\t\t<span className=\"text-title-sm font-medium whitespace-nowrap\">\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</span>\n\n\t\t\t\t\t{/* Inline Badge */}\n\t\t\t\t\t{shouldAppendInlineBadge && (\n\t\t\t\t\t\t<span className=\"ml-1 flex items-center justify-center\">\n\t\t\t\t\t\t\t{badge}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/*\n\t\t\t\t\t * PRIMARY INDICATOR\n\t\t\t\t\t * Inside content wrapper → width matches content.\n\t\t\t\t\t * `layoutId` enables shared layout animation across tabs.\n\t\t\t\t\t */}\n\t\t\t\t\t{variant === \"primary\" && isActive && (\n\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\tlayoutId={indicatorLayoutId}\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName=\"absolute bottom-0 left-1/2 -translate-x-1/2\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\theight: TabsTokens.primaryIndicatorHeight,\n\t\t\t\t\t\t\t\tminWidth: INDICATOR_MIN_WIDTH,\n\t\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\t\tborderRadius: TabsTokens.indicatorBorderRadius,\n\t\t\t\t\t\t\t\tbackgroundColor: indicatorColor,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttransition={springTransition}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</m.div>\n\n\t\t\t\t{/*\n\t\t\t\t * SECONDARY INDICATOR\n\t\t\t\t * Outside content wrapper → `inset-x-0` = full button width.\n\t\t\t\t */}\n\t\t\t\t{variant === \"secondary\" && isActive && (\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tlayoutId={indicatorLayoutId}\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"absolute bottom-0 inset-x-0\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\theight: TabsTokens.secondaryIndicatorHeight,\n\t\t\t\t\t\t\tborderRadius: TabsTokens.indicatorBorderRadius,\n\t\t\t\t\t\t\tbackgroundColor: indicatorColor,\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={springTransition}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</button>\n\t\t);\n\t},\n);\n\nTabComponent.displayName = \"Tab\";\n\n/**\n * MD3 Expressive Tab component — individual tab button.\n *\n * Must be a direct child of `<TabsList>`. Implements WAI-ARIA Tabs pattern\n * with roving tabindex keyboard navigation.\n *\n * - **Primary variant**: indicator width = content (text + icon) width.\n * - **Secondary variant**: indicator width = full button hit area.\n * - **Disabled**: Skipped entirely in ArrowKey navigation (cannot be focused).\n * - **inlineIcon**: Icon beside (not above) label; height stays 48dp.\n * - Framer Motion `layoutId` animates indicator with spring physics.\n * - ArrowLeft/Right respect RTL direction automatically.\n *\n * @example\n * ```tsx\n * <Tab value=\"flights\" icon={<Icon name=\"flight\" />}>Flights</Tab>\n * <Tab value=\"trips\">Trips</Tab>\n * <Tab value=\"explore\" disabled>Explore</Tab>\n * <Tab value=\"hotels\" icon={<Icon name=\"hotel\" />} inlineIcon>Hotels</Tab>\n * ```\n *\n * @see https://m3.material.io/components/tabs/overview\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\nexport const Tab = React.memo(TabComponent);\n","/**\n * @file tabs-content.tsx\n * MD3 Expressive TabsContent — Animated panel component.\n *\n * Implements WAI-ARIA tabpanel role with:\n * - AnimatePresence for fade transition on tab switch\n * - Proper aria-labelledby pointing to the associated <Tab>\n * - tabIndex=0 so keyboard users can Tab from the tablist into the panel\n * - Hidden panels are removed from the DOM (not just visually hidden)\n *   to prevent screen readers from reading inactive content\n */\n\nimport { AnimatePresence, m, useReducedMotion } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useTabsContext } from \"./tabs\";\nimport { TABS_CONTENT_TRANSITION } from \"./tabs.tokens\";\nimport type { TabsContentProps } from \"./tabs.types\";\n\n// ─── TabsContent ───────────────────────────────────────────────────────────────\n\nconst TabsContentComponent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n\t({ value, className, children }, ref) => {\n\t\tconst { value: selectedValue, layoutGroupId } = useTabsContext();\n\t\tconst isActive = selectedValue === value;\n\t\tconst prefersReduced = useReducedMotion() ?? false;\n\n\t\t// ARIA wiring: panel is labelled by its corresponding <Tab> button\n\t\tconst tabId = `${layoutGroupId}-tab-${value}`;\n\t\tconst panelId = `${layoutGroupId}-panel-${value}`;\n\n\t\tconst contentTransition = prefersReduced\n\t\t\t? { duration: 0 }\n\t\t\t: TABS_CONTENT_TRANSITION;\n\n\t\treturn (\n\t\t\t<AnimatePresence mode=\"popLayout\" initial={false}>\n\t\t\t\t{isActive && (\n\t\t\t\t\t<m.div\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tkey={value}\n\t\t\t\t\t\tid={panelId}\n\t\t\t\t\t\trole=\"tabpanel\"\n\t\t\t\t\t\taria-labelledby={tabId}\n\t\t\t\t\t\ttabIndex={0}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"focus:outline-none w-full\",\n\t\t\t\t\t\t\t\"focus-visible:outline-2 focus-visible:outline-offset-2\",\n\t\t\t\t\t\t\t\"focus-visible:outline-(--md-sys-color-secondary)\",\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\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={contentTransition}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</m.div>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t);\n\t},\n);\n\nTabsContentComponent.displayName = \"TabsContent\";\n\n/**\n * MD3 Expressive TabsContent panel component.\n *\n * Each panel corresponds to a `<Tab>` with the same `value`.\n * Only the active panel is rendered in the DOM — inactive panels\n * are fully unmounted (not `display: none`) to prevent screen readers\n * from reading hidden content.\n *\n * Fade animation is applied on both enter and exit via Framer Motion\n * `AnimatePresence`. We use `mode=\"popLayout\"` to prevent height layout shifting\n * during tab transitions. Animation is automatically disabled when the user\n * has enabled `prefers-reduced-motion`.\n *\n * @example\n * ```tsx\n * <TabsContent value=\"flights\">\n *   <p>Available flights...</p>\n * </TabsContent>\n * ```\n *\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/tabs/\n */\nexport const TabsContent = React.memo(TabsContentComponent);\n","/**\n * @file tabs-list.tsx\n * MD3 Expressive TabsList — Container component for tab buttons.\n *\n * Responsibilities:\n * - Applies variant (primary/secondary) layout and styling\n * - Manages horizontal scroll for scrollable mode (52px edge padding per MD3)\n * - Renders the bottom divider for secondary variant\n * - Scopes Framer Motion LayoutGroup so indicators animate correctly\n *   when multiple <Tabs> instances are on the same page\n * - Restores focus to activeTab when keyboard focus leaves the tablist\n *   (matches Google's `focusout` handler on <md-tabs>)\n */\n\nimport { LayoutGroup } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { TabsListContext, useTabsContext } from \"./tabs\";\nimport { TabsTokens } from \"./tabs.tokens\";\nimport type { TabsListProps } from \"./tabs.types\";\n\n// ─── TabsList ──────────────────────────────────────────────────────────────────\n\nconst TabsListComponent = React.forwardRef<HTMLDivElement, TabsListProps>(\n\t(\n\t\t{\n\t\t\tvariant,\n\t\t\tscrollable = false,\n\t\t\tbackgroundColor,\n\t\t\tchildren,\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst { layoutGroupId, value, setFocusedValue } = useTabsContext();\n\n\t\t// Unique layout group ID scoped to this TabsList instance.\n\t\tconst listLayoutId = `${layoutGroupId}-list`;\n\n\t\t// ── TabsListContext: provide variant + scrollable to children ──────────\n\t\tconst listContextValue = React.useMemo(\n\t\t\t() => ({ variant, scrollable }),\n\t\t\t[variant, scrollable],\n\t\t);\n\n\t\t// ── Background color ───────────────────────────────────────────────────\n\t\tconst bgColor = backgroundColor ?? \"var(--md-sys-color-surface)\";\n\n\t\t// ── Focusout handler — restore roving focus to active tab ──────────────\n\t\t// When keyboard focus leaves the tablist entirely (e.g. user presses Tab\n\t\t// to move to the panel), reset `focusedValue` back to the selected tab.\n\t\t// This ensures the next time the user Tabs back into the tablist, focus\n\t\t// lands on the active tab — not the last arrow-key-focused tab.\n\t\t// Mirrors Google's `handleFocusout` in tabs.ts:\n\t\t//   \"restore focus to selected item when blurring the tab bar\"\n\t\tconst handleBlur = React.useCallback(\n\t\t\t(e: React.FocusEvent<HTMLDivElement>) => {\n\t\t\t\t// `relatedTarget` is the element receiving focus.\n\t\t\t\t// If it's still inside the tablist, this is an internal focus move\n\t\t\t\t// (e.g. clicking another tab) — don't restore.\n\t\t\t\tconst listEl = e.currentTarget;\n\t\t\t\tif (listEl.contains(e.relatedTarget as Node | null)) return;\n\n\t\t\t\t// Focus left the tablist — restore focusedValue to the active tab.\n\t\t\t\tsetFocusedValue(value);\n\t\t\t},\n\t\t\t[value, setFocusedValue],\n\t\t);\n\n\t\treturn (\n\t\t\t<TabsListContext.Provider value={listContextValue}>\n\t\t\t\t{/* LayoutGroup scopes shared layout animation so indicators from different Tabs instances don't bleed into each other. */}\n\t\t\t\t<LayoutGroup id={listLayoutId}>\n\t\t\t\t\t{/* Outer wrapper: positioning context for the secondary divider */}\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tclassName={cn(\"relative w-full\", className)}\n\t\t\t\t\t\tstyle={{ backgroundColor: bgColor }}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\trole=\"tablist\"\n\t\t\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"flex flex-row items-stretch\",\n\t\t\t\t\t\t\t\tscrollable &&\n\t\t\t\t\t\t\t\t\t\"overflow-x-auto [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\tscrollable\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tpaddingLeft: TabsTokens.scrollableEdgePadding,\n\t\t\t\t\t\t\t\t\t\t\tpaddingRight: TabsTokens.scrollableEdgePadding,\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t{/* Secondary variant: bottom divider — absolute so it doesn't affect tab layout flow */}\n\t\t\t\t\t\t{variant === \"secondary\" && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\tclassName=\"absolute bottom-0 left-0 right-0\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\theight: TabsTokens.dividerHeight,\n\t\t\t\t\t\t\t\t\tbackgroundColor: \"var(--md-sys-color-surface-variant)\",\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</div>\n\t\t\t\t</LayoutGroup>\n\t\t\t</TabsListContext.Provider>\n\t\t);\n\t},\n);\n\nTabsListComponent.displayName = \"TabsList\";\n\n/**\n * MD3 Expressive TabsList container component.\n *\n * Renders a horizontal row of `<Tab>` components with MD3-compliant\n * layout (fixed or scrollable) and variant styling (primary or secondary).\n *\n * - **Primary**: Tabs divide available width equally, indicator width = content width.\n * - **Secondary**: Tabs divide equally + full-width indicator + bottom divider line.\n * - **Scrollable**: Tabs have min-width (90px), scroll horizontally with 52px edge padding.\n * - **Focusout**: When focus leaves the tablist, roving focus resets to the active tab.\n *\n * @example\n * ```tsx\n * <TabsList variant=\"primary\" scrollable={false}>\n *   <Tab value=\"tab1\">Tab 1</Tab>\n *   <Tab value=\"tab2\">Tab 2</Tab>\n * </TabsList>\n *\n * <TabsList variant=\"secondary\" scrollable={true} aria-label=\"Content sections\">\n *   <Tab value=\"a\">Alpha</Tab>\n *   <Tab value=\"b\">Beta</Tab>\n * </TabsList>\n * ```\n */\nexport const TabsList = React.memo(TabsListComponent);\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\t\t},\n\t},\n\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 * 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 * 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 * @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","import { domMax, LazyMotion } from \"motion/react\";\nimport {\n\tcreateContext,\n\ttype ReactNode,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport {\n\tapplyTheme,\n\ttype ContrastLevel,\n\ttype SchemeVariant,\n\ttype ThemeMode,\n} from \"../../lib/theme-utils\";\n\nimport {\n\tSnackbarContext,\n\tSnackbarHost,\n\tuseSnackbarState,\n} from \"../snackbar/snackbar\";\nimport { Typography, TypographyContext } from \"../typography/typography\";\nimport {\n\ttype FontVariationAxes,\n\tTypographyTokens,\n} from \"../typography/typography-tokens\";\n\n// ─── Theme Context ─────────────────────────────────────────────────────────────\n\ninterface ThemeContextValue {\n\tsourceColor: string;\n\tsetSourceColor: (color: string) => void;\n\tmode: ThemeMode;\n\tsetMode: (mode: ThemeMode) => void;\n\t/** The resolved color scheme actually applied — always \"light\" or \"dark\". */\n\teffectiveMode: \"light\" | \"dark\";\n\t/** Active color scheme variant. */\n\tvariant: SchemeVariant;\n\t/** Active contrast level. */\n\tcontrastLevel: ContrastLevel;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nconst STORAGE_KEY_COLOR = \"md3-source-color\";\nconst STORAGE_KEY_MODE = \"md3-theme-mode\";\n\n// ─── Singleton defaults (computed once) ───────────────────────────────────────\n\nconst defaultTokens = new TypographyTokens();\nconst defaultTypography = new Typography(defaultTokens);\n\n// ─── MD3ThemeProvider ──────────────────────────────────────────────────────────\n\nexport interface MD3ThemeProviderProps {\n\tchildren: ReactNode;\n\t// ── Theme ─────────────────────────────────────────────────────────────────\n\tsourceColor?: string;\n\tdefaultMode?: ThemeMode;\n\tpersistToLocalStorage?: boolean;\n\t/**\n\t * Color scheme variant controlling hue and chroma behaviour.\n\t * - `\"expressive\"` — MD3 Expressive 2025 (high-chroma, detached from seed). **Default.**\n\t * - `\"tonal_spot\"` — Standard Android 12+ theme.\n\t * - `\"vibrant\"` | `\"fidelity\"` | `\"content\"` | `\"monochrome\"` | `\"neutral\"`\n\t * @default \"expressive\"\n\t */\n\tvariant?: SchemeVariant;\n\t/**\n\t * Contrast level for the generated scheme.\n\t * - `0` — Standard (default)\n\t * - `0.5` — Medium contrast\n\t * - `1` — Maximum contrast (WCAG AAA)\n\t * @default 0\n\t */\n\tcontrastLevel?: ContrastLevel;\n\t// ── Typography ────────────────────────────────────────────────────────────\n\t/**\n\t * A fully custom `Typography` instance.\n\t * When provided, `fontFamily` and `fontVariationAxes` are ignored.\n\t */\n\ttypography?: Typography;\n\t/**\n\t * Override the CSS `font-family` for all typography styles.\n\t * Ignored when `typography` prop is provided.\n\t * @example \"'Inter', sans-serif\"\n\t */\n\tfontFamily?: string;\n\t/**\n\t * Variable font axes applied globally via `font-variation-settings`.\n\t * Merged on top of defaults (`ROND: 100`). Ignored when `typography` is provided.\n\t * @example { ROND: 50 }\n\t */\n\tfontVariationAxes?: FontVariationAxes;\n\t// ── Snackbar ──────────────────────────────────────────────────────────────\n\t/**\n\t * When `true`, mounts `SnackbarHost` inside the provider and exposes\n\t * `useSnackbar()` to all descendants — no separate `<SnackbarProvider>` needed.\n\t *\n\t * Opt-in, default `false`. For advanced usage (e.g., scoped snackbars or\n\t * custom host positioning), keep this `false` and use `<SnackbarProvider>`\n\t * or `<SnackbarHost>` directly.\n\t *\n\t * @default false\n\t */\n\tenableSnackbar?: boolean;\n}\n\nexport function MD3ThemeProvider({\n\tchildren,\n\tsourceColor: initialSourceColor = \"#6750A4\",\n\tdefaultMode = \"light\",\n\tpersistToLocalStorage = false,\n\tvariant = \"expressive\",\n\tcontrastLevel = 0,\n\ttypography: typographyProp,\n\tfontFamily,\n\tfontVariationAxes,\n\tenableSnackbar = false,\n}: MD3ThemeProviderProps) {\n\t// ── Theme state ──────────────────────────────────────────────────────────\n\tconst [sourceColor, setSourceColor] = useState(initialSourceColor);\n\tconst [mode, setMode] = useState<ThemeMode>(defaultMode);\n\tconst [isHydrated, setIsHydrated] = useState(!persistToLocalStorage);\n\tconst [systemMode, setSystemMode] = useState<\"light\" | \"dark\">(\"light\");\n\n\t// Listen for OS prefers-color-scheme changes and keep systemMode state in sync\n\tuseEffect(() => {\n\t\tif (typeof window === \"undefined\") return;\n\n\t\tconst mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n\t\tconst updateSystemMode = () => {\n\t\t\tsetSystemMode(mediaQuery.matches ? \"dark\" : \"light\");\n\t\t};\n\n\t\tupdateSystemMode();\n\t\tmediaQuery.addEventListener(\"change\", updateSystemMode);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", updateSystemMode);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (!persistToLocalStorage) return;\n\n\t\tconst savedColor = localStorage.getItem(STORAGE_KEY_COLOR);\n\t\tconst savedMode = localStorage.getItem(\n\t\t\tSTORAGE_KEY_MODE,\n\t\t) as ThemeMode | null;\n\n\t\tif (savedColor) setSourceColor(savedColor);\n\t\tif (savedMode === \"light\" || savedMode === \"dark\" || savedMode === \"system\")\n\t\t\tsetMode(savedMode);\n\n\t\tsetIsHydrated(true);\n\t}, [persistToLocalStorage]);\n\n\t// Derived effective mode (resolves \"system\" to real-time systemMode)\n\tconst effectiveMode = mode === \"system\" ? systemMode : mode;\n\n\tuseEffect(() => {\n\t\tif (!isHydrated) return;\n\n\t\tapplyTheme(sourceColor, effectiveMode, document.documentElement, {\n\t\t\tvariant,\n\t\t\tcontrastLevel,\n\t\t});\n\n\t\tif (persistToLocalStorage) {\n\t\t\tlocalStorage.setItem(STORAGE_KEY_COLOR, sourceColor);\n\t\t\tlocalStorage.setItem(STORAGE_KEY_MODE, mode);\n\t\t}\n\t}, [\n\t\tsourceColor,\n\t\tmode,\n\t\teffectiveMode,\n\t\tpersistToLocalStorage,\n\t\tisHydrated,\n\t\tvariant,\n\t\tcontrastLevel,\n\t]);\n\n\tconst themeValue = useMemo<ThemeContextValue>(\n\t\t() => ({\n\t\t\tsourceColor,\n\t\t\tsetSourceColor,\n\t\t\tmode,\n\t\t\tsetMode,\n\t\t\teffectiveMode,\n\t\t\tvariant,\n\t\t\tcontrastLevel,\n\t\t}),\n\t\t[sourceColor, mode, effectiveMode, variant, contrastLevel],\n\t);\n\n\t// ── Typography value ─────────────────────────────────────────────────────\n\tconst typographyValue = useMemo<Typography>(() => {\n\t\tif (typographyProp) return typographyProp;\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}, [typographyProp, fontFamily, fontVariationAxes]);\n\n\t// ── Snackbar — mounted as isolated subtree so hook only allocates when needed\n\n\treturn (\n\t\t<LazyMotion features={domMax}>\n\t\t\t<ThemeContext.Provider value={themeValue}>\n\t\t\t\t<TypographyContext.Provider value={typographyValue}>\n\t\t\t\t\t{enableSnackbar ? (\n\t\t\t\t\t\t<SnackbarMountedProvider>{children}</SnackbarMountedProvider>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tchildren\n\t\t\t\t\t)}\n\t\t\t\t</TypographyContext.Provider>\n\t\t\t</ThemeContext.Provider>\n\t\t</LazyMotion>\n\t);\n}\n\n// ─── SnackbarMountedProvider ──────────────────────────────────────────────────\n\n/**\n * Internal helper component — renders only when `enableSnackbar={true}`.\n * Isolates `useSnackbarState` so the hook is never allocated unnecessarily.\n */\nfunction SnackbarMountedProvider({ children }: { children: ReactNode }) {\n\tconst state = useSnackbarState();\n\tconst contextValue = useMemo(\n\t\t() => ({ showSnackbar: state.showSnackbar }),\n\t\t[state.showSnackbar],\n\t);\n\n\treturn (\n\t\t<SnackbarContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t\t<SnackbarHost state={state} />\n\t\t</SnackbarContext.Provider>\n\t);\n}\n\n// ─── Hooks ────────────────────────────────────────────────────────────────────\n\nexport function useTheme(): ThemeContextValue {\n\tconst context = useContext(ThemeContext);\n\tif (!context) {\n\t\tthrow new Error(\"useTheme must be used within <MD3ThemeProvider>.\");\n\t}\n\treturn context;\n}\n\nexport function useThemeMode(): Pick<\n\tThemeContextValue,\n\t\"mode\" | \"setMode\" | \"effectiveMode\"\n> {\n\tconst { mode, setMode, effectiveMode } = useTheme();\n\treturn { mode, setMode, effectiveMode };\n}\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\t/**\n\t * Heading level depth (1 for h2, 2 for h3, etc.).\n\t * Indents lower-level items visually.\n\t * @default 1\n\t */\n\tdepth?: number;\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\t/**\n\t * Optional ref to the scroll container element (e.g. ScrollArea viewport).\n\t * If provided, IntersectionObserver will use this container as its root.\n\t */\n\tscrollContainerRef?: React.RefObject<HTMLElement | null | undefined>;\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\", depth: 1 },\n *   { id: \"props\", label: \"Props\", depth: 2 },\n *   { id: \"examples\", label: \"Examples\", depth: 1 },\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\tscrollContainerRef,\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 root = scrollContainerRef?.current ?? null;\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{ root, 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, scrollContainerRef]);\n\n\tconst handleClick = useCallback(\n\t\t(e: React.MouseEvent<HTMLAnchorElement>, id: string) => {\n\t\t\te.preventDefault();\n\t\t\tconst target = document.getElementById(id);\n\t\t\tif (!target) return;\n\n\t\t\ttarget.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-2 pr-4\">\n\t\t\t\t\t{items.map((item) => {\n\t\t\t\t\t\tconst depth = item.depth ?? 1;\n\t\t\t\t\t\tconst isSubItem = depth > 1;\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\tisSubItem &&\n\t\t\t\t\t\t\t\t\t\t\"pl-3.5 border-l border-m3-outline-variant/40 ml-1\",\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<a\n\t\t\t\t\t\t\t\t\thref={`#${item.id}`}\n\t\t\t\t\t\t\t\t\tonClick={(e) => handleClick(e, item.id)}\n\t\t\t\t\t\t\t\t\taria-current={activeId === item.id ? \"true\" : undefined}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"transition-colors hover:text-m3-primary block truncate\",\n\t\t\t\t\t\t\t\t\t\tisSubItem\n\t\t\t\t\t\t\t\t\t\t\t? \"text-xs py-0.5 leading-relaxed\"\n\t\t\t\t\t\t\t\t\t\t\t: \"text-sm py-1 font-medium leading-snug\",\n\t\t\t\t\t\t\t\t\t\tactiveId === item.id\n\t\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\t: \"text-m3-on-surface-variant\",\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\ttitle={item.label}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t);\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 * Color configuration types and standard values for the FloatingToolbar component.\n * Maps MD3 design tokens to CSS custom properties used in Tailwind CSS.\n */\n\n/**\n * Color configuration types and standard values for the FloatingToolbar component.\n * Maps MD3 design tokens to CSS custom properties used in Tailwind CSS.\n */\n\nexport type ToolbarVariant =\n\t| \"standard\"\n\t| \"vibrant\"\n\t| \"surface-high\"\n\t| \"surface-highest\"\n\t| \"tertiary\"\n\t| \"xr\";\n\nexport interface FloatingToolbarColors {\n\t/** The background color of the toolbar container */\n\ttoolbarContainerColor?: string;\n\t/** The color of the content (icons, text) inside the toolbar */\n\ttoolbarContentColor?: string;\n\t/** The background color of the FAB container */\n\tfabContainerColor?: string;\n\t/** The color of the content inside the FAB */\n\tfabContentColor?: string;\n}\n\n/**\n * Standard color configuration for the floating toolbar.\n * Uses surface container for the toolbar and secondary container for the FAB.\n */\nexport const standardFloatingToolbarColors: FloatingToolbarColors = {\n\ttoolbarContainerColor: \"var(--md-sys-color-surface-container)\",\n\ttoolbarContentColor: \"var(--md-sys-color-on-surface)\",\n\tfabContainerColor: \"var(--md-sys-color-secondary-container)\",\n\tfabContentColor: \"var(--md-sys-color-on-secondary-container)\",\n};\n\n/**\n * Vibrant color configuration for the floating toolbar.\n * Uses primary container for the toolbar and tertiary container for the FAB.\n */\nexport const vibrantFloatingToolbarColors: FloatingToolbarColors = {\n\ttoolbarContainerColor: \"var(--md-sys-color-primary-container)\",\n\ttoolbarContentColor: \"var(--md-sys-color-on-primary-container)\",\n\tfabContainerColor: \"var(--md-sys-color-tertiary-container)\",\n\tfabContentColor: \"var(--md-sys-color-on-tertiary-container)\",\n};\n\n/**\n * Surface Container High color configuration for the toolbar (XR / Elevated).\n */\nexport const surfaceContainerHighFloatingToolbarColors: FloatingToolbarColors =\n\t{\n\t\ttoolbarContainerColor: \"var(--md-sys-color-surface-container-high)\",\n\t\ttoolbarContentColor: \"var(--md-sys-color-on-surface)\",\n\t\tfabContainerColor: \"var(--md-sys-color-secondary-container)\",\n\t\tfabContentColor: \"var(--md-sys-color-on-secondary-container)\",\n\t};\n\n/**\n * Surface Container Highest color configuration for the toolbar (XR / Elevated).\n */\nexport const surfaceContainerHighestFloatingToolbarColors: FloatingToolbarColors =\n\t{\n\t\ttoolbarContainerColor: \"var(--md-sys-color-surface-container-highest)\",\n\t\ttoolbarContentColor: \"var(--md-sys-color-on-surface)\",\n\t\tfabContainerColor: \"var(--md-sys-color-secondary-container)\",\n\t\tfabContentColor: \"var(--md-sys-color-on-secondary-container)\",\n\t};\n\n/**\n * Tertiary Container color configuration for the toolbar.\n */\nexport const tertiaryContainerFloatingToolbarColors: FloatingToolbarColors = {\n\ttoolbarContainerColor: \"var(--md-sys-color-tertiary-container)\",\n\ttoolbarContentColor: \"var(--md-sys-color-on-tertiary-container)\",\n\tfabContainerColor: \"var(--md-sys-color-primary-container)\",\n\tfabContentColor: \"var(--md-sys-color-on-primary-container)\",\n};\n\n/**\n * XR Glassmorphic color configuration for the toolbar.\n * Uses semi-transparent surface container high with backdrop blur.\n */\nexport const xrFloatingToolbarColors: FloatingToolbarColors = {\n\ttoolbarContainerColor:\n\t\t\"color-mix(in srgb, var(--md-sys-color-surface-container-high) 80%, transparent)\",\n\ttoolbarContentColor: \"var(--md-sys-color-on-surface)\",\n\tfabContainerColor:\n\t\t\"color-mix(in srgb, var(--md-sys-color-secondary-container) 85%, transparent)\",\n\tfabContentColor: \"var(--md-sys-color-on-secondary-container)\",\n};\n\n/**\n * Helper function to resolve FloatingToolbarColors based on variant prop or custom override.\n */\nexport function getToolbarColors(\n\tvariant: ToolbarVariant = \"standard\",\n\tcustomColors?: FloatingToolbarColors,\n): FloatingToolbarColors {\n\tif (customColors) return customColors;\n\n\tswitch (variant) {\n\t\tcase \"vibrant\":\n\t\t\treturn vibrantFloatingToolbarColors;\n\t\tcase \"surface-high\":\n\t\t\treturn surfaceContainerHighFloatingToolbarColors;\n\t\tcase \"surface-highest\":\n\t\t\treturn surfaceContainerHighestFloatingToolbarColors;\n\t\tcase \"tertiary\":\n\t\t\treturn tertiaryContainerFloatingToolbarColors;\n\t\tcase \"xr\":\n\t\t\treturn xrFloatingToolbarColors;\n\t\tdefault:\n\t\t\treturn standardFloatingToolbarColors;\n\t}\n}\n","import { m, useMotionValueEvent, useScroll } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SPRING_TRANSITION } from \"../shared/constants\";\nimport {\n\ttype FloatingToolbarColors,\n\tgetToolbarColors,\n\ttype ToolbarVariant,\n} from \"./toolbar-colors\";\nimport { ToolbarContext } from \"./toolbar-context\";\n\nexport interface BottomDockedToolbarProps {\n\t/** Color variant: standard, vibrant, surface-high, surface-highest, tertiary, or xr */\n\tvariant?: ToolbarVariant;\n\t/** Custom colors override */\n\tcolors?: FloatingToolbarColors;\n\t/** Whether to hide on scroll */\n\thideOnScroll?: boolean;\n\t/** Scroll container ref for scroll behavior (if empty, uses window scroll) */\n\tscrollContainerRef?: React.RefObject<HTMLElement | null>;\n\t/** Start content (left-aligned) */\n\tstartContent?: React.ReactNode;\n\t/** End content (right-aligned) */\n\tendContent?: React.ReactNode;\n\t/** Center content */\n\tchildren?: React.ReactNode;\n\t/**\n\t * Horizontal padding (px) applied to the toolbar container.\n\t * MD3 spec requires a minimum of 16dp on leading and trailing edges.\n\t * @default 16\n\t */\n\tpaddingX?: number;\n\t/**\n\t * Layout distribution of toolbar content.\n\t * - `\"between\"` – leading/center/trailing spread across full width (default, compact screens).\n\t * - `\"center\"` – all content centered; ideal for medium+ screen widths.\n\t * - `\"end-weighted\"` – key action is centered while others are pushed to the edges.\n\t * @default \"between\"\n\t */\n\tjustify?: \"between\" | \"center\" | \"end-weighted\";\n\t/**\n\t * Container shape.\n\t * - `\"none\"` – straight corners (MD3 default for mobile docked toolbars).\n\t * - `\"large\"` – large rounded corners (recommended for web / large screens).\n\t * - `\"full\"` – fully pill-shaped.\n\t *\n\t * MD3 guideline: *\"On web and large screens, the docked toolbar can be rounded.\"*\n\t * @default \"none\"\n\t */\n\tshape?: \"none\" | \"large\" | \"full\";\n\tclassName?: string;\n\t\"aria-label\"?: string;\n}\n\n/**\n * A full-width docked toolbar typically fixed at the bottom of the screen.\n * Replaces the deprecated Bottom App Bar in MD3 Expressive.\n *\n * @example\n * ```tsx\n * <BottomDockedToolbar hideOnScroll startContent={<IconButton aria-label=\"Menu\"><Icon name=\"menu\" /></IconButton>}>\n *   <div className=\"flex gap-2\">\n *     <IconButton aria-label=\"Search\"><Icon name=\"search\" /></IconButton>\n *     <IconButton aria-label=\"Edit\"><Icon name=\"edit\" /></IconButton>\n *   </div>\n * </BottomDockedToolbar>\n * ```\n */\nexport const BottomDockedToolbar = React.forwardRef<\n\tHTMLDivElement,\n\tBottomDockedToolbarProps\n>(\n\t(\n\t\t{\n\t\t\tvariant = \"standard\",\n\t\t\tcolors: customColors,\n\t\t\thideOnScroll = false,\n\t\t\tscrollContainerRef,\n\t\t\tstartContent,\n\t\t\tendContent,\n\t\t\tchildren,\n\t\t\tpaddingX = 16,\n\t\t\tjustify = \"between\",\n\t\t\tshape = \"none\",\n\t\t\tclassName,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst colors = getToolbarColors(variant, customColors);\n\n\t\tconst { scrollY } = useScroll(\n\t\t\tscrollContainerRef ? { container: scrollContainerRef } : undefined,\n\t\t);\n\n\t\tconst [isHidden, setIsHidden] = React.useState(false);\n\t\tconst lastScrollY = React.useRef(0);\n\n\t\tuseMotionValueEvent(scrollY, \"change\", (latest) => {\n\t\t\tif (!hideOnScroll) return;\n\n\t\t\tconst diff = latest - lastScrollY.current;\n\n\t\t\tif (latest <= 0) {\n\t\t\t\tsetIsHidden(false);\n\t\t\t\tlastScrollY.current = 0;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Math.abs(diff) > 10) {\n\t\t\t\tsetIsHidden(diff > 0);\n\t\t\t\tlastScrollY.current = latest;\n\t\t\t}\n\t\t});\n\n\t\tconst cssVars = {\n\t\t\t\"--toolbar-bg\": colors.toolbarContainerColor,\n\t\t\t\"--toolbar-color\": colors.toolbarContentColor,\n\t\t} as React.CSSProperties;\n\n\t\tconst SHAPE_CLASSES = {\n\t\t\tnone: \"\",\n\t\t\tlarge: \"rounded-2xl\",\n\t\t\tfull: \"rounded-full\",\n\t\t};\n\n\t\tconst justifyClass =\n\t\t\tjustify === \"center\" ? \"justify-center gap-4\" : \"justify-between\";\n\n\t\tconst isXr = variant === \"xr\";\n\n\t\treturn (\n\t\t\t<ToolbarContext.Provider value={{ orientation: \"horizontal\" }}>\n\t\t\t\t<m.div\n\t\t\t\t\tref={ref}\n\t\t\t\t\trole=\"toolbar\"\n\t\t\t\t\taria-label={ariaLabel || \"Bottom Docked Toolbar\"}\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\ty: isHidden ? \"100%\" : \"0%\",\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\t...cssVars,\n\t\t\t\t\t\tbackgroundColor: \"var(--toolbar-bg)\",\n\t\t\t\t\t\tcolor: \"var(--toolbar-color)\",\n\t\t\t\t\t\t// Apply safe area inset for mobile bottom indicators\n\t\t\t\t\t\tpaddingBottom: \"env(safe-area-inset-bottom, 0px)\",\n\t\t\t\t\t\tpaddingLeft: paddingX,\n\t\t\t\t\t\tpaddingRight: paddingX,\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed bottom-0 left-0 right-0 w-full z-40 text-(--toolbar-color) [&_.text-m3-on-surface-variant]:text-current\",\n\t\t\t\t\t\t\"flex items-center h-16\",\n\t\t\t\t\t\tjustifyClass,\n\t\t\t\t\t\tSHAPE_CLASSES[shape],\n\t\t\t\t\t\tisXr\n\t\t\t\t\t\t\t? \"backdrop-blur-md border-t border-white/10 shadow-lg\"\n\t\t\t\t\t\t\t: \"shadow-[0_-1px_3px_rgba(0,0,0,0.1)]\",\n\t\t\t\t\t\t\"pointer-events-auto\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"flex items-center justify-start flex-1 shrink-0\">\n\t\t\t\t\t\t{startContent}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\t\tjustify === \"center\" ? \"gap-1\" : \"flex-1 shrink-0\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className=\"flex items-center justify-end flex-1 shrink-0\">\n\t\t\t\t\t\t{endContent}\n\t\t\t\t\t</div>\n\t\t\t\t</m.div>\n\t\t\t</ToolbarContext.Provider>\n\t\t);\n\t},\n);\nBottomDockedToolbar.displayName = \"BottomDockedToolbar\";\n","import type { Transition } from \"motion/react\";\n\n/**\n * Design tokens for the MD3 Expressive Toolbars components.\n * Extracted from `FloatingToolbarTokens.kt` and `FabBaselineTokens.kt`.\n */\n\n/**\n * Spring motion specification for Toolbar buttons (ToolbarIconButton, ToolbarToggleButton).\n * Synchronized with ButtonDistribute spring characteristics.\n * Per spec: framer-motion spring config (stiffness: 300, damping: 30, mass: 0.8).\n */\nexport const TOOLBAR_SPRING_TRANSITION: Transition = {\n\ttype: \"spring\",\n\tstiffness: 300,\n\tdamping: 30,\n\tmass: 0.8,\n};\n\nexport const FloatingToolbarTokens = {\n\tContainerBetweenSpace: 4,\n\tContainerExternalPadding: 16,\n\tContainerHeight: 64,\n\tContainerLeadingSpace: 8,\n\tContainerShape: \"full\",\n\tContainerTrailingSpace: 8,\n\tVerticalContainerExternalPadding: 24,\n} as const;\n\nexport const FabBaselineTokens = {\n\tContainerHeight: 56,\n\tContainerWidth: 56,\n\tMediumContainerHeight: 80,\n\tMediumContainerWidth: 80,\n\tIconSize: 24,\n\tMediumIconSize: 28,\n} as const;\n\nexport const ToolbarToFabGap = 8;\n\n/**\n * Design tokens for the ToolbarDivider component.\n * The divider is a decorative separator used to group toolbar actions.\n */\nexport const ToolbarDividerTokens = {\n\t/** Divider line thickness in px */\n\tThickness: 1,\n\t/** Divider size as a fraction of the toolbar container dimension */\n\tHeightRatio: 0.5,\n} as const;\n\n/**\n * Design tokens for the ToolbarIconButton component.\n * Sizes follow MD3 Expressive touch-target minimums (48dp height always).\n * - narrow: de-emphasised secondary actions\n * - default: standard icon button\n * - wide: primary action emphasis inside the toolbar\n */\nexport const ToolbarIconButtonTokens = {\n\tNarrowWidth: 40,\n\tDefaultWidth: 48,\n\tWideWidth: 64,\n\t/** Minimum touch-target height per MD3 accessibility guidelines */\n\tHeight: 48,\n\t/** Icon size in dp — larger than standard 24dp to fill the 48dp button properly */\n\tIconSize: 28,\n} as const;\n\n/**\n * Design tokens for the ToolbarToggleButton component.\n * Follows MD3 Expressive 'Button toggleable' building block specifications.\n */\nexport const ToolbarToggleButtonTokens = {\n\tHeight: 48,\n\tMinWidth: 95,\n\tIconSize: 24,\n\tPaddingX: 16,\n\tGap: 8,\n} as const;\n\n/**\n * Border-radius tokens for ToolbarToggleButton spring-press morphing.\n * pillRadius = height / 2 = 48 / 2 = 24px (fully rounded pill).\n * pressedRadius morphs to a squished shape on pointer-down.\n */\nexport const ToolbarToggleButtonRadiusTokens = {\n\tpillRadius: 24,\n\tpressedRadius: 12,\n} as const;\n","import { AnimatePresence, m, type Variants } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nimport { SPRING_TRANSITION } from \"../shared/constants\";\nimport {\n\ttype FloatingToolbarColors,\n\tgetToolbarColors,\n\ttype ToolbarVariant,\n} from \"./toolbar-colors\";\nimport { ToolbarContext } from \"./toolbar-context\";\nimport type { FloatingToolbarScrollBehavior } from \"./toolbar-scroll-behavior\";\nimport { FloatingToolbarTokens } from \"./toolbar-tokens\";\n\nexport interface FloatingToolbarProps {\n\t/** Whether the toolbar is expanded, showing startContent and endContent */\n\texpanded: boolean;\n\t/** Orientation of the toolbar */\n\torientation?: \"horizontal\" | \"vertical\";\n\t/** Color variant: standard, vibrant, surface-high, surface-highest, tertiary, or xr */\n\tvariant?: ToolbarVariant;\n\t/** Color configuration override */\n\tcolors?: FloatingToolbarColors;\n\t/** Shape variant: full = pill shape (default), large = large rounded */\n\tshape?: \"full\" | \"large\";\n\t/** Padding inside toolbar container */\n\tcontentPadding?: React.CSSProperties | string;\n\t/** Scroll behavior hook result */\n\tscrollBehavior?: FloatingToolbarScrollBehavior;\n\t/** Start content (shown when expanded, usually on the left/top) */\n\tstartContent?: React.ReactNode;\n\t/** End content (shown when expanded, usually on the right/bottom) */\n\tendContent?: React.ReactNode;\n\t/** Main toolbar content (always visible) */\n\tchildren: React.ReactNode;\n\t/** Whether to disable the internal scroll translation (useful when parent handles it) */\n\tdisableScrollTranslation?: boolean;\n\t/** Whether to disable layout animation (useful when nested inside FloatingToolbarWithFab) */\n\tdisableLayoutAnimation?: boolean;\n\t/**\n\t * Gap (px) between items in the center children slot.\n\t * Corresponds to MD3 `ContainerBetweenSpace` token (4dp default).\n\t * @default 4\n\t */\n\titemGap?: number;\n\t/** Alignment (justify-content) of the center children slot */\n\tchildrenAlignment?: \"start\" | \"center\" | \"end\";\n\t/** Custom CSS class applied to each child item in the toolbar slots */\n\titemClassName?: string;\n\tclassName?: string;\n\tstyle?: React.CSSProperties;\n\t\"aria-label\"?: string;\n}\n\n// --- Module-level helpers ---\n\nconst ALIGNMENT_CLASS: Record<\"start\" | \"center\" | \"end\", string> = {\n\tstart: \"justify-start\",\n\tcenter: \"justify-center\",\n\tend: \"justify-end\",\n};\n\nfunction resolveScrollTranslation(\n\tscrollBehavior: FloatingToolbarScrollBehavior | undefined,\n\tdisabled: boolean | undefined,\n): { x: number | string; y: number | string } {\n\tif (!scrollBehavior || disabled) return { x: 0, y: 0 };\n\tconst { offset, exitDirection } = scrollBehavior;\n\tconst percent = offset * -100;\n\tswitch (exitDirection) {\n\t\tcase \"top\":\n\t\t\treturn { y: `${-percent}%`, x: 0 };\n\t\tcase \"bottom\":\n\t\t\treturn { y: `${percent}%`, x: 0 };\n\t\tcase \"start\":\n\t\t\treturn { x: `${-percent}%`, y: 0 };\n\t\tcase \"end\":\n\t\t\treturn { x: `${percent}%`, y: 0 };\n\t\tdefault:\n\t\t\treturn { x: 0, y: 0 };\n\t}\n}\n\nfunction buildSlotVariants(\n\txHidden: string | number,\n\tyHidden: string | number,\n\tisHorizontal: boolean,\n): Variants {\n\treturn {\n\t\thidden: {\n\t\t\tx: xHidden,\n\t\t\ty: yHidden,\n\t\t\topacity: 0,\n\t\t\tscale: 0.9,\n\t\t\twidth: isHorizontal ? 0 : \"auto\",\n\t\t\theight: isHorizontal ? \"auto\" : 0,\n\t\t\ttransition: SPRING_TRANSITION,\n\t\t},\n\t\tvisible: {\n\t\t\tx: 0,\n\t\t\ty: 0,\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\twidth: \"auto\",\n\t\t\theight: \"auto\",\n\t\t\ttransition: SPRING_TRANSITION,\n\t\t},\n\t};\n}\n\nfunction applyItemClassName(\n\tnodes: React.ReactNode,\n\titemClassName: string,\n): React.ReactNode {\n\treturn React.Children.map(nodes, (child) => {\n\t\tif (!React.isValidElement(child)) return child;\n\t\tconst element = child as React.ReactElement<{ className?: string }>;\n\t\treturn React.cloneElement(element, {\n\t\t\tclassName: cn(element.props.className, itemClassName),\n\t\t});\n\t});\n}\n\n// --- Component ---\n\n/**\n * Internal component for rendering the toolbar logic.\n * Consumers should use HorizontalFloatingToolbar or VerticalFloatingToolbar.\n */\nconst FloatingToolbarBase = React.forwardRef<\n\tHTMLDivElement,\n\tFloatingToolbarProps\n>(\n\t(\n\t\t{\n\t\t\texpanded,\n\t\t\torientation = \"horizontal\",\n\t\t\tvariant = \"standard\",\n\t\t\tcolors: customColors,\n\t\t\tshape = \"full\",\n\t\t\tcontentPadding,\n\t\t\tscrollBehavior,\n\t\t\tstartContent,\n\t\t\tendContent,\n\t\t\tchildren,\n\t\t\tdisableScrollTranslation,\n\t\t\tdisableLayoutAnimation,\n\t\t\titemGap = FloatingToolbarTokens.ContainerBetweenSpace,\n\t\t\tchildrenAlignment = \"center\",\n\t\t\titemClassName,\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t\"aria-label\": ariaLabel,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst colors = getToolbarColors(variant, customColors);\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\t\tconst isStringPadding = typeof contentPadding === \"string\";\n\n\t\tconst cssVars = {\n\t\t\t\"--toolbar-bg\": colors.toolbarContainerColor,\n\t\t\t\"--toolbar-color\": colors.toolbarContentColor,\n\t\t\t\"--toolbar-size\": `${FloatingToolbarTokens.ContainerHeight}px`,\n\t\t\t...(isStringPadding ? {} : contentPadding),\n\t\t\t...style,\n\t\t} as React.CSSProperties;\n\n\t\tconst isScrolledOff = scrollBehavior && scrollBehavior.offset < 0;\n\t\tconst isXr = variant === \"xr\";\n\t\tconst shadowClass = isXr\n\t\t\t? \"shadow-lg border border-white/10 backdrop-blur-md\"\n\t\t\t: expanded\n\t\t\t\t? \"shadow-md\"\n\t\t\t\t: \"shadow-sm\";\n\t\tconst containerShapeClass =\n\t\t\tshape === \"full\" ? \"rounded-full\" : \"rounded-2xl\";\n\n\t\tconst leadingVariants = buildSlotVariants(\n\t\t\tisHorizontal ? \"-100%\" : 0,\n\t\t\tisHorizontal ? 0 : \"100%\",\n\t\t\tisHorizontal,\n\t\t);\n\t\tconst trailingVariants = buildSlotVariants(\n\t\t\tisHorizontal ? \"100%\" : 0,\n\t\t\tisHorizontal ? 0 : \"-100%\",\n\t\t\tisHorizontal,\n\t\t);\n\n\t\tconst processNodes = (nodes: React.ReactNode) =>\n\t\t\titemClassName ? applyItemClassName(nodes, itemClassName) : nodes;\n\n\t\tconst scrollTranslation = resolveScrollTranslation(\n\t\t\tscrollBehavior,\n\t\t\tdisableScrollTranslation,\n\t\t);\n\n\t\treturn (\n\t\t\t<ToolbarContext.Provider value={{ orientation, itemClassName }}>\n\t\t\t\t<m.div\n\t\t\t\t\tref={ref}\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tanimate={scrollTranslation}\n\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t>\n\t\t\t\t\t<m.div\n\t\t\t\t\t\trole=\"toolbar\"\n\t\t\t\t\t\taria-label={ariaLabel || \"Floating Toolbar\"}\n\t\t\t\t\t\taria-orientation={orientation}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\tinert={isScrolledOff ? true : undefined}\n\t\t\t\t\t\t{...(disableLayoutAnimation ? {} : { layout: \"position\" as const })}\n\t\t\t\t\t\ttransition={SPRING_TRANSITION}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t...cssVars,\n\t\t\t\t\t\t\tbackgroundColor: \"var(--toolbar-bg)\",\n\t\t\t\t\t\t\tcolor: \"var(--toolbar-color)\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex pointer-events-auto relative text-(--toolbar-color) [&_.text-m3-on-surface-variant]:text-current\",\n\t\t\t\t\t\t\tisHorizontal\n\t\t\t\t\t\t\t\t? \"max-w-[min(90vw,100%)] h-(--toolbar-size)\"\n\t\t\t\t\t\t\t\t: \"max-h-[min(90vh,100%)] w-(--toolbar-size) h-fit\",\n\t\t\t\t\t\t\tcontainerShapeClass,\n\t\t\t\t\t\t\tshadowClass,\n\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\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\t\"flex-1 w-full h-full rounded-[inherit] scrollbar-hide\",\n\t\t\t\t\t\t\t\tisHorizontal\n\t\t\t\t\t\t\t\t\t? \"overflow-x-auto overflow-y-visible\"\n\t\t\t\t\t\t\t\t\t: \"overflow-y-auto overflow-x-visible\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"flex items-center min-w-0 min-h-0\",\n\t\t\t\t\t\t\t\t\tisHorizontal ? \"flex-row h-full\" : \"flex-col w-full\",\n\t\t\t\t\t\t\t\t\tisStringPadding\n\t\t\t\t\t\t\t\t\t\t? contentPadding\n\t\t\t\t\t\t\t\t\t\t: isHorizontal\n\t\t\t\t\t\t\t\t\t\t\t? \"px-2\"\n\t\t\t\t\t\t\t\t\t\t\t: \"py-2\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tgap: itemGap,\n\t\t\t\t\t\t\t\t\t...(isStringPadding ? {} : contentPadding),\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<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t{expanded && startContent && (\n\t\t\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\t\t\tkey=\"start\"\n\t\t\t\t\t\t\t\t\t\t\tvariants={leadingVariants}\n\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\texit=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex shrink-0 items-center overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\tisHorizontal ? \"flex-row\" : \"flex-col\",\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ gap: itemGap }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{processNodes(startContent)}\n\t\t\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex flex-1 items-center min-w-0 min-h-0 h-full\",\n\t\t\t\t\t\t\t\t\t\tisHorizontal ? \"flex-row\" : \"flex-col\",\n\t\t\t\t\t\t\t\t\t\tALIGNMENT_CLASS[childrenAlignment],\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tstyle={{ gap: itemGap }}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{processNodes(children)}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t\t\t\t{expanded && endContent && (\n\t\t\t\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\t\t\t\tkey=\"end\"\n\t\t\t\t\t\t\t\t\t\t\tvariants={trailingVariants}\n\t\t\t\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\t\t\t\texit=\"hidden\"\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"flex shrink-0 items-center overflow-hidden\",\n\t\t\t\t\t\t\t\t\t\t\t\tisHorizontal ? \"flex-row\" : \"flex-col\",\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ gap: itemGap }}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{processNodes(endContent)}\n\t\t\t\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</AnimatePresence>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</m.div>\n\t\t\t\t</m.div>\n\t\t\t</ToolbarContext.Provider>\n\t\t);\n\t},\n);\nFloatingToolbarBase.displayName = \"FloatingToolbarBase\";\n\n/**\n * A horizontal floating toolbar that displays navigation and key actions.\n * It can be positioned anywhere on the screen and floats over the rest of the content.\n *\n * @example\n * ```tsx\n * const [expanded, setExpanded] = useState(true);\n * const scrollBehavior = useFloatingToolbarScrollBehavior({ exitDirection: 'bottom' });\n *\n * <HorizontalFloatingToolbar\n *   expanded={expanded}\n *   scrollBehavior={scrollBehavior}\n *   startContent={<IconButton icon=\"undo\" />}\n *   endContent={<IconButton icon=\"redo\" />}\n * >\n *   <IconButton icon=\"bold\" />\n *   <IconButton icon=\"italic\" />\n * </HorizontalFloatingToolbar>\n * ```\n *\n * @see https://m3.material.io/components/toolbars/guidelines\n */\nexport const HorizontalFloatingToolbar = React.forwardRef<\n\tHTMLDivElement,\n\tOmit<FloatingToolbarProps, \"orientation\">\n>((props, ref) => (\n\t<FloatingToolbarBase ref={ref} orientation=\"horizontal\" {...props} />\n));\nHorizontalFloatingToolbar.displayName = \"HorizontalFloatingToolbar\";\n\n/**\n * A vertical floating toolbar that displays navigation and key actions.\n * It floats over the rest of the content.\n *\n * @example\n * ```tsx\n * <VerticalFloatingToolbar expanded={true}>\n *   <IconButton icon=\"bold\" />\n * </VerticalFloatingToolbar>\n * ```\n */\nexport const VerticalFloatingToolbar = React.forwardRef<\n\tHTMLDivElement,\n\tOmit<FloatingToolbarProps, \"orientation\">\n>((props, ref) => (\n\t<FloatingToolbarBase ref={ref} orientation=\"vertical\" {...props} />\n));\nVerticalFloatingToolbar.displayName = \"VerticalFloatingToolbar\";\n","import { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { SPRING_TRANSITION } from \"../shared/constants\";\nimport {\n\ttype FloatingToolbarProps,\n\tHorizontalFloatingToolbar,\n\tVerticalFloatingToolbar,\n} from \"./floating-toolbar\";\nimport { getToolbarColors } from \"./toolbar-colors\";\nimport {\n\tFabBaselineTokens,\n\tFloatingToolbarTokens,\n\tToolbarToFabGap,\n} from \"./toolbar-tokens\";\n\nexport interface FloatingToolbarWithFabProps extends FloatingToolbarProps {\n\t/** FAB element (use FAB component or custom node) */\n\tfloatingActionButton: React.ReactNode;\n\t/** FAB position for horizontal: 'start' | 'end'. For vertical: 'top' | 'bottom' */\n\tfabPosition?: \"start\" | \"end\" | \"top\" | \"bottom\";\n\t/** Animation duration override */\n\tanimationDuration?: number;\n\t/** Start content (explicitly declared to resolve type issues) */\n\tstartContent?: React.ReactNode;\n\t/** End content (explicitly declared to resolve type issues) */\n\tendContent?: React.ReactNode;\n\t/**\n\t * FAB size embedded in the floating toolbar.\n\t * - `\"sm\"` – standard FAB: 56×56dp (MD3 default).\n\t * - `\"md\"` – medium FAB: 80×80dp (`FabBaselineTokens.MediumContainerHeight`).\n\t * Corresponds to MD3 Toolbar Floating FAB token sizes.\n\t * @default \"sm\"\n\t */\n\tfabSize?: \"sm\" | \"md\";\n}\n\nconst FloatingToolbarWithFabBase = React.forwardRef<\n\tHTMLDivElement,\n\tFloatingToolbarWithFabProps\n>(\n\t(\n\t\t{\n\t\t\texpanded,\n\t\t\torientation = \"horizontal\",\n\t\t\tvariant = \"standard\",\n\t\t\tcolors: customColors,\n\t\t\tfloatingActionButton,\n\t\t\tfabPosition = orientation === \"horizontal\" ? \"end\" : \"bottom\",\n\t\t\tanimationDuration = 0.3,\n\t\t\tscrollBehavior,\n\t\t\tfabSize = \"sm\",\n\t\t\tclassName,\n\t\t\tstyle,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst colors = getToolbarColors(variant, customColors);\n\n\t\tconst isHorizontal = orientation === \"horizontal\";\n\n\t\tconst effectiveExpanded =\n\t\t\texpanded && (!scrollBehavior || scrollBehavior.isExpanded);\n\n\t\tconst isFabBefore = fabPosition === \"start\" || fabPosition === \"top\";\n\n\t\tconst resolvedFabSize =\n\t\t\tfabSize === \"md\"\n\t\t\t\t? FabBaselineTokens.MediumContainerHeight\n\t\t\t\t: FabBaselineTokens.ContainerHeight;\n\n\t\tconst transitionSpec = {\n\t\t\t...SPRING_TRANSITION,\n\t\t\tduration: animationDuration,\n\t\t};\n\n\t\tconst SHADOW_PADDING = 24;\n\n\t\tconst fabContainerNode = (\n\t\t\t<m.div\n\t\t\t\tlayout\n\t\t\t\tkey=\"fab-container\"\n\t\t\t\tstyle={{\n\t\t\t\t\twidth: `${resolvedFabSize}px`,\n\t\t\t\t\theight: `${resolvedFabSize}px`,\n\t\t\t\t}}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex shrink-0 items-center justify-center relative z-10\",\n\t\t\t\t\t\"*:w-full *:h-full\",\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{floatingActionButton}\n\t\t\t</m.div>\n\t\t);\n\n\t\treturn (\n\t\t\t<div ref={ref} style={style}>\n\t\t\t\t<m.div\n\t\t\t\t\tlayout\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tanimate={{\n\t\t\t\t\t\tgap: effectiveExpanded ? `${ToolbarToFabGap}px` : \"0px\",\n\t\t\t\t\t}}\n\t\t\t\t\ttransition={transitionSpec}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"flex items-center justify-center pointer-events-auto\",\n\t\t\t\t\t\tisHorizontal\n\t\t\t\t\t\t\t? \"flex-row h-(--toolbar-size)\"\n\t\t\t\t\t\t\t: \"flex-col w-(--toolbar-size) h-fit\",\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{\n\t\t\t\t\t\t\t\"--fab-size\": `${resolvedFabSize}px`,\n\t\t\t\t\t\t\t\"--toolbar-size\": `${FloatingToolbarTokens.ContainerHeight}px`,\n\t\t\t\t\t\t} as React.CSSProperties\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t{isFabBefore && fabContainerNode}\n\n\t\t\t\t\t<AnimatePresence initial={false}>\n\t\t\t\t\t\t{effectiveExpanded && (\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\tkey=\"toolbar-content-wrapper\"\n\t\t\t\t\t\t\t\tinitial={{\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tscale: 0.9,\n\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 0 : \"auto\",\n\t\t\t\t\t\t\t\t\theight: !isHorizontal ? 0 : \"auto\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tanimate={{\n\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\t\t\t\twidth: \"auto\",\n\t\t\t\t\t\t\t\t\theight: \"auto\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\texit={{\n\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\tscale: 0.9,\n\t\t\t\t\t\t\t\t\twidth: isHorizontal ? 0 : \"auto\",\n\t\t\t\t\t\t\t\t\theight: !isHorizontal ? 0 : \"auto\",\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\ttransition={transitionSpec}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tpadding: SHADOW_PADDING,\n\t\t\t\t\t\t\t\t\tmargin: -SHADOW_PADDING,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclassName=\"flex items-center shrink-0 min-w-0 min-h-0 overflow-hidden relative z-0\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{isHorizontal ? (\n\t\t\t\t\t\t\t\t\t<HorizontalFloatingToolbar\n\t\t\t\t\t\t\t\t\t\texpanded={expanded}\n\t\t\t\t\t\t\t\t\t\tcolors={colors}\n\t\t\t\t\t\t\t\t\t\tdisableScrollTranslation\n\t\t\t\t\t\t\t\t\t\tdisableLayoutAnimation\n\t\t\t\t\t\t\t\t\t\tclassName={className ? cn(\"h-full\", className) : undefined}\n\t\t\t\t\t\t\t\t\t\t{...props}\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<VerticalFloatingToolbar\n\t\t\t\t\t\t\t\t\t\texpanded={expanded}\n\t\t\t\t\t\t\t\t\t\tcolors={colors}\n\t\t\t\t\t\t\t\t\t\tdisableScrollTranslation\n\t\t\t\t\t\t\t\t\t\tdisableLayoutAnimation\n\t\t\t\t\t\t\t\t\t\tclassName={className ? cn(\"w-full\", className) : undefined}\n\t\t\t\t\t\t\t\t\t\t{...props}\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</m.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\n\t\t\t\t\t{!isFabBefore && fabContainerNode}\n\t\t\t\t</m.div>\n\t\t\t</div>\n\t\t);\n\t},\n);\nFloatingToolbarWithFabBase.displayName = \"FloatingToolbarWithFabBase\";\n\n/**\n * A horizontal floating toolbar paired with a FAB.\n */\nexport const HorizontalFloatingToolbarWithFab = React.forwardRef<\n\tHTMLDivElement,\n\tFloatingToolbarWithFabProps\n>((props, ref) => (\n\t<FloatingToolbarWithFabBase ref={ref} orientation=\"horizontal\" {...props} />\n));\nHorizontalFloatingToolbarWithFab.displayName =\n\t\"HorizontalFloatingToolbarWithFab\";\n\n/**\n * A vertical floating toolbar paired with a FAB.\n */\nexport const VerticalFloatingToolbarWithFab = React.forwardRef<\n\tHTMLDivElement,\n\tFloatingToolbarWithFabProps\n>((props, ref) => (\n\t<FloatingToolbarWithFabBase ref={ref} orientation=\"vertical\" {...props} />\n));\nVerticalFloatingToolbarWithFab.displayName = \"VerticalFloatingToolbarWithFab\";\n","/**\n * @file toolbar-divider.tsx\n *\n * A decorative divider for use inside MD3 Toolbar components.\n * Renders as a thin line that visually separates groups of toolbar actions.\n *\n * @see https://m3.material.io/components/toolbars/guidelines (Anatomy → Flexibility & slots)\n */\n\nimport type * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { useToolbarContext } from \"./toolbar-context\";\nimport { FloatingToolbarTokens, ToolbarDividerTokens } from \"./toolbar-tokens\";\n\nexport interface ToolbarDividerProps {\n\t/**\n\t * The toolbar's orientation context.\n\t * - `\"horizontal\"` toolbar → renders a **vertical** divider line.\n\t * - `\"vertical\"` toolbar → renders a **horizontal** divider line.\n\t * @default \"horizontal\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\";\n\tclassName?: string;\n}\n\n/**\n * A thin decorative separator for grouping actions inside a Toolbar.\n *\n * Inherits its color from the toolbar's `--toolbar-color` CSS variable via\n * `currentColor`, so it automatically adapts to both standard and vibrant\n * color configurations.\n *\n * @example\n * ```tsx\n * <HorizontalFloatingToolbar expanded={true}>\n *   <IconButton aria-label=\"Bold\"><BoldIcon /></IconButton>\n *   <IconButton aria-label=\"Italic\"><ItalicIcon /></IconButton>\n *   <ToolbarDivider />\n *   <IconButton aria-label=\"Align left\"><AlignLeftIcon /></IconButton>\n * </HorizontalFloatingToolbar>\n * ```\n */\nexport const ToolbarDivider: React.FC<ToolbarDividerProps> = ({\n\torientation: propsOrientation,\n\tclassName,\n}) => {\n\tconst context = useToolbarContext();\n\tconst orientation = propsOrientation || context?.orientation || \"horizontal\";\n\tconst isHorizontalToolbar = orientation === \"horizontal\";\n\n\treturn (\n\t\t<hr\n\t\t\taria-orientation={isHorizontalToolbar ? \"vertical\" : \"horizontal\"}\n\t\t\tclassName={cn(\n\t\t\t\t\"shrink-0 bg-current opacity-30 border-none\",\n\t\t\t\tisHorizontalToolbar\n\t\t\t\t\t? \"w-px h-8 self-center mx-1\"\n\t\t\t\t\t: \"h-px w-8 self-center my-1\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\twidth: isHorizontalToolbar\n\t\t\t\t\t? `${ToolbarDividerTokens.Thickness}px`\n\t\t\t\t\t: `${ToolbarDividerTokens.HeightRatio * FloatingToolbarTokens.ContainerHeight}px`,\n\t\t\t\theight: isHorizontalToolbar\n\t\t\t\t\t? `${ToolbarDividerTokens.HeightRatio * FloatingToolbarTokens.ContainerHeight}px`\n\t\t\t\t\t: `${ToolbarDividerTokens.Thickness}px`,\n\t\t\t}}\n\t\t/>\n\t);\n};\n\nToolbarDivider.displayName = \"ToolbarDivider\";\n","/**\n * @file toolbar-icon-button.tsx\n *\n * A thin wrapper around the MD3 `IconButton` component, pre-configured\n * for use inside Toolbar slots.\n *\n * Supports the three emphasis variants described in the MD3 Flexibility & slots\n * spec, plus narrow/wide sizing for asymmetric visual hierarchy.\n *\n * @see https://m3.material.io/components/toolbars/guidelines (Anatomy → Flexibility & slots)\n * @see https://m3.material.io/components/icon-buttons/overview\n */\n\nimport * as React from \"react\";\n\nimport { cn } from \"../../lib/utils\";\nimport type { MD3SlotWidth } from \"../../types/md3\";\nimport { type BaseIconButtonProps, IconButton } from \"../buttons/icon-button\";\nimport { useToolbarContext } from \"./toolbar-context\";\nimport {\n\tTOOLBAR_SPRING_TRANSITION,\n\tToolbarIconButtonTokens,\n} from \"./toolbar-tokens\";\n\nexport interface ToolbarIconButtonProps\n\textends Omit<BaseIconButtonProps, \"colorStyle\" | \"size\" | \"shape\"> {\n\t/**\n\t * Visual emphasis variant.\n\t *\n\t * ⚠️ Avoid emphasising more than one action at a time.\n\t * @default \"standard\"\n\t */\n\temphasis?: ToolbarIconButtonVariant;\n\t/**\n\t * Slot width of the toolbar icon button per MD3 Expressive specification.\n\t * Controls how much horizontal space the button occupies in the toolbar.\n\t * - `\"narrow\"` – minimum width slot (40px), for compact actions.\n\t * - `\"default\"` – standard square slot (48px).\n\t * - `\"wide\"` – extended slot (64px), for primary emphasis actions.\n\t * @default \"default\"\n\t */\n\twidth?: MD3SlotWidth;\n\t/**\n\t * Whether the icon button is in a selected/active toggle state.\n\t */\n\tselected?: boolean;\n\t/**\n\t * Change the default rendered element to the one passed as a child, merging their props and behavior.\n\t */\n\tasChild?: boolean;\n\t/** Icon content — typically a single SVG icon component. */\n\tchildren: React.ReactNode;\n\t/**\n\t * Accessible label — **REQUIRED** because icon buttons have no visible text.\n\t */\n\t\"aria-label\": string;\n}\n\n/**\n * Visual emphasis variant for a toolbar icon button.\n *\n * MD3 guideline: *\"Use different icon button color styles, such as filled,\n * tonal, and standard.\"*\n *\n * ⚠️ **Avoid emphasising more than one action at a time.**\n * Use `\"filled\"` or `\"tonal\"` for the single highest-priority action and\n * keep all other buttons as `\"standard\"`.\n */\nexport type ToolbarIconButtonVariant = \"standard\" | \"tonal\" | \"filled\";\n\nconst TOOLBAR_ICON_BUTTON_WIDTH: Record<MD3SlotWidth, string> = {\n\tnarrow: \"w-[40px]\",\n\tdefault: \"w-[48px]\",\n\twide: \"w-[64px]\",\n};\n\nconst VARIANT_TO_COLOR_STYLE: Record<\n\tToolbarIconButtonVariant,\n\t\"standard\" | \"filled\" | \"tonal\"\n> = {\n\tstandard: \"standard\",\n\ttonal: \"tonal\",\n\tfilled: \"filled\",\n};\n\n/**\n * An MD3 icon button optimised for use inside Toolbar slots.\n *\n * Wraps the project's `IconButton` and adds:\n * - Three emphasis styles (`standard`, `tonal`, `filled`) via `emphasis` prop.\n * - Three width sizes (`narrow`, `default`, `wide`) for visual hierarchy.\n * - Support for `selected` state (Toggleable Icon Button per MD3 spec).\n * - Support for `asChild` slot delegation.\n * - Always `rounded-full` shape (required for floating toolbars per MD3 spec).\n * - Always 48dp height to meet MD3 accessibility touch-target requirements.\n * - Material Design 3 Expressive spring motion physics (`TOOLBAR_SPRING_TRANSITION`)\n *   synchronized with `ButtonDistribute` for responsive press scale and width expansion.\n *\n * @example\n * ```tsx\n * // Standard (default) — use for most actions\n * <ToolbarIconButton aria-label=\"Share\">\n *   <ShareIcon />\n * </ToolbarIconButton>\n *\n * // Toggleable state\n * <ToolbarIconButton selected={isSelected} aria-label=\"Bookmark\" onClick={() => setIsSelected(!isSelected)}>\n *   <BookmarkIcon />\n * </ToolbarIconButton>\n * ```\n *\n * @see https://m3.material.io/components/toolbars/guidelines\n */\nexport const ToolbarIconButton = React.forwardRef<\n\tHTMLButtonElement,\n\tToolbarIconButtonProps\n>(\n\t(\n\t\t{\n\t\t\temphasis = \"standard\",\n\t\t\twidth = \"default\",\n\t\t\tselected,\n\t\t\tasChild,\n\t\t\tclassName,\n\t\t\ttransition,\n\t\t\twhileTap,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useToolbarContext();\n\t\tconst widthClass = TOOLBAR_ICON_BUTTON_WIDTH[width];\n\t\tconst colorStyle = VARIANT_TO_COLOR_STYLE[emphasis];\n\n\t\tconst iconButtonProps =\n\t\t\tselected !== undefined\n\t\t\t\t? ({\n\t\t\t\t\t\tvariant: \"toggle\" as const,\n\t\t\t\t\t\tselected: Boolean(selected),\n\t\t\t\t\t} as const)\n\t\t\t\t: ({\n\t\t\t\t\t\tvariant: \"default\" as const,\n\t\t\t\t\t} as const);\n\n\t\tconst motionProps = asChild\n\t\t\t? {\n\t\t\t\t\t...(transition !== undefined && { transition }),\n\t\t\t\t\t...(whileTap !== undefined && { whileTap }),\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\ttransition: transition ?? TOOLBAR_SPRING_TRANSITION,\n\t\t\t\t\twhileTap: whileTap ?? { scale: 0.95 },\n\t\t\t\t};\n\n\t\treturn (\n\t\t\t<IconButton\n\t\t\t\tref={ref}\n\t\t\t\tasChild={asChild}\n\t\t\t\tcolorStyle={colorStyle}\n\t\t\t\tsize=\"md\"\n\t\t\t\tshape=\"round\"\n\t\t\t\ticonSize={ToolbarIconButtonTokens.IconSize}\n\t\t\t\t{...motionProps}\n\t\t\t\t{...iconButtonProps}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"h-[48px]\",\n\t\t\t\t\twidthClass,\n\t\t\t\t\temphasis === \"standard\" &&\n\t\t\t\t\t\t!selected &&\n\t\t\t\t\t\t\"text-current hover:bg-current/8 active:bg-current/12\",\n\t\t\t\t\temphasis === \"standard\" &&\n\t\t\t\t\t\tselected &&\n\t\t\t\t\t\t\"bg-current/16 text-current hover:bg-current/20 active:bg-current/24\",\n\t\t\t\t\tcontext?.itemClassName,\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nToolbarIconButton.displayName = \"ToolbarIconButton\";\n","import { useMotionValueEvent, useScroll } from \"motion/react\";\nimport { type RefObject, useEffect, useRef, useState } from \"react\";\n\n/**\n * Configuration options for the `useFloatingToolbarScrollBehavior` hook.\n */\nexport interface UseFloatingToolbarScrollBehaviorOptions {\n\t/** Direction toolbar exits: 'top' | 'bottom' | 'start' | 'end'. Defaults to 'bottom'. */\n\texitDirection?: \"top\" | \"bottom\" | \"start\" | \"end\";\n\t/** Scroll distance threshold to trigger collapse (in px). Defaults to 10. */\n\tcollapseThreshold?: number;\n\t/** Scroll distance threshold to trigger expand (in px). Defaults to 10. */\n\texpandThreshold?: number;\n\t/** Optional ref to a scrollable container. If not provided, it listens to window scroll. */\n\tscrollContainerRef?: RefObject<HTMLElement | null>;\n}\n\n/**\n * The resulting behavior object returned by `useFloatingToolbarScrollBehavior`.\n */\nexport interface FloatingToolbarScrollBehavior {\n\t/** Current offset. 0 is fully visible, -1 is fully hidden. */\n\toffset: number;\n\t/** Whether the toolbar is currently expanded. */\n\tisExpanded: boolean;\n\t/** Optional scroll handler to bind to a React scrollable container (legacy fallback). */\n\tonScroll?: (event: React.UIEvent<HTMLElement>) => void;\n\t/** Manually update the expanded state of the toolbar. */\n\tsetExpanded: (expanded: boolean) => void;\n\t/** The configured exit direction. */\n\texitDirection: \"top\" | \"bottom\" | \"start\" | \"end\";\n}\n\n/**\n * A hook that provides scroll behavior for floating toolbars, allowing them to\n * collapse (exit) when scrolling down and expand (enter) when scrolling up.\n * Leverages Framer Motion's useScroll internally for optimized performance.\n *\n * @param options Configuration options for scroll behavior.\n * @returns An object containing the current scroll state and handlers.\n *\n * @example\n * ```tsx\n * const scrollBehavior = useFloatingToolbarScrollBehavior({\n *   exitDirection: 'bottom',\n *   collapseThreshold: 20\n * });\n *\n * <HorizontalFloatingToolbar scrollBehavior={scrollBehavior}>\n *   <IconButton icon=\"bold\" />\n * </HorizontalFloatingToolbar>\n * ```\n */\nexport function useFloatingToolbarScrollBehavior(\n\toptions: UseFloatingToolbarScrollBehaviorOptions = {},\n): FloatingToolbarScrollBehavior {\n\tconst {\n\t\texitDirection = \"bottom\",\n\t\tcollapseThreshold = 10,\n\t\texpandThreshold = 10,\n\t\tscrollContainerRef,\n\t} = options;\n\n\tconst [isExpanded, setIsExpanded] = useState(true);\n\tconst [offset, setOffset] = useState(0); // 0 to -1\n\n\tconst { scrollY } = useScroll({\n\t\tcontainer: scrollContainerRef,\n\t});\n\n\tconst lastScrollY = useRef(0);\n\tconst accumulatedScroll = useRef(0);\n\n\tuseMotionValueEvent(scrollY, \"change\", (currentScrollY) => {\n\t\tconst deltaY = currentScrollY - lastScrollY.current;\n\n\t\t// Ignore bouncing (negative scroll or past max scroll on macOS)\n\t\tif (currentScrollY < 0) return;\n\n\t\tlastScrollY.current = currentScrollY;\n\n\t\t// Only accumulate if we are scrolling in the same direction\n\t\tif (Math.sign(deltaY) !== Math.sign(accumulatedScroll.current)) {\n\t\t\taccumulatedScroll.current = deltaY;\n\t\t} else {\n\t\t\taccumulatedScroll.current += deltaY;\n\t\t}\n\n\t\tif (deltaY > 0 && isExpanded) {\n\t\t\t// Scrolling down -> collapse\n\t\t\tif (accumulatedScroll.current > collapseThreshold) {\n\t\t\t\tsetIsExpanded(false);\n\t\t\t\tsetOffset(-1);\n\t\t\t}\n\t\t} else if (deltaY < 0 && !isExpanded) {\n\t\t\t// Scrolling up -> expand\n\t\t\tif (Math.abs(accumulatedScroll.current) > expandThreshold) {\n\t\t\t\tsetIsExpanded(true);\n\t\t\t\tsetOffset(0);\n\t\t\t}\n\t\t}\n\t});\n\n\t// Accessibility: Always force expanded if forced-colors mode or accessibility preferences\n\tuseEffect(() => {\n\t\tif (typeof window !== \"undefined\") {\n\t\t\tconst matchMedia = window.matchMedia(\"(forced-colors: active)\");\n\t\t\tif (matchMedia.matches) {\n\t\t\t\tsetIsExpanded(true);\n\t\t\t\tsetOffset(0);\n\t\t\t}\n\n\t\t\tconst listener = (e: MediaQueryListEvent) => {\n\t\t\t\tif (e.matches) {\n\t\t\t\t\tsetIsExpanded(true);\n\t\t\t\t\tsetOffset(0);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tmatchMedia.addEventListener(\"change\", listener);\n\t\t\treturn () => matchMedia.removeEventListener(\"change\", listener);\n\t\t}\n\t}, []);\n\n\tconst setExpanded = (expanded: boolean) => {\n\t\tsetIsExpanded(expanded);\n\t\tsetOffset(expanded ? 0 : -1);\n\t};\n\n\t// Dummy onScroll for legacy compatibility if users still attach it\n\tconst onScroll = () => {};\n\n\treturn {\n\t\toffset,\n\t\tisExpanded,\n\t\tonScroll,\n\t\tsetExpanded,\n\t\texitDirection,\n\t};\n}\n","/**\n * @file toolbar-toggle-button.tsx\n *\n * An MD3 Expressive toggle button with icon and text label for Toolbar slots.\n * Implements the 'Button toggleable' building block from MD3 Toolbar guidelines.\n *\n * @see https://m3.material.io/components/toolbars/guidelines (Anatomy → Flexibility & slots)\n */\n\nimport { Slot } from \"@radix-ui/react-slot\";\nimport type { HTMLMotionProps } from \"motion/react\";\nimport { domMax, LazyMotion, m } from \"motion/react\";\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { BUTTON_RADIUS_SPRING } from \"../buttons/button/button-tokens\";\nimport { Ripple, useRippleState } from \"../ripple\";\nimport { FAST_SPATIAL_SPRING } from \"../shared/motion-tokens\";\nimport { useToolbarContext } from \"./toolbar-context\";\nimport {\n\tToolbarToggleButtonRadiusTokens,\n\tToolbarToggleButtonTokens,\n} from \"./toolbar-tokens\";\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\nexport interface ToolbarToggleButtonProps\n\textends Omit<HTMLMotionProps<\"button\">, \"children\"> {\n\t/**\n\t * Visual emphasis variant.\n\t * @default \"standard\"\n\t */\n\temphasis?: \"standard\" | \"tonal\" | \"filled\";\n\t/**\n\t * Whether the button is in a selected/active state.\n\t * @default false\n\t */\n\tselected?: boolean;\n\t/**\n\t * Leading icon component or node.\n\t */\n\ticon?: React.ReactNode;\n\t/**\n\t * Button text label / content.\n\t */\n\tchildren?: React.ReactNode;\n\t/**\n\t * Enable symmetric spring expand on press.\n\t * The button expands equally to the left and right — matching ButtonDistribute behavior.\n\t * @default true\n\t */\n\tpressExpand?: boolean;\n\t/**\n\t * Fraction of the button width added symmetrically on press.\n\t * e.g. 0.06 → scaleX goes from 1.0 to 1.06 (3% each side).\n\t * @default 0.06\n\t */\n\tpressExpandRatio?: number;\n\t/**\n\t * Enable MD3 state layer ripple effect on click.\n\t * @default true\n\t */\n\tripple?: boolean;\n\t/**\n\t * Delegation prop to merge props onto a child element (Radix Slot).\n\t */\n\tasChild?: boolean;\n\tclassName?: string;\n}\n\n/**\n * An MD3 pill-shaped toggle button with optional leading icon and text label.\n *\n * Meets MD3 Expressive touch-target requirements (48dp height minimum, ~95dp width).\n * Features Material Design 3 Expressive spring press animation:\n * - Symmetric horizontal expand (scaleX) with `FAST_SPATIAL_SPRING` (has bounce)\n * - Border-radius morphing via `BUTTON_RADIUS_SPRING` (fast.effects, no overshoot)\n * - Configurable ripple state layer\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState(false);\n *\n * <ToolbarToggleButton\n *   selected={selected}\n *   onClick={() => setSelected(!selected)}\n *   icon={<EditIcon />}\n * >\n *   Edit\n * </ToolbarToggleButton>\n * ```\n */\nexport const ToolbarToggleButton = React.forwardRef<\n\tHTMLButtonElement,\n\tToolbarToggleButtonProps\n>(\n\t(\n\t\t{\n\t\t\temphasis = \"standard\",\n\t\t\tselected = false,\n\t\t\ticon,\n\t\t\tchildren,\n\t\t\tpressExpand = true,\n\t\t\tpressExpandRatio = 0.06,\n\t\t\tripple = true,\n\t\t\tasChild = false,\n\t\t\tclassName,\n\t\t\ttype = \"button\",\n\t\t\tdisabled,\n\t\t\tonPointerDown: onPointerDownProp,\n\t\t\tonPointerUp: onPointerUpProp,\n\t\t\tonPointerLeave: onPointerLeaveProp,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst context = useToolbarContext();\n\n\t\tconst [isPressed, setIsPressed] = React.useState(false);\n\n\t\tconst {\n\t\t\tripples,\n\t\t\tonPointerDown: handleRipplePointerDown,\n\t\t\tremoveRipple,\n\t\t} = useRippleState({\n\t\t\tdisabled: Boolean(disabled) || !ripple,\n\t\t});\n\n\t\tconst handlePointerDown = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(true);\n\t\t\t\tif (!disabled && ripple) {\n\t\t\t\t\thandleRipplePointerDown(e);\n\t\t\t\t}\n\t\t\t\tonPointerDownProp?.(e);\n\t\t\t},\n\t\t\t[disabled, ripple, handleRipplePointerDown, onPointerDownProp],\n\t\t);\n\n\t\tconst handlePointerUp = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerUpProp?.(e);\n\t\t\t},\n\t\t\t[onPointerUpProp],\n\t\t);\n\n\t\tconst handlePointerLeave = React.useCallback(\n\t\t\t(e: React.PointerEvent<HTMLButtonElement>) => {\n\t\t\t\tsetIsPressed(false);\n\t\t\t\tonPointerLeaveProp?.(e);\n\t\t\t},\n\t\t\t[onPointerLeaveProp],\n\t\t);\n\n\t\tconst baseClasses =\n\t\t\t\"relative overflow-hidden inline-flex items-center justify-center min-w-[95px] h-[48px] px-4 text-sm font-medium select-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-current/40 disabled:pointer-events-none disabled:opacity-38\";\n\n\t\tconst variantClasses = {\n\t\t\tstandard: selected\n\t\t\t\t? \"bg-current/16 text-current hover:bg-current/20 active:bg-current/24\"\n\t\t\t\t: \"bg-transparent text-current hover:bg-current/8 active:bg-current/12\",\n\t\t\ttonal: selected\n\t\t\t\t? \"bg-m3-secondary-container text-m3-on-secondary-container hover:shadow-sm\"\n\t\t\t\t: \"bg-m3-surface-container-high text-m3-on-surface hover:bg-m3-surface-container-highest\",\n\t\t\tfilled: selected\n\t\t\t\t? \"bg-m3-primary text-m3-on-primary hover:shadow-sm\"\n\t\t\t\t: \"bg-m3-surface-container-highest text-m3-on-surface hover:bg-m3-surface-container-high\",\n\t\t};\n\n\t\tconst combinedClassName = cn(\n\t\t\tbaseClasses,\n\t\t\tvariantClasses[emphasis],\n\t\t\tcontext?.itemClassName,\n\t\t\tclassName,\n\t\t);\n\n\t\t// Symmetric expand: scaleX grows from center (both sides equally)\n\t\tconst animateConfig = React.useMemo(\n\t\t\t() => ({\n\t\t\t\tscaleX: pressExpand && isPressed ? 1 + pressExpandRatio : 1,\n\t\t\t\tborderRadius: isPressed\n\t\t\t\t\t? ToolbarToggleButtonRadiusTokens.pressedRadius\n\t\t\t\t\t: ToolbarToggleButtonRadiusTokens.pillRadius,\n\t\t\t}),\n\t\t\t[pressExpand, pressExpandRatio, isPressed],\n\t\t);\n\n\t\tconst transitionConfig = React.useMemo(\n\t\t\t() => ({\n\t\t\t\tscaleX: FAST_SPATIAL_SPRING,\n\t\t\t\tborderRadius: BUTTON_RADIUS_SPRING,\n\t\t\t}),\n\t\t\t[],\n\t\t);\n\n\t\tconst mainContent = (\n\t\t\t<span className=\"inline-flex items-center justify-center h-full gap-2\">\n\t\t\t\t{icon && (\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"shrink-0 inline-flex items-center justify-center\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\twidth: ToolbarToggleButtonTokens.IconSize,\n\t\t\t\t\t\t\theight: ToolbarToggleButtonTokens.IconSize,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{children &&\n\t\t\t\t\t(typeof children === \"string\" || typeof children === \"number\" ? (\n\t\t\t\t\t\t<span>{children}</span>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tchildren\n\t\t\t\t\t))}\n\t\t\t</span>\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\n\t\t\tconst childContent = child.props.children;\n\n\t\t\tconst innerChildContent = (\n\t\t\t\t<>\n\t\t\t\t\t{ripple && (\n\t\t\t\t\t\t<Ripple\n\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t<span className=\"inline-flex items-center justify-center h-full gap-2\">\n\t\t\t\t\t\t{icon ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclassName=\"shrink-0 inline-flex items-center justify-center\"\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: ToolbarToggleButtonTokens.IconSize,\n\t\t\t\t\t\t\t\t\t\theight: ToolbarToggleButtonTokens.IconSize,\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{icon}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{typeof childContent === \"string\" ||\n\t\t\t\t\t\t\t\ttypeof childContent === \"number\" ? (\n\t\t\t\t\t\t\t\t\t<span>{childContent}</span>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\tchildContent\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\tchildContent\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</>\n\t\t\t);\n\n\t\t\tconst strippedProps = { ...props } as Record<string, unknown>;\n\t\t\tfor (const key of MOTION_PROP_KEYS) delete strippedProps[key];\n\t\t\tdelete strippedProps.children;\n\n\t\t\treturn (\n\t\t\t\t<LazyMotion features={domMax} strict>\n\t\t\t\t\t<Slot\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-pressed={selected}\n\t\t\t\t\t\tclassName={combinedClassName}\n\t\t\t\t\t\tonPointerDown={\n\t\t\t\t\t\t\thandlePointerDown as unknown as React.PointerEventHandler<HTMLElement>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonPointerUp={\n\t\t\t\t\t\t\thandlePointerUp as unknown as React.PointerEventHandler<HTMLElement>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tonPointerLeave={\n\t\t\t\t\t\t\thandlePointerLeave as unknown as React.PointerEventHandler<HTMLElement>\n\t\t\t\t\t\t}\n\t\t\t\t\t\t{...(strippedProps as React.HTMLAttributes<HTMLElement>)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{React.cloneElement(child, { children: innerChildContent })}\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\ttype={type}\n\t\t\t\t\taria-pressed={selected}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tanimate={animateConfig}\n\t\t\t\t\ttransition={transitionConfig}\n\t\t\t\t\tinitial={false}\n\t\t\t\t\tstyle={{ transformOrigin: \"center\" }}\n\t\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\t\tonPointerUp={handlePointerUp}\n\t\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\t\tclassName={combinedClassName}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{ripple && (\n\t\t\t\t\t\t<Ripple\n\t\t\t\t\t\t\tripples={ripples}\n\t\t\t\t\t\t\tonRippleDone={removeRipple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{mainContent}\n\t\t\t\t</m.button>\n\t\t\t</LazyMotion>\n\t\t);\n\t},\n);\n\nToolbarToggleButton.displayName = \"ToolbarToggleButton\";\n","export const TooltipTokens = {\n\tPlainTooltip: {\n\t\tcontainerColor: \"var(--md-sys-color-inverse-surface)\", // #322F35 light / #E6E1E5 dark\n\t\ttextColor: \"var(--md-sys-color-inverse-on-surface)\", // #F5EFF7 light / #322F35 dark\n\t\tshape: \"rounded-[4px]\", // CornerExtraSmall = 4dp\n\t\tfont: \"text-[12px] font-normal tracking-[0.4px] leading-[16px]\", // BodySmall\n\t\theight: \"min-h-6\", // 24dp min height\n\t\tpadding: \"px-2 py-1\", // 8dp all sides\n\t\tmaxWidth: \"max-w-50\",\n\t},\n\tRichTooltip: {\n\t\tcontainerColor: \"var(--md-sys-color-surface-container)\",\n\t\televation: \"shadow-md\", // ElevationTokens.Level2 (approximate with shadow-md)\n\t\tshape: \"rounded-[12px]\", // CornerMedium = 12dp\n\t\tpaddingTop: \"pt-3\", // 12dp\n\t\tpaddingBottom: \"pb-2\", // 8dp\n\t\tpaddingX: \"px-4\", // 16dp\n\t\tmaxWidth: \"max-w-80\",\n\t\tsubheadColor: \"var(--md-sys-color-on-surface-variant)\",\n\t\tsubheadFont: \"text-[14px] font-medium leading-[20px]\", // TitleSmall\n\t\tbodyColor: \"var(--md-sys-color-on-surface-variant)\",\n\t\tbodyFont: \"text-[14px] font-normal leading-[20px]\", // BodyMedium\n\t\tactionColor: \"var(--md-sys-color-primary)\",\n\t\tactionFont: \"text-[14px] font-medium leading-[20px]\", // LabelLarge\n\t},\n} as const;\n","export interface TooltipCaretProps {\n\tside: \"top\" | \"bottom\" | \"left\" | \"right\";\n\twidth?: number;\n\theight?: number;\n\tcolor?: string;\n\tcustomPath?: string;\n\tclassName?: string;\n}\n\ntype Side = TooltipCaretProps[\"side\"];\n\nconst CENTER_H = \"left-1/2 -translate-x-1/2\";\nconst CENTER_V = \"top-1/2 -translate-y-1/2 flex items-center justify-center\";\n\nconst POSITION_BY_SIDE: Record<Side, (h: number) => string> = {\n\ttop: (h) => `bottom-[calc(-1*${h}px)] ${CENTER_H}`,\n\tbottom: (h) => `top-[calc(-1*${h}px)] ${CENTER_H}`,\n\tleft: (h) => `right-[calc(-1*${h}px)] ${CENTER_V}`,\n\tright: (h) => `left-[calc(-1*${h}px)] ${CENTER_V}`,\n};\n\nconst ROTATION: Record<Side, string> = {\n\ttop: \"180deg\",\n\tbottom: \"0deg\",\n\tleft: \"90deg\",\n\tright: \"-90deg\",\n};\n\nexport function TooltipCaretShape({\n\tside,\n\twidth = 16,\n\theight = 8,\n\tcolor,\n\tcustomPath,\n\tclassName = \"\",\n}: TooltipCaretProps) {\n\tconst isHorizontal = side === \"left\" || side === \"right\";\n\tconst path =\n\t\tcustomPath ?? `M 0,${height} L ${width / 2},0 L ${width},${height} Z`;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`absolute pointer-events-none z-[-1] ${POSITION_BY_SIDE[side](height)} ${className}`}\n\t\t\tstyle={{\n\t\t\t\twidth: isHorizontal ? height : width,\n\t\t\t\theight: isHorizontal ? width : height,\n\t\t\t\tcolor,\n\t\t\t}}\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<svg\n\t\t\t\twidth={width}\n\t\t\t\theight={height}\n\t\t\t\tviewBox={`0 0 ${width} ${height}`}\n\t\t\t\tfill=\"currentColor\"\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tstyle={{\n\t\t\t\t\ttransform: `rotate(${ROTATION[side]})`,\n\t\t\t\t\tdisplay: \"block\",\n\t\t\t\t\ttransformOrigin: \"center\",\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<path d={path} />\n\t\t\t</svg>\n\t\t</div>\n\t);\n}\n","import type { CSSProperties } from \"react\";\nimport { forwardRef } from \"react\";\nimport { TooltipTokens } from \"./tooltip.tokens\";\nimport type { PlainTooltipProps } from \"./tooltip.types\";\nimport { TooltipCaretShape } from \"./tooltip-caret-shape\";\n\nexport const PlainTooltip = forwardRef<HTMLDivElement, PlainTooltipProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\tcaret,\n\t\t\tclassName = \"\",\n\t\t\tmaxWidth,\n\t\t\tcontainerColor,\n\t\t\ttextColor,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tcontainerColor: tokenContainer,\n\t\t\ttextColor: tokenText,\n\t\t\tfont,\n\t\t\tpadding,\n\t\t\tshape,\n\t\t\theight,\n\t\t\tmaxWidth: tokenMaxWidth,\n\t\t} = TooltipTokens.PlainTooltip;\n\n\t\tconst style: CSSProperties = {\n\t\t\t...props.style,\n\t\t\tbackgroundColor: containerColor ?? tokenContainer,\n\t\t\tcolor: textColor ?? tokenText,\n\t\t\t...(maxWidth && { maxWidth }),\n\t\t};\n\n\t\tconst side = props[\"data-side\"] ?? \"top\";\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`relative inline-flex items-center box-border ${shape} ${font} ${padding} ${height} ${!maxWidth ? tokenMaxWidth : \"\"} ${className}`}\n\t\t\t\tstyle={style}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{caret?.enabled && (\n\t\t\t\t\t<TooltipCaretShape\n\t\t\t\t\t\tside={side}\n\t\t\t\t\t\twidth={caret.width}\n\t\t\t\t\t\theight={caret.height}\n\t\t\t\t\t\tcolor={style.backgroundColor as string}\n\t\t\t\t\t\tcustomPath={caret.customPath}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<span className=\"whitespace-normal text-start wrap-break-word\">\n\t\t\t\t\t{children}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nPlainTooltip.displayName = \"PlainTooltip\";\n","import type { CSSProperties } from \"react\";\nimport { forwardRef } from \"react\";\nimport { TooltipTokens } from \"./tooltip.tokens\";\nimport type { RichTooltipProps } from \"./tooltip.types\";\nimport { TooltipCaretShape } from \"./tooltip-caret-shape\";\n\nexport const RichTooltip = forwardRef<HTMLDivElement, RichTooltipProps>(\n\t(\n\t\t{\n\t\t\tchildren,\n\t\t\ttitle,\n\t\t\taction,\n\t\t\tcaret,\n\t\t\tclassName = \"\",\n\t\t\tmaxWidth,\n\t\t\tcolors = {},\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst {\n\t\t\tcontainerColor: tokenContainer,\n\t\t\televation,\n\t\t\tshape,\n\t\t\tpaddingTop,\n\t\t\tpaddingBottom,\n\t\t\tpaddingX,\n\t\t\tmaxWidth: tokenMaxWidth,\n\t\t\tsubheadColor,\n\t\t\tsubheadFont,\n\t\t\tbodyColor,\n\t\t\tbodyFont,\n\t\t\tactionColor,\n\t\t\tactionFont,\n\t\t} = TooltipTokens.RichTooltip;\n\n\t\tconst containerStyle: CSSProperties = {\n\t\t\t...props.style,\n\t\t\tbackgroundColor: colors.container ?? tokenContainer,\n\t\t\t...(maxWidth && { maxWidth }),\n\t\t};\n\n\t\tconst side = props[\"data-side\"] ?? \"top\";\n\n\t\tconst titleColor = colors.title ?? subheadColor;\n\t\tconst bodyColorResolved = colors.body ?? bodyColor;\n\t\tconst actionColorResolved = colors.action ?? actionColor;\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={`relative box-border flex flex-col ${shape} ${elevation} ${paddingTop} ${paddingBottom} ${paddingX} ${!maxWidth ? tokenMaxWidth : \"\"} ${className}`}\n\t\t\t\tstyle={containerStyle}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{caret?.enabled && (\n\t\t\t\t\t<TooltipCaretShape\n\t\t\t\t\t\tside={side}\n\t\t\t\t\t\twidth={caret.width}\n\t\t\t\t\t\theight={caret.height}\n\t\t\t\t\t\tcolor={containerStyle.backgroundColor as string}\n\t\t\t\t\t\tcustomPath={caret.customPath}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{title && (\n\t\t\t\t\t<div className={`mb-1 ${subheadFont}`} style={{ color: titleColor }}>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{children && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`whitespace-normal text-start wrap-break-word ${bodyFont}`}\n\t\t\t\t\t\tstyle={{ color: bodyColorResolved }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{action && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={`mt-2 flex min-h-9 flex-wrap items-center gap-2 ${actionFont}`}\n\t\t\t\t\t\tstyle={{ color: actionColorResolved }}\n\t\t\t\t\t>\n\t\t\t\t\t\t{action}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nRichTooltip.displayName = \"RichTooltip\";\n","import { useEffect, useLayoutEffect, useState } from \"react\";\nimport type { TooltipPlacement } from \"./tooltip.types\";\n\ninterface PositionState {\n\ttop: number;\n\tleft: number;\n\tactualSide: \"top\" | \"bottom\" | \"left\" | \"right\";\n}\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nconst VIEWPORT_PADDING = 8;\n\nconst useIsomorphicLayoutEffect =\n\ttypeof window !== \"undefined\" ? useLayoutEffect : useEffect;\n\nfunction resolveAutoPlacement(\n\tspaceTop: number,\n\tspaceBottom: number,\n\tspaceLeft: number,\n\tspaceRight: number,\n\ttooltipWidth: number,\n\ttooltipHeight: number,\n\tspacing: number,\n): Side {\n\tif (spaceTop >= tooltipHeight + spacing) return \"top\";\n\tif (spaceBottom >= tooltipHeight + spacing) return \"bottom\";\n\tif (spaceLeft >= tooltipWidth + spacing) return \"left\";\n\tif (spaceRight >= tooltipWidth + spacing) return \"right\";\n\treturn \"top\";\n}\n\nfunction resolveActualSide(\n\ttargetPlacement: Side,\n\tspaceTop: number,\n\tspaceBottom: number,\n\tspaceLeft: number,\n\tspaceRight: number,\n\ttooltipWidth: number,\n\ttooltipHeight: number,\n\tspacing: number,\n): Side {\n\tconst needsHeight = tooltipHeight + spacing;\n\tconst needsWidth = tooltipWidth + spacing;\n\n\tif (targetPlacement === \"top\")\n\t\treturn spaceTop < needsHeight && spaceBottom >= needsHeight\n\t\t\t? \"bottom\"\n\t\t\t: \"top\";\n\tif (targetPlacement === \"bottom\")\n\t\treturn spaceBottom < needsHeight && spaceTop >= needsHeight\n\t\t\t? \"top\"\n\t\t\t: \"bottom\";\n\tif (targetPlacement === \"left\")\n\t\treturn spaceLeft < needsWidth && spaceRight >= needsWidth\n\t\t\t? \"right\"\n\t\t\t: \"left\";\n\treturn spaceRight < needsWidth && spaceLeft >= needsWidth ? \"left\" : \"right\";\n}\n\nfunction calculateXY(\n\tside: Side,\n\tanchorRect: DOMRect,\n\ttooltipWidth: number,\n\ttooltipHeight: number,\n\tspacing: number,\n): { top: number; left: number } {\n\tconst anchorCenterX = anchorRect.left + anchorRect.width / 2;\n\tconst anchorCenterY = anchorRect.top + anchorRect.height / 2;\n\n\tif (side === \"top\")\n\t\treturn {\n\t\t\ttop: anchorRect.top - tooltipHeight - spacing,\n\t\t\tleft: anchorCenterX - tooltipWidth / 2,\n\t\t};\n\tif (side === \"bottom\")\n\t\treturn {\n\t\t\ttop: anchorRect.bottom + spacing,\n\t\t\tleft: anchorCenterX - tooltipWidth / 2,\n\t\t};\n\tif (side === \"left\")\n\t\treturn {\n\t\t\ttop: anchorCenterY - tooltipHeight / 2,\n\t\t\tleft: anchorRect.left - tooltipWidth - spacing,\n\t\t};\n\treturn {\n\t\ttop: anchorCenterY - tooltipHeight / 2,\n\t\tleft: anchorRect.right + spacing,\n\t};\n}\n\nfunction clampToViewport(\n\tside: Side,\n\ttop: number,\n\tleft: number,\n\ttooltipWidth: number,\n\ttooltipHeight: number,\n): { top: number; left: number } {\n\tconst isVertical = side === \"top\" || side === \"bottom\";\n\tconst viewportWidth = window.innerWidth;\n\tconst viewportHeight = window.innerHeight;\n\n\tif (isVertical) {\n\t\tleft = Math.max(\n\t\t\tVIEWPORT_PADDING,\n\t\t\tMath.min(left, viewportWidth - VIEWPORT_PADDING - tooltipWidth),\n\t\t);\n\t} else {\n\t\ttop = Math.max(\n\t\t\tVIEWPORT_PADDING,\n\t\t\tMath.min(top, viewportHeight - VIEWPORT_PADDING - tooltipHeight),\n\t\t);\n\t}\n\n\treturn { top, left };\n}\n\nexport function useTooltipPosition(\n\tanchorRef: React.RefObject<HTMLElement | null>,\n\ttooltipRef: React.RefObject<HTMLElement | null>,\n\tplacement: TooltipPlacement,\n\tspacing: number,\n\tisVisible: boolean,\n): PositionState {\n\tconst [position, setPosition] = useState<PositionState>({\n\t\ttop: -9999,\n\t\tleft: -9999,\n\t\tactualSide: placement === \"auto\" ? \"top\" : placement,\n\t});\n\n\tuseIsomorphicLayoutEffect(() => {\n\t\tif (!isVisible || !anchorRef.current || !tooltipRef.current) return;\n\n\t\tconst calculatePosition = () => {\n\t\t\tconst anchorEl = anchorRef.current;\n\t\t\tconst tooltipEl = tooltipRef.current;\n\t\t\tif (!anchorEl || !tooltipEl) return;\n\n\t\t\tconst anchorRect = anchorEl.getBoundingClientRect();\n\t\t\tconst tooltipRect = tooltipEl.getBoundingClientRect();\n\t\t\tconst tooltipWidth = tooltipRect.width;\n\t\t\tconst tooltipHeight = tooltipRect.height;\n\n\t\t\tconst spaceTop = anchorRect.top;\n\t\t\tconst spaceBottom = window.innerHeight - anchorRect.bottom;\n\t\t\tconst spaceLeft = anchorRect.left;\n\t\t\tconst spaceRight = window.innerWidth - anchorRect.right;\n\n\t\t\tconst targetSide: Side =\n\t\t\t\tplacement === \"auto\"\n\t\t\t\t\t? resolveAutoPlacement(\n\t\t\t\t\t\t\tspaceTop,\n\t\t\t\t\t\t\tspaceBottom,\n\t\t\t\t\t\t\tspaceLeft,\n\t\t\t\t\t\t\tspaceRight,\n\t\t\t\t\t\t\ttooltipWidth,\n\t\t\t\t\t\t\ttooltipHeight,\n\t\t\t\t\t\t\tspacing,\n\t\t\t\t\t\t)\n\t\t\t\t\t: placement;\n\n\t\t\tconst actualSide = resolveActualSide(\n\t\t\t\ttargetSide,\n\t\t\t\tspaceTop,\n\t\t\t\tspaceBottom,\n\t\t\t\tspaceLeft,\n\t\t\t\tspaceRight,\n\t\t\t\ttooltipWidth,\n\t\t\t\ttooltipHeight,\n\t\t\t\tspacing,\n\t\t\t);\n\n\t\t\tconst { top, left } = calculateXY(\n\t\t\t\tactualSide,\n\t\t\t\tanchorRect,\n\t\t\t\ttooltipWidth,\n\t\t\t\ttooltipHeight,\n\t\t\t\tspacing,\n\t\t\t);\n\t\t\tconst clamped = clampToViewport(\n\t\t\t\tactualSide,\n\t\t\t\ttop,\n\t\t\t\tleft,\n\t\t\t\ttooltipWidth,\n\t\t\t\ttooltipHeight,\n\t\t\t);\n\n\t\t\tsetPosition({ ...clamped, actualSide });\n\t\t};\n\n\t\tcalculatePosition();\n\n\t\twindow.addEventListener(\"resize\", calculatePosition);\n\t\twindow.addEventListener(\"scroll\", calculatePosition, true);\n\n\t\tconst resizeObserver = new ResizeObserver(calculatePosition);\n\t\tif (anchorRef.current) resizeObserver.observe(anchorRef.current);\n\t\tif (tooltipRef.current) resizeObserver.observe(tooltipRef.current);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"resize\", calculatePosition);\n\t\t\twindow.removeEventListener(\"scroll\", calculatePosition, true);\n\t\t\tresizeObserver.disconnect();\n\t\t};\n\t}, [isVisible, placement, spacing, anchorRef, tooltipRef]);\n\n\treturn position;\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport type { TooltipState, TooltipStateConfig } from \"./tooltip.types\";\n\nconst activeTooltipDismissals = new Set<() => void>();\n\nexport function useTooltipState(config?: TooltipStateConfig): TooltipState {\n\tconst {\n\t\tinitialVisible = false,\n\t\tisPersistent = false,\n\t\tduration = 1500,\n\t} = config ?? {};\n\n\tconst [isVisible, setIsVisible] = useState(initialVisible);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetIsVisible(false);\n\t\tactiveTooltipDismissals.delete(dismiss);\n\t}, []);\n\n\tconst show = useCallback(() => {\n\t\tfor (const otherDismiss of activeTooltipDismissals) {\n\t\t\tif (otherDismiss !== dismiss) otherDismiss();\n\t\t}\n\t\tsetIsVisible(true);\n\t\tactiveTooltipDismissals.add(dismiss);\n\t}, [dismiss]);\n\n\tuseEffect(() => {\n\t\tif (!isVisible || isPersistent) return;\n\t\tconst timeoutId = setTimeout(dismiss, duration);\n\t\treturn () => clearTimeout(timeoutId);\n\t}, [isVisible, isPersistent, duration, dismiss]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tactiveTooltipDismissals.delete(dismiss);\n\t\t};\n\t}, [dismiss]);\n\n\treturn { isVisible, show, dismiss };\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { AnimatePresence, m } from \"motion/react\";\nimport * as React from \"react\";\nimport {\n\tcloneElement,\n\ttype ReactElement,\n\tuseEffect,\n\tuseId,\n\tuseRef,\n\tuseState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { TooltipBoxProps } from \"./tooltip.types\";\nimport { useTooltipPosition } from \"./use-tooltip-position\";\nimport { useTooltipState } from \"./use-tooltip-state\";\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nconst TRANSFORM_ORIGIN: Record<Side, string> = {\n\ttop: \"50% 100%\",\n\tbottom: \"50% 0%\",\n\tleft: \"100% 50%\",\n\tright: \"0% 50%\",\n};\n\nconst MOTION_VARIANTS = {\n\tfull: {\n\t\thidden: { opacity: 0, scale: 0.8 },\n\t\tvisible: {\n\t\t\topacity: 1,\n\t\t\tscale: 1,\n\t\t\ttransition: {\n\t\t\t\topacity: { duration: 0.1, ease: \"easeOut\" },\n\t\t\t\tscale: { type: \"spring\", stiffness: 900, damping: 90, mass: 0.5 },\n\t\t\t},\n\t\t},\n\t\texit: {\n\t\t\topacity: 0,\n\t\t\tscale: 0.8,\n\t\t\ttransition: {\n\t\t\t\topacity: { duration: 0.075, ease: \"easeIn\" },\n\t\t\t\tscale: { duration: 0.1, ease: \"easeIn\" },\n\t\t\t},\n\t\t},\n\t},\n\treduced: {\n\t\thidden: { opacity: 0 },\n\t\tvisible: { opacity: 1, transition: { duration: 0.15 } },\n\t\texit: { opacity: 0, transition: { duration: 0.1 } },\n\t},\n} as const;\n\nfunction clearTimeout(ref: React.MutableRefObject<number | null>) {\n\tif (ref.current !== null) window.clearTimeout(ref.current);\n}\n\nexport function TooltipBox({\n\tchildren,\n\ttooltip,\n\tplacement = \"top\",\n\ttrigger = [\"hover\", \"focus\"],\n\tstate: controlledState,\n\tspacingFromAnchor = 4,\n\tdisabled = false,\n\tclassName = \"\",\n\tshowDelay = 400,\n\thideDelay = 200,\n\t\"aria-label\": ariaLabel,\n}: TooltipBoxProps) {\n\tconst internalState = useTooltipState();\n\tconst state = controlledState ?? internalState;\n\n\tconst anchorRef = useRef<HTMLDivElement>(null);\n\tconst tooltipRef = useRef<HTMLDivElement>(null);\n\tconst hoverTimeoutRef = useRef<number | null>(null);\n\tconst hideTimeoutRef = useRef<number | null>(null);\n\tconst pressTimeoutRef = useRef<number | null>(null);\n\n\tconst triggers = Array.isArray(trigger) ? trigger : [trigger];\n\n\tconst [mounted, setMounted] = useState(false);\n\tconst [hasHoverSupport, setHasHoverSupport] = useState(true);\n\tconst [prefersReducedMotion, setPrefersReducedMotion] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t\tsetHasHoverSupport(!window.matchMedia(\"(hover: none)\").matches);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tconst mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\t\tsetPrefersReducedMotion(mediaQuery.matches);\n\t\tconst onChange = (e: MediaQueryListEvent) =>\n\t\t\tsetPrefersReducedMotion(e.matches);\n\t\tmediaQuery.addEventListener(\"change\", onChange);\n\t\treturn () => mediaQuery.removeEventListener(\"change\", onChange);\n\t}, []);\n\n\tconst position = useTooltipPosition(\n\t\tanchorRef,\n\t\ttooltipRef,\n\t\tplacement,\n\t\tspacingFromAnchor,\n\t\tstate.isVisible,\n\t);\n\n\tconst canHover = !disabled && hasHoverSupport && triggers.includes(\"hover\");\n\tconst canClick = !disabled && triggers.includes(\"click\");\n\n\tconst handlePointerEnter = () => {\n\t\tif (!canHover) return;\n\t\tclearTimeout(hoverTimeoutRef);\n\t\tclearTimeout(hideTimeoutRef);\n\t\thoverTimeoutRef.current = window.setTimeout(() => state.show(), showDelay);\n\t};\n\n\tconst handlePointerLeave = () => {\n\t\tif (!canHover) return;\n\t\tclearTimeout(hoverTimeoutRef);\n\t\thideTimeoutRef.current = window.setTimeout(\n\t\t\t() => state.dismiss(),\n\t\t\thideDelay,\n\t\t);\n\t};\n\n\tconst handleFocus = () => {\n\t\tif (disabled || !triggers.includes(\"focus\")) return;\n\t\tstate.show();\n\t};\n\n\tconst handleBlur = (e: React.FocusEvent) => {\n\t\tif (disabled) return;\n\t\tconst focusMovedInside =\n\t\t\ttooltipRef.current &&\n\t\t\t(e.relatedTarget === tooltipRef.current ||\n\t\t\t\ttooltipRef.current.contains(e.relatedTarget as Node));\n\t\tif (focusMovedInside) return;\n\t\tstate.dismiss();\n\t};\n\n\tconst handlePointerDown = (e: React.PointerEvent) => {\n\t\tif (\n\t\t\tdisabled ||\n\t\t\t!triggers.includes(\"long-press\") ||\n\t\t\te.pointerType === \"mouse\"\n\t\t)\n\t\t\treturn;\n\t\tclearTimeout(pressTimeoutRef);\n\t\tpressTimeoutRef.current = window.setTimeout(() => state.show(), 500);\n\t};\n\n\tconst handleClick = () => {\n\t\tif (!canClick) return;\n\t\tif (state.isVisible) state.dismiss();\n\t\telse state.show();\n\t};\n\n\tconst handleKeyDown = (e: React.KeyboardEvent) => {\n\t\tif (disabled || !canClick) return;\n\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\te.preventDefault();\n\t\t\thandleClick();\n\t\t}\n\t};\n\n\tconst handleContextMenu = (e: React.MouseEvent) => {\n\t\tif (triggers.includes(\"long-press\") && state.isVisible) e.preventDefault();\n\t};\n\n\tconst handleTooltipPointerEnter = () => {\n\t\tif (!canHover) return;\n\t\tclearTimeout(hideTimeoutRef);\n\t};\n\n\tconst handleTooltipPointerLeave = () => {\n\t\tif (!canHover) return;\n\t\thideTimeoutRef.current = window.setTimeout(\n\t\t\t() => state.dismiss(),\n\t\t\thideDelay,\n\t\t);\n\t};\n\n\tuseEffect(() => {\n\t\tif (!state.isVisible) return;\n\t\tconst onKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.key === \"Escape\") {\n\t\t\t\tstate.dismiss();\n\t\t\t\tanchorRef.current?.focus();\n\t\t\t}\n\t\t};\n\t\tdocument.addEventListener(\"keydown\", onKeyDown);\n\t\treturn () => document.removeEventListener(\"keydown\", onKeyDown);\n\t}, [state.isVisible, state]);\n\n\tconst tooltipId = useId();\n\n\tconst tooltipWithProps = cloneElement(\n\t\ttooltip as ReactElement<{\n\t\t\t\"data-side\"?: Side;\n\t\t\tid?: string;\n\t\t\trole?: string;\n\t\t\tonBlur?: (e: React.FocusEvent) => void;\n\t\t}>,\n\t\t{\n\t\t\t\"data-side\": position.actualSide,\n\t\t\tid: tooltipId,\n\t\t\trole: \"tooltip\",\n\t\t\tonBlur: handleBlur,\n\t\t},\n\t);\n\n\tconst variants = prefersReducedMotion\n\t\t? MOTION_VARIANTS.reduced\n\t\t: MOTION_VARIANTS.full;\n\n\treturn (\n\t\t<>\n\t\t\t<Slot\n\t\t\t\tref={anchorRef}\n\t\t\t\tclassName={`inline-flex ${className}`}\n\t\t\t\tonPointerEnter={handlePointerEnter}\n\t\t\t\tonPointerLeave={handlePointerLeave}\n\t\t\t\tonFocus={handleFocus}\n\t\t\t\tonBlur={handleBlur}\n\t\t\t\tonPointerDown={handlePointerDown}\n\t\t\t\tonPointerUp={() => clearTimeout(pressTimeoutRef)}\n\t\t\t\tonPointerCancel={() => clearTimeout(pressTimeoutRef)}\n\t\t\t\tonContextMenu={handleContextMenu}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-describedby={state.isVisible ? tooltipId : undefined}\n\t\t\t>\n\t\t\t\t{React.isValidElement(children) ? children : <span>{children}</span>}\n\t\t\t</Slot>\n\n\t\t\t{mounted &&\n\t\t\t\tcreatePortal(\n\t\t\t\t\t<AnimatePresence mode=\"wait\">\n\t\t\t\t\t\t{state.isVisible && !disabled && (\n\t\t\t\t\t\t\t<m.div\n\t\t\t\t\t\t\t\tref={tooltipRef}\n\t\t\t\t\t\t\t\tinitial=\"hidden\"\n\t\t\t\t\t\t\t\tanimate=\"visible\"\n\t\t\t\t\t\t\t\texit=\"exit\"\n\t\t\t\t\t\t\t\tvariants={variants}\n\t\t\t\t\t\t\t\tonPointerEnter={handleTooltipPointerEnter}\n\t\t\t\t\t\t\t\tonPointerLeave={handleTooltipPointerLeave}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tposition: \"fixed\",\n\t\t\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\t\t\ttransformOrigin: TRANSFORM_ORIGIN[position.actualSide],\n\t\t\t\t\t\t\t\t\tzIndex: 50,\n\t\t\t\t\t\t\t\t\tpointerEvents: \"auto\",\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{tooltipWithProps}\n\t\t\t\t\t\t\t</m.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>,\n\t\t\t\t\tdocument.body,\n\t\t\t\t)}\n\t\t</>\n\t);\n}\n"]}