{"version":3,"sources":["../src/lib/utils.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/ripple.tsx","../src/ui/shared/touch-target.tsx","../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/render/shape-rendering.ts","../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/shared/state-layer.tsx","../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/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/buttons/icon-button/icon-button.tsx","../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/ui/badge.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/toolbar/toolbar-colors.ts","../src/ui/toolbar/toolbar-context.tsx","../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/buttons/button/button-tokens.ts","../src/ui/toolbar/toolbar-toggle-button.tsx"],"names":["jsx","React","React2","React3","React4","_a","React5","AnimatePresence","m","React6","DropdownMenu2","React7","itemPosition","jsxs","React8","React9","ContextMenu2","DropdownMenu3","React10","Sub","ContextMenu3","DropdownMenu4","SubTrigger","SubContent","Portal","React11","Fragment","React12","React13","React14","useReducedMotion","React15","React16","React17","React18","RippleItem","convex","React19","Slot","LazyMotion","domMax","React20","cva","cloneIconWithFill","ActivePill","HoverStateLayer","RippleLayer","IconContainer","React21","React22","React23","React24","React25","useRef","useEffect","React26","React27","IndeterminateSvg","DeterminateSvg","React28","useMotionValue","React29","React30","FlatLinearTrack","React31","WavyLinearTrack","animate","useAnimationFrame","React32","React33","React34","_b","DefaultSearchIcon","React35","ArrowBackIcon","React36","createPortal","React37","React38","React40","React41","React42","React43","React44","React45","React46","React47","useState","useScroll","useMotionValueEvent","cornerRadius","React48"],"mappings":"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","file":"navigation.mjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","/**\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","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","/**\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 * 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","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","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","/**\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","\"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","/**\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 { 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","/**\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","/**\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","/**\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 * 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","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","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 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"]}