react-material-expressive 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/LICENSE +21 -0
  3. package/README.md +286 -0
  4. package/dist/index.cjs +7014 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.d.cts +2068 -0
  7. package/dist/index.d.ts +2068 -0
  8. package/dist/index.js +6941 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/styles.css +2 -0
  11. package/dist/theme.css +187 -0
  12. package/docs/components/Amount.md +48 -0
  13. package/docs/components/Avatar.md +69 -0
  14. package/docs/components/AvatarStack.md +50 -0
  15. package/docs/components/Badge.md +50 -0
  16. package/docs/components/Blob.md +44 -0
  17. package/docs/components/Button.md +79 -0
  18. package/docs/components/ButtonGroup.md +46 -0
  19. package/docs/components/ButtonGroupConnected.md +62 -0
  20. package/docs/components/Card.md +52 -0
  21. package/docs/components/Checkbox.md +45 -0
  22. package/docs/components/Chips.md +77 -0
  23. package/docs/components/DatePicker.md +112 -0
  24. package/docs/components/Dialog.md +83 -0
  25. package/docs/components/Divider.md +48 -0
  26. package/docs/components/Dropdown.md +79 -0
  27. package/docs/components/FAB.md +63 -0
  28. package/docs/components/FABMenu.md +76 -0
  29. package/docs/components/Gallery.md +35 -0
  30. package/docs/components/Icon.md +36 -0
  31. package/docs/components/IconButton.md +69 -0
  32. package/docs/components/Img.md +52 -0
  33. package/docs/components/Layers.md +43 -0
  34. package/docs/components/Link.md +43 -0
  35. package/docs/components/List.md +87 -0
  36. package/docs/components/Loading.md +67 -0
  37. package/docs/components/LoadingIndicator.md +64 -0
  38. package/docs/components/MaterialSymbol.md +48 -0
  39. package/docs/components/MediaFrame.md +46 -0
  40. package/docs/components/Menu.md +149 -0
  41. package/docs/components/NavigationBar.md +78 -0
  42. package/docs/components/NavigationRail.md +105 -0
  43. package/docs/components/OverflowMenu.md +65 -0
  44. package/docs/components/Perspective.md +45 -0
  45. package/docs/components/Progress.md +83 -0
  46. package/docs/components/Radio.md +39 -0
  47. package/docs/components/Search.md +100 -0
  48. package/docs/components/Select.md +76 -0
  49. package/docs/components/Sheets.md +62 -0
  50. package/docs/components/Slider.md +89 -0
  51. package/docs/components/Snackbar.md +73 -0
  52. package/docs/components/SplitButton.md +75 -0
  53. package/docs/components/Stories.md +71 -0
  54. package/docs/components/Switch.md +40 -0
  55. package/docs/components/Table.md +67 -0
  56. package/docs/components/Tabs.md +67 -0
  57. package/docs/components/TextElement.md +37 -0
  58. package/docs/components/TextField.md +70 -0
  59. package/docs/components/TimePicker.md +83 -0
  60. package/docs/components/ToggleTheme.md +71 -0
  61. package/docs/components/Toolbar.md +102 -0
  62. package/docs/components/Tooltip.md +63 -0
  63. package/docs/components/TopAppBar.md +84 -0
  64. package/docs/components/Video.md +35 -0
  65. package/llms.txt +90 -0
  66. package/package.json +101 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/helpers.ts","../src/elements/common/_media.tsx","../src/elements/common/Icon.tsx","../src/components/badge/Badge.tsx","../src/components/badge/DotBadge.tsx","../src/components/badge/OnIconBadge.tsx","../src/components/avatar/Avatar.tsx","../src/components/avatar-stack/AvatarStack.tsx","../src/components/blob/Blob.tsx","../src/utils/_ripple.ts","../src/components/button/Button.tsx","../src/components/button/ButtonGroup.tsx","../src/components/button/ButtonGroupConnected.tsx","../src/components/button/ExtendedFAB.tsx","../src/components/button/FAB.tsx","../src/components/_useDismissable.ts","../src/components/_useOutsideClose.ts","../src/components/button/FABMenu.tsx","../src/components/button/IconButton.tsx","../src/components/menu/_context.ts","../src/components/menu/MenuDivider.tsx","../src/components/menu/MenuGroup.tsx","../src/components/menu/MenuItem.tsx","../src/components/menu/MenuLabel.tsx","../src/utils/_useIsomorphicLayoutEffect.ts","../src/components/menu/_useSubmenu.ts","../src/components/menu/MenuSub.tsx","../src/components/menu/Menu.tsx","../src/components/button/SplitButton.tsx","../src/components/cards/CardBody.tsx","../src/components/cards/CardFooter.tsx","../src/components/cards/CardHeader.tsx","../src/components/cards/Card.tsx","../src/components/chips/_CheckIcon.tsx","../src/components/chips/Chips.tsx","../src/components/data-table/TableBody.tsx","../src/components/data-table/TableCell.tsx","../src/components/data-table/TableHead.tsx","../src/components/data-table/TableHeaderCell.tsx","../src/components/data-table/TableRow.tsx","../src/components/data-table/TextContainer.tsx","../src/components/data-table/Table.tsx","../src/components/_useFocusTrap.ts","../src/components/dialogs/_context.ts","../src/components/dialogs/DialogBody.tsx","../src/components/dialogs/DialogFooter.tsx","../src/components/dialogs/DialogHeader.tsx","../src/components/dialogs/Dialog.tsx","../src/components/text-field/_fieldShared.tsx","../src/components/text-field/InputOutlined.tsx","../src/components/date-picker/_dateUtils.ts","../src/components/date-picker/_Calendar.tsx","../src/components/date-picker/DatePicker.tsx","../src/components/date-picker/DateRangePicker.tsx","../src/components/divider/Divider.tsx","../src/components/dropdown/Dropdown.tsx","../src/components/gallery/ImageRow.tsx","../src/components/gallery/Gallery.tsx","../src/utils/navigation.ts","../src/components/link/LinkBox.tsx","../src/components/link/LinkContainer.tsx","../src/components/lists/_context.ts","../src/components/lists/ListItem.tsx","../src/components/lists/List.tsx","../src/components/navigation-bar/_context.ts","../src/components/navigation-bar/NavBarItem.tsx","../src/components/navigation-bar/NavigationBar.tsx","../src/components/navigation-rail/_MenuGlyph.tsx","../src/components/navigation-rail/NavRailItem.tsx","../src/components/navigation-rail/NavigationRail.tsx","../src/components/overflow-menu/OverflowMenu.tsx","../src/components/perspective-image/PerspectiveCard.tsx","../src/components/perspective-image/PerspectiveImage.tsx","../src/elements/common/_Spinner.tsx","../src/components/progress-bar/_shapes.ts","../src/components/progress-bar/Circle.tsx","../src/components/progress-bar/_loadingIndicatorShapes.ts","../src/components/progress-bar/LoadingIndicator.tsx","../src/components/progress-bar/Progress.tsx","../src/components/search/SearchItem.tsx","../src/components/search/SearchInput.tsx","../src/components/search/Search.tsx","../src/utils/_useControlled.ts","../src/components/select/_selectShared.tsx","../src/components/select/SelectFilled.tsx","../src/components/select/SelectOutlined.tsx","../src/components/sheets/BottomSheet.tsx","../src/components/sheets/SideSheet.tsx","../src/components/sliders/_sliderSizes.ts","../src/components/sliders/Slider.tsx","../src/components/sliders/SliderDual.tsx","../src/components/snackbar/Snackbar.tsx","../src/components/snackbar/SnackbarWrapper.tsx","../src/components/stories/BusinessItem.tsx","../src/components/stories/UserItem.tsx","../src/components/stories/Stories.tsx","../src/components/tabs/TabsPrimary.tsx","../src/components/tabs/TabsSecondary.tsx","../src/components/text-field/InputFilled.tsx","../src/components/text-field/TextFieldFilled.tsx","../src/components/text-field/TextFieldOutlined.tsx","../src/components/time-picker/TimePicker.tsx","../src/utils/theme.ts","../src/components/toggle-theme/ToggleTheme.tsx","../src/components/toggle-theme/ToggleThemeMenu.tsx","../src/components/toolbar/DockedToolbar.tsx","../src/components/toolbar/FloatingToolbar.tsx","../src/components/tooltips/Tooltip.tsx","../src/components/top-app-bar/CenterAppBar.tsx","../src/components/top-app-bar/LargeAppBar.tsx","../src/components/top-app-bar/MediumAppBar.tsx","../src/components/top-app-bar/SmallAppBar.tsx","../src/components/top-app-bar/TopAppBar.tsx","../src/components/video/Video.tsx","../src/elements/common/Amount.tsx","../src/elements/common/Checkbox.tsx","../src/elements/common/MediaFrame.tsx","../src/elements/common/Img.tsx","../src/elements/common/Loading.tsx","../src/elements/common/MaterialSymbol.tsx","../src/elements/common/Radio.tsx","../src/elements/common/Switch.tsx","../src/elements/common/TextElement.tsx","../src/layers/Container.tsx","../src/layers/Section.tsx"],"names":["jsx","jsxs","useEffect","SIZES","useState","TOGGLE_COLORS","useContext","labelColor","useRef","Fragment","createContext","useId","FOCUSABLE","isValidElement","cloneElement","useCallback","CloseIcon","createPortal"],"mappings":"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","file":"index.js","sourcesContent":["import {clsx, type ClassValue} from \"clsx\";\nimport {extendTailwindMerge} from \"tailwind-merge\";\n\n// tailwind-merge must learn the library's custom theme scales; otherwise\n// class names like text-label-large (font-size) and text-on-primary (color)\n// land in the same conflict group and wrongly cancel each other.\nconst twMergeM3 = extendTailwindMerge({\n extend: {\n theme: {\n text: [\n \"display-large\",\n \"display-medium\",\n \"display-small\",\n \"headline-large\",\n \"headline-medium\",\n \"headline-small\",\n \"title-large\",\n \"title-medium\",\n \"title-small\",\n \"body-large\",\n \"body-medium\",\n \"body-small\",\n \"label-large\",\n \"label-medium\",\n \"label-small\",\n ],\n radius: [\n \"none\",\n \"extra-small\",\n \"small\",\n \"medium\",\n \"large\",\n \"large-increased\",\n \"extra-large\",\n \"extra-large-increased\",\n \"extra-extra-large\",\n \"full\",\n ],\n shadow: [\"mm-1\", \"mm-2\", \"mm-3\", \"mm-4\", \"mm-5\"],\n animate: [\n \"fade-in\",\n \"fade-out\",\n \"transition-top\",\n \"transition-bottom\",\n \"transition-left\",\n \"transition-right\",\n \"transition-bottom-out\",\n \"transition-left-out\",\n \"transition-right-out\",\n \"blob\",\n \"spin-lazy\",\n \"determinate\",\n \"indeterminate\",\n ],\n ease: [\"emphasized\", \"emphasized-decelerate\", \"emphasized-accelerate\"],\n },\n },\n});\n\n/** Merge class names with M3-aware Tailwind conflict resolution. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMergeM3(clsx(inputs));\n}\n\n/**\n * Structural type of a statically imported image (matches the object shape\n * produced by bundlers such as Next.js without depending on them).\n */\nexport interface StaticImageData {\n src: string;\n height: number;\n width: number;\n blurDataURL?: string;\n blurWidth?: number;\n blurHeight?: number;\n}\n\n/** Accepted source for image-like components. */\nexport type ImageSrc = string | StaticImageData;\n\n/** Resolve a plain URL from a string or StaticImageData source. */\nexport function getSrc(src?: ImageSrc | null): string | undefined {\n if (!src) return undefined;\n return typeof src === \"string\" ? src : src.src;\n}\n","// Internal media helper — NOT exported from any public barrel.\n// Centralizes the framework-agnostic media contract used by image-like\n// components (Avatar, Img, MediaFrame consumers, Stories items,\n// PerspectiveImage...): the consumer can inject its own media node, and the\n// library falls back to a native <img> with object-fit + hide-on-error.\nimport {CSSProperties, ReactNode, useEffect, useState, type JSX} from \"react\";\nimport {getSrc, type ImageSrc} from \"../../utils/helpers\";\n\nexport type ObjectFit = \"fill\" | \"contain\" | \"cover\" | \"none\" | \"scale-down\";\n\n/** Context handed to a `render` prop so custom media (e.g. a framework\n * image component) can reuse the resolved src and layout classes. */\nexport interface MediaRenderContext {\n alt: string;\n className: string;\n src?: string;\n style: CSSProperties;\n}\n\n/** Shared injection props for image-like components.\n * Priority: render > image > children > native <img>. */\nexport interface MediaInjectionProps {\n /** Fallback media node (lowest injection priority). */\n children?: ReactNode;\n /** Pre-built media node, e.g. `<Image .../>` from a framework. */\n image?: ReactNode;\n /** Full-control render prop; receives the resolved src and classes. */\n render?: (media: MediaRenderContext) => ReactNode;\n}\n\ninterface NativeImgProps {\n alt: string;\n className?: string;\n objectFit?: ObjectFit;\n src: string;\n style?: CSSProperties;\n}\n\n/** Native <img> that removes itself when the source fails to load, letting\n * the placeholder underneath show through. */\nfunction NativeImg({\n alt,\n className,\n objectFit = \"cover\",\n src,\n style,\n}: NativeImgProps): JSX.Element | null {\n const [errored, setErrored] = useState(false);\n\n useEffect(() => {\n setErrored(false);\n }, [src]);\n\n if (errored) return null;\n return (\n <img\n alt={alt}\n className={className}\n onError={() => setErrored(true)}\n src={src}\n style={{objectFit, ...style}}\n />\n );\n}\n\nexport interface MediaProps extends MediaInjectionProps {\n alt?: string;\n className?: string;\n objectFit?: ObjectFit;\n src?: ImageSrc | null;\n style?: CSSProperties;\n}\n\n/** Resolves the media node according to the injection priority. Returns\n * null when nothing can be rendered (caller decides the placeholder). */\nexport function Media({\n alt = \"\",\n children,\n className = \"\",\n image,\n objectFit = \"cover\",\n render,\n src,\n style,\n}: MediaProps): ReactNode {\n const resolvedSrc = getSrc(src);\n if (render) {\n return render({\n alt,\n className,\n src: resolvedSrc,\n style: {objectFit, ...style},\n });\n }\n if (image) return image;\n if (children) return children;\n if (!resolvedSrc) return null;\n return (\n <NativeImg\n alt={alt}\n className={className}\n objectFit={objectFit}\n src={resolvedSrc}\n style={style}\n />\n );\n}\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface IconProps {\n className?: string;\n /** Standalone icon slot. */\n icon?: ReactNode;\n /** Leading icon slot. */\n iconLeft?: ReactNode;\n /** Trailing icon slot. */\n iconRight?: ReactNode;\n /** Box size in px (M3 default 24). */\n size?: number;\n}\n\n/**\n * Icon slot helper. Wraps each provided icon in a fixed square box\n * (default 24px) so arbitrary icon nodes align with adjacent text.\n */\nfunction Icon({className, icon, iconLeft, iconRight, size = 24}: IconProps) {\n const box = cn(\n \"flex shrink-0 items-center justify-center leading-none\",\n className,\n );\n const style = {height: size, width: size};\n return (\n <>\n {iconLeft ? (\n <span className={box} style={style}>\n {iconLeft}\n </span>\n ) : null}\n {icon ? (\n <span className={box} style={style}>\n {icon}\n </span>\n ) : null}\n {iconRight ? (\n <span className={box} style={style}>\n {iconRight}\n </span>\n ) : null}\n </>\n );\n}\n\nexport {Icon};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface BadgeProps extends ComponentProps<\"div\"> {\n icon?: ReactNode;\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n /** Content fallback when no children are passed. */\n text?: ReactNode;\n}\n\n/** M3 large badge: shape full, error container, label-small, min 16px. */\nfunction Badge({\n children,\n className,\n icon,\n iconLeft,\n iconRight,\n text,\n ...props\n}: BadgeProps) {\n return (\n <div className={cn(\"badge\", className)} {...props}>\n <Icon iconLeft={iconLeft} size={12} />\n {children ?? text}\n <Icon icon={icon} iconRight={iconRight} size={12} />\n </div>\n );\n}\n\nexport {Badge};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type DotBadgeProps = ComponentProps<\"div\">;\n\n/** M3 small badge: 6px dot, error container. */\nfunction DotBadge({className, ...props}: DotBadgeProps) {\n return <div className={cn(\"dotBadge\", className)} {...props} />;\n}\n\nexport {DotBadge};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface OnIconBadgeProps extends ComponentProps<\"div\"> {\n /** Count fallback when no children are passed. */\n count?: ReactNode;\n}\n\n/**\n * Count badge anchored to the top-right corner of an icon. Place it inside\n * a relatively-positioned wrapper around the icon.\n */\nfunction OnIconBadge({children, className, count, ...props}: OnIconBadgeProps) {\n return (\n <div className={cn(\"badge onIconBadge\", className)} {...props}>\n {children ?? count}\n </div>\n );\n}\n\nexport {OnIconBadge};\n","import {CSSProperties, MouseEventHandler, ReactNode} from \"react\";\nimport {Media, type MediaInjectionProps} from \"../../elements/common/_media\";\nimport {cn, type ImageSrc} from \"../../utils/helpers\";\nimport {Badge} from \"../badge/Badge\";\nimport {DotBadge} from \"../badge/DotBadge\";\nimport {OnIconBadge} from \"../badge/OnIconBadge\";\n\nexport interface AvatarProps extends MediaInjectionProps {\n alt?: string;\n /** Show a large badge (top-right). */\n badge?: boolean;\n /** Class override for the badge (e.g. a different container color). */\n badgeColor?: string;\n badgeIcon?: ReactNode;\n badgeText?: string;\n className?: string;\n /** Show a small dot badge (top-right). */\n dotBadge?: boolean;\n height?: number;\n /** Initials (or any short text) shown when there is no image. */\n name?: string;\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** Fallback node when there is no image nor name. */\n placeholder?: ReactNode;\n radius?: number;\n /** Animated decorative ring (token-based gradient). */\n ring?: boolean;\n size?: number;\n /** Show a count badge overlapping the avatar. */\n smallBadge?: boolean;\n src?: ImageSrc;\n style?: CSSProperties;\n width?: number;\n}\n\nfunction PersonIcon() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={18}\n viewBox=\"0 0 24 24\"\n width={18}>\n <path d=\"M12 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8Zm0 2c-3.34 0-8 1.67-8 5v1h16v-1c0-3.33-4.66-5-8-5Z\" />\n </svg>\n );\n}\n\n/**\n * Avatar with optional badges and decorative ring. Media is injectable\n * (render > image > children) with a native <img> fallback; initials or a\n * placeholder icon show when there is no image.\n */\nfunction Avatar({\n alt,\n badge,\n badgeColor,\n badgeIcon,\n badgeText,\n children,\n className,\n dotBadge,\n height,\n image,\n name,\n onClick,\n placeholder,\n radius = 9999,\n render,\n ring,\n size = 40,\n smallBadge,\n src,\n style,\n width,\n}: AvatarProps) {\n const w = width ?? size;\n const h = height ?? size;\n\n return (\n <div className={cn(\"relative inline-flex\", className)} style={style}>\n <div\n className=\"relative z-10 flex items-center justify-center overflow-hidden bg-primary-container text-title-medium text-on-primary-container\"\n onClick={onClick}\n style={{borderRadius: radius, height: h, width: w}}>\n <span className=\"flex overflow-hidden px-1 text-center text-ellipsis whitespace-nowrap\">\n {name || placeholder || <PersonIcon />}\n </span>\n <Media\n alt={alt ?? (typeof name === \"string\" ? name : \"\")}\n className=\"absolute inset-0 size-full\"\n image={image}\n render={render}\n src={src}\n style={{borderRadius: radius}}>\n {children}\n </Media>\n </div>\n\n {badge ? (\n <span className=\"absolute -top-0.5 -right-0.5 z-20\">\n <Badge className={badgeColor} icon={badgeIcon} text={badgeText} />\n </span>\n ) : null}\n {dotBadge ? (\n <span className=\"absolute top-0 right-0 z-20\">\n <DotBadge className={badgeColor} />\n </span>\n ) : null}\n {smallBadge ? (\n <OnIconBadge className={cn(\"z-20\", badgeColor)} count={badgeText} />\n ) : null}\n\n {ring ? (\n <div\n aria-hidden\n className=\"absolute -top-1 -left-1 z-0 flex animate-spin-lazy bg-conic from-primary via-tertiary to-primary p-0.5\"\n style={{\n borderRadius: radius,\n height: h + 8,\n width: w + 8,\n }}>\n <div\n className=\"size-full bg-surface\"\n style={{borderRadius: radius}}\n />\n </div>\n ) : null}\n </div>\n );\n}\n\nexport {Avatar};\n","import {cn, type ImageSrc} from \"../../utils/helpers\";\nimport {Avatar} from \"../avatar/Avatar\";\n\nexport interface AvatarStackItem {\n alt?: string;\n height?: number;\n id: string;\n initials?: string;\n src?: ImageSrc;\n width?: number;\n}\n\nexport interface AvatarStackProps {\n avatars: AvatarStackItem[];\n className?: string;\n size?: number;\n}\n\n/** Overlapping avatar row with a surface ring and hover raise. */\nfunction AvatarStack({avatars, className, size = 40}: AvatarStackProps) {\n return (\n <div className={cn(\"flex flex-row -space-x-1\", className)}>\n {avatars.map(({alt, height, id, initials, src, width}) => (\n <div\n className=\"z-20 rounded-full ring-4 ring-surface transition-transform duration-[350ms] ease-[var(--md-sys-motion-spring-fast-spatial)] hover:z-30 hover:-translate-y-0.5 hover:scale-105\"\n key={id}>\n <Avatar\n alt={alt}\n height={height}\n name={initials}\n size={size}\n src={src}\n width={width}\n />\n </div>\n ))}\n </div>\n );\n}\n\nexport {AvatarStack};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface BlobProps {\n children?: ReactNode;\n className?: string;\n /** Background class (token-based), e.g. \"bg-tertiary/10\". */\n color?: string;\n /** Phase offset into the morph loop, in ms (stagger multiple blobs). */\n delay?: number;\n height?: number;\n /** Position classes; defaults to centered. */\n position?: string;\n width?: number;\n}\n\n/**\n * Decorative blurred blob with organic border-radius morphing. Position it\n * inside a relatively-positioned container.\n */\nfunction Blob({\n children,\n className,\n color,\n delay,\n height = 300,\n position,\n width = 300,\n}: BlobProps) {\n return (\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute z-0 flex animate-blob items-center justify-center rounded-full blur-[100px]\",\n position ?? \"top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n color ?? \"bg-primary/10 dark:bg-primary/15\",\n className,\n )}\n style={{\n // Negativo: un delay positivo deja el blob congelado como\n // círculo y pega un snap al vencer; el negativo lo arranca\n // ya avanzado en el loop (offset de fase).\n animationDelay: delay ? `${-delay}ms` : undefined,\n height,\n width,\n }}>\n {children}\n </div>\n );\n}\n\nexport {Blob};\n","// Internal: pointer-driven press ripple for state-layer hosts. Replicates\n// @material/web's ripple.ts: the radial surface grows from the pointer to\n// cover the host in 450ms (easing standard) while CSS handles the opacity\n// fades (105ms in, 375ms out) on the ::before layer. Not exported from the\n// public barrel.\nimport {useEffect} from \"react\";\n\nconst PRESS_GROW_MS = 450;\nconst INITIAL_ORIGIN_SCALE = 0.2;\nconst PADDING = 10;\nconst SOFT_EDGE_MINIMUM_SIZE = 75;\nconst SOFT_EDGE_CONTAINER_RATIO = 0.35;\nconst EASING_STANDARD = \"cubic-bezier(0.2, 0, 0, 1)\";\nconst HOSTS = \".state-layer, .btn, .iconBtn, .fab, .fabExtended, .chips\";\n\nlet installed = false;\nconst pressed = new WeakMap<Element, Animation>();\n\nfunction grow(event: PointerEvent) {\n if (event.button !== 0) return;\n const target = event.target as Element | null;\n const host = target?.closest?.(HOSTS);\n if (\n !host ||\n host.matches(\":disabled\") ||\n host.getAttribute(\"aria-disabled\") === \"true\"\n ) {\n return;\n }\n\n // @material/web ripple.ts geometry: the surface starts at 20% of the\n // largest dimension under the pointer and grows until it covers the\n // hypotenuse plus a soft edge.\n const rect = host.getBoundingClientRect();\n const maxDim = Math.max(rect.width, rect.height);\n const softEdgeSize = Math.max(\n SOFT_EDGE_CONTAINER_RATIO * maxDim,\n SOFT_EDGE_MINIMUM_SIZE,\n );\n const initialSize = Math.floor(maxDim * INITIAL_ORIGIN_SCALE);\n const finalSize =\n Math.hypot(rect.width, rect.height) + PADDING + softEdgeSize;\n const startX = event.clientX - rect.left - initialSize / 2;\n const startY = event.clientY - rect.top - initialSize / 2;\n const endX = (rect.width - finalSize) / 2;\n const endY = (rect.height - finalSize) / 2;\n\n pressed.get(host)?.cancel();\n pressed.set(\n host,\n host.animate(\n {\n backgroundSize: [\n `${initialSize}px ${initialSize}px`,\n `${finalSize}px ${finalSize}px`,\n ],\n backgroundPosition: [`${startX}px ${startY}px`, `${endX}px ${endY}px`],\n },\n {\n duration: PRESS_GROW_MS,\n easing: EASING_STANDARD,\n fill: \"forwards\",\n pseudoElement: \"::before\",\n },\n ),\n );\n}\n\n/**\n * Installs the (idempotent, delegated) ripple listener. Called by every\n * component that renders a state-layer host so the ripple works no matter\n * which subset of the library a consumer mounts.\n */\nexport function useRipple() {\n useEffect(() => {\n if (installed) return;\n installed = true;\n document.addEventListener(\"pointerdown\", grow, {passive: true});\n }, []);\n}\n","import {ComponentProps, ReactNode} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\n\nexport type ButtonVariant =\n | \"filled\"\n | \"tonal\"\n | \"outlined\"\n | \"elevated\"\n | \"text\";\n\n/** M3 Expressive button sizes: 32 / 40 / 56 / 96 / 136. */\nexport type ButtonSize = \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\";\n\n/** M3 Expressive button shapes: round (full) or square (per-size). */\nexport type ButtonShape = \"round\" | \"square\";\n\ninterface SizeConfig {\n /** .btn size class + symmetric padding (M3 Expressive spec). */\n classes: string;\n icon: number;\n /** Square-shape radius for the size; pressing morphs round↔square. */\n round: string;\n square: string;\n}\n\nconst SIZES: Record<ButtonSize, SizeConfig> = {\n xs: {\n classes: \"sizeXs px-3\",\n icon: 20,\n round: \"rounded-[16px] active:rounded-small\",\n square: \"rounded-medium active:rounded-small\",\n },\n s: {\n classes: \"sizeS px-4\",\n icon: 20,\n round: \"rounded-[20px] active:rounded-small\",\n square: \"rounded-medium active:rounded-small\",\n },\n m: {\n classes: \"sizeM px-6\",\n icon: 24,\n round: \"rounded-[28px] active:rounded-medium\",\n square: \"rounded-large active:rounded-medium\",\n },\n l: {\n classes: \"sizeL px-12\",\n icon: 32,\n round: \"rounded-[48px] active:rounded-large\",\n square: \"rounded-extra-large active:rounded-large\",\n },\n xl: {\n classes: \"sizeXl px-16\",\n icon: 40,\n round: \"rounded-[68px] active:rounded-large\",\n square: \"rounded-extra-large active:rounded-large\",\n },\n};\n\n/** Toggle colors (M3 Expressive buttons spec; the text variant has no\n * toggle — its color set ships no unselected/selected tokens). */\nconst TOGGLE_COLORS: Record<\n Exclude<ButtonVariant, \"text\">,\n {off: string; on: string}\n> = {\n elevated: {\n off: \"bg-surface-container-low text-primary\",\n on: \"bg-primary text-on-primary\",\n },\n filled: {\n off: \"bg-surface-container text-on-surface-variant\",\n on: \"bg-primary text-on-primary\",\n },\n tonal: {\n off: \"bg-secondary-container text-on-secondary-container\",\n on: \"bg-secondary text-on-secondary\",\n },\n outlined: {\n off: \"border-outline bg-transparent text-on-surface-variant\",\n on: \"border-transparent bg-inverse-surface text-inverse-on-surface\",\n },\n};\n\nexport interface ButtonProps extends ComponentProps<\"button\"> {\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n /** M3 Expressive toggle: selected/unselected colors per variant (the\n * text variant has no toggle) and the shape follows the selection\n * (unselected round, selected square) when `size` is set. Emits\n * aria-pressed, so connected button groups pick it up. */\n selected?: boolean;\n /** M3 Expressive shape: round (default) or square. Pressing morphs\n * to the opposite shape. */\n shape?: ButtonShape;\n /** M3 Expressive size (xs 32 / s 40 / m 56 / l 96 / xl 136) with\n * per-size label scale, icon, symmetric padding and square radius.\n * Default `s` (the spec's small, the default button size). */\n size?: ButtonSize;\n /** Label fallback when no children are passed. */\n text?: string;\n variant?: ButtonVariant;\n}\n\n/**\n * M3 Expressive button. Five sizes (xs 32 / s 40 / m 56 / l 96 / xl 136,\n * default `s`) with per-size label scale, icon, symmetric padding and\n * square radius; shape (round/square + pressed morph) and toggle\n * (selected) variants.\n */\nfunction Button({\n children,\n className,\n iconLeft,\n iconRight,\n selected,\n shape,\n size = \"s\",\n text,\n type = \"button\",\n variant = \"filled\",\n ...props\n}: ButtonProps) {\n useRipple();\n const sizeConfig = SIZES[size];\n const isToggle = selected !== undefined && variant !== \"text\";\n // Toggle shape follows selection (round → square); an explicit\n // `shape` prop wins.\n const resolvedShape: ButtonShape =\n shape ?? (isToggle && selected ? \"square\" : \"round\");\n\n return (\n <button\n aria-pressed={isToggle ? selected : undefined}\n className={cn(\n \"btn\",\n variant,\n sizeConfig.classes,\n sizeConfig[resolvedShape],\n isToggle &&\n !props.disabled &&\n TOGGLE_COLORS[variant as Exclude<ButtonVariant, \"text\">][\n selected ? \"on\" : \"off\"\n ],\n className,\n )}\n type={type}\n {...props}>\n <Icon iconLeft={iconLeft} size={sizeConfig.icon} />\n {children ?? text}\n <Icon iconRight={iconRight} size={sizeConfig.icon} />\n </button>\n );\n}\n\nexport {Button};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport type {ButtonSize} from \"./Button\";\n\n/* Spacing per size (md.comp.button-group.standard.<size>.between-space:\n * 18/12/8/8/8 — wider on small sizes to keep 48dp touch targets) plus the\n * press width-morph metrics consumed by the .btnGroup CSS. */\nconst GROUP_SIZES: Record<ButtonSize, string> = {\n xs: \"groupXs\",\n s: \"groupS\",\n m: \"groupM\",\n l: \"groupL\",\n xl: \"groupXl\",\n};\n\nexport interface ButtonGroupProps {\n /** Buttons or icon buttons (pass them the same `size`). */\n children?: ReactNode;\n className?: string;\n /** Accessible label for the group. */\n label?: string;\n /** M3 Expressive size — sets the spacing and press-morph metrics to\n * match the buttons inside. */\n size?: ButtonSize;\n}\n\n/**\n * M3 Expressive standard button group: an invisible container that spaces\n * its buttons (18/12/8/8/8 per size) and adds interaction between them —\n * pressing a button widens it while the buttons directly next to it\n * compress, on the shared 200ms emphasized morph. Buttons keep their own\n * colors, states and toggle behavior; avoid text and standard icon\n * buttons (no container treatment, per spec).\n */\nfunction ButtonGroup({\n children,\n className,\n label,\n size = \"s\",\n}: ButtonGroupProps) {\n return (\n <div\n aria-label={label}\n className={cn(\"btnGroup\", GROUP_SIZES[size], className)}\n role=\"group\">\n {children}\n </div>\n );\n}\n\nexport {ButtonGroup};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport type {ButtonSize} from \"./Button\";\n\n/* Corner system per size (md.comp.button-group.connected.<size> tokens):\n * inner 8/8/8/16/20 rest, 4/4/4/12/16 pressed, full selected; square\n * outer 4/8/8/16/20. Applied by the .btnGroupConnected CSS. */\nconst CONNECTED_SIZES: Record<ButtonSize, string> = {\n xs: \"connectedXs\",\n s: \"connectedS\",\n m: \"connectedM\",\n l: \"connectedL\",\n xl: \"connectedXl\",\n};\n\nexport interface ButtonGroupConnectedProps {\n /** Buttons or icon buttons with the same `size`; toggle buttons\n * (`selected`) drive the selection shape via aria-pressed. */\n children?: ReactNode;\n className?: string;\n /** Accessible label for the group. */\n label?: string;\n /** Outer corners: full (round) or the per-size square value. */\n shape?: \"round\" | \"square\";\n /** M3 Expressive size matching the buttons inside. */\n size?: ButtonSize;\n}\n\n/**\n * M3 Expressive connected button group: buttons joined by 2dp gaps where\n * the group controls the corners — outer edges keep the group shape\n * (full or square per size) and inner corners stay small (8/8/8/16/20),\n * sharpening while pressed (4/4/4/12/16) and rounding to full when a\n * toggle button is selected. Unlike the standard group there is no\n * interaction between neighbors. Successor of the segmented buttons.\n */\nfunction ButtonGroupConnected({\n children,\n className,\n label,\n shape = \"round\",\n size = \"s\",\n}: ButtonGroupConnectedProps) {\n return (\n <div\n aria-label={label}\n className={cn(\n \"btnGroupConnected\",\n CONNECTED_SIZES[size],\n shape === \"square\" ? \"connectedSquare\" : \"connectedRound\",\n className,\n )}\n role=\"group\">\n {children}\n </div>\n );\n}\n\nexport {ButtonGroupConnected};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\n\n/** M3E color styles: primary/secondary/tertiary = the *-container sets\n * (primary-container is the spec default). */\nexport type ExtendedFABVariant = \"primary\" | \"secondary\" | \"tertiary\";\n\n/** M3 Expressive extended FAB sizes: small 56 / medium 80 / large 96. */\nexport type ExtendedFABSize = \"small\" | \"medium\" | \"large\";\n\nconst SIZES: Record<ExtendedFABSize, {classes?: string; icon: number}> = {\n small: {icon: 24},\n medium: {classes: \"xfabMedium\", icon: 28},\n large: {classes: \"xfabLarge\", icon: 36},\n};\n\nexport interface ExtendedFABProps extends ComponentProps<\"button\"> {\n /** Leading icon (24/28/36px box per size). */\n icon?: ReactNode;\n /** M3 Expressive size (small 56 / medium 80 / large 96). */\n size?: ExtendedFABSize;\n /** Label fallback when no children are passed. */\n text?: string;\n variant?: ExtendedFABVariant;\n}\n\n/**\n * M3 Expressive extended FAB. Small (default): height 56, shape large,\n * title-medium label, icon 24, symmetric 16dp padding, gap 8. Medium 80\n * (large-increased, title-large, icon 28, padding 26, gap 12) and large\n * 96 (extra-large, headline-small, icon 36, padding 28, gap 16).\n * Elevation 3→4. (The surface color style is no longer recommended in M3\n * Expressive; the default is primary = primary-container.)\n */\nfunction ExtendedFAB({\n children,\n className,\n icon,\n size = \"small\",\n text,\n type = \"button\",\n variant = \"primary\",\n ...props\n}: ExtendedFABProps) {\n useRipple();\n return (\n <button\n className={cn(\"fabExtended\", variant, SIZES[size].classes, className)}\n type={type}\n {...props}>\n <Icon icon={icon} size={SIZES[size].icon} />\n {children ?? text}\n </button>\n );\n}\n\nexport {ExtendedFAB};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\n\nexport type FABSize = \"fab\" | \"fabMedium\" | \"fabLarge\";\n/** M3E color styles: primary/secondary/tertiary = the *-container sets\n * (primary-container is the spec default). */\nexport type FABVariant = \"primary\" | \"secondary\" | \"tertiary\";\n\nconst FAB_ICON_SIZE: Record<FABSize, number> = {\n fab: 24,\n fabMedium: 28,\n fabLarge: 36,\n};\n\nexport interface FABProps extends ComponentProps<\"button\"> {\n /** Icon node. 24px box (28 for fabMedium, 36 for fabLarge). */\n icon?: ReactNode;\n /** Container: 56 (fab) / 80 (fabMedium, default — \"most recommended\"\n * per the spec) / 96 (fabLarge). */\n size?: FABSize;\n variant?: FABVariant;\n}\n\n/**\n * M3 Expressive floating action button. Sizes 56/80/96 (default medium 80,\n * \"most recommended\"; the small 40 FAB and the surface color style are no\n * longer recommended in M3 Expressive) with shapes large/large-increased/\n * extra-large, elevation level 3 (level 4 on hover). Icon-only — pass an\n * accessible name (aria-label).\n */\nfunction FAB({\n children,\n className,\n icon,\n size = \"fabMedium\",\n type = \"button\",\n variant = \"primary\",\n ...props\n}: FABProps) {\n useRipple();\n return (\n <button\n className={cn(\"fab\", size !== \"fab\" && size, variant, className)}\n type={type}\n {...props}>\n <Icon icon={icon ?? children} size={FAB_ICON_SIZE[size]} />\n </button>\n );\n}\n\nexport {FAB};\n","// Internal: exit-animation lifecycle for overlays (Dialog, sheets, modal\n// drawer, Snackbar). Not exported from the public barrel.\nimport {useEffect, useState} from \"react\";\n\n/**\n * Keeps an overlay mounted while its exit animation plays. `exiting` is\n * true between close and unmount — apply the *-out animation then.\n * `duration` must match the exit animation length.\n */\nexport function useDismissable(\n open: boolean,\n duration = 200,\n): {exiting: boolean; mounted: boolean} {\n const [mounted, setMounted] = useState(open);\n const exiting = mounted && !open;\n\n useEffect(() => {\n if (open) {\n setMounted(true);\n return;\n }\n const timer = setTimeout(() => setMounted(false), duration);\n return () => clearTimeout(timer);\n }, [duration, open]);\n\n return {exiting, mounted};\n}\n","// Internal: close-on-outside-pointer for menus and popovers. Not exported\n// from the public barrel.\nimport {RefObject, useEffect} from \"react\";\n\nexport function useOutsideClose<T extends HTMLElement>(\n ref: RefObject<T | null>,\n onClose: (() => void) | undefined,\n enabled = true,\n): void {\n useEffect(() => {\n if (!enabled || !onClose) return;\n const handler = (event: PointerEvent) => {\n const element = ref.current;\n const target = event.target;\n if (!element || !(target instanceof Node)) return;\n if (element.contains(target)) return;\n // Submenus render in a portal (outside this ref) to escape the\n // surface clip — treat any open menu as \"inside\" so interacting\n // with a submenu doesn't dismiss its chain.\n if (target instanceof Element && target.closest('[role=\"menu\"]')) return;\n onClose();\n };\n document.addEventListener(\"pointerdown\", handler);\n return () => document.removeEventListener(\"pointerdown\", handler);\n }, [enabled, onClose, ref]);\n}\n","import {MouseEventHandler, ReactNode, useId, useRef, useState} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useOutsideClose} from \"../_useOutsideClose\";\n\n/** FAB menu color sets (md.comp.fab-menu tokens). */\nexport type FABMenuVariant = \"primary\" | \"secondary\" | \"tertiary\";\n\n/* Trigger colors: closed = the variant container (regular FAB look);\n * open = the saturated close button (primary/on-primary etc.). */\nconst TRIGGER_COLORS: Record<FABMenuVariant, {closed: string; open: string}> = {\n primary: {\n closed: \"bg-primary-container text-on-primary-container\",\n open: \"bg-primary text-on-primary\",\n },\n secondary: {\n closed: \"bg-secondary-container text-on-secondary-container\",\n open: \"bg-secondary text-on-secondary\",\n },\n tertiary: {\n closed: \"bg-tertiary-container text-on-tertiary-container\",\n open: \"bg-tertiary text-on-tertiary\",\n },\n};\n\nexport interface FABMenuItemProps {\n className?: string;\n /** Leading icon (24px box, spec menu-item.icon). */\n icon?: ReactNode;\n label?: ReactNode;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n}\n\n/** M3 Expressive FAB menu item: a medium-button pill (h 56, title-medium,\n * icon 24) colored by the parent FABMenu set. */\nfunction FABMenuItem({className, icon, label, onClick}: FABMenuItemProps) {\n return (\n <button\n className={cn(\"fabMenuItem state-layer\", className)}\n onClick={onClick}\n type=\"button\">\n {icon ? <Icon iconLeft={icon} size={24} /> : null}\n {label}\n </button>\n );\n}\n\nfunction CloseIcon() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={20}\n viewBox=\"0 0 24 24\"\n width={20}>\n <path d=\"M6.4 19 5 17.6l5.6-5.6L5 6.4 6.4 5l5.6 5.6L17.6 5 19 6.4 13.4 12l5.6 5.6-1.4 1.4-5.6-5.6Z\" />\n </svg>\n );\n}\n\nexport interface FABMenuLabels {\n /** aria-label for the trigger while open. Default \"Close menu\". */\n close?: string;\n /** aria-label for the trigger while closed. Default \"Open menu\". */\n open?: string;\n}\n\nconst FAB_MENU_LABELS: Required<FABMenuLabels> = {\n close: \"Close menu\",\n open: \"Open menu\",\n};\n\nexport interface FABMenuProps {\n /** Menu items (FABMenu.Item list), revealed above the FAB. */\n children?: ReactNode;\n className?: string;\n /** FAB icon while closed (24px box). */\n icon?: ReactNode;\n /** Customizable accessible names for the trigger. */\n labels?: FABMenuLabels;\n variant?: FABMenuVariant;\n}\n\n/**\n * M3 Expressive FAB menu: a 56dp FAB that morphs into a fully-round close\n * button (icon crossfades/rotates into an X, container saturates to the\n * set color) and reveals up to six menu-item pills above it, right-aligned\n * and staggered bottom-up (8dp to the FAB, 4dp between items). Items are\n * medium-button pills on the set's container color. Position the wrapper\n * yourself (e.g. fixed bottom-right with 16dp margins per spec).\n */\nfunction FABMenu({\n children,\n className,\n icon,\n labels,\n variant = \"primary\",\n}: FABMenuProps) {\n useRipple();\n const l = {...FAB_MENU_LABELS, ...labels};\n const [isOpen, setIsOpen] = useState(false);\n const wrapper = useRef<HTMLDivElement>(null);\n const menuId = useId();\n // 320ms covers the staggered exit (165ms max delay + 150ms animation).\n const {exiting, mounted} = useDismissable(isOpen, 320);\n\n useOutsideClose(wrapper, () => setIsOpen(false), isOpen);\n\n return (\n <div\n className={cn(\n \"fabMenu relative inline-flex flex-col items-end\",\n variant,\n className,\n )}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setIsOpen(false);\n }}\n ref={wrapper}>\n {mounted ? (\n <div\n className={cn(\n \"absolute bottom-full right-0 z-20 mb-2 flex w-max flex-col items-end gap-1\",\n exiting ? \"fabMenuListOut\" : \"fabMenuListIn\",\n )}\n id={menuId}\n onClick={() => setIsOpen(false)}>\n {children}\n </div>\n ) : null}\n <button\n aria-controls={mounted ? menuId : undefined}\n aria-expanded={isOpen}\n aria-label={isOpen ? l.close : l.open}\n className={cn(\n \"fab fabMenuTrigger\",\n isOpen ? \"rounded-[28px]\" : \"rounded-large\",\n TRIGGER_COLORS[variant][isOpen ? \"open\" : \"closed\"],\n )}\n onClick={() => setIsOpen((open) => !open)}\n type=\"button\">\n {/* Crossfade + rotation between the FAB icon and the X. */}\n <span className=\"grid place-items-center [&>*]:col-start-1 [&>*]:row-start-1\">\n <span\n aria-hidden\n className={cn(\n \"flex items-center justify-center transition-all duration-[350ms] ease-[var(--md-sys-motion-spring-fast-spatial)]\",\n isOpen ? \"rotate-90 opacity-0\" : \"opacity-100\",\n )}>\n <Icon icon={icon} size={24} />\n </span>\n <span\n aria-hidden\n className={cn(\n \"flex items-center justify-center transition-all duration-[350ms] ease-[var(--md-sys-motion-spring-fast-spatial)]\",\n isOpen ? \"opacity-100\" : \"-rotate-90 opacity-0\",\n )}>\n <CloseIcon />\n </span>\n </span>\n </button>\n </div>\n );\n}\n\nFABMenu.Item = FABMenuItem;\n\nexport {FABMenu};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\n\nexport type IconButtonVariant = \"filled\" | \"tonal\" | \"outlined\" | \"standard\";\n\n/** M3 Expressive icon button sizes: 32 / 40 / 56 / 96 / 136. */\nexport type IconButtonSize = \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\";\n\n/** M3 Expressive icon button shapes. */\nexport type IconButtonShape = \"round\" | \"square\";\n\n/** M3 Expressive icon button width: narrow / default / wide. */\nexport type IconButtonWidth = \"narrow\" | \"default\" | \"wide\";\n\ninterface SizeConfig {\n height: string;\n icon: number;\n /** Square-shape radius; pressing morphs round↔square. */\n round: string;\n square: string;\n widths: Record<IconButtonWidth, string>;\n}\n\nconst SIZES: Record<IconButtonSize, SizeConfig> = {\n xs: {\n height: \"h-8\",\n icon: 20,\n round: \"rounded-[16px] active:rounded-small\",\n square: \"rounded-medium active:rounded-small\",\n widths: {narrow: \"w-7\", default: \"w-8\", wide: \"w-10\"},\n },\n s: {\n height: \"h-10\",\n icon: 24,\n round: \"rounded-[20px] active:rounded-small\",\n square: \"rounded-medium active:rounded-small\",\n widths: {narrow: \"w-8\", default: \"w-10\", wide: \"w-13\"},\n },\n m: {\n height: \"h-14\",\n icon: 24,\n round: \"rounded-[28px] active:rounded-medium\",\n square: \"rounded-large active:rounded-medium\",\n widths: {narrow: \"w-12\", default: \"w-14\", wide: \"w-18\"},\n },\n l: {\n height: \"h-24\",\n icon: 32,\n round: \"rounded-[48px] active:rounded-large\",\n square: \"rounded-extra-large active:rounded-large\",\n widths: {narrow: \"w-16\", default: \"w-24\", wide: \"w-32\"},\n },\n xl: {\n height: \"h-34\",\n icon: 40,\n round: \"rounded-[68px] active:rounded-large\",\n square: \"rounded-extra-large active:rounded-large\",\n widths: {narrow: \"w-26\", default: \"w-34\", wide: \"w-46\"},\n },\n};\n\n/** Toggle colors (M3 Expressive icon-buttons spec; mw v0_192 predates the\n * Expressive update — filled/tonal unselected and tonal selected differ). */\nconst TOGGLE_COLORS: Record<IconButtonVariant, {off: string; on: string}> = {\n filled: {\n off: \"bg-surface-container text-on-surface-variant\",\n on: \"bg-primary text-on-primary\",\n },\n tonal: {\n off: \"bg-secondary-container text-on-secondary-container\",\n on: \"bg-secondary text-on-secondary\",\n },\n outlined: {\n off: \"border-outline bg-transparent text-on-surface-variant\",\n on: \"border-transparent bg-inverse-surface text-inverse-on-surface\",\n },\n standard: {\n off: \"text-on-surface-variant\",\n on: \"text-primary\",\n },\n};\n\nexport interface IconButtonProps extends ComponentProps<\"button\"> {\n /** Icon node (24px box by default). Children work as a fallback\n * slot. */\n icon?: ReactNode;\n /** M3 Expressive toggle: selected/unselected colors per variant; the\n * shape also flips (unselected round, selected square). */\n selected?: boolean;\n /** M3 Expressive shape: round (default) or square. Pressing morphs\n * to the opposite shape. */\n shape?: IconButtonShape;\n /** M3 Expressive size (xs 32 / s 40 / m 56 / l 96 / xl 136). Default\n * s — the classic 40x40 icon button. */\n size?: IconButtonSize;\n variant?: IconButtonVariant;\n /** M3 Expressive width: narrow / default / wide. */\n width?: IconButtonWidth;\n}\n\n/**\n * M3 icon button: 40x40 visual container (48x48 touch target), icon 24,\n * with the M3 Expressive size/shape/width and toggle (selected) variants.\n * Icon-only — remember to pass an accessible name (aria-label).\n */\nfunction IconButton({\n children,\n className,\n icon,\n selected,\n shape,\n size = \"s\",\n type = \"button\",\n variant = \"filled\",\n width = \"default\",\n ...props\n}: IconButtonProps) {\n useRipple();\n const sizeConfig = SIZES[size];\n const isToggle = selected !== undefined;\n // Toggle shape flips to the OPPOSITE on selection (DSDB: selected\n // round = the square radius, selected square = full) — also when an\n // explicit `shape` is passed.\n const base: IconButtonShape = shape ?? \"round\";\n const resolvedShape: IconButtonShape =\n isToggle && selected ? (base === \"round\" ? \"square\" : \"round\") : base;\n\n return (\n <button\n aria-pressed={isToggle ? selected : undefined}\n className={cn(\n \"iconBtn\",\n variant,\n sizeConfig.height,\n sizeConfig.widths[width],\n sizeConfig[resolvedShape],\n isToggle &&\n !props.disabled &&\n TOGGLE_COLORS[variant][selected ? \"on\" : \"off\"],\n className,\n )}\n type={type}\n {...props}>\n {/* 48x48 touch target for the sub-48 sizes */}\n {size === \"xs\" || size === \"s\" ? (\n <span\n aria-hidden\n className={cn(\"absolute\", size === \"xs\" ? \"-inset-2\" : \"-inset-1\")}\n />\n ) : null}\n <Icon icon={icon ?? children} size={sizeConfig.icon} />\n </button>\n );\n}\n\nexport {IconButton};\n","// Internal: lets Menu tell its items the color scheme (standard vs vibrant)\n// and how to dismiss the whole menu chain on activation. Submenus inherit\n// `closeAll` so a leaf anywhere closes the root. Not exported from barrels.\nimport {createContext} from \"react\";\n\nexport const MENU_NOOP = () => {};\n\nexport interface MenuContextValue {\n /** Tertiary-based scheme instead of standard (surface-based). */\n vibrant: boolean;\n /** Dismiss the entire menu chain (item activation). */\n closeAll: () => void;\n}\n\nexport const MenuContext = createContext<MenuContextValue>({\n vibrant: false,\n closeAll: MENU_NOOP,\n});\n","import {cn} from \"../../utils/helpers\";\n\nexport interface MenuDividerProps {\n className?: string;\n}\n\n/**\n * M3E vertical-menu divider: a 1px outline-variant rule inset 12dp,\n * separating groups within a single menu surface (the \"with divider\"\n * grouping). For separate group surfaces with a gap, use Menu.Group instead.\n */\nfunction MenuDivider({className}: MenuDividerProps) {\n return (\n <div\n className={cn(\"mx-3 my-0.5 h-px bg-outline-variant\", className)}\n role=\"separator\"\n />\n );\n}\n\nexport {MenuDivider};\n","import {ReactNode, useContext} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {MenuContext} from \"./_context\";\n\nexport interface MenuGroupProps {\n children?: ReactNode; // Menu.Item list (and nested Menu.Sub)\n className?: string;\n}\n\n/**\n * M3E vertical-menu group: a self-contained menu surface (corner-large,\n * surface-container-low / tertiary-container at elevation 3) holding a\n * cluster of items. Stack several inside a Menu and they render as separate\n * rounded surfaces with a 2dp gap — the \"with gap\" grouping, the spec's\n * alternative to a Menu.Divider (m3.material.io/components/menus anatomy\n * lists both \"Gap (optional)\" and \"Divider (optional)\"). First/last items\n * round their outer corner against this surface, exactly as in an ungrouped\n * menu (the inset state layer is concentric with the corner-large at 4dp).\n */\nfunction MenuGroup({children, className}: MenuGroupProps) {\n const {vibrant} = useContext(MenuContext);\n return (\n <div\n className={cn(\n \"flex flex-col overflow-hidden rounded-large py-0.5 shadow-mm-3\",\n vibrant\n ? \"bg-tertiary-container text-on-tertiary-container\"\n : \"bg-surface-container-low text-on-surface\",\n className,\n )}\n role=\"group\">\n {children}\n </div>\n );\n}\n\nexport {MenuGroup};\n","import {MouseEvent, MouseEventHandler, ReactNode, useContext} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {Badge} from \"../badge/Badge\";\nimport {MenuContext} from \"./_context\";\n\nexport interface MenuItemProps {\n /** Trailing error badge; pass a string for the count/label. */\n badge?: boolean | string;\n children?: ReactNode;\n className?: string;\n disabled?: boolean;\n /** Keep the menu open after activation (e.g. a multi-select toggle). */\n keepOpen?: boolean;\n label?: ReactNode;\n leftElement?: ReactNode;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n /** Trailing meta — shortcut text (label-large) or a 20px icon. */\n rightElement?: ReactNode;\n /** Selected: tertiary-container fill + corner-medium morph (M3E). */\n selected?: boolean;\n}\n\n/**\n * M3E vertical-menu item: 48 tall, inset state layer (44, corner\n * extra-small) with label-large, 20dp leading/trailing icons, 12dp\n * padding. First/last items round their outer corner toward the menu;\n * selected morphs the state layer to corner-medium with a tertiary fill.\n */\nfunction MenuItem({\n badge,\n children,\n className,\n disabled,\n keepOpen,\n label,\n leftElement,\n onClick,\n rightElement,\n selected,\n}: MenuItemProps) {\n useRipple();\n const {vibrant, closeAll} = useContext(MenuContext);\n\n const labelColor = selected\n ? vibrant\n ? \"text-on-tertiary\"\n : \"text-on-tertiary-container\"\n : vibrant\n ? \"text-on-tertiary-container\"\n : \"text-on-surface\";\n const iconColor = selected\n ? vibrant\n ? \"text-on-tertiary\"\n : \"text-on-tertiary-container\"\n : vibrant\n ? \"text-on-tertiary-container\"\n : \"text-on-surface-variant\";\n\n const handleClick = (event: MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!keepOpen) closeAll();\n };\n\n return (\n <button\n aria-disabled={disabled || undefined}\n className={cn(\n // The button IS the inset state layer. First/last items round\n // their outer corner to corner-medium (12) — concentric with\n // the menu's corner-large (16) at the 4dp inset; selected\n // morphs every corner to corner-medium with a tertiary fill.\n \"state-layer mx-1 my-0.5 flex h-11 items-center gap-2 px-3 text-left text-label-large first:rounded-t-medium last:rounded-b-medium disabled:cursor-not-allowed disabled:text-on-surface/38\",\n selected\n ? cn(\n \"rounded-medium\",\n vibrant ? \"bg-tertiary\" : \"bg-tertiary-container\",\n )\n : \"rounded-extra-small\",\n labelColor,\n !disabled && \"cursor-pointer\",\n className,\n )}\n disabled={disabled}\n onClick={handleClick}\n role=\"menuitem\"\n tabIndex={-1}\n type=\"button\">\n {leftElement ? (\n <span\n className={cn(\n \"flex h-5 w-5 shrink-0 items-center justify-center leading-none\",\n iconColor,\n disabled && \"text-on-surface/38\",\n )}>\n {leftElement}\n </span>\n ) : null}\n <span className=\"min-w-px flex-1\" data-menu-label>\n {label ?? children}\n </span>\n {badge || rightElement ? (\n <span\n className={cn(\n \"flex shrink-0 items-center gap-2 text-label-large\",\n iconColor,\n disabled && \"text-on-surface/38\",\n )}>\n {badge ? (\n <Badge text={typeof badge === \"string\" ? badge : \"\"} />\n ) : null}\n {rightElement}\n </span>\n ) : null}\n </button>\n );\n}\n\nexport {MenuItem};\n","import {ReactNode, useContext} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {MenuContext} from \"./_context\";\n\nexport interface MenuLabelProps {\n children?: ReactNode;\n className?: string;\n /** Optional 20px leading icon. */\n leftElement?: ReactNode;\n}\n\n/**\n * M3E vertical-menu section label: 32 tall, label-large in\n * on-surface-variant (standard) / on-tertiary-container (vibrant), 16dp\n * inline padding with a 6dp top pad — names the group that follows.\n */\nfunction MenuLabel({children, className, leftElement}: MenuLabelProps) {\n const {vibrant} = useContext(MenuContext);\n return (\n <div\n className={cn(\n \"flex min-h-8 items-center gap-2 px-4 pt-1.5 text-label-large\",\n vibrant ? \"text-on-tertiary-container\" : \"text-on-surface-variant\",\n className,\n )}\n role=\"presentation\">\n {leftElement ? (\n <span className=\"flex h-5 w-5 shrink-0 items-center justify-center leading-none\">\n {leftElement}\n </span>\n ) : null}\n <span className=\"min-w-px flex-1\">{children}</span>\n </div>\n );\n}\n\nexport {MenuLabel};\n","import {useEffect, useLayoutEffect} from \"react\";\n\n/**\n * `useLayoutEffect` that falls back to `useEffect` on the server. React warns\n * that `useLayoutEffect` does nothing during server rendering; this swap keeps\n * SSR output clean (the layout measurement only ever runs in the browser).\n * Internal — not exported from the public barrel.\n */\nexport const useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\n","// Internal: positions a submenu surface next to its trigger, in a portal,\n// so it can escape the parent menu's overflow clip. Places to the right,\n// flips left when it would overflow, shifts up to stay on screen, and\n// recomputes on scroll/resize. SSR-safe (no work until open on the client).\nimport {RefObject, useState} from \"react\";\nimport {useIsomorphicLayoutEffect} from \"../../utils/_useIsomorphicLayoutEffect\";\n\nexport interface SubmenuPosition {\n left: number;\n top: number;\n}\n\n/** Viewport margin kept around the floating submenu. */\nconst MARGIN = 8;\n\n// useLayoutEffect runs before paint, so the submenu is positioned on its\n// first painted frame (no flash) and stays focusable — unlike hiding it\n// with visibility, which would block the open-by-keyboard autofocus.\nexport function useSubmenuPosition(\n anchor: RefObject<HTMLElement | null>,\n floating: RefObject<HTMLElement | null>,\n open: boolean,\n): SubmenuPosition {\n const [pos, setPos] = useState<SubmenuPosition>({left: 0, top: 0});\n\n useIsomorphicLayoutEffect(() => {\n if (!open) return;\n const compute = () => {\n const a = anchor.current?.getBoundingClientRect();\n if (!a) return;\n const f = floating.current?.getBoundingClientRect();\n const width = f?.width || 224;\n const height = f?.height || 0;\n\n // Right of the trigger; flip to the left edge if it overflows.\n let left = a.right;\n if (left + width > window.innerWidth - MARGIN) {\n const flipped = a.left - width;\n left =\n flipped >= MARGIN\n ? flipped\n : Math.max(MARGIN, window.innerWidth - MARGIN - width);\n }\n // Align tops; shift up to keep the bottom on screen.\n let top = a.top;\n if (top + height > window.innerHeight - MARGIN) {\n top = Math.max(MARGIN, window.innerHeight - MARGIN - height);\n }\n setPos({left, top});\n };\n\n compute();\n window.addEventListener(\"scroll\", compute, true);\n window.addEventListener(\"resize\", compute);\n return () => {\n window.removeEventListener(\"scroll\", compute, true);\n window.removeEventListener(\"resize\", compute);\n };\n }, [anchor, floating, open]);\n\n return pos;\n}\n","import {\n KeyboardEvent as ReactKeyboardEvent,\n ReactNode,\n useContext,\n useRef,\n useState,\n} from \"react\";\nimport {createPortal} from \"react-dom\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {MenuContext} from \"./_context\";\nimport {Menu} from \"./Menu\";\nimport {useSubmenuPosition} from \"./_useSubmenu\";\n\nexport interface MenuSubProps {\n /** Submenu content (Menu.Item / Menu.Divider / nested Menu.Sub). */\n children?: ReactNode;\n className?: string;\n disabled?: boolean;\n label?: ReactNode;\n leftElement?: ReactNode;\n}\n\n/* Hover-intent delays (open slightly lazy, close lazier so the pointer can\n * travel from the trigger to the submenu without it collapsing). */\nconst HOVER_OPEN_MS = 120;\nconst HOVER_CLOSE_MS = 220;\n\nfunction ChevronRight() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={20}\n viewBox=\"0 0 24 24\"\n width={20}>\n <path d=\"M9.5 7 14.5 12 9.5 17z\" />\n </svg>\n );\n}\n\n/**\n * Submenu: a trigger item (trailing chevron) that opens a nested {@link\n * Menu} to its side. The submenu renders in a portal so it escapes the\n * parent surface's clip; it opens on hover (intent) or Right/Enter, closes\n * on Left/Escape (focus returns to the trigger) and a leaf activation\n * dismisses the whole chain (inherited closeAll). The trigger keeps the\n * on-surface state layer while open (the M3E active state).\n */\nfunction MenuSub({\n children,\n className,\n disabled,\n label,\n leftElement,\n}: MenuSubProps) {\n useRipple();\n const {vibrant} = useContext(MenuContext);\n const [open, setOpen] = useState(false);\n const [keyboard, setKeyboard] = useState(false);\n const trigger = useRef<HTMLButtonElement>(null);\n const floating = useRef<HTMLDivElement>(null);\n const timer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const pos = useSubmenuPosition(trigger, floating, open);\n\n const clear = () => timer.current && clearTimeout(timer.current);\n const hoverOpen = () => {\n clear();\n timer.current = setTimeout(() => {\n setKeyboard(false);\n setOpen(true);\n }, HOVER_OPEN_MS);\n };\n const hoverClose = () => {\n clear();\n timer.current = setTimeout(() => setOpen(false), HOVER_CLOSE_MS);\n };\n const openByKey = () => {\n clear();\n setKeyboard(true);\n setOpen(true);\n };\n\n const labelColor = vibrant ? \"text-on-tertiary-container\" : \"text-on-surface\";\n const iconColor = vibrant\n ? \"text-on-tertiary-container\"\n : \"text-on-surface-variant\";\n\n const onKeyDown = (event: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (\n event.key === \"ArrowRight\" ||\n event.key === \"Enter\" ||\n event.key === \" \"\n ) {\n event.preventDefault();\n event.stopPropagation();\n openByKey();\n }\n };\n\n return (\n <>\n <button\n aria-disabled={disabled || undefined}\n aria-expanded={open}\n aria-haspopup=\"menu\"\n className={cn(\n \"state-layer mx-1 my-0.5 flex h-11 items-center gap-2 rounded-extra-small px-3 text-left text-label-large first:rounded-t-medium last:rounded-b-medium disabled:cursor-not-allowed disabled:text-on-surface/38\",\n open && (vibrant ? \"bg-on-tertiary-container/8\" : \"bg-on-surface/8\"),\n labelColor,\n !disabled && \"cursor-pointer\",\n className,\n )}\n disabled={disabled}\n onClick={() => (open ? setOpen(false) : openByKey())}\n onKeyDown={onKeyDown}\n onMouseEnter={disabled ? undefined : hoverOpen}\n onMouseLeave={disabled ? undefined : hoverClose}\n ref={trigger}\n role=\"menuitem\"\n tabIndex={-1}\n type=\"button\">\n {leftElement ? (\n <span\n className={cn(\n \"flex h-5 w-5 shrink-0 items-center justify-center leading-none\",\n iconColor,\n disabled && \"text-on-surface/38\",\n )}>\n {leftElement}\n </span>\n ) : null}\n <span className=\"min-w-px flex-1\" data-menu-label>\n {label}\n </span>\n <span\n className={cn(\n \"flex h-5 w-5 shrink-0 items-center justify-center\",\n iconColor,\n disabled && \"text-on-surface/38\",\n )}>\n <ChevronRight />\n </span>\n </button>\n {open && typeof document !== \"undefined\"\n ? createPortal(\n <div\n className=\"fixed z-50\"\n onMouseEnter={clear}\n onMouseLeave={hoverClose}\n ref={floating}\n style={{left: pos.left, top: pos.top}}>\n <Menu\n autoFocus={keyboard}\n onClose={() => {\n setOpen(false);\n trigger.current?.focus();\n }}\n submenu>\n {children}\n </Menu>\n </div>,\n document.body,\n )\n : null}\n </>\n );\n}\n\nexport {MenuSub};\n","import {\n Children,\n isValidElement,\n KeyboardEvent as ReactKeyboardEvent,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useRef,\n} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {MENU_NOOP, MenuContext} from \"./_context\";\nimport {MenuDivider} from \"./MenuDivider\";\nimport {MenuGroup} from \"./MenuGroup\";\nimport {MenuItem} from \"./MenuItem\";\nimport {MenuLabel} from \"./MenuLabel\";\nimport {MenuSub} from \"./MenuSub\";\n\nexport interface MenuProps {\n /** Move focus to the first item on open (default true; submenus opened\n * by hover pass false so the pointer keeps control). */\n autoFocus?: boolean;\n children?: ReactNode;\n className?: string;\n /** True while the close animation plays (from useDismissable). */\n exiting?: boolean;\n /** Id for the role=\"menu\" element so a trigger can aria-controls it. */\n id?: string;\n /** Dismiss this menu level — items use it, Escape/Tab/ArrowLeft too. */\n onClose?: () => void;\n /** Set by Menu.Sub: this is a submenu, so it inherits the chain's\n * closeAll and ArrowLeft returns to the trigger. */\n submenu?: boolean;\n /** Reveal upward instead of downward (anchored above the trigger). */\n up?: boolean;\n /** Vibrant (tertiary-based) scheme; inherited by submenus. */\n vibrant?: boolean;\n}\n\n/* Time window to accumulate typeahead keystrokes (matches @material/web). */\nconst TYPEAHEAD_MS = 200;\n\n/**\n * M3 Expressive vertical menu surface and behaviour (anchorless — the host\n * positions it): corner-large container, surface-container-low / tertiary\n * (vibrant) at elevation 3, inset state-layer items, and WAI-ARIA menu\n * keyboard (Arrow/Home/End/typeahead/Escape, Left/Right for submenus).\n * Compose with Menu.Item, Menu.Sub, Menu.Label and Menu.Divider.\n */\nfunction Menu({\n autoFocus = true,\n children,\n className,\n exiting,\n id,\n onClose,\n submenu,\n up,\n vibrant,\n}: MenuProps) {\n const surface = useRef<HTMLDivElement>(null);\n const typeahead = useRef({buffer: \"\", time: 0});\n const parent = useContext(MenuContext);\n\n // Submenus inherit the chain's closeAll (so a leaf closes the whole\n // chain) and the parent's scheme; the root uses its own onClose.\n const closeAll = submenu ? parent.closeAll : (onClose ?? MENU_NOOP);\n const scheme = vibrant ?? parent.vibrant;\n\n // Gap grouping: when the menu's children are Menu.Group surfaces, the\n // outer becomes a transparent stack with a 2dp gap (each group carries\n // its own surface, elevation and rounded corners) instead of being the\n // single surface itself.\n const grouped = Children.toArray(children).some(\n (child) => isValidElement(child) && child.type === MenuGroup,\n );\n\n const close = useCallback(() => onClose?.(), [onClose]);\n\n /** Current-level, enabled menu items (skips nested submenu contents). */\n const items = useCallback((): HTMLElement[] => {\n const root = surface.current;\n if (!root) return [];\n return [...root.querySelectorAll<HTMLElement>('[role=\"menuitem\"]')].filter(\n (el) =>\n el.getAttribute(\"aria-disabled\") !== \"true\" &&\n el.closest('[role=\"menu\"]') === root,\n );\n }, []);\n\n // Focus moves into the menu on open so the keyboard works. A root menu\n // (Dropdown / overflow / theme) focuses its SURFACE, so nothing is\n // pre-highlighted and the first ArrowDown/ArrowUp lands on the first/last\n // item — matches @material/web's default LIST_ROOT focus (and stops the\n // first ArrowDown from skipping to the second item). A submenu opened by\n // keyboard lands on its first item (WAI-ARIA submenu); a hover submenu\n // passes autoFocus=false so the pointer keeps control.\n useEffect(() => {\n if (exiting || !autoFocus) return;\n if (submenu) items()[0]?.focus();\n else surface.current?.focus();\n }, [autoFocus, exiting, items, submenu]);\n\n const focusAt = (list: HTMLElement[], index: number) => {\n const next = (index + list.length) % list.length;\n list[next]?.focus();\n };\n\n const onKeyDown = (event: ReactKeyboardEvent<HTMLDivElement>) => {\n // Only the menu level that owns the focused item reacts — otherwise\n // a key pressed inside a submenu would also move the parent's focus.\n const active = document.activeElement as HTMLElement | null;\n if (active && active.closest('[role=\"menu\"]') !== surface.current) return;\n const list = items();\n const current = active ? list.indexOf(active) : -1;\n switch (event.key) {\n case \"ArrowDown\":\n // No current item (surface focused) → first; else next.\n event.preventDefault();\n focusAt(list, current < 0 ? 0 : current + 1);\n break;\n case \"ArrowUp\":\n // No current item (surface focused) → last; else previous.\n event.preventDefault();\n focusAt(list, current < 0 ? list.length - 1 : current - 1);\n break;\n case \"Home\":\n event.preventDefault();\n list[0]?.focus();\n break;\n case \"End\":\n event.preventDefault();\n list[list.length - 1]?.focus();\n break;\n case \"ArrowLeft\":\n // Close a submenu back to its trigger (root ignores it).\n if (submenu) {\n event.preventDefault();\n close();\n }\n break;\n case \"Escape\":\n event.preventDefault();\n close();\n break;\n case \"Tab\":\n close();\n break;\n default: {\n if (\n event.key.length !== 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey\n )\n return;\n const now = Date.now();\n const stale = now - typeahead.current.time > TYPEAHEAD_MS;\n const buffer =\n (stale ? \"\" : typeahead.current.buffer) + event.key.toLowerCase();\n typeahead.current = {buffer, time: now};\n // Match the visible label only — el.textContent would also\n // include the leading icon's ligature text and any trailing\n // shortcut, so typing the label's start would miss.\n const labelOf = (el: HTMLElement) =>\n ((el.querySelector(\"[data-menu-label]\") ?? el).textContent ?? \"\")\n .trim()\n .toLowerCase();\n const match = list.find((el) => labelOf(el).startsWith(buffer));\n match?.focus();\n }\n }\n };\n\n return (\n <MenuContext.Provider value={{vibrant: scheme, closeAll}}>\n <div\n className={cn(\n // outline-none: the surface is focusable (tabIndex -1) so a\n // root menu can focus it on open without highlighting any\n // item — it must never show a focus ring of its own.\n \"z-50 flex w-max min-w-[112px] max-w-[280px] flex-col outline-none [--menu-clip-bleed:-24px]\",\n grouped\n ? // Transparent stack: each Menu.Group is its own\n // surface, separated by a 2dp gap. overflow-visible\n // keeps the groups' elevation shadows from being\n // rectangular-clipped (the clip-path reveal bleeds\n // -24px to give those shadows the same room).\n \"gap-0.5 overflow-visible\"\n : // Single surface (the common case).\n cn(\n \"max-h-[310px] overflow-hidden overflow-y-auto rounded-large py-0.5 shadow-mm-3\",\n scheme\n ? \"bg-tertiary-container text-on-tertiary-container\"\n : \"bg-surface-container-low text-on-surface\",\n ),\n up\n ? exiting\n ? \"animate-menu-out-up\"\n : \"animate-menu-in-up\"\n : exiting\n ? \"animate-menu-out\"\n : \"animate-menu-in\",\n className,\n )}\n id={id}\n onKeyDown={onKeyDown}\n ref={surface}\n role=\"menu\"\n tabIndex={-1}>\n {children}\n </div>\n </MenuContext.Provider>\n );\n}\n\nMenu.Item = MenuItem;\nMenu.Sub = MenuSub;\nMenu.Group = MenuGroup;\nMenu.Label = MenuLabel;\nMenu.Divider = MenuDivider;\n\nexport {Menu};\n","import {MouseEventHandler, ReactNode, useEffect, useRef, useState} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useOutsideClose} from \"../_useOutsideClose\";\nimport {Menu} from \"../menu/Menu\";\nimport {MenuItem} from \"../menu/MenuItem\";\nimport type {ButtonSize} from \"./Button\";\n\n/** Split buttons have no text variant (M3 Expressive spec). */\nexport type SplitButtonVariant = \"elevated\" | \"filled\" | \"tonal\" | \"outlined\";\n\ninterface SizeConfig {\n /** .btn size class (shared metrics with Button). */\n btn: string;\n /** Trailing menu icon size (m3 split-button trailing-button.icon). */\n caret: number;\n /** Optical menu icon offset while unselected (spec measurements). */\n caretOffset: string;\n /** Leading button icon size (same as Button). */\n icon: number;\n /** Leading button paddings + inner corner rest/hover/focus/press. */\n leading: string;\n /** Outer pill corners as real px (half the height) — 9999px would\n * crush the sibling inner corner on the same edge and snap instead\n * of animating. */\n pillL: string;\n pillR: string;\n /** Trailing button paddings (square-ish per token spaces). */\n trailingPad: string;\n /** Trailing inner corner rest/hover/focus/press (while closed). */\n trailingCorners: string;\n}\n\n/* Inner corners per size: rest 4/4/4/8/12 morphing to 8/12/12/20/20 on\n * hover/focus/press (md.comp.split-button.<size>.inner-corner tokens). */\nconst SIZES: Record<ButtonSize, SizeConfig> = {\n xs: {\n btn: \"sizeXs\",\n caret: 22,\n caretOffset: \"-translate-x-px\",\n icon: 20,\n pillL: \"rounded-l-[16px]\",\n pillR: \"rounded-r-[16px]\",\n leading:\n \"pl-3 pr-2.5 rounded-r-extra-small hover:rounded-r-small focus-visible:rounded-r-small active:rounded-r-small\",\n trailingPad: \"px-[13px]\",\n trailingCorners:\n \"rounded-l-extra-small hover:rounded-l-small focus-visible:rounded-l-small active:rounded-l-small\",\n },\n s: {\n btn: \"sizeS\",\n caret: 22,\n caretOffset: \"-translate-x-px\",\n icon: 20,\n pillL: \"rounded-l-[20px]\",\n pillR: \"rounded-r-[20px]\",\n leading:\n \"pl-4 pr-3 rounded-r-extra-small hover:rounded-r-medium focus-visible:rounded-r-medium active:rounded-r-medium\",\n trailingPad: \"px-[13px]\",\n trailingCorners:\n \"rounded-l-extra-small hover:rounded-l-medium focus-visible:rounded-l-medium active:rounded-l-medium\",\n },\n m: {\n btn: \"sizeM\",\n caret: 26,\n caretOffset: \"-translate-x-[2px]\",\n icon: 24,\n pillL: \"rounded-l-[28px]\",\n pillR: \"rounded-r-[28px]\",\n leading:\n \"px-6 rounded-r-extra-small hover:rounded-r-medium focus-visible:rounded-r-medium active:rounded-r-medium\",\n trailingPad: \"px-[15px]\",\n trailingCorners:\n \"rounded-l-extra-small hover:rounded-l-medium focus-visible:rounded-l-medium active:rounded-l-medium\",\n },\n l: {\n btn: \"sizeL\",\n caret: 38,\n caretOffset: \"-translate-x-[3px]\",\n icon: 32,\n pillL: \"rounded-l-[48px]\",\n pillR: \"rounded-r-[48px]\",\n leading:\n \"px-12 rounded-r-small hover:rounded-r-large-increased focus-visible:rounded-r-large-increased active:rounded-r-large-increased\",\n trailingPad: \"px-[29px]\",\n trailingCorners:\n \"rounded-l-small hover:rounded-l-large-increased focus-visible:rounded-l-large-increased active:rounded-l-large-increased\",\n },\n xl: {\n btn: \"sizeXl\",\n caret: 50,\n caretOffset: \"-translate-x-[6px]\",\n icon: 40,\n pillL: \"rounded-l-[68px]\",\n pillR: \"rounded-r-[68px]\",\n leading:\n \"px-16 rounded-r-medium hover:rounded-r-large-increased focus-visible:rounded-r-large-increased active:rounded-r-large-increased\",\n trailingPad: \"px-[43px]\",\n trailingCorners:\n \"rounded-l-medium hover:rounded-l-large-increased focus-visible:rounded-l-large-increased active:rounded-l-large-increased\",\n },\n};\n\nexport interface SplitButtonLabels {\n /** aria-label for the trailing menu button. Default \"More options\". */\n menu?: string;\n}\n\nconst SPLIT_BUTTON_LABELS: Required<SplitButtonLabels> = {menu: \"More options\"};\n\nexport interface SplitButtonProps {\n children?: ReactNode;\n className?: string;\n disabled?: boolean;\n /** Leading button icon (sized like the Button icon per size). */\n iconLeft?: ReactNode;\n /** Customizable accessible names. */\n labels?: SplitButtonLabels;\n /** Menu content (SplitButton.Item list), opened by the trailing\n * button and anchored to its bottom right. */\n menu?: ReactNode;\n /** Class for the menu container. */\n menuClassName?: string;\n /** Leading button action. */\n onClick?: MouseEventHandler<HTMLButtonElement>;\n /** M3 Expressive size (xs 32 / s 40 / m 56 / l 96 / xl 136). */\n size?: ButtonSize;\n /** Label fallback when no children are passed. */\n text?: string;\n variant?: SplitButtonVariant;\n}\n\n/**\n * M3 Expressive split button: a leading action button and a trailing menu\n * button separated by a 2dp gap, with full outer corners and inner\n * corners that morph on hover/focus/press (4/4/4/8/12 → 8/12/12/20/20 per\n * size). While the menu is open the trailing button rounds to full,\n * centers its caret (rotated 180°) and keeps a pressed state layer; the\n * container colors never change on selection. Colors, state layers,\n * elevation and disabled states are the standard button ones.\n */\nfunction SplitButton({\n children,\n className,\n disabled,\n iconLeft,\n labels,\n menu,\n menuClassName,\n onClick,\n size = \"s\",\n text,\n variant = \"filled\",\n}: SplitButtonProps) {\n useRipple();\n const l = {...SPLIT_BUTTON_LABELS, ...labels};\n const [isOpen, setIsOpen] = useState(false);\n const wrapper = useRef<HTMLDivElement>(null);\n const trailing = useRef<HTMLButtonElement>(null);\n const wasOpen = useRef(false);\n const {exiting, mounted} = useDismissable(isOpen, 150);\n const config = SIZES[size];\n // A disabled split button gives no interactive feedback, so drop the\n // inner-corner hover/focus/press morphs — a disabled <button> still\n // matches :hover, which would otherwise morph its radius on hover.\n const corners = (classes: string) =>\n disabled\n ? classes.replace(/ (?:hover|focus-visible|active):\\S+/g, \"\")\n : classes;\n\n useOutsideClose(wrapper, () => setIsOpen(false), isOpen);\n\n // Return focus to the trailing (menu) button when the menu closes — the\n // Menu primitive moves focus into its surface on open (WAI-ARIA / mw).\n useEffect(() => {\n if (wasOpen.current && !isOpen) trailing.current?.focus();\n wasOpen.current = isOpen;\n }, [isOpen]);\n\n return (\n <div\n className={cn(\n \"relative inline-flex w-fit items-center gap-0.5\",\n className,\n )}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setIsOpen(false);\n }}\n ref={wrapper}>\n {/* min-w-12: Compose Leading/TrailingButtonMinWidth (48dp, all\n * sizes) — only binds on icon-only/short-label xs (42px). */}\n <button\n className={cn(\n \"btn min-w-12\",\n config.pillL,\n variant,\n config.btn,\n corners(config.leading),\n )}\n disabled={disabled}\n onClick={onClick}\n type=\"button\">\n <Icon iconLeft={iconLeft} size={config.icon} />\n {children ?? text}\n </button>\n <button\n aria-expanded={isOpen}\n aria-haspopup=\"menu\"\n aria-label={l.menu}\n className={cn(\n \"btn min-w-12\",\n config.pillR,\n variant,\n config.btn,\n config.trailingPad,\n isOpen\n ? cn(\"splitOpen\", config.pillL)\n : corners(config.trailingCorners),\n )}\n disabled={disabled}\n onClick={() => setIsOpen((open) => !open)}\n ref={trailing}\n type=\"button\">\n <svg\n aria-hidden\n className={cn(\n \"shrink-0 transition-transform duration-200 ease-emphasized\",\n isOpen ? \"rotate-180\" : config.caretOffset,\n )}\n fill=\"currentColor\"\n height={config.caret}\n viewBox=\"0 0 24 24\"\n width={config.caret}>\n <path d=\"M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z\" />\n </svg>\n </button>\n {mounted ? (\n <div className=\"absolute top-full right-0 z-20 flex flex-col\">\n <Menu\n className={cn(\"mt-2\", menuClassName)}\n exiting={exiting}\n onClose={() => setIsOpen(false)}>\n {menu}\n </Menu>\n </div>\n ) : null}\n </div>\n );\n}\n\nSplitButton.Item = MenuItem;\n\nexport {SplitButton};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type CardBodyProps = ComponentProps<\"div\">;\n\nfunction CardBody({children, className, ...props}: CardBodyProps) {\n return (\n <div\n className={cn(\"flex h-fit w-full flex-col gap-3\", className)}\n {...props}>\n {children}\n </div>\n );\n}\n\nexport {CardBody};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type CardFooterProps = ComponentProps<\"div\">;\n\nfunction CardFooter({children, className, ...props}: CardFooterProps) {\n return (\n <div\n className={cn(\"flex h-fit w-full flex-row items-center gap-3\", className)}\n {...props}>\n {children}\n </div>\n );\n}\n\nexport {CardFooter};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type CardHeaderProps = ComponentProps<\"div\">;\n\nfunction CardHeader({children, className, ...props}: CardHeaderProps) {\n return (\n <div\n className={cn(\"flex flex-row items-center gap-3\", className)}\n {...props}>\n {children}\n </div>\n );\n}\n\nexport {CardHeader};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {CardBody} from \"./CardBody\";\nimport {CardFooter} from \"./CardFooter\";\nimport {CardHeader} from \"./CardHeader\";\n\nexport type CardVariant = \"elevated\" | \"filled\" | \"outlined\";\n\nexport interface CardProps extends ComponentProps<\"div\"> {\n variant?: CardVariant;\n}\n\n/**\n * M3 card (shape medium). Variants per spec: elevated = surface-container-low\n * + level 1, filled = surface-container-highest, outlined = surface +\n * outline-variant border. Compose content with Card.Header / Card.Body /\n * Card.Footer.\n */\nfunction Card({children, className, variant = \"filled\", ...props}: CardProps) {\n return (\n <div\n className={cn(\n \"flex h-fit w-full flex-col gap-2 rounded-medium p-4 text-on-surface\",\n variant === \"elevated\" && \"bg-surface-container-low shadow-mm-1\",\n variant === \"filled\" && \"bg-surface-container-highest\",\n variant === \"outlined\" && \"border border-outline-variant bg-surface\",\n className,\n )}\n {...props}>\n {children}\n </div>\n );\n}\n\nCard.Header = CardHeader;\nCard.Body = CardBody;\nCard.Footer = CardFooter;\n\nexport {Card};\n","import {cn} from \"../../utils/helpers\";\n\n/**\n * 18px checkmark drawn by stroke-dashoffset (150ms MDC standard, 50ms\n * delay — the @material/web labs segmented graphic). Used by the filter\n * Chips selection graphic.\n */\nfunction CheckIcon({selected}: {selected: boolean}) {\n return (\n <svg aria-hidden fill=\"none\" height={18} viewBox=\"0 0 24 24\" width={18}>\n <path\n className={cn(\"segmentedCheck\", selected && \"segmentedCheckDraw\")}\n d=\"M5 12.5 10 17.5 19 7.5\"\n pathLength={1}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n />\n </svg>\n );\n}\n\nexport {CheckIcon};\n","import {ComponentProps, MouseEvent, ReactNode} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {CheckIcon} from \"./_CheckIcon\";\n\nexport type ChipsVariant = \"assist\" | \"filter\" | \"input\" | \"suggestion\";\n\nexport interface ChipsLabels {\n /** aria-label for the trailing remove affordance. Default \"Remove\". */\n remove?: string;\n}\n\nconst CHIPS_LABELS: Required<ChipsLabels> = {remove: \"Remove\"};\n\nexport interface ChipsProps extends ComponentProps<\"button\"> {\n /** Input chips: renders the leading element as a 24dp avatar with the\n * 4dp leading padding from the spec measurements (other variants\n * ignore it, like the spec). */\n avatar?: boolean;\n /** Elevated chip: surface-container-low at level 1 instead of the\n * outline (assist/filter/suggestion; input chips are always flat). */\n elevated?: boolean;\n /** Customizable accessible names. */\n labels?: ChipsLabels;\n /** Leading element (icon/avatar, 18px box). */\n leftElement?: ReactNode;\n /** Removable input chips: renders a trailing remove affordance. */\n onRemove?: (event: MouseEvent<HTMLButtonElement>) => void;\n /** Trailing element (18px box). */\n rightElement?: ReactNode;\n /** Selected state (filter/input). */\n selected?: boolean;\n /** Label fallback when no children are passed. */\n text?: string;\n variant?: ChipsVariant;\n}\n\nfunction RemoveIcon() {\n return (\n <svg aria-hidden fill=\"none\" height={18} viewBox=\"0 0 24 24\" width={18}>\n <path\n d=\"m7 7 10 10M17 7 7 17\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={2}\n />\n </svg>\n );\n}\n\n/**\n * M3 chip (height 32, shape small, label-large). Padding 16, reduced to 8\n * on the icon/remove side. Selected filter/input chips use\n * secondary-container; assist/suggestion leading icons tint primary.\n * Elevated chips swap the outline for surface-container-low at level 1\n * (2 on hover, 1 pressed, none disabled).\n */\nfunction Chips({\n avatar = false,\n children,\n className,\n disabled,\n elevated = false,\n labels,\n leftElement,\n onRemove,\n rightElement,\n selected = false,\n text,\n type = \"button\",\n variant = \"assist\",\n ...props\n}: ChipsProps) {\n useRipple();\n const l = {...CHIPS_LABELS, ...labels};\n const hasLeft = Boolean(leftElement);\n const hasRight = Boolean(rightElement) || Boolean(onRemove);\n /* Leading icon accent per the chip token sets (site + Compose):\n * assist/suggestion always primary, filter only UNselected, input\n * only SELECTED (InputChipTokens.SelectedLeadingIconColor). */\n const accentIcon = variant === \"input\" ? selected : !selected;\n const isElevated = elevated && variant !== \"input\";\n const hasAvatar = avatar && variant === \"input\" && hasLeft;\n /* Selected filter chips grow a leading checkmark (mw renders it in\n * place of the leading icon; the guideline video shows the chip width\n * opening with it ~150ms). Without a leading icon the graphic expands\n * 0↔26 (18 check + 8 gap) and the side padding drops 16→8; with one,\n * the check crossfades inside the fixed 18px box. */\n const filterGraphic = variant === \"filter\" && !hasLeft;\n // The remove \"X\" matches the chip's content color (it is a sibling, so it\n // can't inherit it).\n const removeColor = disabled\n ? \"text-on-surface/38\"\n : selected\n ? \"text-on-secondary-container\"\n : \"text-on-surface-variant\";\n const removeButton = onRemove ? (\n <button\n aria-label={l.remove}\n className={cn(\n \"chipRemoveHit state-layer absolute top-1/2 right-1 flex size-[18px] -translate-y-1/2 cursor-pointer items-center justify-center rounded-full leading-none disabled:cursor-not-allowed\",\n removeColor,\n )}\n disabled={disabled}\n onClick={(event) => {\n event.stopPropagation();\n onRemove(event);\n }}\n type=\"button\">\n <RemoveIcon />\n </button>\n ) : null;\n\n const chip = (\n <button\n aria-pressed={\n variant === \"filter\" || variant === \"input\" ? selected : undefined\n }\n className={cn(\n \"chips\",\n selected\n ? \"border border-transparent bg-secondary-container text-on-secondary-container\"\n : cn(\n isElevated\n ? \"border border-transparent bg-surface-container-low\"\n : cn(\n /* Flat outline is outline-variant in the\n * current DSDB (mw v0_192 still ships the\n * old outline role); focused flat chips\n * darken it per the focus outline tokens. */\n \"border border-outline-variant bg-transparent\",\n variant === \"assist\"\n ? \"focus-visible:border-on-surface\"\n : \"focus-visible:border-on-surface-variant\",\n ),\n /* Only the assist label is on-surface; suggestion\n * joins filter/input on on-surface-variant. */\n variant === \"assist\"\n ? \"text-on-surface\"\n : \"text-on-surface-variant\",\n ),\n isElevated &&\n \"shadow-mm-1 hover:shadow-mm-2 active:shadow-mm-1 disabled:shadow-none\",\n /* Flat selected filter raises to level 1 on hover\n * (FilterChipTokens.FlatSelectedHoverContainerElevation). */\n variant === \"filter\" &&\n selected &&\n !isElevated &&\n \"hover:shadow-mm-1 active:shadow-none disabled:shadow-none\",\n hasAvatar\n ? \"pl-1\"\n : hasLeft || (filterGraphic && selected)\n ? \"pl-2\"\n : \"pl-4\",\n onRemove ? \"pr-8\" : hasRight ? \"pr-2\" : \"pr-4\",\n \"disabled:border-on-surface/12 disabled:bg-transparent disabled:text-on-surface/38\",\n (selected || isElevated) &&\n \"disabled:bg-on-surface/12 disabled:border-transparent\",\n className,\n )}\n disabled={disabled}\n type={type}\n {...props}>\n {filterGraphic ? (\n <span\n aria-hidden\n className=\"segmentedGraphic -mr-2 h-[18px]\"\n style={{width: selected ? 26 : 0}}>\n <span className=\"absolute left-0 flex size-[18px] items-center justify-center leading-none\">\n <CheckIcon selected={selected} />\n </span>\n </span>\n ) : null}\n {leftElement ? (\n variant === \"filter\" ? (\n /* icon ↔ check crossfade in the fixed 18px box (out\n * 50ms / in 150ms +50ms, like the segmented graphic) */\n <span className=\"relative flex size-[18px] shrink-0 items-center justify-center leading-none\">\n <span\n className={cn(\n \"absolute inset-0 flex items-center justify-center\",\n selected\n ? \"opacity-100\"\n : \"ease-md-linear opacity-0 transition-opacity duration-75\",\n )}>\n <CheckIcon selected={selected} />\n </span>\n <span\n className={cn(\n \"absolute inset-0 flex items-center justify-center\",\n selected\n ? \"ease-md-linear opacity-0 transition-opacity duration-[50ms]\"\n : \"ease-legacy opacity-100 transition-opacity delay-[50ms] duration-150\",\n accentIcon && !disabled && \"text-primary\",\n )}>\n {leftElement}\n </span>\n </span>\n ) : (\n <Icon\n className={cn(\n accentIcon && !disabled && !hasAvatar && \"text-primary\",\n )}\n iconLeft={leftElement}\n size={hasAvatar ? 24 : 18}\n />\n )\n ) : null}\n {children ?? text}\n {rightElement ? <Icon iconRight={rightElement} size={18} /> : null}\n </button>\n );\n\n // The remove control must be a real, keyboard-operable button and a\n // SIBLING of the chip (interactive elements cannot nest inside a button);\n // it sits over the chip's reserved trailing padding.\n return removeButton ? (\n <span className=\"relative inline-flex w-fit align-middle\">\n {chip}\n {removeButton}\n </span>\n ) : (\n chip\n );\n}\n\nexport {Chips};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type TableBodyProps = ComponentProps<\"tbody\">;\n\nfunction TableBody({children, className, ...props}: TableBodyProps) {\n return (\n <tbody className={cn(\"text-body-medium\", className)} {...props}>\n {children}\n </tbody>\n );\n}\n\nexport {TableBody};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface TableCellProps extends ComponentProps<\"td\"> {\n /** Content fallback when no children are passed. */\n data?: ReactNode;\n}\n\nfunction TableCell({children, className, data, ...props}: TableCellProps) {\n return (\n <td className={cn(\"min-w-max py-3 pl-4 pr-8\", className)} {...props}>\n <span className=\"flex sm:min-w-max\">{children ?? data}</span>\n </td>\n );\n}\n\nexport {TableCell};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type TableHeadProps = ComponentProps<\"thead\">;\n\nfunction TableHead({children, className, ...props}: TableHeadProps) {\n return (\n <thead\n className={cn(\"bg-surface-container text-title-small\", className)}\n {...props}>\n {children}\n </thead>\n );\n}\n\nexport {TableHead};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface TableHeaderCellProps extends ComponentProps<\"th\"> {\n /** Content fallback when no children are passed. */\n data?: ReactNode;\n}\n\nfunction TableHeaderCell({\n children,\n className,\n data,\n ...props\n}: TableHeaderCellProps) {\n return (\n <th\n className={cn(\n /* text-title-small on the th itself: the UA's\n * th{font-weight:bold} beats the weight inherited from\n * thead, so the scale utility must sit at element level. */\n \"min-w-max overflow-hidden px-4 py-3 text-left text-title-small\",\n className,\n )}\n {...props}>\n <div className=\"flex size-full min-w-max flex-wrap\">\n {children ?? data}\n </div>\n </th>\n );\n}\n\nexport {TableHeaderCell};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type TableRowProps = ComponentProps<\"tr\">;\n\nfunction TableRow({children, className, ...props}: TableRowProps) {\n return (\n <tr className={cn(\"odd:bg-surface-container/50\", className)} {...props}>\n {children}\n </tr>\n );\n}\n\nexport {TableRow};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface TextContainerProps {\n children?: ReactNode;\n className?: string;\n /** Content fallback when no children are passed. */\n data?: ReactNode;\n /** Width class (default w-[300px]) to keep long text readable. */\n width?: string;\n}\n\n/** Fixed-width wrapper for long text inside table cells. */\nfunction TextContainer({children, className, data, width}: TextContainerProps) {\n return (\n <div className={cn(\"flex\", width ?? \"w-[300px]\", className)}>\n {children ?? data}\n </div>\n );\n}\n\nexport {TextContainer};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {TableBody} from \"./TableBody\";\nimport {TableCell} from \"./TableCell\";\nimport {TableHead} from \"./TableHead\";\nimport {TableHeaderCell} from \"./TableHeaderCell\";\nimport {TableRow} from \"./TableRow\";\nimport {TextContainer} from \"./TextContainer\";\n\nexport interface TableProps extends ComponentProps<\"table\"> {\n /** Class for the scrollable wrapper. */\n wrapperClassName?: string;\n}\n\n/**\n * Data table (horizontal-scroll wrapper included). Compose with\n * Table.Head / Table.Body / Table.Row / Table.Cell / Table.HeaderCell /\n * Table.TextContainer. Data always comes from the consumer.\n */\nfunction Table({children, className, wrapperClassName, ...props}: TableProps) {\n return (\n <div className={cn(\"w-full overflow-auto\", wrapperClassName)}>\n <table\n className={cn(\n \"w-full table-auto text-body-small text-on-surface\",\n className,\n )}\n {...props}>\n {children}\n </table>\n </div>\n );\n}\n\nTable.Body = TableBody;\nTable.Cell = TableCell;\nTable.Head = TableHead;\nTable.HeaderCell = TableHeaderCell;\nTable.Row = TableRow;\nTable.TextContainer = TextContainer;\n\nexport {Table};\n","import {KeyboardEvent as ReactKeyboardEvent, RefObject, useEffect} from \"react\";\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Modal focus management for div-based panels — what the native\n * `<dialog>.showModal()` gives you, replicated for a plain element: on open,\n * move focus to an `[autofocus]` child if present (otherwise the panel\n * itself); restore focus to the previously focused element on close; and trap\n * Tab / Shift+Tab inside the panel with wrap. Returns the keydown handler to\n * attach to the panel's `onKeyDown`.\n *\n * The panel must carry `tabIndex={-1}` so it can receive focus.\n */\nexport function useFocusTrap<T extends HTMLElement>(\n panel: RefObject<T | null>,\n active: boolean,\n) {\n useEffect(() => {\n if (!active) return;\n const restoreTo = document.activeElement as HTMLElement | null;\n const autofocus = panel.current?.querySelector<HTMLElement>(\"[autofocus]\");\n (autofocus ?? panel.current)?.focus();\n return () => restoreTo?.focus();\n }, [active, panel]);\n\n return (event: ReactKeyboardEvent) => {\n if (event.key !== \"Tab\" || !panel.current) return;\n const focusables = panel.current.querySelectorAll<HTMLElement>(FOCUSABLE);\n if (!focusables.length) {\n event.preventDefault();\n return;\n }\n const first = focusables[0];\n const last = focusables[focusables.length - 1];\n const activeEl = document.activeElement;\n if (event.shiftKey && (activeEl === first || activeEl === panel.current)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && activeEl === last) {\n event.preventDefault();\n first.focus();\n }\n };\n}\n","// Internal: lets Dialog give Dialog.Header (or a picker header) a stable id so\n// the panel can name itself via aria-labelledby (matches @material/web, which\n// labels the dialog by its headline). `setLabelled` lets the header tell the\n// dialog an element actually carries that id, so the dialog only applies\n// aria-labelledby when it resolves (a dangling IDREF yields no name and does\n// NOT fall back to aria-label). Not exported from public barrels.\nimport {createContext} from \"react\";\n\nexport const DialogContext = createContext<{\n headlineId?: string;\n setLabelled?: (labelled: boolean) => void;\n}>({});\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type DialogBodyProps = ComponentProps<\"div\">;\n\nfunction DialogBody({children, className, ...props}: DialogBodyProps) {\n return (\n <div\n className={cn(\n \"flex w-full flex-col gap-3 text-body-medium text-on-surface-variant\",\n className,\n )}\n {...props}>\n {children}\n </div>\n );\n}\n\nexport {DialogBody};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type DialogFooterProps = ComponentProps<\"div\">;\n\nfunction DialogFooter({children, className, ...props}: DialogFooterProps) {\n return (\n <div\n className={cn(\"mt-2 flex items-center justify-end gap-2\", className)}\n {...props}>\n {children}\n </div>\n );\n}\n\nexport {DialogFooter};\n","import {ReactNode, useContext, useEffect} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {DialogContext} from \"./_context\";\n\nexport interface DialogHeaderProps {\n className?: string;\n /** Headline (headline-small). */\n headline?: ReactNode;\n /** Hero icon (24px, centered, secondary color). */\n icon?: ReactNode;\n /** Supporting text (body-medium). */\n text?: ReactNode;\n}\n\nfunction DialogHeader({className, headline, icon, text}: DialogHeaderProps) {\n const centered = Boolean(icon);\n const {headlineId, setLabelled} = useContext(DialogContext);\n // Tell the dialog whether its headline names it (so it applies\n // aria-labelledby only when this <h2> is actually rendered).\n useEffect(() => {\n setLabelled?.(Boolean(headline));\n return () => setLabelled?.(false);\n }, [headline, setLabelled]);\n return (\n <div\n className={cn(\n \"flex flex-col gap-4\",\n centered && \"items-center text-center\",\n className,\n )}>\n {icon ? (\n <span className=\"flex text-secondary\">\n <Icon icon={icon} size={24} />\n </span>\n ) : null}\n {headline ? (\n <h2 className=\"text-headline-small text-on-surface\" id={headlineId}>\n {headline}\n </h2>\n ) : null}\n {text ? (\n <p className=\"text-body-medium text-on-surface-variant\">{text}</p>\n ) : null}\n </div>\n );\n}\n\nexport {DialogHeader};\n","import {MouseEvent, ReactNode, useEffect, useId, useRef, useState} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useFocusTrap} from \"../_useFocusTrap\";\nimport {DialogContext} from \"./_context\";\nimport {DialogBody} from \"./DialogBody\";\nimport {DialogFooter} from \"./DialogFooter\";\nimport {DialogHeader} from \"./DialogHeader\";\n\nexport interface DialogProps {\n children?: ReactNode;\n className?: string;\n /** Close on scrim click / Escape. Default true. */\n dismissable?: boolean;\n isVisible: boolean;\n /** Accessible name used when no Dialog.Header headline is rendered. */\n label?: string;\n onClose: () => void;\n}\n\n/**\n * M3 modal dialog: shape extra-large (28), 280–560dp wide, container\n * surface-container-high, 32% scrim. Mounts/unmounts with enter/exit\n * animations; compose content with Dialog.Header / Dialog.Body /\n * Dialog.Footer.\n */\nfunction Dialog({\n children,\n className,\n dismissable = true,\n isVisible,\n label,\n onClose,\n}: DialogProps) {\n // @material/web dialog: open 500ms emphasized, close 150ms accelerate.\n const {exiting, mounted} = useDismissable(isVisible, 150);\n const panel = useRef<HTMLDivElement>(null);\n // Names the dialog after its headline (Dialog.Header — or a picker header\n // — stamps this id on its heading) — mw's aria-labelledby behaviour. When\n // nothing carries the id, fall back to the `label` prop as aria-label.\n const headlineId = useId();\n const [labelled, setLabelled] = useState(false);\n\n useEffect(() => {\n if (!mounted) return;\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [mounted]);\n\n // mw's <dialog>.showModal() moves focus into the dialog, traps Tab and\n // restores focus on close; this div-based panel replicates that.\n const trapTab = useFocusTrap(panel, mounted);\n\n useEffect(() => {\n if (!isVisible || !dismissable) return;\n const handler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [dismissable, isVisible, onClose]);\n\n if (!mounted) return null;\n\n const handleScrim = () => {\n if (dismissable) onClose();\n };\n\n return (\n <div\n className={cn(\n \"fixed inset-0 z-50 flex items-center justify-center bg-scrim/32 p-4\",\n exiting ? \"animate-scrim-out\" : \"animate-scrim-in\",\n )}\n onClick={handleScrim}>\n <div\n aria-label={!labelled ? label : undefined}\n aria-labelledby={labelled ? headlineId : undefined}\n aria-modal=\"true\"\n className={cn(\n \"flex max-h-[calc(100vh-48px)] w-full max-w-[560px] min-w-[280px] flex-col gap-4 overflow-y-auto rounded-extra-large bg-surface-container-high p-6 text-on-surface shadow-mm-3 outline-none\",\n exiting ? \"animate-dialog-out\" : \"animate-dialog-in\",\n className,\n )}\n onClick={(event: MouseEvent) => event.stopPropagation()}\n onKeyDown={trapTab}\n ref={panel}\n role=\"dialog\"\n tabIndex={-1}>\n <DialogContext.Provider value={{headlineId, setLabelled}}>\n {children}\n </DialogContext.Provider>\n </div>\n </div>\n );\n}\n\nDialog.Header = DialogHeader;\nDialog.Body = DialogBody;\nDialog.Footer = DialogFooter;\n\nexport {Dialog};\n","// Internal helpers shared by the text field and select components. Not\n// exported from the public barrel.\nimport {ReactNode, useRef, useState} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useIsomorphicLayoutEffect} from \"../../utils/_useIsomorphicLayoutEffect\";\n\nexport interface FloatingLabelProps {\n children: ReactNode;\n /** Color classes (labelColor). */\n className?: string;\n floating: boolean;\n /** Position/type classes of the floated label. */\n floatingClassName: string;\n htmlFor?: string;\n /** Position/type classes of the resting label. */\n restingClassName: string;\n}\n\n/**\n * Field label that floats like @material/web's: two label elements (one\n * per state, fixed classes) with only one visible, and a transform-only\n * WAAPI tween between their measured rects (150ms emphasized) on the\n * floating copy. Interpolating font-size instead re-rasterizes the text\n * every frame and the baseline wobbles — the label looks like it dips\n * before floating. The scale uses the width ratio (mw field.ts) so\n * letter-spacing doesn't skew it.\n */\nexport function FloatingLabel({\n children,\n className,\n floating,\n floatingClassName,\n htmlFor,\n restingClassName,\n}: FloatingLabelProps) {\n const floatingRef = useRef<HTMLSpanElement>(null);\n const restingRef = useRef<HTMLSpanElement>(null);\n const animationRef = useRef<Animation | null>(null);\n const prevFloating = useRef(floating);\n const [animating, setAnimating] = useState(false);\n\n useIsomorphicLayoutEffect(() => {\n if (prevFloating.current === floating) return;\n prevFloating.current = floating;\n // The tween targets the inner TEXT spans, not the labels: the\n // outlined floating label carries px-1 (notch padding) which\n // polluted a label-level width ratio (scale came out ~0.97\n // instead of ~1.27 and the swap popped the font size), and\n // element scrollWidth is integer-rounded anyway. Span rects are\n // sub-pixel and text-only.\n const floatingEl = floatingRef.current;\n const restingEl = restingRef.current;\n if (!floatingEl || !restingEl) return;\n\n const f = floatingEl.getBoundingClientRect();\n const r = restingEl.getBoundingClientRect();\n if (!f.width || !r.width) return;\n\n const scale = r.width / f.width;\n const xDelta = r.x - f.x;\n // The line-heights differ; adjust by half of the scaled height\n // delta so the tween lands exactly on the resting baseline (mw).\n const yDelta = r.y - f.y + Math.round((r.height - f.height * scale) / 2);\n const rest = `translateX(${xDelta}px) translateY(${yDelta}px) scale(${scale})`;\n const float = `translateX(0) translateY(0) scale(1)`;\n\n animationRef.current?.cancel();\n setAnimating(true);\n // fill:forwards holds the final transform after the tween ends —\n // without it the floating copy reverts to its natural position\n // for the frame(s) between the animation finishing and React\n // committing the visibility swap (a flash back to the floated\n // spot, visible when the swap render is delayed e.g. by the\n // select menu unmounting). The fill is released right after the\n // swap commits (effect below).\n const animation = floatingEl.animate(\n {transform: floating ? [rest, float] : [float, rest]},\n {\n duration: 150,\n easing: \"cubic-bezier(0.2, 0, 0, 1)\",\n fill: \"forwards\",\n },\n );\n animationRef.current = animation;\n // Guarded: cancelling the PREVIOUS animation (just above) fires\n // its stale cancel listener async — without the check it cleared\n // `animating` right after the new tween started and the reverse\n // animation snapped invisibly.\n const done = () => {\n if (animationRef.current === animation) setAnimating(false);\n };\n animation.addEventListener(\"finish\", done);\n animation.addEventListener(\"cancel\", done);\n }, [floating]);\n\n useIsomorphicLayoutEffect(() => {\n // Once the visibility swap is committed (the animated copy is\n // hidden), release the filled transform before the next paint.\n if (animating || !animationRef.current) return;\n animationRef.current.cancel();\n animationRef.current = null;\n }, [animating]);\n\n // The floating copy is the one shown while animating (mw swaps the\n // visible label only when the tween finishes).\n const showFloating = floating || animating;\n return (\n <>\n <label\n aria-hidden\n className={cn(\n \"pointer-events-none absolute\",\n floatingClassName,\n className,\n !showFloating && \"opacity-0\",\n )}>\n <span className=\"inline-block origin-top-left\" ref={floatingRef}>\n {children}\n </span>\n </label>\n <label\n className={cn(\n \"pointer-events-none absolute\",\n restingClassName,\n className,\n showFloating && \"opacity-0\",\n )}\n htmlFor={htmlFor}>\n <span className=\"inline-block\" ref={restingRef}>\n {children}\n </span>\n </label>\n </>\n );\n}\n\n/**\n * Floating-label state driven by focus + value (NOT by\n * peer-placeholder-shown), so the label always lands in the same place.\n */\nexport function useFieldState(\n value: unknown,\n defaultValue: unknown,\n disabled?: boolean,\n) {\n const [focused, setFocusedState] = useState(false);\n const [internalHasValue, setInternalHasValue] = useState(\n defaultValue !== undefined &&\n defaultValue !== null &&\n String(defaultValue).length > 0,\n );\n const hasValue =\n value !== undefined && value !== null\n ? String(value).length > 0\n : internalHasValue;\n\n return {\n focused: focused && !disabled,\n hasValue,\n setFocused: setFocusedState,\n setInternalHasValue,\n };\n}\n\nexport function labelColor(opts: {\n disabled?: boolean;\n error?: boolean;\n focused: boolean;\n}): string {\n if (opts.disabled) return \"text-on-surface/38\";\n if (opts.error) return \"text-error\";\n if (opts.focused) return \"text-primary\";\n return \"text-on-surface-variant\";\n}\n\nexport interface SupportingTextProps {\n error?: boolean;\n errorText?: ReactNode;\n /** Id so the field can point its aria-describedby here. */\n id?: string;\n supportingText?: ReactNode;\n}\n\nexport function SupportingText({\n error,\n errorText,\n id,\n supportingText,\n}: SupportingTextProps) {\n const isError = !!(error && errorText);\n const text = isError ? errorText : supportingText;\n if (!text) return null;\n return (\n <p\n // The error message is announced when it appears; plain\n // supporting text stays silent to avoid spurious announcements.\n role={isError ? \"alert\" : undefined}\n id={id}\n className={cn(\n \"px-4 pt-1 text-body-small\",\n error ? \"text-error\" : \"text-on-surface-variant\",\n )}>\n {text}\n </p>\n );\n}\n\nexport function FieldIcon({\n children,\n className,\n}: {\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={cn(\n \"pointer-events-auto absolute flex h-6 w-6 items-center justify-center leading-none text-on-surface-variant\",\n className,\n )}>\n {children}\n </span>\n );\n}\n","import {ChangeEvent, ComponentProps, ReactNode, useId} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {\n FieldIcon,\n FloatingLabel,\n labelColor,\n SupportingText,\n useFieldState,\n} from \"./_fieldShared\";\n\nexport interface InputOutlinedProps extends Omit<\n ComponentProps<\"input\">,\n \"size\"\n> {\n /** Class for the wrapper. */\n className?: string;\n error?: boolean;\n errorText?: ReactNode;\n inputClassName?: string;\n /** Floating label. */\n label?: string;\n /** Leading icon (24px box; input pads 48 on that side). */\n leftElement?: ReactNode;\n /** Trailing icon. */\n rightElement?: ReactNode;\n supportingText?: ReactNode;\n}\n\n/**\n * M3 outlined text field: height 56, shape small, body-large input. The\n * floating label is driven by focus/value state and notches the outline\n * via fieldset/legend (works on any background).\n */\nfunction InputOutlined({\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n className,\n defaultValue,\n disabled,\n error,\n errorText,\n id,\n inputClassName,\n label,\n leftElement,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n rightElement,\n supportingText,\n value,\n ...inputProps\n}: InputOutlinedProps) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const {focused, hasValue, setFocused, setInternalHasValue} = useFieldState(\n value,\n defaultValue,\n disabled,\n );\n const floating = focused || hasValue;\n const hasSupport = !!((error && errorText) || supportingText);\n const descId = `${inputId}-desc`;\n const describedBy =\n [ariaDescribedBy, hasSupport ? descId : undefined]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div className=\"group relative flex h-14 w-full\">\n {leftElement ? (\n <FieldIcon className=\"top-1/2 left-3 -translate-y-1/2\">\n {leftElement}\n </FieldIcon>\n ) : null}\n <input\n aria-describedby={describedBy}\n aria-invalid={ariaInvalid ?? (error || undefined)}\n className={cn(\n \"h-14 w-full bg-transparent text-body-large text-on-surface outline-none placeholder:text-on-surface-variant disabled:cursor-not-allowed disabled:text-on-surface/38\",\n // One padding class per side (never px-4 + pl-13): a consumer's\n // own Tailwind re-emits .px-4 later in the shared utilities layer\n // and would otherwise override the leading-icon inset.\n leftElement ? \"pl-13\" : \"pl-4\",\n rightElement ? \"pr-13\" : \"pr-4\",\n inputClassName,\n )}\n defaultValue={defaultValue}\n disabled={disabled}\n id={inputId}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n setInternalHasValue(event.target.value.length > 0);\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n placeholder={floating || !label ? placeholder : undefined}\n value={value}\n {...inputProps}\n />\n {/* outline with label notch */}\n <fieldset\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 m-0 min-w-0 rounded-extra-small px-2 transition-colors\",\n error\n ? focused\n ? \"border-2 border-error\"\n : \"border border-error\"\n : focused\n ? \"border-2 border-primary\"\n : \"border border-outline group-hover:border-on-surface\",\n disabled && \"border-on-surface/12 group-hover:border-on-surface/12\",\n )}>\n {label ? (\n <legend\n className={cn(\n \"invisible h-0 px-0 text-body-small whitespace-nowrap transition-all\",\n floating ? \"max-w-full px-1\" : \"max-w-0\",\n )}>\n {label}\n </legend>\n ) : null}\n </fieldset>\n {label ? (\n <FloatingLabel\n className={labelColor({disabled, error, focused})}\n floating={floating}\n floatingClassName=\"top-0 left-3 -translate-y-1/2 px-1 text-body-small\"\n htmlFor={inputId}\n restingClassName={cn(\n \"top-1/2 -translate-y-1/2 text-body-large\",\n leftElement ? \"left-13\" : \"left-4\",\n )}>\n {label}\n </FloatingLabel>\n ) : null}\n {rightElement ? (\n <FieldIcon className=\"top-1/2 right-3 -translate-y-1/2\">\n {rightElement}\n </FieldIcon>\n ) : null}\n </div>\n <SupportingText\n error={error}\n errorText={errorText}\n id={hasSupport ? descId : undefined}\n supportingText={supportingText}\n />\n </div>\n );\n}\n\nexport {InputOutlined};\n","// Internal date helpers for the date pickers. Native Date only (no deps),\n// matching the library's zero-runtime-dependency policy. Not exported from\n// the public barrel.\n\nexport const DAYS_IN_WEEK = 7;\nexport const CALENDAR_ROWS = 6;\n\n/** Midnight of the given date (drops the time component). */\nexport function startOfDay(d: Date): Date {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n}\n\nexport function isSameDay(a: Date | null, b: Date | null): boolean {\n return (\n a != null &&\n b != null &&\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport function isSameMonth(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth();\n}\n\n/** A new date `n` months from `d` (clamped to the target month's length). */\nexport function addMonths(d: Date, n: number): Date {\n return new Date(d.getFullYear(), d.getMonth() + n, 1);\n}\n\nexport function daysInMonth(year: number, month: number): number {\n return new Date(year, month + 1, 0).getDate();\n}\n\n/**\n * The current month laid out as 6 weeks × 7 days. Cells before the 1st and\n * after the last day of the month are `null` (M3 shows only the active\n * month's days). `weekStartsOn`: 0 = Sunday … 6 = Saturday.\n */\nexport function buildMonthMatrix(\n year: number,\n month: number,\n weekStartsOn: number,\n): (Date | null)[] {\n const total = daysInMonth(year, month);\n const firstWeekday = new Date(year, month, 1).getDay();\n const lead = (firstWeekday - weekStartsOn + DAYS_IN_WEEK) % DAYS_IN_WEEK;\n const cells: (Date | null)[] = [];\n for (let i = 0; i < DAYS_IN_WEEK * CALENDAR_ROWS; i++) {\n const day = i - lead + 1;\n cells.push(day >= 1 && day <= total ? new Date(year, month, day) : null);\n }\n return cells;\n}\n\nexport function clampDate(d: Date, min?: Date | null, max?: Date | null): Date {\n if (min && d < startOfDay(min)) return startOfDay(min);\n if (max && d > startOfDay(max)) return startOfDay(max);\n return d;\n}\n\nexport function isBefore(a: Date, b: Date): boolean {\n return startOfDay(a).getTime() < startOfDay(b).getTime();\n}\n\nexport function isWithin(\n d: Date,\n start: Date | null,\n end: Date | null,\n): boolean {\n if (!start || !end) return false;\n const t = startOfDay(d).getTime();\n return t > startOfDay(start).getTime() && t < startOfDay(end).getTime();\n}\n\n/** Narrow weekday labels (e.g. S M T W T F S) rotated to `weekStartsOn`. */\nexport function weekdayLabels(weekStartsOn: number, locale?: string): string[] {\n const fmt = new Intl.DateTimeFormat(locale, {weekday: \"narrow\"});\n // 2023-01-01 is a Sunday — a stable anchor for weekday 0..6.\n return Array.from({length: DAYS_IN_WEEK}, (_, i) =>\n fmt.format(new Date(2023, 0, 1 + ((weekStartsOn + i) % DAYS_IN_WEEK))),\n );\n}\n\nexport function formatMonthYear(d: Date, locale?: string): string {\n return new Intl.DateTimeFormat(locale, {\n month: \"long\",\n year: \"numeric\",\n }).format(d);\n}\n\n/** Header headline, e.g. \"Sat, Aug 17\". */\nexport function formatHeadline(d: Date | null, locale?: string): string {\n if (!d) return \"\";\n return new Intl.DateTimeFormat(locale, {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n }).format(d);\n}\n\n/** Compact date for the input/text field, e.g. \"08/17/2024\". */\nexport function formatShort(d: Date | null, locale?: string): string {\n if (!d) return \"\";\n return new Intl.DateTimeFormat(locale).format(d);\n}\n\n/** Full localized date for a day cell's accessible name. */\nexport function formatDayLabel(d: Date, locale?: string): string {\n return new Intl.DateTimeFormat(locale, {\n day: \"numeric\",\n month: \"long\",\n weekday: \"long\",\n year: \"numeric\",\n }).format(d);\n}\n","import {useMemo, useState} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {\n addMonths,\n buildMonthMatrix,\n formatDayLabel,\n formatMonthYear,\n isSameDay,\n isWithin,\n startOfDay,\n weekdayLabels,\n} from \"./_dateUtils\";\n\nexport interface CalendarLabels {\n /** aria-label for the next-month button. Default \"Next month\". */\n nextMonth?: string;\n /** aria-label for the previous-month button. Default \"Previous month\". */\n previousMonth?: string;\n /** aria-label for the year-grid toggle. Default \"Select year\". */\n selectYear?: string;\n}\n\nexport interface CalendarProps {\n /** Accessible names for the calendar controls. */\n labels?: CalendarLabels;\n locale?: string;\n max?: Date | null;\n min?: Date | null;\n /** A day was activated. */\n onSelect: (date: Date) => void;\n /** Range endpoints (range mode). */\n rangeEnd?: Date | null;\n rangeStart?: Date | null;\n /** Highlight days between the range endpoints. */\n range?: boolean;\n /** Selected day (single mode). */\n value?: Date | null;\n /** 0 = Sunday … 6 = Saturday. */\n weekStartsOn?: number;\n}\n\nconst chevron = (d: \"left\" | \"right\" | \"down\") => (\n <svg\n aria-hidden\n className={cn(\"h-6 w-6 fill-current\", d === \"down\" && \"h-5 w-5\")}\n viewBox=\"0 0 24 24\">\n {d === \"left\" ? (\n <path d=\"M15.4 7.4 14 6l-6 6 6 6 1.4-1.4-4.6-4.6z\" />\n ) : d === \"right\" ? (\n <path d=\"M8.6 7.4 10 6l6 6-6 6-1.4-1.4 4.6-4.6z\" />\n ) : (\n <path d=\"m7 10 5 5 5-5z\" />\n )}\n </svg>\n);\n\n/**\n * The M3 calendar core: a month grid with navigation and a year picker.\n * Presentational and controllable — the parent owns the selected value(s)\n * and is notified via `onSelect`. Shared by the modal and docked pickers.\n */\nfunction Calendar({\n labels,\n locale,\n max,\n min,\n onSelect,\n range,\n rangeEnd = null,\n rangeStart = null,\n value = null,\n weekStartsOn = 0,\n}: CalendarProps) {\n const today = useMemo(() => startOfDay(new Date()), []);\n const seed = value ?? rangeStart ?? today;\n const [display, setDisplay] = useState(\n () => new Date(seed.getFullYear(), seed.getMonth(), 1),\n );\n const [yearView, setYearView] = useState(false);\n\n const weekdays = useMemo(\n () => weekdayLabels(weekStartsOn, locale),\n [weekStartsOn, locale],\n );\n const cells = useMemo(\n () =>\n buildMonthMatrix(display.getFullYear(), display.getMonth(), weekStartsOn),\n [display, weekStartsOn],\n );\n\n const minDay = min ? startOfDay(min) : null;\n const maxDay = max ? startOfDay(max) : null;\n const isDisabled = (d: Date) =>\n (minDay != null && d < minDay) || (maxDay != null && d > maxDay);\n\n const years = useMemo(() => {\n const base = display.getFullYear();\n return Array.from({length: 24}, (_, i) => base - 10 + i);\n }, [display]);\n\n return (\n <div className=\"flex flex-col px-3\">\n {/* Month/year navigation */}\n <div className=\"flex h-14 items-center justify-between\">\n <button\n aria-label={labels?.selectYear ?? \"Select year\"}\n className=\"state-layer flex h-9 cursor-pointer items-center gap-1 rounded-full pr-2 pl-3 text-label-large text-on-surface-variant\"\n onClick={() => setYearView((v) => !v)}\n type=\"button\">\n {formatMonthYear(display, locale)}\n <span\n className={cn(\n \"transition-transform duration-200\",\n yearView && \"rotate-180\",\n )}>\n {chevron(\"down\")}\n </span>\n </button>\n <div className={cn(\"flex gap-1\", yearView && \"invisible\")}>\n <button\n aria-label={labels?.previousMonth ?? \"Previous month\"}\n className=\"state-layer flex h-12 w-12 cursor-pointer items-center justify-center rounded-full text-on-surface-variant\"\n onClick={() => setDisplay((d) => addMonths(d, -1))}\n type=\"button\">\n {chevron(\"left\")}\n </button>\n <button\n aria-label={labels?.nextMonth ?? \"Next month\"}\n className=\"state-layer flex h-12 w-12 cursor-pointer items-center justify-center rounded-full text-on-surface-variant\"\n onClick={() => setDisplay((d) => addMonths(d, 1))}\n type=\"button\">\n {chevron(\"right\")}\n </button>\n </div>\n </div>\n\n {yearView ? (\n <div className=\"grid max-h-[268px] grid-cols-3 gap-0 overflow-y-auto py-4\">\n {years.map((year) => {\n const selected = display.getFullYear() === year;\n return (\n <div className=\"flex items-center justify-center py-1\" key={year}>\n <button\n aria-pressed={selected}\n className={cn(\n \"state-layer flex h-9 w-18 cursor-pointer items-center justify-center rounded-full text-body-large\",\n selected\n ? \"bg-primary text-on-primary\"\n : \"text-on-surface-variant\",\n )}\n onClick={() => {\n setDisplay((d) => new Date(year, d.getMonth(), 1));\n setYearView(false);\n }}\n type=\"button\">\n {year}\n </button>\n </div>\n );\n })}\n </div>\n ) : (\n <>\n {/* Weekday labels */}\n <div className=\"grid grid-cols-7\">\n {weekdays.map((w, i) => (\n <div\n className=\"flex h-12 items-center justify-center text-body-large text-on-surface\"\n key={i}>\n {w}\n </div>\n ))}\n </div>\n {/* Days are individually-labelled buttons reachable by\n * Tab; no role=\"grid\" (that would require a full grid\n * keyboard model the picker does not implement). */}\n <div className=\"grid grid-cols-7\">\n {cells.map((d, i) => {\n if (!d) return <div className=\"h-12\" key={i} />;\n const disabled = isDisabled(d);\n const isStart = isSameDay(d, rangeStart);\n const isEnd = isSameDay(d, rangeEnd);\n const selected = range ? isStart || isEnd : isSameDay(d, value);\n const between =\n range && isWithin(d, rangeStart ?? null, rangeEnd ?? null);\n const isToday = isSameDay(d, today);\n return (\n <div\n className=\"relative flex h-12 items-center justify-center\"\n key={i}>\n {/* Range band */}\n {(between ||\n (range &&\n (isStart || isEnd) &&\n rangeStart &&\n rangeEnd &&\n !isSameDay(rangeStart, rangeEnd))) && (\n <span\n className={cn(\n \"absolute h-10 bg-secondary-container\",\n between && \"inset-x-0\",\n isStart && !between && \"right-0 left-1/2\",\n isEnd && !between && \"right-1/2 left-0\",\n )}\n />\n )}\n <button\n aria-label={formatDayLabel(d, locale)}\n aria-pressed={selected}\n className={cn(\n \"state-layer relative z-10 flex h-10 w-10 cursor-pointer items-center justify-center rounded-full text-body-large\",\n disabled && \"pointer-events-none text-on-surface/38\",\n selected\n ? \"bg-primary text-on-primary\"\n : between\n ? \"text-on-secondary-container\"\n : isToday\n ? \"text-primary ring-1 ring-inset ring-primary\"\n : \"text-on-surface\",\n )}\n disabled={disabled}\n onClick={() => onSelect(d)}\n type=\"button\">\n {d.getDate()}\n </button>\n </div>\n );\n })}\n </div>\n </>\n )}\n </div>\n );\n}\n\nexport {Calendar};\n","import {ReactNode, useContext, useEffect, useId, useRef, useState} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {Button} from \"../button/Button\";\nimport {Dialog} from \"../dialogs/Dialog\";\nimport {DialogContext} from \"../dialogs/_context\";\nimport {IconButton} from \"../button/IconButton\";\nimport {InputOutlined} from \"../text-field/InputOutlined\";\nimport {useOutsideClose} from \"../_useOutsideClose\";\nimport {Calendar, type CalendarLabels} from \"./_Calendar\";\nimport {formatHeadline, formatShort, startOfDay} from \"./_dateUtils\";\n\nconst calendarIcon = (\n <svg aria-hidden className=\"h-6 w-6 fill-current\" viewBox=\"0 0 24 24\">\n <path d=\"M19 4h-1V2h-2v2H8V2H6v2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2zm0 16H5V10h14v10zm0-12H5V6h14v2z\" />\n </svg>\n);\nconst editIcon = (\n <svg aria-hidden className=\"h-6 w-6 fill-current\" viewBox=\"0 0 24 24\">\n <path d=\"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04a1 1 0 0 0 0-1.41l-2.34-2.34a1 1 0 0 0-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z\" />\n </svg>\n);\n\nexport interface DatePickerLabels extends CalendarLabels {\n /** Cancel action. Default \"Cancel\". */\n cancel?: ReactNode;\n /** Confirm/commit action. Default \"OK\". */\n confirm?: ReactNode;\n /** Field label in keyboard-input mode. Default \"Date\". */\n inputLabel?: string;\n /** Field placeholder in keyboard-input mode. Default \"mm/dd/yyyy\". */\n inputPlaceholder?: string;\n /** Supporting line above the headline. Default \"Select date\". */\n supporting?: ReactNode;\n /** Toggle aria-label while in input mode. Default \"Switch to calendar\". */\n switchToCalendar?: string;\n /** Toggle aria-label while in calendar mode. Default \"Switch to keyboard input\". */\n switchToInput?: string;\n}\n\nconst DATE_LABELS: Required<DatePickerLabels> = {\n cancel: \"Cancel\",\n confirm: \"OK\",\n inputLabel: \"Date\",\n inputPlaceholder: \"mm/dd/yyyy\",\n nextMonth: \"Next month\",\n previousMonth: \"Previous month\",\n selectYear: \"Select year\",\n supporting: \"Select date\",\n switchToCalendar: \"Switch to calendar\",\n switchToInput: \"Switch to keyboard input\",\n};\n\nexport interface DatePickerProps {\n /** Start in keyboard-input mode. */\n input?: boolean;\n isVisible: boolean;\n /** Customizable text and accessible names. */\n labels?: DatePickerLabels;\n locale?: string;\n max?: Date | null;\n min?: Date | null;\n onClose: () => void;\n /** Commit (OK button). */\n onConfirm?: (date: Date | null) => void;\n value?: Date | null;\n /** 0 = Sunday … 6 = Saturday. */\n weekStartsOn?: number;\n}\n\n/**\n * M3 modal date picker: a 360×568 dialog (surface-container-high, level 3,\n * extra-large 28) with a 120dp headline header, a calendar/year grid and a\n * keyboard-input toggle. Selection is drafted and committed on OK.\n * `DatePicker.Docked` is the field-anchored dropdown variant.\n */\nfunction DatePicker(props: DatePickerProps) {\n return (\n <Dialog\n className=\"w-90 max-w-none min-w-0 gap-0 p-0\"\n isVisible={props.isVisible}\n onClose={props.onClose}>\n <DatePickerBody {...props} />\n </Dialog>\n );\n}\n\n// Lives inside the Dialog so it remounts each open, re-seeding the draft.\nfunction DatePickerBody({\n input,\n labels,\n locale,\n max,\n min,\n onClose,\n onConfirm,\n value = null,\n weekStartsOn,\n}: DatePickerProps) {\n const l = {...DATE_LABELS, ...labels};\n const [draft, setDraft] = useState<Date | null>(value);\n const [inputMode, setInputMode] = useState(!!input);\n const [text, setText] = useState(formatShort(value, locale));\n // Name the dialog by its supporting line (\"Select date\").\n const {headlineId, setLabelled} = useContext(DialogContext);\n useEffect(() => {\n setLabelled?.(true);\n return () => setLabelled?.(false);\n }, [setLabelled]);\n\n const commit = () => {\n onConfirm?.(draft);\n onClose();\n };\n\n return (\n <div className=\"flex flex-col\">\n {/* Header */}\n <div className=\"flex flex-col gap-1 px-6 pt-4 pb-3\">\n <span\n className=\"text-label-large text-on-surface-variant\"\n id={headlineId}>\n {l.supporting}\n </span>\n <div className=\"flex items-end justify-between\">\n <h2 className=\"text-headline-large text-on-surface-variant\">\n {draft ? formatHeadline(draft, locale) : \"—\"}\n </h2>\n <IconButton\n aria-label={inputMode ? l.switchToCalendar : l.switchToInput}\n icon={inputMode ? calendarIcon : editIcon}\n onClick={() => setInputMode((m) => !m)}\n variant=\"standard\"\n />\n </div>\n </div>\n <div className=\"h-px w-full bg-outline-variant\" />\n\n {/* Body */}\n <div className=\"min-h-[300px] py-2\">\n {inputMode ? (\n <div className=\"px-6 py-2\">\n <InputOutlined\n label={l.inputLabel}\n onChange={(e) => {\n setText(e.target.value);\n const parsed = new Date(e.target.value);\n setDraft(isNaN(parsed.getTime()) ? null : startOfDay(parsed));\n }}\n placeholder={l.inputPlaceholder}\n value={text}\n />\n </div>\n ) : (\n <Calendar\n labels={l}\n locale={locale}\n max={max}\n min={min}\n onSelect={(d) => {\n setDraft(d);\n setText(formatShort(d, locale));\n }}\n value={draft}\n weekStartsOn={weekStartsOn}\n />\n )}\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-6 pt-2 pb-4\">\n <Button onClick={onClose} variant=\"text\">\n {l.cancel}\n </Button>\n <Button onClick={commit} variant=\"text\">\n {l.confirm}\n </Button>\n </div>\n </div>\n );\n}\n\nexport interface DatePickerDockedLabels extends CalendarLabels {\n /** Field label. Default \"Date\". */\n field?: string;\n /** Calendar-open button aria-label. Default \"Open calendar\". */\n openCalendar?: string;\n}\n\nconst DOCKED_LABELS: Required<DatePickerDockedLabels> = {\n field: \"Date\",\n nextMonth: \"Next month\",\n openCalendar: \"Open calendar\",\n previousMonth: \"Previous month\",\n selectYear: \"Select year\",\n};\n\nexport interface DatePickerDockedProps {\n className?: string;\n labels?: DatePickerDockedLabels;\n locale?: string;\n max?: Date | null;\n min?: Date | null;\n onChange?: (date: Date | null) => void;\n value?: Date | null;\n weekStartsOn?: number;\n}\n\n/**\n * M3 docked date picker: an outlined field with a calendar icon that opens\n * a dropdown calendar anchored below it. Selection commits immediately.\n */\nfunction DatePickerDocked({\n className,\n labels,\n locale,\n max,\n min,\n onChange,\n value = null,\n weekStartsOn,\n}: DatePickerDockedProps) {\n const l = {...DOCKED_LABELS, ...labels};\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const popupId = useId();\n useOutsideClose(ref, () => setOpen(false), open);\n\n return (\n <div className={cn(\"relative w-full\", className)} ref={ref}>\n <InputOutlined\n inputClassName=\"cursor-pointer\"\n label={l.field}\n onFocus={() => setOpen(true)}\n readOnly\n rightElement={\n <button\n aria-controls={open ? popupId : undefined}\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-label={l.openCalendar}\n className=\"state-layer flex h-10 w-10 cursor-pointer items-center justify-center rounded-full text-on-surface-variant\"\n onClick={() => setOpen((o) => !o)}\n type=\"button\">\n {calendarIcon}\n </button>\n }\n value={formatShort(value, locale)}\n />\n {open ? (\n <div\n aria-label={l.field}\n className=\"animate-menu-in absolute top-full left-0 z-40 mt-1 w-90 max-w-[calc(100vw-2rem)] overflow-hidden rounded-large bg-surface-container-high py-2 shadow-mm-3 [--menu-clip-bleed:-24px]\"\n id={popupId}\n role=\"dialog\">\n <Calendar\n labels={l}\n locale={locale}\n max={max}\n min={min}\n onSelect={(d) => {\n onChange?.(d);\n setOpen(false);\n }}\n value={value}\n weekStartsOn={weekStartsOn}\n />\n </div>\n ) : null}\n </div>\n );\n}\n\nDatePicker.Docked = DatePickerDocked;\n\nexport {DatePicker};\n","import {ReactNode, useContext, useEffect, useState} from \"react\";\nimport {Button} from \"../button/Button\";\nimport {Dialog} from \"../dialogs/Dialog\";\nimport {DialogContext} from \"../dialogs/_context\";\nimport {Calendar, type CalendarLabels} from \"./_Calendar\";\nimport {formatHeadline, isBefore} from \"./_dateUtils\";\n\nexport type DateRange = [Date | null, Date | null];\n\nexport interface DateRangePickerLabels extends CalendarLabels {\n /** Cancel action. Default \"Cancel\". */\n cancel?: ReactNode;\n /** Confirm/commit action. Default \"OK\". */\n confirm?: ReactNode;\n /** Placeholder for an unset end date. Default \"End\". */\n end?: string;\n /** Placeholder for an unset start date. Default \"Start\". */\n start?: string;\n /** Supporting line above the headline. Default \"Select range\". */\n supporting?: ReactNode;\n}\n\nconst RANGE_LABELS: Required<DateRangePickerLabels> = {\n cancel: \"Cancel\",\n confirm: \"OK\",\n end: \"End\",\n nextMonth: \"Next month\",\n previousMonth: \"Previous month\",\n selectYear: \"Select year\",\n start: \"Start\",\n supporting: \"Select range\",\n};\n\nexport interface DateRangePickerProps {\n isVisible: boolean;\n labels?: DateRangePickerLabels;\n locale?: string;\n max?: Date | null;\n min?: Date | null;\n onClose: () => void;\n /** Commit (OK button). */\n onConfirm?: (range: DateRange) => void;\n value?: DateRange;\n weekStartsOn?: number;\n}\n\n/**\n * M3 modal date range picker: drafts a start/end pair (first tap sets the\n * start, the next sets the end) with the days between highlighted in\n * secondary-container, committed on OK. (The Android full-screen scrolling-\n * months layout is simplified to the standard navigable calendar.)\n */\nfunction DateRangePicker(props: DateRangePickerProps) {\n return (\n <Dialog\n className=\"w-90 max-w-none min-w-0 gap-0 p-0\"\n isVisible={props.isVisible}\n onClose={props.onClose}>\n <DateRangeBody {...props} />\n </Dialog>\n );\n}\n\nfunction DateRangeBody({\n labels,\n locale,\n max,\n min,\n onClose,\n onConfirm,\n value = [null, null],\n weekStartsOn,\n}: DateRangePickerProps) {\n const l = {...RANGE_LABELS, ...labels};\n const [start, setStart] = useState<Date | null>(value[0]);\n const [end, setEnd] = useState<Date | null>(value[1]);\n // Name the dialog by its supporting line (\"Select range\").\n const {headlineId, setLabelled} = useContext(DialogContext);\n useEffect(() => {\n setLabelled?.(true);\n return () => setLabelled?.(false);\n }, [setLabelled]);\n\n const select = (d: Date) => {\n // No start, or a complete range exists → begin a new range.\n if (!start || (start && end)) {\n setStart(d);\n setEnd(null);\n return;\n }\n // Have a start, picking the end.\n if (isBefore(d, start)) {\n setStart(d);\n setEnd(null);\n } else {\n setEnd(d);\n }\n };\n\n const headline =\n start && end\n ? `${formatHeadline(start, locale)} – ${formatHeadline(end, locale)}`\n : start\n ? `${formatHeadline(start, locale)} – ${l.end}`\n : `${l.start} – ${l.end}`;\n\n return (\n <div className=\"flex flex-col\">\n <div className=\"flex flex-col gap-1 px-6 pt-4 pb-3\">\n <span\n className=\"text-label-large text-on-surface-variant\"\n id={headlineId}>\n {l.supporting}\n </span>\n <h2 className=\"text-title-large text-on-surface-variant\">{headline}</h2>\n </div>\n <div className=\"h-px w-full bg-outline-variant\" />\n <div className=\"min-h-[300px] py-2\">\n <Calendar\n labels={l}\n locale={locale}\n max={max}\n min={min}\n onSelect={select}\n range\n rangeEnd={end}\n rangeStart={start}\n weekStartsOn={weekStartsOn}\n />\n </div>\n <div className=\"flex justify-end gap-2 px-6 pt-2 pb-4\">\n <Button onClick={onClose} variant=\"text\">\n {l.cancel}\n </Button>\n <Button\n onClick={() => {\n onConfirm?.([start, end]);\n onClose();\n }}\n variant=\"text\">\n {l.confirm}\n </Button>\n </div>\n </div>\n );\n}\n\nexport {DateRangePicker};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface DividerProps extends ComponentProps<\"hr\"> {\n /**\n * Inset the rule 16dp (M3 inset dividers, m3.material.io specs).\n * `\"start\"` indents the leading edge only — the list divider, left\n * 16 / right 0; `\"middle\"` both edges (middle-inset, 16/16); `\"end\"`\n * the trailing edge only. Omit for a full-width rule.\n */\n inset?: \"start\" | \"middle\" | \"end\";\n}\n\n// Logical margins (RTL-aware) shrink the rule from each edge; w-auto lets\n// the block <hr> fill the remaining width.\nconst INSET = {\n start: \"ms-4 w-auto\",\n middle: \"mx-4 w-auto\",\n end: \"me-4 w-auto\",\n} as const;\n\n/** M3 divider: 1px rule in outline-variant (never `outline`). */\nfunction Divider({className, inset, ...props}: DividerProps) {\n return (\n <hr\n className={cn(\n \"my-4 h-px w-full border-0 bg-outline-variant\",\n inset && INSET[inset],\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {Divider};\n","import {\n cloneElement,\n isValidElement,\n type ReactElement,\n ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useOutsideClose} from \"../_useOutsideClose\";\nimport {Menu} from \"../menu/Menu\";\nimport {MenuItem} from \"../menu/MenuItem\";\n\nexport interface DropdownProps {\n /** Detach the menu from the trigger with a 4dp gap. */\n apart?: boolean;\n /** Trigger content. */\n children: ReactNode;\n className?: string;\n /** Menu content (Dropdown.Item / Menu.Item list). */\n menu?: ReactNode;\n /** Class for the menu container. */\n menuClassName?: string;\n /** Vibrant (tertiary-based) color scheme instead of standard. */\n vibrant?: boolean;\n}\n\nconst FOCUSABLE =\n 'a[href],button:not([disabled]),input,select,textarea,[tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Trigger + anchor for the shared M3E vertical {@link Menu}: toggles the\n * menu below the trigger and closes on outside click, item activation or\n * Escape (ephemeral UI state). Compose the menu with Dropdown.Item\n * (an alias of Menu.Item) — or Menu.Label / Menu.Divider for groups.\n */\nfunction Dropdown({\n apart,\n children,\n className,\n menu,\n menuClassName,\n vibrant,\n}: DropdownProps) {\n const [open, setOpen] = useState(false);\n const wrapper = useRef<HTMLDivElement>(null);\n const trigger = useRef<HTMLDivElement>(null);\n const wasOpen = useRef(false);\n const menuId = useId();\n const {exiting, mounted} = useDismissable(open, 150);\n\n useOutsideClose(wrapper, () => setOpen(false), open);\n\n // The popup ARIA belongs on the focusable trigger control, not the\n // wrapper: clone a single element child to merge the menu-button state.\n const triggerNode = isValidElement(children)\n ? cloneElement(\n children as ReactElement<{\n \"aria-controls\"?: string;\n \"aria-expanded\"?: boolean;\n \"aria-haspopup\"?: \"menu\";\n }>,\n {\n \"aria-controls\": open ? menuId : undefined,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n },\n )\n : children;\n\n // Return focus to the trigger when the menu closes (WAI-ARIA / mw).\n useEffect(() => {\n if (wasOpen.current && !open) {\n trigger.current?.querySelector<HTMLElement>(FOCUSABLE)?.focus();\n }\n wasOpen.current = open;\n }, [open]);\n\n return (\n <div\n className={cn(\"relative flex w-fit cursor-pointer\", className)}\n ref={wrapper}>\n <div\n className=\"contents\"\n onClick={() => setOpen((active) => !active)}\n ref={trigger}>\n {triggerNode}\n </div>\n {mounted ? (\n <div className=\"absolute top-full left-0 z-30 flex w-full flex-col\">\n <Menu\n className={cn(apart && \"mt-1\", menuClassName)}\n exiting={exiting}\n id={menuId}\n onClose={() => setOpen(false)}\n vibrant={vibrant}>\n {menu}\n </Menu>\n </div>\n ) : null}\n </div>\n );\n}\n\nDropdown.Item = MenuItem;\n\nexport {Dropdown};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type ImageRowProps = ComponentProps<\"div\">;\n\n/** Horizontal row inside a Gallery (8dp gap). */\nfunction ImageRow({children, className, ...props}: ImageRowProps) {\n return (\n <div className={cn(\"flex flex-row gap-2\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nexport {ImageRow};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {ImageRow} from \"./ImageRow\";\n\nexport type GalleryProps = ComponentProps<\"div\">;\n\n/**\n * Stacked media gallery (8dp gaps). Compose rows with Gallery.Row and any\n * media (e.g. Img) inside.\n */\nfunction Gallery({children, className, ...props}: GalleryProps) {\n return (\n <div className={cn(\"flex size-full flex-col gap-2\", className)} {...props}>\n {children}\n </div>\n );\n}\n\nGallery.Row = ImageRow;\n\nexport {Gallery};\n","/**\n * Router-agnostic helpers for navigation components. The consumer passes\n * the current pathname (from whatever router they use) and the component\n * derives its active state.\n */\n\nfunction normalize(path: string): string {\n const noQuery = path.split(/[?#]/, 1)[0] ?? path;\n if (noQuery.length > 1 && noQuery.endsWith(\"/\")) {\n return noQuery.slice(0, -1);\n }\n return noQuery;\n}\n\n/**\n * True when `currentPath` matches `href` exactly, or is nested under it\n * (e.g. href=\"/docs\" is active on \"/docs/intro\"). Root (\"/\") only matches\n * exactly.\n */\nexport function isActivePath(\n href: string | undefined | null,\n currentPath: string | undefined | null,\n): boolean {\n if (!href || !currentPath) return false;\n const target = normalize(href);\n const current = normalize(currentPath);\n if (target === current) return true;\n if (target === \"/\") return false;\n return current.startsWith(`${target}/`);\n}\n\n/**\n * Resolution order for the active state of a navigation item:\n * explicit `active` prop wins; otherwise it derives from `href` +\n * `currentPath`.\n */\nexport function resolveActive(\n active: boolean | undefined,\n href: string | undefined,\n currentPath: string | undefined | null,\n): boolean {\n if (typeof active === \"boolean\") return active;\n return isActivePath(href, currentPath);\n}\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {isActivePath} from \"../../utils/navigation\";\n\nexport interface LinkBoxProps extends ComponentProps<\"a\"> {\n /** Explicit current-page state (heavier underline + aria-current);\n * otherwise derived from href + currentPath. */\n active?: boolean;\n /** Current pathname from the consumer's router. */\n currentPath?: string;\n}\n\n/**\n * Text link that reads as a link: primary color, underlined at rest. Native\n * <a>; client-side routing via onClick or a wrapper. The underline is always\n * present (not color-only) so an inline link is distinguishable from body\n * text without relying on color — WCAG 1.4.1 (M3 publishes no link spec; the\n * primary-vs-text contrast is only 2.64:1 light / 1.31:1 dark). The current\n * page (active) gets a heavier underline, no color change.\n */\nfunction LinkBox({\n active,\n children,\n className,\n currentPath,\n href,\n ...props\n}: LinkBoxProps) {\n const isActive = active ?? isActivePath(href, currentPath);\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n \"w-fit cursor-pointer text-primary underline decoration-1 underline-offset-2\",\n isActive && \"decoration-2\",\n className,\n )}\n href={href}\n {...props}>\n {children}\n </a>\n );\n}\n\nexport {LinkBox};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type LinkContainerProps = ComponentProps<\"a\">;\n\n/**\n * Block-level link wrapping arbitrary content (cards, media...). Adds no\n * text styling of its own. Native <a>; client-side routing via onClick or\n * a wrapper.\n */\nfunction LinkContainer({children, className, ...props}: LinkContainerProps) {\n return (\n <a className={cn(\"block w-fit cursor-pointer\", className)} {...props}>\n {children}\n </a>\n );\n}\n\nexport {LinkContainer};\n","// Internal: lets List tell its items they're in the M3 Expressive variant\n// (filled rounded tiles with a shape that morphs on interaction). Not\n// exported from barrels.\nimport {createContext} from \"react\";\n\nexport const ListContext = createContext<{expressive: boolean}>({\n expressive: false,\n});\n","import {MouseEventHandler, ReactNode, useContext} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {ListContext} from \"./_context\";\n\nexport interface ListItemProps {\n /** Supporting text (body-medium). Switches the item to 72dp. */\n body?: ReactNode;\n /** Custom content replacing the text block. */\n children?: ReactNode;\n className?: string;\n disabled?: boolean;\n /** Primary text (body-large). */\n headline?: ReactNode;\n /** Renders the item as a native <a>. */\n href?: string;\n /** Overline (label-small). */\n label?: ReactNode;\n leftElement?: ReactNode;\n onClick?: MouseEventHandler<HTMLElement>;\n rightElement?: ReactNode;\n /** Selected: secondary-container fill + on-secondary-container content\n * (visual; the consumer owns selection semantics). */\n selected?: boolean;\n target?: string;\n}\n\n/**\n * M3 list item: 56dp one-line, 72dp with supporting text. Interactive\n * (href/onClick) items get a state layer; navigation uses a native <a> —\n * client-side routing via onClick or a wrapper.\n */\nfunction ListItem({\n body,\n children,\n className,\n disabled,\n headline,\n href,\n label,\n leftElement,\n onClick,\n rightElement,\n selected,\n target,\n}: ListItemProps) {\n useRipple();\n const {expressive} = useContext(ListContext);\n const interactive = Boolean(href || onClick) && !disabled;\n\n // M3 list heights by text-row count: 1 → 56dp, 2 → 72dp, 3 → 88dp. A\n // three-line item top-aligns its leading + text (the trailing element\n // stays vertically centered, per the spec measurements).\n const lines = (label ? 1 : 0) + (headline ? 1 : 0) + (body ? 1 : 0);\n const threeLine = lines >= 3;\n\n // Secondary content (leading/trailing icons, overline, supporting text).\n const subColor = disabled\n ? \"text-on-surface/38\"\n : selected\n ? \"text-on-secondary-container\"\n : \"text-on-surface-variant\";\n\n const rowClass = cn(\n // 16dp leading/trailing space, 12dp between elements (M3 spacing).\n \"flex w-full flex-row gap-3 px-4 text-left\",\n threeLine\n ? \"min-h-[88px] items-start py-3\"\n : cn(body ? \"min-h-[72px]\" : \"min-h-14\", \"items-center py-2.5\"),\n // Expressive: filled (surface-container) tile whose corner morphs on\n // interaction — rest extra-small (4) → hover medium (12) → focus/\n // pressed large (16). The plain variant stays transparent + rectangular.\n expressive &&\n cn(\n \"rounded-extra-small bg-surface-container transition-[border-radius] duration-200 ease-emphasized\",\n interactive &&\n !selected &&\n \"hover:rounded-medium focus-visible:rounded-large active:rounded-large\",\n ),\n // Selected: secondary-container, corner-large in both variants (M3\n // token ItemSelectedContainerShape = CornerLarge).\n selected && !disabled\n ? \"rounded-large bg-secondary-container text-on-secondary-container\"\n : \"text-on-surface\",\n interactive && \"state-layer cursor-pointer\",\n disabled && \"cursor-not-allowed text-on-surface/38\",\n className,\n );\n\n const content = (\n <>\n {leftElement ? (\n <span\n className={cn(\n \"flex shrink-0 items-center justify-center leading-none\",\n // 24dp plain icon box, 20dp expressive.\n expressive ? \"min-h-5 min-w-5\" : \"min-h-6 min-w-6\",\n subColor,\n )}>\n {leftElement}\n </span>\n ) : null}\n <span className=\"flex w-full min-w-0 flex-col\">\n {label ? (\n <span className={cn(\"text-label-small\", subColor)}>{label}</span>\n ) : null}\n {headline ? (\n <span className=\"truncate text-body-large\">{headline}</span>\n ) : null}\n {body ? (\n <span className={cn(\"text-body-medium\", subColor)}>{body}</span>\n ) : null}\n {children}\n </span>\n {rightElement ? (\n <span\n className={cn(\n \"flex shrink-0 items-center justify-center self-center\",\n subColor,\n )}>\n {rightElement}\n </span>\n ) : null}\n </>\n );\n\n if (href && !disabled) {\n return (\n <li className=\"flex w-full\">\n <a className={rowClass} href={href} onClick={onClick} target={target}>\n {content}\n </a>\n </li>\n );\n }\n if (onClick && !disabled) {\n return (\n <li className=\"flex w-full\">\n <button className={rowClass} onClick={onClick} type=\"button\">\n {content}\n </button>\n </li>\n );\n }\n return <li className={rowClass}>{content}</li>;\n}\n\nexport {ListItem};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {ListContext} from \"./_context\";\nimport {ListItem} from \"./ListItem\";\n\nexport interface ListProps extends ComponentProps<\"ul\"> {\n /** M3 list style. `expressive` (default, recommended for new designs):\n * filled (surface-container) rounded tiles separated by a 2dp gap, with a\n * container shape that morphs on interaction (4 → 12 → 16dp) and 20dp\n * icons. `plain`: the transparent, rectangular list — still available in\n * M3 Expressive. */\n variant?: \"expressive\" | \"plain\";\n}\n\n/**\n * M3 Expressive list container. The `expressive` variant (default) renders\n * filled, gapped tiles; `plain` is the transparent, rectangular list that the\n * spec keeps available. Transparent container (inherits the surface it sits\n * on, e.g. inside a sheet), 8dp vertical padding. Compose with List.Item.\n */\nfunction List({\n children,\n className,\n variant = \"expressive\",\n ...props\n}: ListProps) {\n const expressive = variant !== \"plain\";\n return (\n <ListContext.Provider value={{expressive}}>\n <ul\n className={cn(\n \"flex w-full flex-col bg-transparent py-2\",\n // Expressive items are separate tiles with a 2dp gap.\n expressive && \"gap-0.5\",\n className,\n )}\n {...props}>\n {children}\n </ul>\n </ListContext.Provider>\n );\n}\n\nList.Item = ListItem;\n\nexport {List};\n","// Internal: lets NavigationBar tell its items which layout to render\n// (vertical pills vs horizontal pills). Not exported from public barrels.\nimport {createContext} from \"react\";\n\nexport const NavBarContext = createContext<{horizontal: boolean}>({\n horizontal: false,\n});\n","import {MouseEventHandler, ReactNode, useContext} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {resolveActive} from \"../../utils/navigation\";\nimport {DotBadge} from \"../badge/DotBadge\";\nimport {OnIconBadge} from \"../badge/OnIconBadge\";\nimport {NavBarContext} from \"./_context\";\n\nexport interface NavBarItemProps {\n /** Accessible name for icon-only items (when no `label` is shown). */\n \"aria-label\"?: string;\n /** Accessible name via an element id (alternative to aria-label). */\n \"aria-labelledby\"?: string;\n /** Explicit active state; otherwise derived from href + currentPath. */\n active?: boolean;\n /** Icon for the active state (spec: the filled variant). */\n activeIcon?: ReactNode;\n badge?: boolean;\n badgeColor?: string;\n badgeText?: string;\n className?: string;\n /** Current pathname from the consumer's router. */\n currentPath?: string;\n dotBadge?: boolean;\n href?: string;\n icon?: ReactNode;\n label?: ReactNode;\n onClick?: MouseEventHandler<HTMLElement>;\n target?: string;\n}\n\n/**\n * M3E navigation bar destination. Vertical (default): 32x56 indicator\n * pill over the 24 icon, `label-medium` below; horizontal (bar with\n * `horizontal`): a 40dp pill holding icon + label. The indicator springs\n * its width/alpha from the center on selection and hosts the press\n * ripple. Native <a> when href is given.\n */\nfunction NavBarItem({\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n active,\n activeIcon,\n badge,\n badgeColor,\n badgeText,\n className,\n currentPath,\n dotBadge,\n href,\n icon,\n label,\n onClick,\n target,\n}: NavBarItemProps) {\n useRipple();\n const {horizontal} = useContext(NavBarContext);\n const isActive = resolveActive(active, href, currentPath);\n const Comp = href ? \"a\" : \"button\";\n\n const iconNode = (\n <span className=\"navIcon\">\n <Icon icon={isActive && activeIcon ? activeIcon : icon} size={24} />\n {badge ? <OnIconBadge className={badgeColor} count={badgeText} /> : null}\n {dotBadge ? (\n <DotBadge className={cn(\"absolute top-0 right-0\", badgeColor)} />\n ) : null}\n </span>\n );\n\n return (\n <Comp\n aria-current={isActive ? \"page\" : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n className={cn(\n \"navItem group\",\n horizontal ? \"navItemH\" : \"navItemV\",\n isActive && \"navActive\",\n className,\n )}\n href={href}\n onClick={onClick}\n target={target}\n type={href ? undefined : \"button\"}>\n {horizontal ? (\n <span className=\"navPill navPillRow state-layer\">\n <span aria-hidden className=\"navIndicator\" />\n {iconNode}\n {label ? <span className=\"navLabel\">{label}</span> : null}\n </span>\n ) : (\n <>\n <span className=\"navPill state-layer\">\n <span aria-hidden className=\"navIndicator\" />\n <span aria-hidden className=\"navHit\" />\n {iconNode}\n </span>\n {label ? <span className=\"navLabel\">{label}</span> : null}\n </>\n )}\n </Comp>\n );\n}\n\nexport {NavBarItem};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {NavBarContext} from \"./_context\";\nimport {NavBarItem} from \"./NavBarItem\";\n\nexport interface NavigationBarProps extends ComponentProps<\"nav\"> {\n /** Horizontal navigation items (icon beside label inside a 40dp\n * pill) — the spec configuration for medium windows. Items become\n * fixed-width and centered. */\n horizontal?: boolean;\n}\n\n/**\n * M3E flexible navigation bar: height 64, surface-container, 3–5\n * destinations. Vertical items split the width equally; `horizontal`\n * switches to fixed-width centered items for medium windows. Compose with\n * NavigationBar.Item.\n */\nfunction NavigationBar({\n children,\n className,\n horizontal,\n ...props\n}: NavigationBarProps) {\n return (\n <nav\n className={cn(\"navBar\", horizontal && \"navCentered\", className)}\n {...props}>\n <NavBarContext.Provider value={{horizontal: !!horizontal}}>\n {children}\n </NavBarContext.Provider>\n </nav>\n );\n}\n\nNavigationBar.Item = NavBarItem;\n\nexport {NavigationBar};\n","// Internal: the navigation rail's menu glyph. M3 mandates the icon swap\n// `menu` -> `menu_open` when the rail expands (\"the menu icon should change to\n// represent that it can be collapsed\"), so it is NOT customizable — the library\n// draws it (currentColor, recolored by the IconButton) instead of taking it as\n// a prop. Official Material Symbols Rounded paths (viewBox 0 -960 960 960).\nconst MENU =\n \"M150-240q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Zm0-210q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Zm0-210q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Z\";\n\nconst MENU_OPEN =\n \"M150-240q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h460q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Zm627-74L630-460q-9-9-9-21t9-21l146-146q9-9 21.5-9t21.5 9q9 9 9 21.5t-9 21.5L695-481l125 125q9 9 9 21t-9 21q-9 9-21.5 9t-21.5-9ZM150-452q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h340q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Zm0-208q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h460q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Z\";\n\n/** The rail's menu glyph: `menu` collapsed, `menu_open` expanded. */\nfunction MenuGlyph({open}: {open: boolean}) {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={24}\n viewBox=\"0 -960 960 960\"\n width={24}>\n <path d={open ? MENU_OPEN : MENU} />\n </svg>\n );\n}\n\nexport {MenuGlyph};\n","import {MouseEventHandler, ReactNode} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {resolveActive} from \"../../utils/navigation\";\nimport {DotBadge} from \"../badge/DotBadge\";\nimport {OnIconBadge} from \"../badge/OnIconBadge\";\n\nexport interface NavRailItemProps {\n /** Explicit active state; otherwise derived from href + currentPath. */\n active?: boolean;\n /** Icon for the active state (spec: the filled variant). */\n activeIcon?: ReactNode;\n badge?: boolean;\n badgeColor?: string;\n badgeText?: string;\n className?: string;\n /** Current pathname from the consumer's router. */\n currentPath?: string;\n dotBadge?: boolean;\n href?: string;\n icon?: ReactNode;\n label?: ReactNode;\n onClick?: MouseEventHandler<HTMLElement>;\n target?: string;\n}\n\n/**\n * M3E navigation rail destination: a single always-row pill whose width\n * is driven live by the rail's animating width (collapsed 56x32 with the\n * `label-medium` below; expanded a full-width 56dp `label-large` row).\n * The below-label collapses while the side-label reveals inside the\n * growing pill, so the morph is continuous like Compose's. The indicator\n * springs width/alpha from the center on selection and hosts the press\n * ripple. Native <a> when href is given.\n */\nfunction NavRailItem({\n active,\n activeIcon,\n badge,\n badgeColor,\n badgeText,\n className,\n currentPath,\n dotBadge,\n href,\n icon,\n label,\n onClick,\n target,\n}: NavRailItemProps) {\n useRipple();\n const isActive = resolveActive(active, href, currentPath);\n const Comp = href ? \"a\" : \"button\";\n\n return (\n <Comp\n aria-current={isActive ? \"page\" : undefined}\n className={cn(\n \"railItem navItem group\",\n isActive && \"navActive\",\n className,\n )}\n href={href}\n onClick={onClick}\n target={target}\n type={href ? undefined : \"button\"}>\n <span className=\"navPill railRowPill state-layer\">\n <span aria-hidden className=\"navIndicator\" />\n <span aria-hidden className=\"navHit\" />\n <span className=\"navIcon\">\n <Icon icon={isActive && activeIcon ? activeIcon : icon} size={24} />\n {badge ? (\n <OnIconBadge className={badgeColor} count={badgeText} />\n ) : null}\n {dotBadge ? (\n <DotBadge className={cn(\"absolute top-0 right-0\", badgeColor)} />\n ) : null}\n </span>\n {label ? (\n <span aria-hidden className=\"railSide\">\n <span className=\"navLabel\">{label}</span>\n </span>\n ) : null}\n </span>\n {label ? (\n <span className=\"railBelow\">\n <span className=\"navLabel\">{label}</span>\n </span>\n ) : null}\n </Comp>\n );\n}\n\nexport {NavRailItem};\n","import {MouseEventHandler, ReactNode, useEffect} from \"react\";\nimport {Icon} from \"../../elements/common/Icon\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\nimport {IconButton} from \"../button/IconButton\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {MenuGlyph} from \"./_MenuGlyph\";\nimport {NavRailItem} from \"./NavRailItem\";\n\nexport interface NavigationRailLabels {\n /** aria-label for the menu button while collapsed (click expands).\n * Default \"Expand\". */\n expand?: string;\n /** aria-label for the menu button while expanded (click collapses).\n * Default \"Collapse\". */\n collapse?: string;\n /** Accessible name for the FAB. Falls back to a string `fabLabel`; set\n * this to name an icon-only FAB (the label is visually hidden while the\n * rail is collapsed). */\n fab?: string;\n}\n\nconst NAVIGATION_RAIL_LABELS: Required<NavigationRailLabels> = {\n expand: \"Expand\",\n collapse: \"Collapse\",\n fab: \"\",\n};\n\nexport interface NavigationRailProps {\n /** Bottom-aligned slot. */\n bottom?: ReactNode;\n /** Destinations (NavigationRail.Item list). */\n children?: ReactNode;\n className?: string;\n /** Expanded rail (220dp): items morph to full-width rows and the FAB\n * extends. Drive it from the menu button (rendered when `onMenuClick`\n * is set). */\n expanded?: boolean;\n /** FAB icon (24px box). Renders the rail FAB, which morphs into an\n * extended FAB while the rail expands. */\n fabIcon?: ReactNode;\n /** Extended-FAB label revealed when expanded. */\n fabLabel?: ReactNode;\n /** Customizable accessible names (the menu button's aria-label). */\n labels?: NavigationRailLabels;\n /** Icon for the menu button while collapsed. Defaults to the M3 `menu`\n * glyph drawn by the library. */\n menuIcon?: ReactNode;\n /** Icon for the menu button while expanded. Defaults to the M3\n * `menu_open` glyph drawn by the library. */\n menuOpenIcon?: ReactNode;\n /** Toggle handler for the menu button. Providing it renders the menu\n * button above the FAB; the library draws the default M3 menu icon,\n * swapping `menu` → `menu_open` with `expanded` (override either glyph\n * with `menuIcon`/`menuOpenIcon`). Wire it to flip `expanded`. */\n onMenuClick?: MouseEventHandler<HTMLButtonElement>;\n /** The expanded state overlays the content as a full-window modal\n * drawer (fixed full height matching the 32% scrim, surface-container,\n * level 2, large end corners) instead of pushing it. The collapsed\n * footprint stays in the layout; the overlay surface eases back to the\n * resting rail as it collapses on close. */\n modal?: boolean;\n /** 80dp collapsed width instead of the default 96dp. */\n narrow?: boolean;\n onFabClick?: MouseEventHandler<HTMLButtonElement>;\n /** Modal dismiss (scrim click / Escape). */\n onClose?: () => void;\n}\n\n/**\n * M3E navigation rail: collapsed 96dp (80 with `narrow`) on `surface`\n * with 44dp top spacing; `expanded` morphs it to a 220dp rail with\n * full-width row items (the spec's replacement for the navigation\n * drawer), springing the width (default-spatial; fast-spatial when\n * `modal`) while item faces crossfade. Compose with NavigationRail.Item.\n */\nfunction NavigationRail({\n bottom,\n children,\n className,\n expanded,\n fabIcon,\n fabLabel,\n labels,\n menuIcon,\n menuOpenIcon,\n modal,\n narrow,\n onFabClick,\n onClose,\n onMenuClick,\n}: NavigationRailProps) {\n useRipple();\n const l = {...NAVIGATION_RAIL_LABELS, ...labels};\n const fabAriaLabel =\n l.fab || (typeof fabLabel === \"string\" ? fabLabel : undefined);\n const isModalOpen = !!modal && !!expanded;\n const scrim = useDismissable(isModalOpen, 250);\n // `.railModalOpen` pins the overlay `fixed` to the full window height (like\n // the scrim) while OPEN (synchronously via `expanded`, not the post-paint\n // `scrim.mounted` which lags a frame) AND while CLOSING (`scrim.exiting`),\n // so the drawer keeps the available height through the collapse. The surface\n // (fill/shadow/corners) rides `railExpanded` so it eases out in lockstep\n // with the width — a smooth deflate (see styles.css for why this is\n // preferred over Compose's constant-surface + layer unmount).\n const modalOpen = !!modal && (!!expanded || scrim.exiting);\n\n useEffect(() => {\n if (!isModalOpen || !onClose) return;\n const handler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [isModalOpen, onClose]);\n\n const rail = (\n <nav\n className={cn(\n \"rail\",\n narrow && \"railNarrow\",\n expanded && \"railExpanded\",\n modal && \"railModal\",\n modalOpen && \"railModalOpen\",\n className,\n )}>\n {onMenuClick || fabIcon ? (\n <div className=\"railHeader\">\n {onMenuClick ? (\n <div className=\"railSlot\">\n <IconButton\n aria-expanded={!!expanded}\n aria-label={expanded ? l.collapse : l.expand}\n icon={\n expanded\n ? (menuOpenIcon ?? <MenuGlyph open />)\n : (menuIcon ?? <MenuGlyph open={false} />)\n }\n onClick={onMenuClick}\n variant=\"standard\"\n />\n </div>\n ) : null}\n {fabIcon ? (\n <button\n aria-label={fabAriaLabel}\n className=\"railFab state-layer\"\n onClick={onFabClick}\n type=\"button\">\n <Icon icon={fabIcon} size={24} />\n <span className=\"railFabLabel\">\n <span>{fabLabel}</span>\n </span>\n </button>\n ) : null}\n </div>\n ) : null}\n <div className=\"railItems\">{children}</div>\n {bottom ? (\n <div className=\"railBottom\">\n <div className=\"railSlot\">{bottom}</div>\n </div>\n ) : null}\n </nav>\n );\n\n if (!modal) return rail;\n\n return (\n <div className={cn(\"relative h-full\", narrow ? \"w-20\" : \"w-24\")}>\n {scrim.mounted ? (\n <div\n className={cn(\n \"fixed inset-0 z-40 bg-scrim/32\",\n scrim.exiting\n ? \"animate-scrim-drawer-out\"\n : \"animate-scrim-drawer-in\",\n )}\n onClick={onClose}\n />\n ) : null}\n {rail}\n </div>\n );\n}\n\nNavigationRail.Item = NavRailItem;\n\nexport {NavigationRail};\n","import {\n cloneElement,\n isValidElement,\n type ReactElement,\n ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useOutsideClose} from \"../_useOutsideClose\";\nimport {Menu} from \"../menu/Menu\";\nimport {MenuItem} from \"../menu/MenuItem\";\n\nexport interface OverflowMenuProps {\n bottomLeft?: boolean;\n bottomRight?: boolean;\n /** Trigger content (usually an IconButton). */\n children?: ReactNode;\n className?: string;\n /** Menu content (OverflowMenu.Item / Menu.Item list). */\n menu?: ReactNode;\n /** Class for the menu container. */\n menuClassName?: string;\n topLeft?: boolean;\n topRight?: boolean;\n /** Vibrant (tertiary-based) color scheme instead of standard. */\n vibrant?: boolean;\n}\n\nconst FOCUSABLE =\n 'a[href],button:not([disabled]),input,select,textarea,[tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Contextual menu anchored to a corner of its trigger, over the shared M3E\n * vertical {@link Menu}. Position via topLeft/topRight/bottomLeft/\n * bottomRight (default bottomRight); compose with OverflowMenu.Item\n * (an alias of Menu.Item), Menu.Label and Menu.Divider.\n */\nfunction OverflowMenu({\n bottomLeft,\n bottomRight,\n children,\n className,\n menu,\n menuClassName,\n topLeft,\n topRight,\n vibrant,\n}: OverflowMenuProps) {\n const [open, setOpen] = useState(false);\n const wrapper = useRef<HTMLDivElement>(null);\n const trigger = useRef<HTMLDivElement>(null);\n const wasOpen = useRef(false);\n const menuId = useId();\n const noPosition = !topLeft && !topRight && !bottomLeft && !bottomRight;\n const opensUp = Boolean(topLeft || topRight);\n const {exiting, mounted} = useDismissable(open, 150);\n\n useOutsideClose(wrapper, () => setOpen(false), open);\n\n // The popup ARIA belongs on the focusable trigger control, not the\n // wrapper: clone a single element child to merge the menu-button state.\n const triggerNode = isValidElement(children)\n ? cloneElement(\n children as ReactElement<{\n \"aria-controls\"?: string;\n \"aria-expanded\"?: boolean;\n \"aria-haspopup\"?: \"menu\";\n }>,\n {\n \"aria-controls\": open ? menuId : undefined,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n },\n )\n : children;\n\n useEffect(() => {\n if (wasOpen.current && !open) {\n trigger.current?.querySelector<HTMLElement>(FOCUSABLE)?.focus();\n }\n wasOpen.current = open;\n }, [open]);\n\n return (\n <div\n className={cn(\"relative flex w-fit cursor-pointer\", className)}\n ref={wrapper}>\n <div\n className=\"contents\"\n onClick={() => setOpen((active) => !active)}\n ref={trigger}>\n {triggerNode}\n </div>\n {mounted ? (\n <div\n className={cn(\n \"absolute z-20 flex flex-col\",\n topRight && \"right-0 bottom-full\",\n topLeft && \"bottom-full left-0\",\n (bottomRight || noPosition) && \"top-full right-0\",\n bottomLeft && \"top-full left-0\",\n )}>\n <Menu\n className={cn(opensUp ? \"mb-2\" : \"mt-2\", menuClassName)}\n exiting={exiting}\n id={menuId}\n onClose={() => setOpen(false)}\n up={opensUp}\n vibrant={vibrant}>\n {menu}\n </Menu>\n </div>\n ) : null}\n </div>\n );\n}\n\nOverflowMenu.Item = MenuItem;\n\nexport {OverflowMenu};\n","import {ReactNode, useEffect, useRef} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface PerspectiveCardProps {\n children?: ReactNode;\n className?: string;\n /** Rotation strength per pixel of cursor distance. */\n intensity?: number;\n /** CSS perspective in px. */\n perspective?: number;\n}\n\n/**\n * Tilts its content in 3D while hovered, resetting on leave. Pointer-only —\n * static on touch devices.\n */\nfunction PerspectiveCard({\n children,\n className,\n intensity = 0.025,\n perspective = 800,\n}: PerspectiveCardProps) {\n const ref = useRef<HTMLSpanElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const reduced = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n\n const handleMouseMove = (event: MouseEvent) => {\n if (reduced.matches) return;\n const rect = element.getBoundingClientRect();\n const mouseX = event.clientX - rect.left;\n const mouseY = event.clientY - rect.top;\n const degreeX = (mouseY - rect.height / 2) * -intensity;\n const degreeY = (mouseX - rect.width / 2) * intensity;\n element.style.transform = `perspective(${perspective}px) rotateX(${degreeX}deg) rotateY(${degreeY}deg)`;\n };\n\n const handleMouseLeave = () => {\n element.style.transform = `perspective(${perspective}px) rotateX(0deg) rotateY(0deg)`;\n };\n // Decorative motion: flatten if reduced-motion flips on mid-session.\n const flatten = () => {\n if (reduced.matches) element.style.transform = \"\";\n };\n\n element.addEventListener(\"mousemove\", handleMouseMove);\n element.addEventListener(\"mouseleave\", handleMouseLeave);\n reduced.addEventListener(\"change\", flatten);\n return () => {\n element.removeEventListener(\"mousemove\", handleMouseMove);\n element.removeEventListener(\"mouseleave\", handleMouseLeave);\n reduced.removeEventListener(\"change\", flatten);\n };\n }, [intensity, perspective]);\n\n return (\n <span\n className={cn(\n \"inline-block transition-transform duration-100 will-change-transform\",\n className,\n )}\n ref={ref}>\n {children}\n </span>\n );\n}\n\nexport {PerspectiveCard};\n","import {ReactNode, useEffect, useRef} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface PerspectiveImageProps {\n children?: ReactNode;\n className?: string;\n /** Rotation strength per pixel of cursor distance. */\n intensity?: number;\n /** CSS perspective in px. */\n perspective?: number;\n}\n\n/**\n * Tilts its content in 3D following the cursor anywhere on the page\n * (parallax showcase effect). Pointer-only — static on touch devices.\n */\nfunction PerspectiveImage({\n children,\n className,\n intensity = 0.03,\n perspective = 800,\n}: PerspectiveImageProps) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n\n const reduced = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n // Cache the center, but keep it fresh when the element moves under\n // the viewport (it was captured once, so the tilt drifted after a\n // scroll or resize).\n let center = {x: 0, y: 0};\n const recenter = () => {\n const {height, width, x, y} = element.getBoundingClientRect();\n center = {x: x + width / 2, y: y + height / 2};\n };\n recenter();\n\n const handleMouseMove = (event: MouseEvent) => {\n if (reduced.matches) return;\n const degreeX = (event.clientY - center.y) * -intensity;\n const degreeY = (event.clientX - center.x) * intensity;\n element.style.transform = `perspective(${perspective}px) rotateX(${degreeX}deg) rotateY(${degreeY}deg)`;\n };\n // Decorative motion: drop the tilt when the user asks for reduced\n // motion (flatten if the preference flips on mid-session).\n const flatten = () => {\n if (reduced.matches) element.style.transform = \"\";\n };\n\n window.addEventListener(\"mousemove\", handleMouseMove);\n window.addEventListener(\"scroll\", recenter, true);\n window.addEventListener(\"resize\", recenter);\n reduced.addEventListener(\"change\", flatten);\n return () => {\n window.removeEventListener(\"mousemove\", handleMouseMove);\n window.removeEventListener(\"scroll\", recenter, true);\n window.removeEventListener(\"resize\", recenter);\n reduced.removeEventListener(\"change\", flatten);\n };\n }, [intensity, perspective]);\n\n return (\n <div className={cn(\"will-change-transform\", className)} ref={ref}>\n {children}\n </div>\n );\n}\n\nexport {PerspectiveImage};\n","import {cn} from \"../../utils/helpers\";\n\nexport interface SpinnerProps {\n className?: string;\n /** Diameter in px (M3 baseline 40 — the non-wavy\n * `CircularProgressIndicatorTokens.Size`). */\n size?: number;\n /** Stroke width in px (M3 active indicator: 4). */\n strokeWidth?: number;\n}\n\n/**\n * M3 circular indeterminate spinner: an SVG arc that grows and shrinks\n * (~10°↔270°) while it spins, with **round line caps** so it matches the\n * determinate `Circle` and the M3 spec. (@material/web's border-based\n * indeterminate leaves the caps flat — this deviates on purpose for visual\n * consistency.) `pathLength={100}` normalises the dash animation so one\n * keyframe works at any size/stroke. Draws in `currentColor`, so the caller\n * sets the color (`Circle` passes `text-primary`; `Loading` inherits it).\n * Shared by `Loading` and `Circle` (indeterminate).\n */\nfunction Spinner({className, size = 40, strokeWidth = 4}: SpinnerProps) {\n // Scale the stroke into the 48-unit viewBox, like the determinate Circle.\n const sw = strokeWidth * (48 / size);\n return (\n <svg\n className={cn(\"circularIndeterminate\", className)}\n fill=\"none\"\n height={size}\n viewBox=\"0 0 48 48\"\n width={size}>\n <circle\n cx={24}\n cy={24}\n pathLength={100}\n r={24 - sw / 2}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={sw}\n />\n </svg>\n );\n}\n\nexport {Spinner};\n","// Internal radial-shape helpers shared by LoadingIndicator (morph\n// polygons) and Circle (wavy ring). Not exported from public barrels.\n\n/** Radial profile: returns the radius for a given angle. */\nexport type Profile = (theta: number) => number;\n\n/** Sample a profile into points around `center`. */\nexport function sampleProfile(\n profile: Profile,\n points: number,\n center = 0,\n): [number, number][] {\n return Array.from({length: points}, (_, i) => {\n const theta = (2 * Math.PI * i) / points;\n const r = profile(theta);\n return [center + r * Math.cos(theta), center + r * Math.sin(theta)] as [\n number,\n number,\n ];\n });\n}\n\n/** Closed smooth path (Catmull-Rom → cubic Bézier). Paths built from the\n * same number of points share command structure, so SMIL interpolates\n * between them. */\nexport function toPath(points: [number, number][]): string {\n const d = [`M${points[0][0].toFixed(2)} ${points[0][1].toFixed(2)}`];\n const n = points.length;\n for (let i = 0; i < n; i++) {\n const p0 = points[(i - 1 + n) % n];\n const p1 = points[i];\n const p2 = points[(i + 1) % n];\n const p3 = points[(i + 2) % n];\n const c1 = [p1[0] + (p2[0] - p0[0]) / 6, p1[1] + (p2[1] - p0[1]) / 6];\n const c2 = [p2[0] - (p3[0] - p1[0]) / 6, p2[1] - (p3[1] - p1[1]) / 6];\n d.push(\n `C${c1[0].toFixed(2)} ${c1[1].toFixed(2)} ${c2[0].toFixed(2)} ${c2[1].toFixed(2)} ${p2[0].toFixed(2)} ${p2[1].toFixed(2)}`,\n );\n }\n return d.join(\"\") + \"Z\";\n}\n\n/** Perimeter of a sampled closed outline. */\nexport function outlineLength(points: [number, number][]): number {\n let length = 0;\n for (let i = 0; i < points.length; i++) {\n const a = points[i];\n const b = points[(i + 1) % points.length];\n length += Math.hypot(b[0] - a[0], b[1] - a[1]);\n }\n return length;\n}\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {Spinner} from \"../../elements/common/_Spinner\";\nimport {outlineLength, sampleProfile, toPath} from \"./_shapes\";\n\n/* Wavy ring (M3 Expressive circular tokens): amplitude 1.6dp, wavelength\n * 15dp, baseline size 48. The wave travels one wavelength per second\n * (waveSpeed = wavelength, like Compose) via SMIL phase morphing: the\n * sine argument must run a FULL 2π for the pattern to shift exactly one\n * wavelength and loop seamlessly. 16 phase steps keep the interpolation\n * amplitude dip under 2%. */\nconst WAVE_AMPLITUDE = 1.6;\nconst WAVE_LENGTH = 15;\nconst WAVE_SAMPLES = 144;\nconst WAVE_PHASES = 16;\n\nexport interface CircleLabels {\n /** Accessible name (aria-label). Default \"Progress\". */\n label?: string;\n}\n\nconst CIRCLE_LABELS: Required<CircleLabels> = {label: \"Progress\"};\n\nexport interface CircleProps {\n /** Center content (e.g. the percentage). */\n children?: ReactNode;\n className?: string;\n /** Spinning arc instead of a fixed value. */\n indeterminate?: boolean;\n /** Customizable accessible name. */\n labels?: CircleLabels;\n /** Diameter in px (M3 Expressive baselines: flat 40, wavy 48). */\n size?: number;\n /** Stroke width in px (M3 active indicator: 4). */\n strokeWidth?: number;\n /** 0–100. */\n value?: number;\n /** M3 Expressive: the active indicator ripples around the ring — both the\n * determinate arc and the indeterminate spinner. */\n wavy?: boolean;\n}\n\n/**\n * M3 Expressive circular progress indicator: primary arc over a\n * secondary-container track with a 4px gap (determinate, stroke moves in\n * 500ms) or an indeterminate spinner: an SVG arc with round caps that grows\n * ~10°↔270° as it spins (the flat spinner reuses `_Spinner`, 40dp baseline).\n * `wavy` ripples the active indicator (amplitude 1.6, wavelength 15, baseline\n * 48) with the wave traveling one wavelength per second — for the determinate\n * arc and for the indeterminate spinner, which keeps the same spin +\n * grow/shrink dash on the rippled ring.\n */\nfunction Circle({\n children,\n className,\n indeterminate,\n labels,\n size: sizeProp,\n strokeWidth = 4,\n value = 0,\n wavy,\n}: CircleProps) {\n const l = {...CIRCLE_LABELS, ...labels};\n const size = sizeProp ?? (wavy ? 48 : 40);\n const clamped = Math.min(100, Math.max(0, value));\n const sw = strokeWidth * (48 / size);\n // Compose flattens the determinate wave outside 10–95% progress (the\n // indicatorAmplitude lambda); its 500ms amplitude tweens apply to a\n // continuously animated progress, so a redraw approximates them here. The\n // indeterminate spinner has no value, so its wave stays at full amplitude.\n const isWavy =\n Boolean(wavy) && !indeterminate && clamped > 10 && clamped < 95;\n const indetWavy = Boolean(wavy) && Boolean(indeterminate);\n const useWave = isWavy || indetWavy;\n // Wave metrics keep their physical px size like the stroke does.\n const amplitude = useWave ? WAVE_AMPLITUDE * (48 / size) : 0;\n const radius = 24 - sw / 2 - amplitude;\n const circumference = 2 * Math.PI * radius;\n const activeLength = (circumference * clamped) / 100;\n // M3 Expressive: 4px gap on each side of the active indicator.\n const gap = Math.min(4 * (48 / size), circumference / 8);\n const partial = clamped > 0 && clamped < 100;\n const trackLength = Math.max(\n circumference - activeLength - (partial ? gap * 2 : 0),\n 0,\n );\n\n // Wavy active arc: a closed rippled ring revealed by dash lengths in\n // its own (longer) length space; the phase morph makes it travel.\n const waves = Math.round(circumference / (WAVE_LENGTH * (48 / size)));\n const wavePhases = useWave\n ? Array.from({length: WAVE_PHASES + 1}, (_, i) => {\n const phase = 2 * Math.PI * (i / WAVE_PHASES);\n return sampleProfile(\n (theta) => radius + amplitude * Math.sin(waves * theta - phase),\n WAVE_SAMPLES,\n 24,\n );\n })\n : null;\n const waveLength = wavePhases ? outlineLength(wavePhases[0]) : 0;\n\n return (\n <span\n aria-label={l.label}\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={indeterminate ? undefined : clamped}\n className={cn(\n \"relative inline-flex items-center justify-center\",\n className,\n )}\n role=\"progressbar\"\n style={{height: size, width: size}}>\n {indeterminate ? (\n indetWavy && wavePhases ? (\n // Wavy spinner: the rippled ring spins (circular-spin) and the\n // visible arc grows/shrinks (circular-dash, pathLength=100) exactly\n // like the flat spinner, while the wave travels one wavelength per\n // second (SMIL phase morph).\n <svg\n className=\"circularIndeterminate text-primary\"\n fill=\"none\"\n height={size}\n viewBox=\"0 0 48 48\"\n width={size}>\n <path\n d={toPath(wavePhases[0])}\n fill=\"none\"\n pathLength={100}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={sw}>\n <animate\n attributeName=\"d\"\n dur=\"1000ms\"\n repeatCount=\"indefinite\"\n values={wavePhases.map((points) => toPath(points)).join(\";\")}\n />\n </path>\n </svg>\n ) : (\n <Spinner\n className=\"text-primary\"\n size={size}\n strokeWidth={strokeWidth}\n />\n )\n ) : (\n <svg\n className=\"-rotate-90\"\n fill=\"none\"\n height={size}\n viewBox=\"0 0 48 48\"\n width={size}>\n {/* track (starts after the active arc + gap) */}\n <circle\n className=\"circularDeterminate text-secondary-container\"\n cx={24}\n cy={24}\n r={radius}\n stroke=\"currentColor\"\n strokeDasharray={`${trackLength} ${circumference}`}\n strokeDashoffset={-(activeLength + (partial ? gap : 0))}\n strokeLinecap=\"round\"\n strokeWidth={sw}\n />\n {/* active indicator (wavy: rippled ring revealed by\n * dash lengths in its own length space) */}\n {wavePhases ? (\n <path\n className=\"circularDeterminate text-primary\"\n d={toPath(wavePhases[0])}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeDasharray={`${(waveLength * clamped) / 100} ${waveLength}`}\n strokeLinecap=\"round\"\n strokeWidth={sw}>\n <animate\n attributeName=\"d\"\n dur=\"1000ms\"\n repeatCount=\"indefinite\"\n values={wavePhases.map((points) => toPath(points)).join(\";\")}\n />\n </path>\n ) : (\n <circle\n className=\"circularDeterminate text-primary\"\n cx={24}\n cy={24}\n r={radius}\n stroke=\"currentColor\"\n strokeDasharray={`${activeLength} ${circumference}`}\n strokeLinecap=\"round\"\n strokeWidth={sw}\n />\n )}\n </svg>\n )}\n {children ? (\n <span className=\"absolute inset-0 flex items-center justify-center text-label-medium text-on-surface\">\n {children}\n </span>\n ) : null}\n </span>\n );\n}\n\nexport {Circle};\n","// GENERATED by scripts/gen-loading-indicator.mjs — DO NOT EDIT BY HAND.\n// Exact M3 Expressive loading-indicator morph, ported 1:1 from\n// androidx.graphics.shapes (RoundedPolygon corner-rounding + Morph) over the\n// official MaterialShapes sequence: SoftBurst → Cookie9 → Pentagon → Pill →\n// Sunny → Cookie4 → Oval. 58 cubics per keyframe, centered at the\n// origin; the consumer drops them into a 48×48 box (the 48dp container =\n// Compose's draw surface) via <g transform=\"translate(24 24)\">. The nominal\n// active size is 38dp, but the spring overshoot pulses the shape larger, so\n// the box is the full container (a 38px box would clip the pulse peak).\n\n/** 36 morph keyframe paths: 7 morphs × 5 steps (source / target / overshoot /\n * settle / boundary-hold) + a seamless close. The hold + a keyTime collision\n * make each morph boundary an instant jump (no cross-morph interpolation, which\n * would collapse the shape through its center). */\nexport const MORPH_VALUES =\n \"M-11.28 -6.83C-10.47 -7.03 -9.92 -7.78 -9.99 -8.62C-10.01 -8.89 -10.03 -9.17 -10.05 -9.45C-10.11 -10.16 -10.16 -10.86 -10.21 -11.57C-10.31 -12.83 -9.05 -13.76 -7.87 -13.28C-7.21 -13.01 -6.55 -12.74 -5.90 -12.47C-5.63 -12.37 -5.37 -12.26 -5.11 -12.16C-4.34 -11.84 -3.45 -12.13 -3.02 -12.84C-2.87 -13.08 -2.72 -13.32 -2.58 -13.56C-2.21 -14.16 -1.83 -14.76 -1.46 -15.36C-0.80 -16.44 0.77 -16.45 1.44 -15.37C1.81 -14.77 2.19 -14.16 2.56 -13.56C2.71 -13.32 2.86 -13.08 3.01 -12.84C3.45 -12.13 4.34 -11.84 5.11 -12.16C5.37 -12.27 5.62 -12.38 5.88 -12.48C6.54 -12.75 7.19 -13.02 7.85 -13.29C9.02 -13.77 10.29 -12.85 10.20 -11.59C10.15 -10.88 10.09 -10.17 10.04 -9.46C10.02 -9.18 10.00 -8.90 9.98 -8.62C9.92 -7.79 10.47 -7.03 11.28 -6.84C11.55 -6.77 11.82 -6.71 12.10 -6.64C12.78 -6.47 13.47 -6.31 14.16 -6.14C15.39 -5.84 15.88 -4.35 15.06 -3.38C14.60 -2.84 14.14 -2.30 13.69 -1.75C13.50 -1.54 13.32 -1.32 13.14 -1.11C12.60 -0.47 12.60 0.46 13.14 1.10C13.33 1.31 13.51 1.53 13.69 1.74C14.15 2.28 14.61 2.82 15.06 3.36C15.89 4.32 15.40 5.81 14.17 6.12C13.48 6.29 12.79 6.46 12.10 6.63C11.83 6.69 11.55 6.76 11.28 6.83C10.47 7.03 9.92 7.78 9.99 8.62C10.01 8.89 10.03 9.17 10.05 9.45C10.11 10.16 10.16 10.86 10.21 11.57C10.31 12.83 9.05 13.76 7.87 13.28C6.95 12.90 6.03 12.53 5.11 12.16C4.34 11.84 3.45 12.13 3.02 12.84C2.50 13.68 1.98 14.52 1.46 15.36C1.18 15.83 0.72 16.10 0.24 16.16C-0.39 16.24 -1.06 15.98 -1.44 15.37C-1.96 14.53 -2.49 13.68 -3.01 12.84C-3.45 12.13 -4.34 11.84 -5.11 12.16C-5.37 12.27 -5.62 12.38 -5.88 12.48C-6.54 12.75 -7.19 13.02 -7.85 13.29C-9.02 13.77 -10.29 12.85 -10.20 11.59C-10.15 10.88 -10.09 10.17 -10.04 9.46C-10.02 9.18 -10.00 8.90 -9.98 8.62C-9.92 7.79 -10.47 7.03 -11.28 6.84C-11.55 6.77 -11.82 6.71 -12.10 6.64C-12.78 6.47 -13.47 6.31 -14.16 6.14C-15.39 5.84 -15.88 4.35 -15.06 3.38C-14.60 2.84 -14.14 2.30 -13.69 1.75C-13.50 1.54 -13.32 1.32 -13.14 1.11C-12.60 0.47 -12.60 -0.46 -13.14 -1.10C-13.33 -1.31 -13.51 -1.53 -13.69 -1.74C-14.15 -2.28 -14.61 -2.82 -15.06 -3.36C-15.89 -4.32 -15.40 -5.81 -14.17 -6.12C-13.48 -6.29 -12.79 -6.46 -12.10 -6.63C-11.83 -6.69 -11.55 -6.76 -11.28 -6.83Z;M-13.32 -6.07C-12.80 -6.62 -12.42 -7.28 -12.20 -8.01C-12.12 -8.26 -12.06 -8.52 -12.03 -8.79C-11.93 -9.49 -11.70 -10.14 -11.35 -10.71C-10.78 -11.64 -9.91 -12.37 -8.90 -12.76C-8.28 -13.00 -7.60 -13.12 -6.89 -13.10C-6.62 -13.09 -6.35 -13.10 -6.09 -13.13C-5.34 -13.22 -4.62 -13.49 -3.99 -13.90C-3.76 -14.04 -3.55 -14.21 -3.35 -14.39C-2.83 -14.86 -2.23 -15.21 -1.60 -15.42C-0.56 -15.77 0.57 -15.77 1.60 -15.42C2.23 -15.20 2.83 -14.86 3.35 -14.39C3.55 -14.21 3.77 -14.04 3.99 -13.90C4.62 -13.48 5.34 -13.22 6.09 -13.13C6.36 -13.10 6.63 -13.09 6.89 -13.10C7.60 -13.12 8.28 -13.00 8.90 -12.76C9.92 -12.36 10.78 -11.64 11.35 -10.70C11.70 -10.13 11.93 -9.49 12.03 -8.79C12.07 -8.52 12.12 -8.26 12.20 -8.00C12.42 -7.28 12.81 -6.62 13.32 -6.06C13.50 -5.87 13.70 -5.69 13.91 -5.52C14.47 -5.09 14.91 -4.56 15.23 -3.98C15.76 -3.02 15.95 -1.91 15.79 -0.82C15.69 -0.17 15.45 0.48 15.08 1.08C14.93 1.31 14.81 1.54 14.70 1.79C14.41 2.49 14.28 3.24 14.32 4.00C14.33 4.26 14.37 4.53 14.42 4.79C14.57 5.48 14.57 6.17 14.44 6.82C14.22 7.90 13.66 8.87 12.84 9.59C12.34 10.03 11.74 10.38 11.07 10.59C10.81 10.68 10.57 10.78 10.33 10.90C9.65 11.24 9.07 11.74 8.61 12.34C8.45 12.55 8.31 12.78 8.18 13.02C7.85 13.64 7.41 14.17 6.89 14.59C6.32 15.04 5.66 15.37 4.95 15.54C4.65 15.61 4.33 15.66 4.01 15.67C3.76 15.69 3.51 15.68 3.26 15.65C2.95 15.62 2.64 15.56 2.33 15.47C2.18 15.42 2.03 15.37 1.89 15.31C1.70 15.23 1.50 15.17 1.30 15.11C1.00 15.03 0.69 14.98 0.37 14.95C-0.13 14.92 -0.63 14.95 -1.12 15.07C-1.38 15.13 -1.64 15.21 -1.89 15.31C-2.54 15.58 -3.22 15.70 -3.89 15.68C-4.98 15.65 -6.04 15.27 -6.89 14.58C-7.41 14.17 -7.86 13.64 -8.18 13.02C-8.31 12.78 -8.45 12.55 -8.62 12.34C-9.07 11.73 -9.66 11.24 -10.33 10.90C-10.57 10.78 -10.82 10.68 -11.07 10.59C-11.74 10.38 -12.34 10.03 -12.84 9.59C-13.66 8.87 -14.23 7.89 -14.44 6.82C-14.57 6.17 -14.57 5.48 -14.42 4.79C-14.37 4.53 -14.33 4.26 -14.32 3.99C-14.28 3.24 -14.41 2.48 -14.71 1.79C-14.81 1.54 -14.93 1.30 -15.08 1.08C-15.45 0.48 -15.69 -0.17 -15.79 -0.83C-15.95 -1.91 -15.76 -3.02 -15.23 -3.98C-14.91 -4.57 -14.47 -5.09 -13.91 -5.52C-13.70 -5.69 -13.50 -5.87 -13.32 -6.07Z;M-13.60 -6.25C-13.13 -6.85 -12.77 -7.50 -12.51 -8.21C-12.42 -8.46 -12.35 -8.72 -12.31 -8.99C-12.19 -9.69 -11.91 -10.33 -11.51 -10.88C-10.84 -11.76 -10.04 -12.46 -9.04 -12.98C-8.42 -13.29 -7.74 -13.47 -7.03 -13.47C-6.76 -13.48 -6.49 -13.51 -6.23 -13.56C-5.48 -13.71 -4.78 -13.97 -4.12 -14.34C-3.89 -14.47 -3.67 -14.62 -3.46 -14.79C-2.92 -15.25 -2.29 -15.56 -1.62 -15.72C-0.53 -15.96 0.54 -15.96 1.63 -15.71C2.29 -15.55 2.92 -15.25 3.46 -14.79C3.67 -14.62 3.89 -14.47 4.13 -14.33C4.79 -13.96 5.48 -13.71 6.23 -13.56C6.50 -13.50 6.77 -13.48 7.04 -13.47C7.75 -13.47 8.43 -13.29 9.05 -12.98C10.05 -12.46 10.85 -11.76 11.51 -10.87C11.91 -10.32 12.19 -9.68 12.31 -8.99C12.35 -8.72 12.42 -8.46 12.51 -8.21C12.77 -7.50 13.13 -6.85 13.61 -6.25C13.78 -6.03 13.96 -5.84 14.17 -5.66C14.71 -5.19 15.12 -4.61 15.38 -3.96C15.81 -2.91 15.96 -1.85 15.89 -0.76C15.84 -0.08 15.64 0.58 15.27 1.18C15.13 1.41 15.02 1.65 14.92 1.91C14.66 2.61 14.51 3.34 14.48 4.11C14.47 4.38 14.49 4.66 14.53 4.93C14.63 5.64 14.57 6.35 14.35 7.02C13.99 8.11 13.42 9.01 12.65 9.79C12.18 10.27 11.59 10.64 10.93 10.86C10.67 10.94 10.43 11.05 10.19 11.18C9.54 11.54 8.95 12.00 8.42 12.57C8.23 12.78 8.07 12.99 7.92 13.23C7.54 13.84 7.02 14.34 6.42 14.72C5.76 15.06 5.18 15.30 4.54 15.56C4.32 15.70 4.09 15.81 3.86 15.88C3.68 15.94 3.52 15.89 3.29 15.76C3.01 15.60 2.73 15.42 2.45 15.19C2.32 15.08 2.22 14.98 2.12 14.90C1.99 14.80 1.86 14.76 1.69 14.79C1.41 14.81 1.13 14.87 0.85 14.96C0.34 15.02 -0.11 15.10 -0.57 15.18C-0.82 15.24 -1.08 15.31 -1.33 15.42C-1.98 15.68 -2.66 15.78 -3.33 15.72C-4.41 15.63 -5.44 15.32 -6.43 14.71C-7.03 14.34 -7.54 13.84 -7.92 13.23C-8.07 12.99 -8.24 12.77 -8.42 12.57C-8.95 12.00 -9.54 11.54 -10.20 11.18C-10.43 11.05 -10.67 10.94 -10.93 10.86C-11.60 10.63 -12.18 10.26 -12.66 9.78C-13.42 9.00 -14.00 8.10 -14.35 7.01C-14.57 6.34 -14.63 5.63 -14.53 4.93C-14.49 4.65 -14.47 4.38 -14.48 4.11C-14.51 3.33 -14.66 2.60 -14.93 1.90C-15.02 1.65 -15.13 1.41 -15.27 1.18C-15.64 0.57 -15.84 -0.09 -15.89 -0.77C-15.96 -1.86 -15.81 -2.92 -15.38 -3.97C-15.11 -4.61 -14.71 -5.19 -14.17 -5.66C-13.96 -5.84 -13.77 -6.04 -13.60 -6.25Z;M-13.32 -6.07C-12.80 -6.62 -12.42 -7.28 -12.20 -8.01C-12.12 -8.26 -12.06 -8.52 -12.03 -8.79C-11.93 -9.49 -11.70 -10.14 -11.35 -10.71C-10.78 -11.64 -9.91 -12.37 -8.90 -12.76C-8.28 -13.00 -7.60 -13.12 -6.89 -13.10C-6.62 -13.09 -6.35 -13.10 -6.09 -13.13C-5.34 -13.22 -4.62 -13.49 -3.99 -13.90C-3.76 -14.04 -3.55 -14.21 -3.35 -14.39C-2.83 -14.86 -2.23 -15.21 -1.60 -15.42C-0.56 -15.77 0.57 -15.77 1.60 -15.42C2.23 -15.20 2.83 -14.86 3.35 -14.39C3.55 -14.21 3.77 -14.04 3.99 -13.90C4.62 -13.48 5.34 -13.22 6.09 -13.13C6.36 -13.10 6.63 -13.09 6.89 -13.10C7.60 -13.12 8.28 -13.00 8.90 -12.76C9.92 -12.36 10.78 -11.64 11.35 -10.70C11.70 -10.13 11.93 -9.49 12.03 -8.79C12.07 -8.52 12.12 -8.26 12.20 -8.00C12.42 -7.28 12.81 -6.62 13.32 -6.06C13.50 -5.87 13.70 -5.69 13.91 -5.52C14.47 -5.09 14.91 -4.56 15.23 -3.98C15.76 -3.02 15.95 -1.91 15.79 -0.82C15.69 -0.17 15.45 0.48 15.08 1.08C14.93 1.31 14.81 1.54 14.70 1.79C14.41 2.49 14.28 3.24 14.32 4.00C14.33 4.26 14.37 4.53 14.42 4.79C14.57 5.48 14.57 6.17 14.44 6.82C14.22 7.90 13.66 8.87 12.84 9.59C12.34 10.03 11.74 10.38 11.07 10.59C10.81 10.68 10.57 10.78 10.33 10.90C9.65 11.24 9.07 11.74 8.61 12.34C8.45 12.55 8.31 12.78 8.18 13.02C7.85 13.64 7.41 14.17 6.89 14.59C6.32 15.04 5.66 15.37 4.95 15.54C4.65 15.61 4.33 15.66 4.01 15.67C3.76 15.69 3.51 15.68 3.26 15.65C2.95 15.62 2.64 15.56 2.33 15.47C2.18 15.42 2.03 15.37 1.89 15.31C1.70 15.23 1.50 15.17 1.30 15.11C1.00 15.03 0.69 14.98 0.37 14.95C-0.13 14.92 -0.63 14.95 -1.12 15.07C-1.38 15.13 -1.64 15.21 -1.89 15.31C-2.54 15.58 -3.22 15.70 -3.89 15.68C-4.98 15.65 -6.04 15.27 -6.89 14.58C-7.41 14.17 -7.86 13.64 -8.18 13.02C-8.31 12.78 -8.45 12.55 -8.62 12.34C-9.07 11.73 -9.66 11.24 -10.33 10.90C-10.57 10.78 -10.82 10.68 -11.07 10.59C-11.74 10.38 -12.34 10.03 -12.84 9.59C-13.66 8.87 -14.23 7.89 -14.44 6.82C-14.57 6.17 -14.57 5.48 -14.42 4.79C-14.37 4.53 -14.33 4.26 -14.32 3.99C-14.28 3.24 -14.41 2.48 -14.71 1.79C-14.81 1.54 -14.93 1.30 -15.08 1.08C-15.45 0.48 -15.69 -0.17 -15.79 -0.83C-15.95 -1.91 -15.76 -3.02 -15.23 -3.98C-14.91 -4.57 -14.47 -5.09 -13.91 -5.52C-13.70 -5.69 -13.50 -5.87 -13.32 -6.07Z;M-13.32 -6.07C-12.80 -6.62 -12.42 -7.28 -12.20 -8.01C-12.12 -8.26 -12.06 -8.52 -12.03 -8.79C-11.93 -9.49 -11.70 -10.14 -11.35 -10.71C-10.78 -11.64 -9.91 -12.37 -8.90 -12.76C-8.28 -13.00 -7.60 -13.12 -6.89 -13.10C-6.62 -13.09 -6.35 -13.10 -6.09 -13.13C-5.34 -13.22 -4.62 -13.49 -3.99 -13.90C-3.76 -14.04 -3.55 -14.21 -3.35 -14.39C-2.83 -14.86 -2.23 -15.21 -1.60 -15.42C-0.56 -15.77 0.57 -15.77 1.60 -15.42C2.23 -15.20 2.83 -14.86 3.35 -14.39C3.55 -14.21 3.77 -14.04 3.99 -13.90C4.62 -13.48 5.34 -13.22 6.09 -13.13C6.36 -13.10 6.63 -13.09 6.89 -13.10C7.60 -13.12 8.28 -13.00 8.90 -12.76C9.92 -12.36 10.78 -11.64 11.35 -10.70C11.70 -10.13 11.93 -9.49 12.03 -8.79C12.07 -8.52 12.12 -8.26 12.20 -8.00C12.42 -7.28 12.81 -6.62 13.32 -6.06C13.50 -5.87 13.70 -5.69 13.91 -5.52C14.47 -5.09 14.91 -4.56 15.23 -3.98C15.76 -3.02 15.95 -1.91 15.79 -0.82C15.69 -0.17 15.45 0.48 15.08 1.08C14.93 1.31 14.81 1.54 14.70 1.79C14.41 2.49 14.28 3.24 14.32 4.00C14.33 4.26 14.37 4.53 14.42 4.79C14.57 5.48 14.57 6.17 14.44 6.82C14.22 7.90 13.66 8.87 12.84 9.59C12.34 10.03 11.74 10.38 11.07 10.59C10.81 10.68 10.57 10.78 10.33 10.90C9.65 11.24 9.07 11.74 8.61 12.34C8.45 12.55 8.31 12.78 8.18 13.02C7.85 13.64 7.41 14.17 6.89 14.59C6.32 15.04 5.66 15.37 4.95 15.54C4.65 15.61 4.33 15.66 4.01 15.67C3.76 15.69 3.51 15.68 3.26 15.65C2.95 15.62 2.64 15.56 2.33 15.47C2.18 15.42 2.03 15.37 1.89 15.31C1.70 15.23 1.50 15.17 1.30 15.11C1.00 15.03 0.69 14.98 0.37 14.95C-0.13 14.92 -0.63 14.95 -1.12 15.07C-1.38 15.13 -1.64 15.21 -1.89 15.31C-2.54 15.58 -3.22 15.70 -3.89 15.68C-4.98 15.65 -6.04 15.27 -6.89 14.58C-7.41 14.17 -7.86 13.64 -8.18 13.02C-8.31 12.78 -8.45 12.55 -8.62 12.34C-9.07 11.73 -9.66 11.24 -10.33 10.90C-10.57 10.78 -10.82 10.68 -11.07 10.59C-11.74 10.38 -12.34 10.03 -12.84 9.59C-13.66 8.87 -14.23 7.89 -14.44 6.82C-14.57 6.17 -14.57 5.48 -14.42 4.79C-14.37 4.53 -14.33 4.26 -14.32 3.99C-14.28 3.24 -14.41 2.48 -14.71 1.79C-14.81 1.54 -14.93 1.30 -15.08 1.08C-15.45 0.48 -15.69 -0.17 -15.79 -0.83C-15.95 -1.91 -15.76 -3.02 -15.23 -3.98C-14.91 -4.57 -14.47 -5.09 -13.91 -5.52C-13.70 -5.69 -13.50 -5.87 -13.32 -6.07Z;M-3.35 -14.39C-2.72 -14.96 -1.97 -15.35 -1.19 -15.54C-0.41 -15.73 0.41 -15.73 1.19 -15.54C1.97 -15.35 2.72 -14.96 3.35 -14.39C3.36 -14.37 3.38 -14.36 3.39 -14.35C3.41 -14.34 3.42 -14.33 3.43 -14.31C3.45 -14.30 3.46 -14.29 3.48 -14.28C3.95 -13.87 4.49 -13.57 5.07 -13.37C5.65 -13.17 6.27 -13.07 6.89 -13.10C8.18 -13.15 9.37 -12.71 10.29 -11.93C11.21 -11.16 11.85 -10.06 12.03 -8.79C12.11 -8.17 12.32 -7.57 12.62 -7.03C12.92 -6.49 13.32 -6.01 13.81 -5.61C13.83 -5.59 13.84 -5.58 13.86 -5.57C13.88 -5.55 13.90 -5.54 13.91 -5.52C14.93 -4.74 15.56 -3.63 15.77 -2.45C15.98 -1.27 15.76 -0.01 15.08 1.08C15.06 1.11 15.04 1.13 15.02 1.16C15.01 1.19 14.99 1.22 14.97 1.25C14.66 1.79 14.46 2.37 14.37 2.97C14.28 3.57 14.29 4.19 14.42 4.79C14.69 6.04 14.47 7.30 13.87 8.34C13.27 9.38 12.29 10.20 11.07 10.59C10.49 10.78 9.95 11.07 9.48 11.45C9.01 11.83 8.61 12.29 8.30 12.81C8.28 12.85 8.26 12.88 8.24 12.92C8.22 12.95 8.20 12.98 8.18 13.02C7.73 13.88 7.05 14.56 6.26 15.01C5.47 15.47 4.56 15.70 3.63 15.68C3.34 15.67 3.05 15.64 2.75 15.58C2.46 15.51 2.17 15.43 1.89 15.31C1.28 15.06 0.64 14.94 0.00 14.94C-0.64 14.94 -1.28 15.06 -1.89 15.31C-2.17 15.43 -2.46 15.51 -2.75 15.58C-3.05 15.64 -3.34 15.67 -3.63 15.68C-4.56 15.70 -5.47 15.47 -6.26 15.01C-7.05 14.56 -7.73 13.88 -8.18 13.02C-8.20 12.98 -8.22 12.95 -8.24 12.92C-8.26 12.88 -8.28 12.85 -8.30 12.81C-8.61 12.29 -9.01 11.83 -9.48 11.45C-9.95 11.07 -10.49 10.78 -11.07 10.59C-12.29 10.20 -13.27 9.38 -13.87 8.34C-14.47 7.30 -14.69 6.04 -14.42 4.79C-14.29 4.19 -14.28 3.57 -14.37 2.97C-14.46 2.37 -14.66 1.79 -14.97 1.25C-14.99 1.22 -15.01 1.19 -15.02 1.16C-15.04 1.13 -15.06 1.11 -15.08 1.08C-15.76 -0.01 -15.98 -1.27 -15.77 -2.45C-15.56 -3.63 -14.93 -4.74 -13.91 -5.52C-13.90 -5.54 -13.88 -5.55 -13.86 -5.57C-13.84 -5.58 -13.83 -5.59 -13.81 -5.61C-13.32 -6.01 -12.92 -6.49 -12.62 -7.03C-12.32 -7.57 -12.11 -8.17 -12.03 -8.79C-11.85 -10.06 -11.21 -11.16 -10.29 -11.93C-9.37 -12.71 -8.18 -13.15 -6.89 -13.10C-6.27 -13.07 -5.65 -13.17 -5.07 -13.37C-4.49 -13.57 -3.95 -13.87 -3.48 -14.28C-3.46 -14.29 -3.43 -14.31 -3.41 -14.33C-3.39 -14.35 -3.37 -14.37 -3.35 -14.39Z;M-3.05 -14.12C-2.43 -14.53 -1.75 -14.80 -1.06 -14.93C-0.36 -15.07 0.36 -15.07 1.06 -14.93C1.75 -14.80 2.43 -14.53 3.05 -14.12C3.06 -14.11 3.07 -14.10 3.09 -14.09C3.10 -14.08 3.12 -14.07 3.13 -14.06C3.14 -14.05 3.16 -14.04 3.17 -14.03C3.61 -13.72 4.06 -13.40 4.50 -13.09C4.95 -12.78 5.39 -12.47 5.83 -12.15C6.71 -11.54 7.58 -10.92 8.45 -10.30C9.33 -9.69 10.20 -9.07 11.08 -8.45C11.53 -8.14 11.97 -7.82 12.42 -7.50C12.87 -7.19 13.32 -6.87 13.76 -6.56C13.78 -6.55 13.80 -6.53 13.81 -6.52C13.83 -6.51 13.84 -6.50 13.86 -6.49C14.75 -5.83 15.38 -4.93 15.71 -3.93C16.05 -2.94 16.08 -1.84 15.77 -0.79C15.76 -0.76 15.75 -0.73 15.74 -0.70C15.73 -0.67 15.72 -0.64 15.71 -0.61C15.55 -0.11 15.38 0.39 15.21 0.89C15.05 1.39 14.88 1.89 14.71 2.39C14.38 3.38 14.05 4.38 13.71 5.38C13.38 6.37 13.05 7.37 12.72 8.37C12.55 8.86 12.38 9.36 12.22 9.85C12.05 10.35 11.89 10.85 11.72 11.34C11.71 11.38 11.70 11.41 11.69 11.44C11.68 11.47 11.66 11.51 11.65 11.54C11.26 12.59 10.56 13.46 9.67 14.07C8.79 14.69 7.72 15.04 6.60 15.04C6.07 15.04 5.55 15.04 5.02 15.04C4.50 15.04 3.97 15.04 3.45 15.04C2.30 15.04 1.15 15.04 0.00 15.04C-1.15 15.04 -2.30 15.04 -3.45 15.04C-3.97 15.04 -4.50 15.04 -5.02 15.04C-5.55 15.04 -6.07 15.04 -6.60 15.04C-7.72 15.04 -8.79 14.69 -9.67 14.07C-10.56 13.46 -11.26 12.59 -11.65 11.54C-11.66 11.51 -11.68 11.47 -11.69 11.44C-11.70 11.41 -11.71 11.38 -11.72 11.34C-11.89 10.85 -12.05 10.35 -12.22 9.85C-12.38 9.36 -12.55 8.86 -12.72 8.37C-13.05 7.37 -13.38 6.37 -13.71 5.38C-14.05 4.38 -14.38 3.38 -14.71 2.39C-14.88 1.89 -15.05 1.39 -15.21 0.89C-15.38 0.39 -15.55 -0.11 -15.71 -0.61C-15.72 -0.64 -15.73 -0.67 -15.74 -0.70C-15.75 -0.73 -15.76 -0.76 -15.77 -0.79C-16.08 -1.84 -16.05 -2.94 -15.71 -3.93C-15.38 -4.93 -14.75 -5.83 -13.86 -6.49C-13.84 -6.50 -13.83 -6.51 -13.81 -6.52C-13.80 -6.53 -13.78 -6.55 -13.76 -6.56C-13.32 -6.87 -12.87 -7.19 -12.42 -7.50C-11.97 -7.82 -11.53 -8.14 -11.08 -8.45C-10.20 -9.07 -9.33 -9.69 -8.45 -10.30C-7.58 -10.92 -6.71 -11.54 -5.83 -12.15C-5.39 -12.47 -4.95 -12.78 -4.50 -13.09C-4.06 -13.40 -3.61 -13.72 -3.17 -14.03C-3.15 -14.05 -3.13 -14.06 -3.11 -14.07C-3.09 -14.09 -3.07 -14.10 -3.05 -14.12Z;M-3.00 -14.13C-2.39 -14.52 -1.72 -14.77 -1.04 -14.90C-0.35 -15.03 0.35 -15.03 1.04 -14.90C1.72 -14.77 2.39 -14.52 3.00 -14.13C3.02 -14.12 3.03 -14.11 3.05 -14.10C3.06 -14.09 3.07 -14.09 3.09 -14.08C3.10 -14.07 3.11 -14.06 3.13 -14.05C3.57 -13.75 4.00 -13.43 4.42 -13.11C4.85 -12.78 5.27 -12.43 5.68 -12.07C6.50 -11.36 7.33 -10.72 8.20 -10.13C9.07 -9.53 9.97 -8.98 10.94 -8.46C11.44 -8.18 11.92 -7.91 12.39 -7.62C12.86 -7.34 13.31 -7.05 13.76 -6.74C13.77 -6.73 13.79 -6.72 13.80 -6.71C13.82 -6.70 13.84 -6.68 13.85 -6.67C14.72 -6.03 15.35 -5.17 15.70 -4.19C16.06 -3.22 16.12 -2.15 15.86 -1.10C15.86 -1.07 15.85 -1.04 15.84 -1.01C15.83 -0.98 15.83 -0.95 15.82 -0.92C15.67 -0.43 15.51 0.06 15.33 0.55C15.15 1.03 14.96 1.52 14.75 2.00C14.33 2.96 13.99 3.92 13.69 4.91C13.40 5.90 13.15 6.92 12.95 8.00C12.84 8.54 12.73 9.07 12.60 9.58C12.48 10.09 12.35 10.59 12.20 11.09C12.19 11.12 12.18 11.15 12.17 11.18C12.16 11.22 12.15 11.25 12.14 11.28C11.75 12.35 11.05 13.26 10.15 13.89C9.26 14.53 8.17 14.89 7.01 14.90C6.45 14.90 5.90 14.90 5.34 14.91C4.78 14.92 4.22 14.93 3.66 14.95C2.44 14.98 1.22 15.00 0.00 15.00C-1.22 15.00 -2.44 14.98 -3.66 14.95C-4.22 14.93 -4.78 14.92 -5.34 14.91C-5.90 14.90 -6.45 14.90 -7.01 14.90C-8.17 14.89 -9.26 14.53 -10.15 13.89C-11.05 13.26 -11.75 12.35 -12.14 11.28C-12.15 11.25 -12.16 11.22 -12.17 11.18C-12.18 11.15 -12.19 11.12 -12.20 11.09C-12.35 10.59 -12.48 10.09 -12.60 9.58C-12.73 9.07 -12.84 8.54 -12.95 8.00C-13.15 6.92 -13.40 5.90 -13.69 4.91C-13.99 3.92 -14.33 2.96 -14.75 2.00C-14.96 1.52 -15.15 1.03 -15.33 0.55C-15.51 0.06 -15.67 -0.43 -15.82 -0.92C-15.83 -0.95 -15.83 -0.98 -15.84 -1.01C-15.85 -1.04 -15.86 -1.07 -15.86 -1.10C-16.12 -2.15 -16.06 -3.22 -15.70 -4.19C-15.35 -5.17 -14.72 -6.04 -13.85 -6.67C-13.84 -6.68 -13.82 -6.70 -13.80 -6.71C-13.79 -6.72 -13.77 -6.73 -13.76 -6.74C-13.31 -7.05 -12.86 -7.34 -12.39 -7.62C-11.92 -7.91 -11.44 -8.18 -10.94 -8.46C-9.97 -8.98 -9.07 -9.53 -8.20 -10.13C-7.33 -10.72 -6.50 -11.36 -5.68 -12.07C-5.27 -12.43 -4.85 -12.78 -4.42 -13.11C-4.00 -13.43 -3.57 -13.75 -3.13 -14.05C-3.11 -14.06 -3.09 -14.08 -3.07 -14.09C-3.05 -14.10 -3.03 -14.12 -3.00 -14.13Z;M-3.05 -14.12C-2.43 -14.53 -1.75 -14.80 -1.06 -14.93C-0.36 -15.07 0.36 -15.07 1.06 -14.93C1.75 -14.80 2.43 -14.53 3.05 -14.12C3.06 -14.11 3.07 -14.10 3.09 -14.09C3.10 -14.08 3.12 -14.07 3.13 -14.06C3.14 -14.05 3.16 -14.04 3.17 -14.03C3.61 -13.72 4.06 -13.40 4.50 -13.09C4.95 -12.78 5.39 -12.47 5.83 -12.15C6.71 -11.54 7.58 -10.92 8.45 -10.30C9.33 -9.69 10.20 -9.07 11.08 -8.45C11.53 -8.14 11.97 -7.82 12.42 -7.50C12.87 -7.19 13.32 -6.87 13.76 -6.56C13.78 -6.55 13.80 -6.53 13.81 -6.52C13.83 -6.51 13.84 -6.50 13.86 -6.49C14.75 -5.83 15.38 -4.93 15.71 -3.93C16.05 -2.94 16.08 -1.84 15.77 -0.79C15.76 -0.76 15.75 -0.73 15.74 -0.70C15.73 -0.67 15.72 -0.64 15.71 -0.61C15.55 -0.11 15.38 0.39 15.21 0.89C15.05 1.39 14.88 1.89 14.71 2.39C14.38 3.38 14.05 4.38 13.71 5.38C13.38 6.37 13.05 7.37 12.72 8.37C12.55 8.86 12.38 9.36 12.22 9.85C12.05 10.35 11.89 10.85 11.72 11.34C11.71 11.38 11.70 11.41 11.69 11.44C11.68 11.47 11.66 11.51 11.65 11.54C11.26 12.59 10.56 13.46 9.67 14.07C8.79 14.69 7.72 15.04 6.60 15.04C6.07 15.04 5.55 15.04 5.02 15.04C4.50 15.04 3.97 15.04 3.45 15.04C2.30 15.04 1.15 15.04 0.00 15.04C-1.15 15.04 -2.30 15.04 -3.45 15.04C-3.97 15.04 -4.50 15.04 -5.02 15.04C-5.55 15.04 -6.07 15.04 -6.60 15.04C-7.72 15.04 -8.79 14.69 -9.67 14.07C-10.56 13.46 -11.26 12.59 -11.65 11.54C-11.66 11.51 -11.68 11.47 -11.69 11.44C-11.70 11.41 -11.71 11.38 -11.72 11.34C-11.89 10.85 -12.05 10.35 -12.22 9.85C-12.38 9.36 -12.55 8.86 -12.72 8.37C-13.05 7.37 -13.38 6.37 -13.71 5.38C-14.05 4.38 -14.38 3.38 -14.71 2.39C-14.88 1.89 -15.05 1.39 -15.21 0.89C-15.38 0.39 -15.55 -0.11 -15.71 -0.61C-15.72 -0.64 -15.73 -0.67 -15.74 -0.70C-15.75 -0.73 -15.76 -0.76 -15.77 -0.79C-16.08 -1.84 -16.05 -2.94 -15.71 -3.93C-15.38 -4.93 -14.75 -5.83 -13.86 -6.49C-13.84 -6.50 -13.83 -6.51 -13.81 -6.52C-13.80 -6.53 -13.78 -6.55 -13.76 -6.56C-13.32 -6.87 -12.87 -7.19 -12.42 -7.50C-11.97 -7.82 -11.53 -8.14 -11.08 -8.45C-10.20 -9.07 -9.33 -9.69 -8.45 -10.30C-7.58 -10.92 -6.71 -11.54 -5.83 -12.15C-5.39 -12.47 -4.95 -12.78 -4.50 -13.09C-4.06 -13.40 -3.61 -13.72 -3.17 -14.03C-3.15 -14.05 -3.13 -14.06 -3.11 -14.07C-3.09 -14.09 -3.07 -14.10 -3.05 -14.12Z;M-3.05 -14.12C-2.43 -14.53 -1.75 -14.80 -1.06 -14.93C-0.36 -15.07 0.36 -15.07 1.06 -14.93C1.75 -14.80 2.43 -14.53 3.05 -14.12C3.06 -14.11 3.07 -14.10 3.09 -14.09C3.10 -14.08 3.12 -14.07 3.13 -14.06C3.14 -14.05 3.16 -14.04 3.17 -14.03C3.61 -13.72 4.06 -13.40 4.50 -13.09C4.95 -12.78 5.39 -12.47 5.83 -12.15C6.71 -11.54 7.58 -10.92 8.45 -10.30C9.33 -9.69 10.20 -9.07 11.08 -8.45C11.53 -8.14 11.97 -7.82 12.42 -7.50C12.87 -7.19 13.32 -6.87 13.76 -6.56C13.78 -6.55 13.80 -6.53 13.81 -6.52C13.83 -6.51 13.84 -6.50 13.86 -6.49C14.75 -5.83 15.38 -4.93 15.71 -3.93C16.05 -2.94 16.08 -1.84 15.77 -0.79C15.76 -0.76 15.75 -0.73 15.74 -0.70C15.73 -0.67 15.72 -0.64 15.71 -0.61C15.55 -0.11 15.38 0.39 15.21 0.89C15.05 1.39 14.88 1.89 14.71 2.39C14.38 3.38 14.05 4.38 13.71 5.38C13.38 6.37 13.05 7.37 12.72 8.37C12.55 8.86 12.38 9.36 12.22 9.85C12.05 10.35 11.89 10.85 11.72 11.34C11.71 11.38 11.70 11.41 11.69 11.44C11.68 11.47 11.66 11.51 11.65 11.54C11.26 12.59 10.56 13.46 9.67 14.07C8.79 14.69 7.72 15.04 6.60 15.04C6.07 15.04 5.55 15.04 5.02 15.04C4.50 15.04 3.97 15.04 3.45 15.04C2.30 15.04 1.15 15.04 0.00 15.04C-1.15 15.04 -2.30 15.04 -3.45 15.04C-3.97 15.04 -4.50 15.04 -5.02 15.04C-5.55 15.04 -6.07 15.04 -6.60 15.04C-7.72 15.04 -8.79 14.69 -9.67 14.07C-10.56 13.46 -11.26 12.59 -11.65 11.54C-11.66 11.51 -11.68 11.47 -11.69 11.44C-11.70 11.41 -11.71 11.38 -11.72 11.34C-11.89 10.85 -12.05 10.35 -12.22 9.85C-12.38 9.36 -12.55 8.86 -12.72 8.37C-13.05 7.37 -13.38 6.37 -13.71 5.38C-14.05 4.38 -14.38 3.38 -14.71 2.39C-14.88 1.89 -15.05 1.39 -15.21 0.89C-15.38 0.39 -15.55 -0.11 -15.71 -0.61C-15.72 -0.64 -15.73 -0.67 -15.74 -0.70C-15.75 -0.73 -15.76 -0.76 -15.77 -0.79C-16.08 -1.84 -16.05 -2.94 -15.71 -3.93C-15.38 -4.93 -14.75 -5.83 -13.86 -6.49C-13.84 -6.50 -13.83 -6.51 -13.81 -6.52C-13.80 -6.53 -13.78 -6.55 -13.76 -6.56C-13.32 -6.87 -12.87 -7.19 -12.42 -7.50C-11.97 -7.82 -11.53 -8.14 -11.08 -8.45C-10.20 -9.07 -9.33 -9.69 -8.45 -10.30C-7.58 -10.92 -6.71 -11.54 -5.83 -12.15C-5.39 -12.47 -4.95 -12.78 -4.50 -13.09C-4.06 -13.40 -3.61 -13.72 -3.17 -14.03C-3.15 -14.05 -3.13 -14.06 -3.11 -14.07C-3.09 -14.09 -3.07 -14.10 -3.05 -14.12Z;M-3.17 -14.03C-2.54 -14.48 -1.83 -14.78 -1.10 -14.93C-0.38 -15.07 0.38 -15.07 1.10 -14.93C1.83 -14.78 2.54 -14.48 3.17 -14.03C3.23 -13.99 3.29 -13.95 3.35 -13.90C3.41 -13.86 3.47 -13.82 3.53 -13.78C3.59 -13.73 3.65 -13.69 3.71 -13.65C3.81 -13.58 3.90 -13.51 4.00 -13.45C4.09 -13.38 4.19 -13.31 4.28 -13.25C4.38 -13.18 4.47 -13.11 4.57 -13.05C5.59 -12.33 6.61 -11.60 7.63 -10.88C8.65 -10.16 9.68 -9.44 10.70 -8.72C11.72 -8.00 12.74 -7.28 13.76 -6.56C13.98 -6.41 14.18 -6.24 14.36 -6.06C14.55 -5.88 14.72 -5.69 14.88 -5.49C15.03 -5.30 15.17 -5.09 15.30 -4.87C15.35 -4.76 15.41 -4.66 15.46 -4.56C15.51 -4.45 15.56 -4.34 15.60 -4.24C15.65 -4.13 15.69 -4.02 15.72 -3.91C15.84 -3.56 15.91 -3.20 15.95 -2.83C15.99 -2.47 15.99 -2.09 15.95 -1.72C15.92 -1.35 15.84 -0.98 15.71 -0.61C15.50 0.03 15.29 0.66 15.08 1.30C14.86 1.94 14.65 2.57 14.44 3.21C14.22 3.85 14.01 4.48 13.80 5.12C13.62 5.67 13.43 6.22 13.25 6.77C13.06 7.32 12.88 7.87 12.70 8.43C12.51 8.98 12.33 9.53 12.14 10.08C12.10 10.22 12.05 10.36 12.00 10.50C11.96 10.64 11.91 10.78 11.86 10.92C11.82 11.06 11.77 11.20 11.72 11.34C11.48 12.08 11.08 12.73 10.58 13.28C10.08 13.83 9.47 14.27 8.79 14.57C8.12 14.87 7.37 15.04 6.60 15.04C6.22 15.04 5.84 15.04 5.46 15.04C5.08 15.04 4.70 15.04 4.32 15.04C3.95 15.04 3.57 15.04 3.19 15.04C2.99 15.04 2.80 15.04 2.60 15.04C2.41 15.04 2.21 15.04 2.02 15.04C1.82 15.04 1.63 15.04 1.43 15.04C0.54 15.04 -0.35 15.04 -1.24 15.04C-2.13 15.04 -3.03 15.04 -3.92 15.04C-4.81 15.04 -5.70 15.04 -6.60 15.04C-7.76 15.04 -8.86 14.67 -9.75 14.02C-10.65 13.37 -11.35 12.45 -11.72 11.34C-12.13 10.13 -12.53 8.92 -12.94 7.70C-13.34 6.49 -13.75 5.27 -14.15 4.06C-14.24 3.79 -14.33 3.52 -14.42 3.25C-14.51 2.98 -14.60 2.71 -14.69 2.44C-14.86 1.94 -15.03 1.43 -15.20 0.92C-15.37 0.41 -15.54 -0.10 -15.71 -0.61C-16.08 -1.71 -16.06 -2.86 -15.72 -3.91C-15.38 -4.95 -14.71 -5.89 -13.76 -6.56C-13.36 -6.84 -12.95 -7.13 -12.55 -7.42C-12.14 -7.70 -11.73 -7.99 -11.33 -8.27C-10.37 -8.95 -9.41 -9.63 -8.45 -10.30C-7.50 -10.98 -6.54 -11.65 -5.58 -12.33C-5.18 -12.61 -4.78 -12.90 -4.38 -13.18C-3.97 -13.46 -3.57 -13.75 -3.17 -14.03Z;M-5.75 -13.90C-5.04 -14.39 -4.30 -14.81 -3.52 -15.16C-2.74 -15.51 -1.94 -15.79 -1.11 -16.00C-0.28 -16.21 0.57 -16.35 1.43 -16.41C1.53 -16.42 1.64 -16.42 1.74 -16.43C1.84 -16.43 1.95 -16.44 2.05 -16.44C2.16 -16.44 2.26 -16.45 2.36 -16.45C2.52 -16.43 2.69 -16.41 2.85 -16.40C3.01 -16.38 3.17 -16.36 3.33 -16.35C3.49 -16.33 3.65 -16.31 3.82 -16.30C5.65 -16.11 7.37 -15.57 8.92 -14.75C10.47 -13.93 11.84 -12.83 12.98 -11.52C14.11 -10.20 15.01 -8.67 15.59 -6.99C15.71 -6.66 15.81 -6.31 15.91 -5.97C16.00 -5.62 16.08 -5.26 16.14 -4.91C16.21 -4.55 16.26 -4.18 16.30 -3.82C16.31 -3.65 16.33 -3.49 16.35 -3.33C16.36 -3.17 16.38 -3.01 16.40 -2.85C16.41 -2.69 16.43 -2.52 16.45 -2.36C16.44 -1.91 16.42 -1.47 16.38 -1.02C16.33 -0.58 16.27 -0.14 16.18 0.30C16.10 0.73 16.00 1.16 15.87 1.59C15.65 2.36 15.36 3.11 15.01 3.84C14.66 4.56 14.25 5.26 13.78 5.92C13.32 6.58 12.79 7.20 12.21 7.78C11.72 8.27 11.23 8.76 10.73 9.26C10.24 9.75 9.75 10.24 9.26 10.73C8.76 11.23 8.27 11.72 7.78 12.21C7.65 12.34 7.52 12.46 7.39 12.59C7.26 12.71 7.12 12.83 6.99 12.95C6.85 13.06 6.72 13.18 6.58 13.29C5.98 13.76 5.35 14.19 4.69 14.56C4.03 14.94 3.35 15.26 2.64 15.52C1.93 15.79 1.20 16.00 0.46 16.15C0.15 16.22 -0.16 16.27 -0.47 16.31C-0.78 16.35 -1.10 16.39 -1.41 16.41C-1.73 16.43 -2.05 16.44 -2.36 16.45C-2.52 16.43 -2.69 16.41 -2.85 16.40C-3.01 16.38 -3.17 16.36 -3.33 16.35C-3.49 16.33 -3.65 16.31 -3.82 16.30C-4.59 16.22 -5.34 16.08 -6.07 15.88C-6.79 15.68 -7.50 15.43 -8.17 15.12C-8.85 14.81 -9.49 14.45 -10.10 14.05C-10.90 13.52 -11.63 12.92 -12.30 12.24C-12.97 11.57 -13.57 10.83 -14.10 10.03C-14.69 9.12 -15.18 8.14 -15.55 7.10C-15.93 6.06 -16.18 4.96 -16.30 3.82C-16.32 3.57 -16.35 3.33 -16.37 3.09C-16.40 2.85 -16.42 2.61 -16.45 2.36C-16.44 1.90 -16.42 1.43 -16.37 0.97C-16.32 0.51 -16.26 0.05 -16.16 -0.40C-15.97 -1.35 -15.69 -2.29 -15.31 -3.18C-14.93 -4.07 -14.46 -4.93 -13.91 -5.73C-13.66 -6.10 -13.40 -6.45 -13.11 -6.79C-12.83 -7.13 -12.53 -7.46 -12.21 -7.78C-11.47 -8.52 -10.73 -9.26 -10.00 -10.00C-9.26 -10.73 -8.52 -11.47 -7.78 -12.21C-7.47 -12.53 -7.14 -12.82 -6.80 -13.11C-6.46 -13.39 -6.11 -13.65 -5.75 -13.90Z;M-6.04 -13.78C-5.32 -14.28 -4.57 -14.71 -3.79 -15.09C-3.00 -15.47 -2.19 -15.80 -1.35 -16.06C-0.50 -16.32 0.37 -16.52 1.26 -16.65C1.37 -16.66 1.48 -16.67 1.59 -16.69C1.70 -16.70 1.81 -16.71 1.92 -16.72C2.03 -16.73 2.14 -16.73 2.25 -16.74C2.42 -16.73 2.59 -16.72 2.76 -16.71C2.93 -16.70 3.10 -16.69 3.27 -16.68C3.44 -16.67 3.61 -16.66 3.78 -16.65C5.73 -16.54 7.55 -16.03 9.17 -15.20C10.79 -14.36 12.22 -13.21 13.37 -11.81C14.52 -10.41 15.39 -8.77 15.92 -6.96C16.02 -6.60 16.11 -6.23 16.19 -5.86C16.27 -5.48 16.34 -5.11 16.39 -4.73C16.44 -4.35 16.48 -3.96 16.51 -3.57C16.52 -3.40 16.53 -3.23 16.54 -3.06C16.55 -2.89 16.57 -2.73 16.58 -2.56C16.59 -2.39 16.61 -2.22 16.62 -2.05C16.60 -1.59 16.56 -1.13 16.51 -0.67C16.45 -0.22 16.38 0.23 16.29 0.68C16.20 1.12 16.09 1.56 15.97 1.99C15.74 2.78 15.44 3.55 15.07 4.29C14.71 5.03 14.27 5.73 13.76 6.39C13.26 7.06 12.69 7.68 12.06 8.25C11.53 8.73 10.99 9.22 10.45 9.70C9.92 10.19 9.38 10.67 8.85 11.15C8.31 11.64 7.78 12.12 7.24 12.61C7.10 12.73 6.96 12.86 6.82 12.98C6.67 13.10 6.53 13.21 6.38 13.33C6.23 13.44 6.08 13.55 5.93 13.66C5.28 14.10 4.62 14.49 3.94 14.84C3.26 15.19 2.56 15.49 1.85 15.75C1.14 16.01 0.41 16.23 -0.33 16.41C-0.63 16.48 -0.93 16.54 -1.23 16.59C-1.53 16.64 -1.84 16.67 -2.14 16.70C-2.45 16.72 -2.76 16.74 -3.07 16.74C-3.23 16.72 -3.38 16.70 -3.54 16.68C-3.70 16.66 -3.85 16.65 -4.01 16.63C-4.17 16.61 -4.32 16.59 -4.48 16.57C-5.23 16.48 -5.96 16.32 -6.67 16.09C-7.37 15.87 -8.05 15.58 -8.69 15.23C-9.34 14.88 -9.95 14.47 -10.52 14.01C-11.26 13.41 -11.95 12.77 -12.59 12.09C-13.23 11.42 -13.81 10.70 -14.36 9.95C-14.98 9.08 -15.48 8.13 -15.85 7.11C-16.22 6.09 -16.45 5.01 -16.52 3.88C-16.54 3.64 -16.56 3.40 -16.57 3.16C-16.59 2.93 -16.60 2.69 -16.62 2.45C-16.59 1.99 -16.54 1.53 -16.46 1.08C-16.39 0.62 -16.28 0.17 -16.16 -0.27C-15.89 -1.21 -15.56 -2.11 -15.18 -2.98C-14.80 -3.85 -14.36 -4.70 -13.86 -5.52C-13.63 -5.90 -13.39 -6.26 -13.12 -6.61C-12.85 -6.96 -12.57 -7.29 -12.26 -7.61C-11.56 -8.36 -10.85 -9.11 -10.14 -9.86C-9.43 -10.60 -8.72 -11.35 -8.02 -12.10C-7.71 -12.42 -7.40 -12.72 -7.07 -13.00C-6.74 -13.28 -6.39 -13.54 -6.04 -13.78Z;M-5.75 -13.90C-5.04 -14.39 -4.30 -14.81 -3.52 -15.16C-2.74 -15.51 -1.94 -15.79 -1.11 -16.00C-0.28 -16.21 0.57 -16.35 1.43 -16.41C1.53 -16.42 1.64 -16.42 1.74 -16.43C1.84 -16.43 1.95 -16.44 2.05 -16.44C2.16 -16.44 2.26 -16.45 2.36 -16.45C2.52 -16.43 2.69 -16.41 2.85 -16.40C3.01 -16.38 3.17 -16.36 3.33 -16.35C3.49 -16.33 3.65 -16.31 3.82 -16.30C5.65 -16.11 7.37 -15.57 8.92 -14.75C10.47 -13.93 11.84 -12.83 12.98 -11.52C14.11 -10.20 15.01 -8.67 15.59 -6.99C15.71 -6.66 15.81 -6.31 15.91 -5.97C16.00 -5.62 16.08 -5.26 16.14 -4.91C16.21 -4.55 16.26 -4.18 16.30 -3.82C16.31 -3.65 16.33 -3.49 16.35 -3.33C16.36 -3.17 16.38 -3.01 16.40 -2.85C16.41 -2.69 16.43 -2.52 16.45 -2.36C16.44 -1.91 16.42 -1.47 16.38 -1.02C16.33 -0.58 16.27 -0.14 16.18 0.30C16.10 0.73 16.00 1.16 15.87 1.59C15.65 2.36 15.36 3.11 15.01 3.84C14.66 4.56 14.25 5.26 13.78 5.92C13.32 6.58 12.79 7.20 12.21 7.78C11.72 8.27 11.23 8.76 10.73 9.26C10.24 9.75 9.75 10.24 9.26 10.73C8.76 11.23 8.27 11.72 7.78 12.21C7.65 12.34 7.52 12.46 7.39 12.59C7.26 12.71 7.12 12.83 6.99 12.95C6.85 13.06 6.72 13.18 6.58 13.29C5.98 13.76 5.35 14.19 4.69 14.56C4.03 14.94 3.35 15.26 2.64 15.52C1.93 15.79 1.20 16.00 0.46 16.15C0.15 16.22 -0.16 16.27 -0.47 16.31C-0.78 16.35 -1.10 16.39 -1.41 16.41C-1.73 16.43 -2.05 16.44 -2.36 16.45C-2.52 16.43 -2.69 16.41 -2.85 16.40C-3.01 16.38 -3.17 16.36 -3.33 16.35C-3.49 16.33 -3.65 16.31 -3.82 16.30C-4.59 16.22 -5.34 16.08 -6.07 15.88C-6.79 15.68 -7.50 15.43 -8.17 15.12C-8.85 14.81 -9.49 14.45 -10.10 14.05C-10.90 13.52 -11.63 12.92 -12.30 12.24C-12.97 11.57 -13.57 10.83 -14.10 10.03C-14.69 9.12 -15.18 8.14 -15.55 7.10C-15.93 6.06 -16.18 4.96 -16.30 3.82C-16.32 3.57 -16.35 3.33 -16.37 3.09C-16.40 2.85 -16.42 2.61 -16.45 2.36C-16.44 1.90 -16.42 1.43 -16.37 0.97C-16.32 0.51 -16.26 0.05 -16.16 -0.40C-15.97 -1.35 -15.69 -2.29 -15.31 -3.18C-14.93 -4.07 -14.46 -4.93 -13.91 -5.73C-13.66 -6.10 -13.40 -6.45 -13.11 -6.79C-12.83 -7.13 -12.53 -7.46 -12.21 -7.78C-11.47 -8.52 -10.73 -9.26 -10.00 -10.00C-9.26 -10.73 -8.52 -11.47 -7.78 -12.21C-7.47 -12.53 -7.14 -12.82 -6.80 -13.11C-6.46 -13.39 -6.11 -13.65 -5.75 -13.90Z;M-5.75 -13.90C-5.04 -14.39 -4.30 -14.81 -3.52 -15.16C-2.74 -15.51 -1.94 -15.79 -1.11 -16.00C-0.28 -16.21 0.57 -16.35 1.43 -16.41C1.53 -16.42 1.64 -16.42 1.74 -16.43C1.84 -16.43 1.95 -16.44 2.05 -16.44C2.16 -16.44 2.26 -16.45 2.36 -16.45C2.52 -16.43 2.69 -16.41 2.85 -16.40C3.01 -16.38 3.17 -16.36 3.33 -16.35C3.49 -16.33 3.65 -16.31 3.82 -16.30C5.65 -16.11 7.37 -15.57 8.92 -14.75C10.47 -13.93 11.84 -12.83 12.98 -11.52C14.11 -10.20 15.01 -8.67 15.59 -6.99C15.71 -6.66 15.81 -6.31 15.91 -5.97C16.00 -5.62 16.08 -5.26 16.14 -4.91C16.21 -4.55 16.26 -4.18 16.30 -3.82C16.31 -3.65 16.33 -3.49 16.35 -3.33C16.36 -3.17 16.38 -3.01 16.40 -2.85C16.41 -2.69 16.43 -2.52 16.45 -2.36C16.44 -1.91 16.42 -1.47 16.38 -1.02C16.33 -0.58 16.27 -0.14 16.18 0.30C16.10 0.73 16.00 1.16 15.87 1.59C15.65 2.36 15.36 3.11 15.01 3.84C14.66 4.56 14.25 5.26 13.78 5.92C13.32 6.58 12.79 7.20 12.21 7.78C11.72 8.27 11.23 8.76 10.73 9.26C10.24 9.75 9.75 10.24 9.26 10.73C8.76 11.23 8.27 11.72 7.78 12.21C7.65 12.34 7.52 12.46 7.39 12.59C7.26 12.71 7.12 12.83 6.99 12.95C6.85 13.06 6.72 13.18 6.58 13.29C5.98 13.76 5.35 14.19 4.69 14.56C4.03 14.94 3.35 15.26 2.64 15.52C1.93 15.79 1.20 16.00 0.46 16.15C0.15 16.22 -0.16 16.27 -0.47 16.31C-0.78 16.35 -1.10 16.39 -1.41 16.41C-1.73 16.43 -2.05 16.44 -2.36 16.45C-2.52 16.43 -2.69 16.41 -2.85 16.40C-3.01 16.38 -3.17 16.36 -3.33 16.35C-3.49 16.33 -3.65 16.31 -3.82 16.30C-4.59 16.22 -5.34 16.08 -6.07 15.88C-6.79 15.68 -7.50 15.43 -8.17 15.12C-8.85 14.81 -9.49 14.45 -10.10 14.05C-10.90 13.52 -11.63 12.92 -12.30 12.24C-12.97 11.57 -13.57 10.83 -14.10 10.03C-14.69 9.12 -15.18 8.14 -15.55 7.10C-15.93 6.06 -16.18 4.96 -16.30 3.82C-16.32 3.57 -16.35 3.33 -16.37 3.09C-16.40 2.85 -16.42 2.61 -16.45 2.36C-16.44 1.90 -16.42 1.43 -16.37 0.97C-16.32 0.51 -16.26 0.05 -16.16 -0.40C-15.97 -1.35 -15.69 -2.29 -15.31 -3.18C-14.93 -4.07 -14.46 -4.93 -13.91 -5.73C-13.66 -6.10 -13.40 -6.45 -13.11 -6.79C-12.83 -7.13 -12.53 -7.46 -12.21 -7.78C-11.47 -8.52 -10.73 -9.26 -10.00 -10.00C-9.26 -10.73 -8.52 -11.47 -7.78 -12.21C-7.47 -12.53 -7.14 -12.82 -6.80 -13.11C-6.46 -13.39 -6.11 -13.65 -5.75 -13.90Z;M3.82 -16.30C3.83 -16.30 3.84 -16.29 3.85 -16.29C3.86 -16.29 3.87 -16.29 3.88 -16.29C4.44 -16.23 4.99 -16.14 5.53 -16.01C6.08 -15.89 6.61 -15.73 7.12 -15.55C7.34 -15.47 7.55 -15.38 7.76 -15.30C7.98 -15.21 8.18 -15.11 8.39 -15.02C8.89 -14.78 9.37 -14.51 9.84 -14.22C10.30 -13.93 10.74 -13.61 11.17 -13.27C11.56 -12.95 11.94 -12.61 12.30 -12.25C12.66 -11.89 13.00 -11.51 13.32 -11.11C13.65 -10.69 13.97 -10.24 14.26 -9.78C14.55 -9.31 14.81 -8.83 15.04 -8.33C15.14 -8.13 15.23 -7.92 15.32 -7.71C15.41 -7.50 15.49 -7.29 15.56 -7.07C15.74 -6.56 15.90 -6.04 16.02 -5.51C16.14 -4.97 16.23 -4.43 16.29 -3.87C16.29 -3.86 16.29 -3.85 16.29 -3.85C16.29 -3.84 16.30 -3.83 16.30 -3.82C16.32 -3.57 16.35 -3.33 16.37 -3.09C16.40 -2.85 16.42 -2.61 16.45 -2.36C16.45 -2.23 16.44 -2.10 16.44 -1.97C16.43 -1.84 16.43 -1.71 16.42 -1.58C16.40 -1.29 16.38 -1.01 16.34 -0.73C16.31 -0.45 16.27 -0.17 16.22 0.10C16.20 0.22 16.18 0.33 16.15 0.45C16.13 0.56 16.11 0.68 16.08 0.79C16.02 1.06 15.95 1.34 15.87 1.60C15.79 1.87 15.70 2.14 15.61 2.41C15.16 3.66 14.54 4.85 13.77 5.94C13.30 6.59 12.78 7.21 12.21 7.78C11.15 8.84 10.09 9.91 9.02 10.97C8.61 11.38 8.19 11.80 7.78 12.21C7.51 12.48 7.24 12.73 6.96 12.97C5.18 14.49 3.08 15.55 0.83 16.07C-0.21 16.31 -1.28 16.44 -2.36 16.45C-2.85 16.40 -3.33 16.35 -3.82 16.30C-3.84 16.29 -3.86 16.29 -3.88 16.29C-5.00 16.17 -6.09 15.92 -7.12 15.55C-7.55 15.39 -7.98 15.21 -8.39 15.02C-9.39 14.54 -10.32 13.95 -11.17 13.27C-11.96 12.63 -12.68 11.91 -13.32 11.11C-13.99 10.26 -14.58 9.33 -15.04 8.33C-15.24 7.92 -15.41 7.50 -15.56 7.07C-15.92 6.06 -16.17 4.98 -16.29 3.87C-16.29 3.85 -16.29 3.84 -16.30 3.82C-16.35 3.33 -16.40 2.85 -16.45 2.36C-16.44 1.28 -16.31 0.21 -16.07 -0.83C-15.55 -3.08 -14.49 -5.19 -12.97 -6.96C-12.73 -7.24 -12.48 -7.51 -12.21 -7.78C-11.80 -8.19 -11.38 -8.61 -10.97 -9.02C-9.91 -10.09 -8.84 -11.15 -7.78 -12.21C-7.20 -12.79 -6.59 -13.31 -5.93 -13.77C-4.84 -14.55 -3.65 -15.17 -2.39 -15.61C-1.86 -15.80 -1.32 -15.96 -0.78 -16.08C-0.55 -16.14 -0.32 -16.18 -0.09 -16.22C0.46 -16.32 1.02 -16.39 1.58 -16.42C1.84 -16.44 2.10 -16.44 2.36 -16.45C2.85 -16.40 3.33 -16.35 3.82 -16.30Z;M1.60 -15.68C1.61 -15.67 1.62 -15.66 1.63 -15.65C1.64 -15.65 1.65 -15.64 1.66 -15.63C2.15 -15.22 2.64 -14.80 3.12 -14.38C3.61 -13.97 4.10 -13.55 4.59 -13.13C4.79 -12.96 5.02 -12.82 5.27 -12.72C5.51 -12.62 5.78 -12.55 6.04 -12.53C6.68 -12.48 7.32 -12.43 7.96 -12.38C8.60 -12.33 9.24 -12.28 9.88 -12.23C10.51 -12.18 11.07 -11.90 11.49 -11.49C11.90 -11.07 12.18 -10.51 12.23 -9.88C12.28 -9.24 12.33 -8.60 12.38 -7.96C12.43 -7.32 12.48 -6.68 12.53 -6.04C12.55 -5.78 12.62 -5.51 12.72 -5.27C12.82 -5.02 12.96 -4.79 13.13 -4.59C13.55 -4.10 13.97 -3.61 14.38 -3.12C14.80 -2.64 15.22 -2.15 15.63 -1.66C15.64 -1.65 15.65 -1.64 15.65 -1.63C15.66 -1.62 15.67 -1.61 15.68 -1.60C15.87 -1.37 16.01 -1.11 16.10 -0.84C16.20 -0.57 16.24 -0.28 16.24 0.00C16.24 0.30 16.19 0.59 16.09 0.87C15.99 1.15 15.84 1.42 15.63 1.66C15.22 2.15 14.80 2.64 14.38 3.12C13.97 3.61 13.55 4.10 13.13 4.59C12.96 4.79 12.82 5.02 12.72 5.27C12.62 5.51 12.55 5.78 12.53 6.04C12.48 6.68 12.43 7.32 12.38 7.96C12.33 8.60 12.28 9.24 12.23 9.88C12.13 11.13 11.13 12.13 9.88 12.23C9.44 12.26 8.99 12.30 8.54 12.33C7.71 12.40 6.88 12.47 6.04 12.53C5.71 12.56 5.40 12.65 5.10 12.79C4.92 12.89 4.75 13.00 4.59 13.13C3.61 13.97 2.64 14.80 1.66 15.63C1.18 16.04 0.59 16.24 0.00 16.24C-0.57 16.24 -1.14 16.05 -1.60 15.68C-1.62 15.66 -1.64 15.65 -1.66 15.63C-2.64 14.80 -3.61 13.97 -4.59 13.13C-5.00 12.79 -5.51 12.57 -6.04 12.53C-7.32 12.43 -8.60 12.33 -9.88 12.23C-11.13 12.13 -12.13 11.13 -12.23 9.88C-12.33 8.60 -12.43 7.32 -12.53 6.04C-12.57 5.51 -12.79 5.00 -13.13 4.59C-13.97 3.61 -14.80 2.64 -15.63 1.66C-15.65 1.64 -15.66 1.62 -15.68 1.60C-16.05 1.14 -16.24 0.57 -16.24 0.00C-16.24 -0.59 -16.04 -1.18 -15.63 -1.66C-14.80 -2.64 -13.97 -3.61 -13.13 -4.59C-13.00 -4.75 -12.89 -4.92 -12.79 -5.10C-12.65 -5.40 -12.56 -5.71 -12.53 -6.04C-12.47 -6.88 -12.40 -7.71 -12.33 -8.54C-12.30 -8.99 -12.26 -9.44 -12.23 -9.88C-12.13 -11.13 -11.13 -12.13 -9.88 -12.23C-8.60 -12.33 -7.32 -12.43 -6.04 -12.53C-5.51 -12.57 -5.00 -12.79 -4.59 -13.13C-3.61 -13.97 -2.64 -14.80 -1.66 -15.63C-1.18 -16.04 -0.59 -16.24 0.00 -16.24C0.57 -16.24 1.14 -16.05 1.60 -15.68Z;M1.29 -15.59C1.30 -15.58 1.31 -15.57 1.32 -15.56C1.33 -15.56 1.34 -15.55 1.35 -15.54C1.83 -15.07 2.30 -14.61 2.79 -14.16C3.27 -13.70 3.75 -13.25 4.23 -12.80C4.44 -12.61 4.67 -12.46 4.92 -12.36C5.17 -12.25 5.44 -12.19 5.71 -12.18C6.37 -12.16 7.04 -12.14 7.70 -12.12C8.36 -12.10 9.03 -12.09 9.70 -12.08C10.36 -12.07 10.95 -11.80 11.37 -11.38C11.80 -10.95 12.06 -10.37 12.07 -9.71C12.08 -9.04 12.10 -8.37 12.12 -7.71C12.13 -7.04 12.16 -6.38 12.18 -5.72C12.19 -5.45 12.25 -5.18 12.35 -4.93C12.46 -4.68 12.61 -4.44 12.79 -4.24C13.24 -3.76 13.70 -3.27 14.15 -2.79C14.61 -2.31 15.07 -1.83 15.54 -1.35C15.55 -1.34 15.56 -1.33 15.56 -1.32C15.57 -1.31 15.58 -1.30 15.59 -1.29C15.80 -1.06 15.96 -0.80 16.06 -0.52C16.17 -0.25 16.22 0.04 16.21 0.33C16.21 0.65 16.16 0.97 16.04 1.27C15.93 1.57 15.75 1.86 15.52 2.11C15.05 2.63 14.58 3.15 14.11 3.66C13.64 4.18 13.17 4.70 12.70 5.22C12.51 5.43 12.35 5.68 12.24 5.94C12.12 6.21 12.06 6.49 12.04 6.78C11.99 7.47 11.94 8.16 11.89 8.85C11.84 9.54 11.80 10.24 11.75 10.93C11.70 12.18 10.65 13.14 9.34 13.11C8.89 13.06 8.46 13.01 8.03 12.97C7.23 12.90 6.43 12.82 5.63 12.75C5.31 12.72 5.00 12.77 4.73 12.87C4.56 12.94 4.40 13.04 4.26 13.16C3.39 13.89 2.57 14.69 1.77 15.57C1.38 16.00 0.85 16.21 0.33 16.21C-0.25 16.22 -0.83 16.01 -1.30 15.59C-1.31 15.57 -1.33 15.56 -1.35 15.54C-2.30 14.61 -3.26 13.69 -4.23 12.80C-4.64 12.42 -5.16 12.21 -5.71 12.18C-7.03 12.13 -8.36 12.10 -9.70 12.08C-11.02 12.06 -12.05 11.02 -12.07 9.71C-12.09 8.37 -12.13 7.04 -12.18 5.72C-12.20 5.17 -12.42 4.65 -12.79 4.24C-13.69 3.27 -14.61 2.31 -15.54 1.35C-15.56 1.33 -15.57 1.31 -15.59 1.29C-16.01 0.83 -16.22 0.25 -16.21 -0.33C-16.21 -0.85 -16.00 -1.38 -15.57 -1.77C-14.69 -2.57 -13.89 -3.39 -13.16 -4.26C-13.04 -4.40 -12.94 -4.56 -12.87 -4.73C-12.77 -5.00 -12.72 -5.31 -12.75 -5.63C-12.82 -6.43 -12.90 -7.23 -12.97 -8.03C-13.01 -8.46 -13.06 -8.89 -13.11 -9.34C-13.15 -10.65 -12.18 -11.70 -10.93 -11.75C-9.54 -11.84 -8.16 -11.94 -6.78 -12.04C-6.20 -12.08 -5.65 -12.31 -5.22 -12.70C-4.18 -13.64 -3.15 -14.58 -2.11 -15.52C-1.60 -15.98 -0.97 -16.21 -0.33 -16.21C0.25 -16.22 0.83 -16.01 1.29 -15.59Z;M1.60 -15.68C1.61 -15.67 1.62 -15.66 1.63 -15.65C1.64 -15.65 1.65 -15.64 1.66 -15.63C2.15 -15.22 2.64 -14.80 3.12 -14.38C3.61 -13.97 4.10 -13.55 4.59 -13.13C4.79 -12.96 5.02 -12.82 5.27 -12.72C5.51 -12.62 5.78 -12.55 6.04 -12.53C6.68 -12.48 7.32 -12.43 7.96 -12.38C8.60 -12.33 9.24 -12.28 9.88 -12.23C10.51 -12.18 11.07 -11.90 11.49 -11.49C11.90 -11.07 12.18 -10.51 12.23 -9.88C12.28 -9.24 12.33 -8.60 12.38 -7.96C12.43 -7.32 12.48 -6.68 12.53 -6.04C12.55 -5.78 12.62 -5.51 12.72 -5.27C12.82 -5.02 12.96 -4.79 13.13 -4.59C13.55 -4.10 13.97 -3.61 14.38 -3.12C14.80 -2.64 15.22 -2.15 15.63 -1.66C15.64 -1.65 15.65 -1.64 15.65 -1.63C15.66 -1.62 15.67 -1.61 15.68 -1.60C15.87 -1.37 16.01 -1.11 16.10 -0.84C16.20 -0.57 16.24 -0.28 16.24 0.00C16.24 0.30 16.19 0.59 16.09 0.87C15.99 1.15 15.84 1.42 15.63 1.66C15.22 2.15 14.80 2.64 14.38 3.12C13.97 3.61 13.55 4.10 13.13 4.59C12.96 4.79 12.82 5.02 12.72 5.27C12.62 5.51 12.55 5.78 12.53 6.04C12.48 6.68 12.43 7.32 12.38 7.96C12.33 8.60 12.28 9.24 12.23 9.88C12.13 11.13 11.13 12.13 9.88 12.23C9.44 12.26 8.99 12.30 8.54 12.33C7.71 12.40 6.88 12.47 6.04 12.53C5.71 12.56 5.40 12.65 5.10 12.79C4.92 12.89 4.75 13.00 4.59 13.13C3.61 13.97 2.64 14.80 1.66 15.63C1.18 16.04 0.59 16.24 0.00 16.24C-0.57 16.24 -1.14 16.05 -1.60 15.68C-1.62 15.66 -1.64 15.65 -1.66 15.63C-2.64 14.80 -3.61 13.97 -4.59 13.13C-5.00 12.79 -5.51 12.57 -6.04 12.53C-7.32 12.43 -8.60 12.33 -9.88 12.23C-11.13 12.13 -12.13 11.13 -12.23 9.88C-12.33 8.60 -12.43 7.32 -12.53 6.04C-12.57 5.51 -12.79 5.00 -13.13 4.59C-13.97 3.61 -14.80 2.64 -15.63 1.66C-15.65 1.64 -15.66 1.62 -15.68 1.60C-16.05 1.14 -16.24 0.57 -16.24 0.00C-16.24 -0.59 -16.04 -1.18 -15.63 -1.66C-14.80 -2.64 -13.97 -3.61 -13.13 -4.59C-13.00 -4.75 -12.89 -4.92 -12.79 -5.10C-12.65 -5.40 -12.56 -5.71 -12.53 -6.04C-12.47 -6.88 -12.40 -7.71 -12.33 -8.54C-12.30 -8.99 -12.26 -9.44 -12.23 -9.88C-12.13 -11.13 -11.13 -12.13 -9.88 -12.23C-8.60 -12.33 -7.32 -12.43 -6.04 -12.53C-5.51 -12.57 -5.00 -12.79 -4.59 -13.13C-3.61 -13.97 -2.64 -14.80 -1.66 -15.63C-1.18 -16.04 -0.59 -16.24 0.00 -16.24C0.57 -16.24 1.14 -16.05 1.60 -15.68Z;M1.60 -15.68C1.61 -15.67 1.62 -15.66 1.63 -15.65C1.64 -15.65 1.65 -15.64 1.66 -15.63C2.15 -15.22 2.64 -14.80 3.12 -14.38C3.61 -13.97 4.10 -13.55 4.59 -13.13C4.79 -12.96 5.02 -12.82 5.27 -12.72C5.51 -12.62 5.78 -12.55 6.04 -12.53C6.68 -12.48 7.32 -12.43 7.96 -12.38C8.60 -12.33 9.24 -12.28 9.88 -12.23C10.51 -12.18 11.07 -11.90 11.49 -11.49C11.90 -11.07 12.18 -10.51 12.23 -9.88C12.28 -9.24 12.33 -8.60 12.38 -7.96C12.43 -7.32 12.48 -6.68 12.53 -6.04C12.55 -5.78 12.62 -5.51 12.72 -5.27C12.82 -5.02 12.96 -4.79 13.13 -4.59C13.55 -4.10 13.97 -3.61 14.38 -3.12C14.80 -2.64 15.22 -2.15 15.63 -1.66C15.64 -1.65 15.65 -1.64 15.65 -1.63C15.66 -1.62 15.67 -1.61 15.68 -1.60C15.87 -1.37 16.01 -1.11 16.10 -0.84C16.20 -0.57 16.24 -0.28 16.24 0.00C16.24 0.30 16.19 0.59 16.09 0.87C15.99 1.15 15.84 1.42 15.63 1.66C15.22 2.15 14.80 2.64 14.38 3.12C13.97 3.61 13.55 4.10 13.13 4.59C12.96 4.79 12.82 5.02 12.72 5.27C12.62 5.51 12.55 5.78 12.53 6.04C12.48 6.68 12.43 7.32 12.38 7.96C12.33 8.60 12.28 9.24 12.23 9.88C12.13 11.13 11.13 12.13 9.88 12.23C9.44 12.26 8.99 12.30 8.54 12.33C7.71 12.40 6.88 12.47 6.04 12.53C5.71 12.56 5.40 12.65 5.10 12.79C4.92 12.89 4.75 13.00 4.59 13.13C3.61 13.97 2.64 14.80 1.66 15.63C1.18 16.04 0.59 16.24 0.00 16.24C-0.57 16.24 -1.14 16.05 -1.60 15.68C-1.62 15.66 -1.64 15.65 -1.66 15.63C-2.64 14.80 -3.61 13.97 -4.59 13.13C-5.00 12.79 -5.51 12.57 -6.04 12.53C-7.32 12.43 -8.60 12.33 -9.88 12.23C-11.13 12.13 -12.13 11.13 -12.23 9.88C-12.33 8.60 -12.43 7.32 -12.53 6.04C-12.57 5.51 -12.79 5.00 -13.13 4.59C-13.97 3.61 -14.80 2.64 -15.63 1.66C-15.65 1.64 -15.66 1.62 -15.68 1.60C-16.05 1.14 -16.24 0.57 -16.24 0.00C-16.24 -0.59 -16.04 -1.18 -15.63 -1.66C-14.80 -2.64 -13.97 -3.61 -13.13 -4.59C-13.00 -4.75 -12.89 -4.92 -12.79 -5.10C-12.65 -5.40 -12.56 -5.71 -12.53 -6.04C-12.47 -6.88 -12.40 -7.71 -12.33 -8.54C-12.30 -8.99 -12.26 -9.44 -12.23 -9.88C-12.13 -11.13 -11.13 -12.13 -9.88 -12.23C-8.60 -12.33 -7.32 -12.43 -6.04 -12.53C-5.51 -12.57 -5.00 -12.79 -4.59 -13.13C-3.61 -13.97 -2.64 -14.80 -1.66 -15.63C-1.18 -16.04 -0.59 -16.24 0.00 -16.24C0.57 -16.24 1.14 -16.05 1.60 -15.68Z;M15.63 -1.66C15.82 -1.44 15.96 -1.20 16.06 -0.94C16.16 -0.69 16.22 -0.42 16.24 -0.15C16.26 0.17 16.22 0.49 16.11 0.80C16.01 1.11 15.85 1.40 15.63 1.66C15.22 2.15 14.80 2.64 14.38 3.12C13.97 3.61 13.55 4.10 13.13 4.59C12.96 4.79 12.82 5.02 12.72 5.27C12.62 5.51 12.55 5.78 12.53 6.04C12.48 6.68 12.43 7.32 12.38 7.96C12.33 8.60 12.28 9.24 12.23 9.88C12.18 10.51 11.90 11.07 11.49 11.49C11.07 11.90 10.51 12.18 9.88 12.23C9.24 12.28 8.60 12.33 7.96 12.38C7.32 12.43 6.68 12.48 6.04 12.53C5.78 12.55 5.51 12.62 5.27 12.72C5.02 12.82 4.79 12.96 4.59 13.13C4.10 13.55 3.61 13.97 3.12 14.38C2.64 14.80 2.15 15.22 1.66 15.63C1.40 15.85 1.11 16.01 0.81 16.11C0.50 16.21 0.18 16.26 -0.13 16.24C-0.68 16.21 -1.22 16.01 -1.66 15.63C-1.80 15.51 -1.93 15.40 -2.07 15.28C-2.91 14.57 -3.75 13.85 -4.59 13.13C-5.00 12.79 -5.51 12.57 -6.04 12.53C-6.23 12.52 -6.42 12.50 -6.61 12.49C-6.85 12.47 -7.10 12.45 -7.34 12.43C-8.18 12.36 -9.03 12.29 -9.88 12.23C-11.13 12.13 -12.13 11.13 -12.23 9.88C-12.29 9.03 -12.36 8.19 -12.43 7.34C-12.45 7.10 -12.47 6.85 -12.49 6.61C-12.50 6.42 -12.52 6.23 -12.53 6.04C-12.57 5.51 -12.79 5.00 -13.13 4.59C-13.85 3.75 -14.57 2.91 -15.28 2.07C-15.40 1.93 -15.52 1.79 -15.63 1.66C-16.00 1.22 -16.21 0.69 -16.24 0.15C-16.28 -0.49 -16.07 -1.14 -15.63 -1.66C-14.80 -2.64 -13.97 -3.61 -13.13 -4.59C-12.79 -5.00 -12.57 -5.51 -12.53 -6.04C-12.43 -7.32 -12.33 -8.60 -12.23 -9.88C-12.13 -11.13 -11.13 -12.13 -9.88 -12.23C-9.03 -12.29 -8.19 -12.36 -7.34 -12.43C-7.10 -12.45 -6.85 -12.47 -6.61 -12.49C-6.42 -12.50 -6.23 -12.52 -6.04 -12.53C-5.51 -12.57 -5.00 -12.79 -4.59 -13.13C-3.75 -13.85 -2.91 -14.57 -2.07 -15.28C-1.93 -15.40 -1.79 -15.52 -1.66 -15.63C-1.22 -16.00 -0.69 -16.21 -0.15 -16.24C0.49 -16.28 1.14 -16.07 1.66 -15.63C2.64 -14.80 3.61 -13.97 4.59 -13.13C5.00 -12.79 5.51 -12.57 6.04 -12.53C7.32 -12.43 8.60 -12.33 9.88 -12.23C11.13 -12.13 12.13 -11.13 12.23 -9.88C12.29 -9.03 12.36 -8.19 12.43 -7.34C12.45 -7.10 12.47 -6.85 12.49 -6.61C12.50 -6.42 12.52 -6.23 12.53 -6.04C12.57 -5.51 12.79 -5.00 13.13 -4.59C13.85 -3.75 14.57 -2.91 15.28 -2.07C15.40 -1.93 15.52 -1.79 15.63 -1.66Z;M13.34 2.99C13.41 3.16 13.48 3.32 13.55 3.49C13.62 3.66 13.70 3.82 13.77 3.99C13.87 4.22 13.95 4.44 14.03 4.67C14.10 4.89 14.16 5.12 14.22 5.34C14.32 5.79 14.38 6.25 14.40 6.69C14.42 7.14 14.39 7.57 14.33 8.00C14.31 8.18 14.27 8.36 14.23 8.54C14.19 8.72 14.15 8.89 14.09 9.07C13.97 9.48 13.80 9.89 13.61 10.27C13.41 10.66 13.18 11.02 12.92 11.37C12.68 11.69 12.42 11.99 12.13 12.27C11.84 12.55 11.53 12.81 11.21 13.04C10.86 13.29 10.48 13.51 10.09 13.69C9.70 13.88 9.30 14.03 8.87 14.15C8.70 14.19 8.53 14.23 8.35 14.27C8.18 14.30 8.00 14.33 7.82 14.35C7.40 14.40 6.98 14.41 6.55 14.39C6.12 14.36 5.68 14.29 5.24 14.18C5.03 14.13 4.83 14.07 4.62 14.01C4.42 13.94 4.21 13.86 4.01 13.77C3.67 13.62 3.33 13.48 3.00 13.33C2.89 13.28 2.78 13.24 2.66 13.19C1.98 12.89 1.26 12.72 0.53 12.66C-0.17 12.61 -0.89 12.66 -1.58 12.83C-1.95 12.92 -2.31 13.04 -2.66 13.19C-3.11 13.39 -3.55 13.58 -3.99 13.77C-5.77 14.54 -7.56 14.57 -9.14 14.07C-11.48 13.33 -13.36 11.44 -14.08 9.10C-14.56 7.54 -14.53 5.77 -13.77 4.01C-13.58 3.56 -13.38 3.11 -13.19 2.66C-13.04 2.31 -12.92 1.95 -12.83 1.58C-12.66 0.89 -12.61 0.17 -12.66 -0.53C-12.72 -1.26 -12.90 -1.98 -13.19 -2.66C-13.24 -2.77 -13.29 -2.88 -13.34 -2.99C-13.48 -3.32 -13.62 -3.66 -13.77 -3.99C-13.96 -4.44 -14.11 -4.89 -14.22 -5.34C-14.43 -6.25 -14.46 -7.15 -14.33 -8.00C-14.28 -8.36 -14.20 -8.72 -14.09 -9.07C-13.84 -9.90 -13.44 -10.68 -12.92 -11.37C-11.97 -12.65 -10.61 -13.62 -9.06 -14.09C-7.51 -14.56 -5.75 -14.52 -4.01 -13.77C-3.56 -13.58 -3.11 -13.38 -2.66 -13.19C-2.31 -13.04 -1.95 -12.92 -1.58 -12.83C-0.89 -12.66 -0.17 -12.61 0.53 -12.66C1.26 -12.72 1.98 -12.90 2.66 -13.19C2.77 -13.24 2.88 -13.29 2.99 -13.34C3.32 -13.48 3.66 -13.62 3.99 -13.77C4.44 -13.96 4.89 -14.11 5.34 -14.22C6.25 -14.43 7.15 -14.46 8.00 -14.33C8.36 -14.28 8.72 -14.20 9.07 -14.09C9.90 -13.84 10.68 -13.44 11.37 -12.92C12.65 -11.97 13.62 -10.61 14.09 -9.06C14.56 -7.51 14.52 -5.75 13.77 -4.01C13.58 -3.56 13.38 -3.11 13.19 -2.66C13.04 -2.31 12.92 -1.95 12.83 -1.58C12.66 -0.89 12.61 -0.17 12.66 0.53C12.72 1.26 12.90 1.98 13.19 2.66C13.24 2.77 13.29 2.88 13.34 2.99Z;M13.01 3.64C13.07 3.80 13.13 3.95 13.20 4.11C13.27 4.26 13.34 4.41 13.42 4.57C13.53 4.78 13.64 4.99 13.73 5.20C13.83 5.42 13.93 5.63 14.02 5.85C14.20 6.30 14.32 6.75 14.40 7.19C14.48 7.63 14.51 8.06 14.50 8.48C14.49 8.66 14.48 8.83 14.45 9.00C14.41 9.16 14.37 9.33 14.31 9.49C14.18 9.87 14.00 10.24 13.78 10.59C13.56 10.94 13.31 11.27 13.02 11.57C12.76 11.85 12.49 12.12 12.22 12.38C11.95 12.64 11.68 12.90 11.39 13.15C11.08 13.43 10.75 13.67 10.39 13.87C10.04 14.08 9.66 14.25 9.27 14.37C9.11 14.42 8.95 14.46 8.79 14.48C8.62 14.51 8.45 14.52 8.27 14.52C7.87 14.52 7.45 14.47 7.03 14.38C6.60 14.29 6.17 14.16 5.74 13.98C5.54 13.89 5.35 13.80 5.16 13.71C4.97 13.61 4.78 13.52 4.59 13.42C4.28 13.26 3.97 13.12 3.65 13.01C3.54 12.97 3.43 12.93 3.33 12.89C2.67 12.66 1.96 12.56 1.25 12.59C0.50 12.58 -0.24 12.67 -0.96 12.87C-1.35 12.97 -1.74 13.11 -2.11 13.29C-2.58 13.51 -3.05 13.73 -3.52 13.95C-5.44 14.84 -7.36 14.89 -9.04 14.33C-11.53 13.50 -13.53 11.48 -14.34 8.99C-14.88 7.32 -14.83 5.43 -13.96 3.54C-13.73 3.06 -13.51 2.59 -13.29 2.11C-13.11 1.73 -12.97 1.35 -12.87 0.95C-12.67 0.24 -12.58 -0.50 -12.60 -1.25C-12.56 -1.96 -12.66 -2.67 -12.90 -3.33C-12.94 -3.43 -12.98 -3.54 -13.01 -3.64C-13.13 -3.96 -13.26 -4.27 -13.42 -4.57C-13.64 -5.00 -13.84 -5.42 -14.02 -5.86C-14.37 -6.76 -14.52 -7.64 -14.50 -8.48C-14.49 -8.84 -14.43 -9.17 -14.31 -9.49C-14.04 -10.27 -13.60 -10.97 -13.02 -11.58C-11.95 -12.86 -10.54 -13.84 -8.95 -14.36C-7.29 -14.88 -5.41 -14.83 -3.54 -13.96C-3.06 -13.74 -2.59 -13.51 -2.11 -13.29C-1.74 -13.11 -1.35 -12.98 -0.96 -12.87C-0.24 -12.68 0.50 -12.58 1.25 -12.60C1.96 -12.57 2.66 -12.67 3.32 -12.90C3.43 -12.94 3.54 -12.98 3.64 -13.02C3.96 -13.13 4.27 -13.27 4.57 -13.43C4.99 -13.64 5.42 -13.84 5.86 -14.02C6.76 -14.38 7.64 -14.53 8.48 -14.50C8.84 -14.49 9.17 -14.43 9.49 -14.32C10.26 -14.04 10.97 -13.60 11.58 -13.03C12.86 -11.95 13.83 -10.54 14.35 -8.95C14.88 -7.30 14.82 -5.42 13.96 -3.54C13.73 -3.07 13.51 -2.59 13.29 -2.12C13.11 -1.74 12.97 -1.35 12.87 -0.96C12.67 -0.24 12.58 0.50 12.60 1.25C12.56 1.96 12.66 2.66 12.90 3.32C12.94 3.43 12.98 3.53 13.01 3.64Z;M13.34 2.99C13.41 3.16 13.48 3.32 13.55 3.49C13.62 3.66 13.70 3.82 13.77 3.99C13.87 4.22 13.95 4.44 14.03 4.67C14.10 4.89 14.16 5.12 14.22 5.34C14.32 5.79 14.38 6.25 14.40 6.69C14.42 7.14 14.39 7.57 14.33 8.00C14.31 8.18 14.27 8.36 14.23 8.54C14.19 8.72 14.15 8.89 14.09 9.07C13.97 9.48 13.80 9.89 13.61 10.27C13.41 10.66 13.18 11.02 12.92 11.37C12.68 11.69 12.42 11.99 12.13 12.27C11.84 12.55 11.53 12.81 11.21 13.04C10.86 13.29 10.48 13.51 10.09 13.69C9.70 13.88 9.30 14.03 8.87 14.15C8.70 14.19 8.53 14.23 8.35 14.27C8.18 14.30 8.00 14.33 7.82 14.35C7.40 14.40 6.98 14.41 6.55 14.39C6.12 14.36 5.68 14.29 5.24 14.18C5.03 14.13 4.83 14.07 4.62 14.01C4.42 13.94 4.21 13.86 4.01 13.77C3.67 13.62 3.33 13.48 3.00 13.33C2.89 13.28 2.78 13.24 2.66 13.19C1.98 12.89 1.26 12.72 0.53 12.66C-0.17 12.61 -0.89 12.66 -1.58 12.83C-1.95 12.92 -2.31 13.04 -2.66 13.19C-3.11 13.39 -3.55 13.58 -3.99 13.77C-5.77 14.54 -7.56 14.57 -9.14 14.07C-11.48 13.33 -13.36 11.44 -14.08 9.10C-14.56 7.54 -14.53 5.77 -13.77 4.01C-13.58 3.56 -13.38 3.11 -13.19 2.66C-13.04 2.31 -12.92 1.95 -12.83 1.58C-12.66 0.89 -12.61 0.17 -12.66 -0.53C-12.72 -1.26 -12.90 -1.98 -13.19 -2.66C-13.24 -2.77 -13.29 -2.88 -13.34 -2.99C-13.48 -3.32 -13.62 -3.66 -13.77 -3.99C-13.96 -4.44 -14.11 -4.89 -14.22 -5.34C-14.43 -6.25 -14.46 -7.15 -14.33 -8.00C-14.28 -8.36 -14.20 -8.72 -14.09 -9.07C-13.84 -9.90 -13.44 -10.68 -12.92 -11.37C-11.97 -12.65 -10.61 -13.62 -9.06 -14.09C-7.51 -14.56 -5.75 -14.52 -4.01 -13.77C-3.56 -13.58 -3.11 -13.38 -2.66 -13.19C-2.31 -13.04 -1.95 -12.92 -1.58 -12.83C-0.89 -12.66 -0.17 -12.61 0.53 -12.66C1.26 -12.72 1.98 -12.90 2.66 -13.19C2.77 -13.24 2.88 -13.29 2.99 -13.34C3.32 -13.48 3.66 -13.62 3.99 -13.77C4.44 -13.96 4.89 -14.11 5.34 -14.22C6.25 -14.43 7.15 -14.46 8.00 -14.33C8.36 -14.28 8.72 -14.20 9.07 -14.09C9.90 -13.84 10.68 -13.44 11.37 -12.92C12.65 -11.97 13.62 -10.61 14.09 -9.06C14.56 -7.51 14.52 -5.75 13.77 -4.01C13.58 -3.56 13.38 -3.11 13.19 -2.66C13.04 -2.31 12.92 -1.95 12.83 -1.58C12.66 -0.89 12.61 -0.17 12.66 0.53C12.72 1.26 12.90 1.98 13.19 2.66C13.24 2.77 13.29 2.88 13.34 2.99Z;M13.34 2.99C13.41 3.16 13.48 3.32 13.55 3.49C13.62 3.66 13.70 3.82 13.77 3.99C13.87 4.22 13.95 4.44 14.03 4.67C14.10 4.89 14.16 5.12 14.22 5.34C14.32 5.79 14.38 6.25 14.40 6.69C14.42 7.14 14.39 7.57 14.33 8.00C14.31 8.18 14.27 8.36 14.23 8.54C14.19 8.72 14.15 8.89 14.09 9.07C13.97 9.48 13.80 9.89 13.61 10.27C13.41 10.66 13.18 11.02 12.92 11.37C12.68 11.69 12.42 11.99 12.13 12.27C11.84 12.55 11.53 12.81 11.21 13.04C10.86 13.29 10.48 13.51 10.09 13.69C9.70 13.88 9.30 14.03 8.87 14.15C8.70 14.19 8.53 14.23 8.35 14.27C8.18 14.30 8.00 14.33 7.82 14.35C7.40 14.40 6.98 14.41 6.55 14.39C6.12 14.36 5.68 14.29 5.24 14.18C5.03 14.13 4.83 14.07 4.62 14.01C4.42 13.94 4.21 13.86 4.01 13.77C3.67 13.62 3.33 13.48 3.00 13.33C2.89 13.28 2.78 13.24 2.66 13.19C1.98 12.89 1.26 12.72 0.53 12.66C-0.17 12.61 -0.89 12.66 -1.58 12.83C-1.95 12.92 -2.31 13.04 -2.66 13.19C-3.11 13.39 -3.55 13.58 -3.99 13.77C-5.77 14.54 -7.56 14.57 -9.14 14.07C-11.48 13.33 -13.36 11.44 -14.08 9.10C-14.56 7.54 -14.53 5.77 -13.77 4.01C-13.58 3.56 -13.38 3.11 -13.19 2.66C-13.04 2.31 -12.92 1.95 -12.83 1.58C-12.66 0.89 -12.61 0.17 -12.66 -0.53C-12.72 -1.26 -12.90 -1.98 -13.19 -2.66C-13.24 -2.77 -13.29 -2.88 -13.34 -2.99C-13.48 -3.32 -13.62 -3.66 -13.77 -3.99C-13.96 -4.44 -14.11 -4.89 -14.22 -5.34C-14.43 -6.25 -14.46 -7.15 -14.33 -8.00C-14.28 -8.36 -14.20 -8.72 -14.09 -9.07C-13.84 -9.90 -13.44 -10.68 -12.92 -11.37C-11.97 -12.65 -10.61 -13.62 -9.06 -14.09C-7.51 -14.56 -5.75 -14.52 -4.01 -13.77C-3.56 -13.58 -3.11 -13.38 -2.66 -13.19C-2.31 -13.04 -1.95 -12.92 -1.58 -12.83C-0.89 -12.66 -0.17 -12.61 0.53 -12.66C1.26 -12.72 1.98 -12.90 2.66 -13.19C2.77 -13.24 2.88 -13.29 2.99 -13.34C3.32 -13.48 3.66 -13.62 3.99 -13.77C4.44 -13.96 4.89 -14.11 5.34 -14.22C6.25 -14.43 7.15 -14.46 8.00 -14.33C8.36 -14.28 8.72 -14.20 9.07 -14.09C9.90 -13.84 10.68 -13.44 11.37 -12.92C12.65 -11.97 13.62 -10.61 14.09 -9.06C14.56 -7.51 14.52 -5.75 13.77 -4.01C13.58 -3.56 13.38 -3.11 13.19 -2.66C13.04 -2.31 12.92 -1.95 12.83 -1.58C12.66 -0.89 12.61 -0.17 12.66 0.53C12.72 1.26 12.90 1.98 13.19 2.66C13.24 2.77 13.29 2.88 13.34 2.99Z;M13.77 3.99C13.82 4.11 13.87 4.23 13.91 4.35C13.96 4.47 14.00 4.59 14.04 4.70C14.08 4.82 14.11 4.94 14.15 5.06C14.64 6.88 14.40 8.66 13.66 10.17C12.92 11.67 11.68 12.91 10.17 13.65C8.66 14.39 6.89 14.63 5.07 14.14C4.95 14.11 4.83 14.07 4.72 14.04C4.60 14.00 4.48 13.96 4.36 13.91C4.24 13.87 4.12 13.82 4.01 13.77C3.86 13.70 3.71 13.64 3.56 13.58C3.41 13.51 3.26 13.45 3.11 13.38C2.96 13.32 2.81 13.25 2.66 13.19C2.10 12.94 1.51 12.78 0.91 12.70C0.30 12.62 -0.30 12.62 -0.90 12.70C-1.50 12.78 -2.10 12.95 -2.66 13.19C-2.81 13.26 -2.96 13.32 -3.11 13.39C-3.25 13.45 -3.40 13.51 -3.55 13.58C-3.70 13.64 -3.84 13.71 -3.99 13.77C-4.40 13.95 -4.82 14.09 -5.23 14.19C-5.64 14.29 -6.05 14.36 -6.46 14.39C-6.86 14.42 -7.26 14.41 -7.66 14.37C-8.83 14.26 -9.93 13.86 -10.89 13.25C-11.86 12.64 -12.67 11.82 -13.28 10.85C-13.88 9.88 -14.27 8.78 -14.37 7.60C-14.41 7.22 -14.41 6.82 -14.38 6.43C-14.35 6.03 -14.28 5.63 -14.18 5.22C-14.08 4.82 -13.94 4.41 -13.77 4.01C-13.70 3.86 -13.64 3.71 -13.58 3.56C-13.51 3.41 -13.45 3.26 -13.38 3.11C-13.32 2.96 -13.25 2.81 -13.19 2.66C-12.82 1.81 -12.64 0.91 -12.64 0.00C-12.64 -0.91 -12.83 -1.81 -13.19 -2.66C-13.29 -2.88 -13.39 -3.11 -13.48 -3.33C-13.58 -3.55 -13.67 -3.77 -13.77 -3.99C-13.85 -4.17 -13.92 -4.35 -13.98 -4.53C-14.04 -4.70 -14.10 -4.88 -14.15 -5.06C-14.89 -7.79 -13.98 -10.42 -12.21 -12.20C-10.43 -13.97 -7.79 -14.88 -5.07 -14.14C-4.89 -14.09 -4.72 -14.04 -4.54 -13.98C-4.36 -13.91 -4.18 -13.84 -4.01 -13.77C-3.78 -13.67 -3.56 -13.58 -3.34 -13.48C-3.11 -13.38 -2.89 -13.29 -2.66 -13.19C-1.81 -12.82 -0.91 -12.64 0.00 -12.64C0.91 -12.64 1.81 -12.83 2.66 -13.19C2.88 -13.29 3.11 -13.39 3.33 -13.48C3.55 -13.58 3.77 -13.67 3.99 -13.77C4.61 -14.04 5.23 -14.22 5.85 -14.31C6.46 -14.41 7.07 -14.43 7.66 -14.37C9.42 -14.21 11.02 -13.40 12.22 -12.18C13.42 -10.97 14.22 -9.36 14.37 -7.60C14.42 -7.02 14.40 -6.43 14.31 -5.83C14.21 -5.23 14.03 -4.62 13.77 -4.01C13.67 -3.78 13.58 -3.56 13.48 -3.34C13.38 -3.11 13.29 -2.89 13.19 -2.66C12.82 -1.81 12.64 -0.91 12.64 0.00C12.64 0.91 12.83 1.81 13.19 2.66C13.29 2.88 13.39 3.11 13.48 3.33C13.58 3.55 13.67 3.77 13.77 3.99Z;M13.58 1.91C13.53 2.01 13.47 2.11 13.42 2.21C13.37 2.31 13.31 2.41 13.26 2.51C13.20 2.60 13.14 2.70 13.09 2.80C12.28 4.19 11.33 5.53 10.27 6.78C9.21 8.04 8.04 9.21 6.78 10.27C5.53 11.33 4.19 12.28 2.80 13.09C2.70 13.14 2.60 13.20 2.51 13.26C2.41 13.31 2.31 13.37 2.21 13.42C2.11 13.47 2.01 13.53 1.91 13.58C1.77 13.66 1.62 13.73 1.48 13.80C1.33 13.88 1.19 13.95 1.05 14.02C0.90 14.08 0.76 14.15 0.61 14.22C0.05 14.47 -0.52 14.70 -1.08 14.90C-1.65 15.11 -2.21 15.28 -2.76 15.42C-3.31 15.57 -3.86 15.68 -4.40 15.77C-4.56 15.79 -4.71 15.81 -4.87 15.83C-5.02 15.85 -5.17 15.87 -5.32 15.88C-5.47 15.90 -5.63 15.91 -5.78 15.92C-6.17 15.95 -6.55 15.96 -6.93 15.95C-7.31 15.94 -7.68 15.92 -8.05 15.88C-8.41 15.84 -8.77 15.78 -9.12 15.70C-10.28 15.46 -11.31 15.03 -12.21 14.44C-13.10 13.85 -13.85 13.10 -14.44 12.21C-15.03 11.31 -15.46 10.28 -15.70 9.12C-15.78 8.77 -15.84 8.40 -15.88 8.03C-15.92 7.66 -15.94 7.29 -15.95 6.90C-15.96 6.52 -15.95 6.13 -15.92 5.73C-15.91 5.58 -15.89 5.43 -15.88 5.28C-15.86 5.12 -15.85 4.97 -15.83 4.82C-15.81 4.66 -15.78 4.51 -15.76 4.36C-15.63 3.54 -15.43 2.71 -15.17 1.87C-14.91 1.03 -14.58 0.18 -14.19 -0.68C-14.09 -0.89 -13.99 -1.10 -13.89 -1.31C-13.79 -1.52 -13.68 -1.73 -13.57 -1.94C-13.49 -2.08 -13.41 -2.22 -13.33 -2.37C-13.25 -2.51 -13.17 -2.66 -13.09 -2.80C-11.88 -4.88 -10.35 -6.85 -8.60 -8.60C-6.85 -10.35 -4.88 -11.88 -2.80 -13.09C-2.65 -13.17 -2.51 -13.26 -2.36 -13.34C-2.21 -13.42 -2.06 -13.50 -1.91 -13.58C-1.69 -13.69 -1.48 -13.80 -1.26 -13.91C-1.05 -14.02 -0.83 -14.12 -0.61 -14.22C0.24 -14.60 1.09 -14.93 1.92 -15.18C2.76 -15.44 3.59 -15.64 4.40 -15.77C4.64 -15.80 4.87 -15.83 5.09 -15.86C5.32 -15.89 5.55 -15.91 5.78 -15.92C6.36 -15.96 6.94 -15.96 7.49 -15.93C8.05 -15.89 8.60 -15.82 9.12 -15.70C10.86 -15.33 12.32 -14.55 13.44 -13.44C14.55 -12.32 15.33 -10.86 15.70 -9.12C15.82 -8.59 15.89 -8.04 15.93 -7.47C15.96 -6.91 15.96 -6.32 15.92 -5.73C15.90 -5.50 15.88 -5.28 15.85 -5.05C15.83 -4.82 15.80 -4.59 15.76 -4.35C15.63 -3.55 15.43 -2.72 15.17 -1.88C14.91 -1.05 14.59 -0.20 14.20 0.65C14.11 0.86 14.01 1.07 13.90 1.28C13.80 1.49 13.69 1.70 13.58 1.91Z;M13.55 1.62C13.49 1.72 13.42 1.81 13.35 1.91C13.28 2.01 13.21 2.10 13.15 2.20C13.08 2.29 13.01 2.39 12.94 2.49C11.95 3.81 10.90 5.09 9.79 6.31C8.69 7.53 7.53 8.69 6.31 9.80C5.09 10.90 3.81 11.95 2.49 12.94C2.39 13.01 2.29 13.08 2.20 13.15C2.10 13.21 2.00 13.28 1.91 13.35C1.81 13.42 1.71 13.49 1.62 13.55C1.47 13.65 1.33 13.74 1.19 13.83C1.04 13.93 0.90 14.02 0.76 14.10C0.61 14.19 0.47 14.28 0.32 14.36C-0.24 14.69 -0.80 14.97 -1.36 15.21C-1.92 15.45 -2.47 15.65 -3.02 15.80C-3.57 15.96 -4.11 16.06 -4.65 16.13C-4.80 16.15 -4.96 16.16 -5.11 16.17C-5.27 16.19 -5.42 16.20 -5.57 16.21C-5.72 16.21 -5.87 16.22 -6.03 16.22C-6.41 16.23 -6.79 16.22 -7.17 16.19C-7.54 16.17 -7.91 16.14 -8.27 16.09C-8.63 16.03 -8.98 15.97 -9.33 15.89C-10.48 15.62 -11.51 15.19 -12.39 14.60C-13.27 14.02 -14.01 13.28 -14.60 12.39C-15.19 11.51 -15.62 10.49 -15.89 9.33C-15.97 8.98 -16.04 8.63 -16.09 8.26C-16.14 7.89 -16.18 7.52 -16.20 7.14C-16.22 6.76 -16.23 6.37 -16.22 5.97C-16.22 5.82 -16.21 5.67 -16.20 5.52C-16.19 5.36 -16.18 5.21 -16.17 5.06C-16.15 4.90 -16.14 4.75 -16.12 4.59C-16.02 3.78 -15.82 2.96 -15.52 2.13C-15.22 1.30 -14.82 0.46 -14.33 -0.40C-14.21 -0.61 -14.08 -0.81 -13.95 -1.02C-13.81 -1.23 -13.68 -1.44 -13.54 -1.65C-13.44 -1.79 -13.34 -1.93 -13.24 -2.07C-13.14 -2.21 -13.04 -2.35 -12.94 -2.49C-11.45 -4.48 -9.84 -6.35 -8.09 -8.09C-6.35 -9.84 -4.48 -11.45 -2.49 -12.94C-2.34 -13.04 -2.20 -13.15 -2.05 -13.25C-1.91 -13.35 -1.76 -13.45 -1.62 -13.55C-1.40 -13.70 -1.19 -13.84 -0.97 -13.97C-0.76 -14.11 -0.54 -14.24 -0.32 -14.36C0.53 -14.85 1.37 -15.25 2.19 -15.54C3.02 -15.84 3.84 -16.03 4.65 -16.13C4.88 -16.15 5.11 -16.18 5.34 -16.19C5.57 -16.21 5.80 -16.22 6.03 -16.22C6.61 -16.23 7.17 -16.21 7.73 -16.15C8.28 -16.10 8.81 -16.01 9.33 -15.89C11.06 -15.49 12.50 -14.72 13.61 -13.61C14.71 -12.50 15.49 -11.07 15.89 -9.33C16.01 -8.81 16.10 -8.27 16.15 -7.70C16.21 -7.14 16.23 -6.56 16.22 -5.97C16.21 -5.74 16.20 -5.52 16.19 -5.29C16.17 -5.06 16.15 -4.82 16.12 -4.59C16.02 -3.79 15.82 -2.97 15.53 -2.15C15.23 -1.32 14.83 -0.48 14.34 0.37C14.22 0.57 14.09 0.78 13.96 0.99C13.83 1.20 13.69 1.41 13.55 1.62Z;M13.58 1.91C13.53 2.01 13.47 2.11 13.42 2.21C13.37 2.31 13.31 2.41 13.26 2.51C13.20 2.60 13.14 2.70 13.09 2.80C12.28 4.19 11.33 5.53 10.27 6.78C9.21 8.04 8.04 9.21 6.78 10.27C5.53 11.33 4.19 12.28 2.80 13.09C2.70 13.14 2.60 13.20 2.51 13.26C2.41 13.31 2.31 13.37 2.21 13.42C2.11 13.47 2.01 13.53 1.91 13.58C1.77 13.66 1.62 13.73 1.48 13.80C1.33 13.88 1.19 13.95 1.05 14.02C0.90 14.08 0.76 14.15 0.61 14.22C0.05 14.47 -0.52 14.70 -1.08 14.90C-1.65 15.11 -2.21 15.28 -2.76 15.42C-3.31 15.57 -3.86 15.68 -4.40 15.77C-4.56 15.79 -4.71 15.81 -4.87 15.83C-5.02 15.85 -5.17 15.87 -5.32 15.88C-5.47 15.90 -5.63 15.91 -5.78 15.92C-6.17 15.95 -6.55 15.96 -6.93 15.95C-7.31 15.94 -7.68 15.92 -8.05 15.88C-8.41 15.84 -8.77 15.78 -9.12 15.70C-10.28 15.46 -11.31 15.03 -12.21 14.44C-13.10 13.85 -13.85 13.10 -14.44 12.21C-15.03 11.31 -15.46 10.28 -15.70 9.12C-15.78 8.77 -15.84 8.40 -15.88 8.03C-15.92 7.66 -15.94 7.29 -15.95 6.90C-15.96 6.52 -15.95 6.13 -15.92 5.73C-15.91 5.58 -15.89 5.43 -15.88 5.28C-15.86 5.12 -15.85 4.97 -15.83 4.82C-15.81 4.66 -15.78 4.51 -15.76 4.36C-15.63 3.54 -15.43 2.71 -15.17 1.87C-14.91 1.03 -14.58 0.18 -14.19 -0.68C-14.09 -0.89 -13.99 -1.10 -13.89 -1.31C-13.79 -1.52 -13.68 -1.73 -13.57 -1.94C-13.49 -2.08 -13.41 -2.22 -13.33 -2.37C-13.25 -2.51 -13.17 -2.66 -13.09 -2.80C-11.88 -4.88 -10.35 -6.85 -8.60 -8.60C-6.85 -10.35 -4.88 -11.88 -2.80 -13.09C-2.65 -13.17 -2.51 -13.26 -2.36 -13.34C-2.21 -13.42 -2.06 -13.50 -1.91 -13.58C-1.69 -13.69 -1.48 -13.80 -1.26 -13.91C-1.05 -14.02 -0.83 -14.12 -0.61 -14.22C0.24 -14.60 1.09 -14.93 1.92 -15.18C2.76 -15.44 3.59 -15.64 4.40 -15.77C4.64 -15.80 4.87 -15.83 5.09 -15.86C5.32 -15.89 5.55 -15.91 5.78 -15.92C6.36 -15.96 6.94 -15.96 7.49 -15.93C8.05 -15.89 8.60 -15.82 9.12 -15.70C10.86 -15.33 12.32 -14.55 13.44 -13.44C14.55 -12.32 15.33 -10.86 15.70 -9.12C15.82 -8.59 15.89 -8.04 15.93 -7.47C15.96 -6.91 15.96 -6.32 15.92 -5.73C15.90 -5.50 15.88 -5.28 15.85 -5.05C15.83 -4.82 15.80 -4.59 15.76 -4.35C15.63 -3.55 15.43 -2.72 15.17 -1.88C14.91 -1.05 14.59 -0.20 14.20 0.65C14.11 0.86 14.01 1.07 13.90 1.28C13.80 1.49 13.69 1.70 13.58 1.91Z;M13.58 1.91C13.53 2.01 13.47 2.11 13.42 2.21C13.37 2.31 13.31 2.41 13.26 2.51C13.20 2.60 13.14 2.70 13.09 2.80C12.28 4.19 11.33 5.53 10.27 6.78C9.21 8.04 8.04 9.21 6.78 10.27C5.53 11.33 4.19 12.28 2.80 13.09C2.70 13.14 2.60 13.20 2.51 13.26C2.41 13.31 2.31 13.37 2.21 13.42C2.11 13.47 2.01 13.53 1.91 13.58C1.77 13.66 1.62 13.73 1.48 13.80C1.33 13.88 1.19 13.95 1.05 14.02C0.90 14.08 0.76 14.15 0.61 14.22C0.05 14.47 -0.52 14.70 -1.08 14.90C-1.65 15.11 -2.21 15.28 -2.76 15.42C-3.31 15.57 -3.86 15.68 -4.40 15.77C-4.56 15.79 -4.71 15.81 -4.87 15.83C-5.02 15.85 -5.17 15.87 -5.32 15.88C-5.47 15.90 -5.63 15.91 -5.78 15.92C-6.17 15.95 -6.55 15.96 -6.93 15.95C-7.31 15.94 -7.68 15.92 -8.05 15.88C-8.41 15.84 -8.77 15.78 -9.12 15.70C-10.28 15.46 -11.31 15.03 -12.21 14.44C-13.10 13.85 -13.85 13.10 -14.44 12.21C-15.03 11.31 -15.46 10.28 -15.70 9.12C-15.78 8.77 -15.84 8.40 -15.88 8.03C-15.92 7.66 -15.94 7.29 -15.95 6.90C-15.96 6.52 -15.95 6.13 -15.92 5.73C-15.91 5.58 -15.89 5.43 -15.88 5.28C-15.86 5.12 -15.85 4.97 -15.83 4.82C-15.81 4.66 -15.78 4.51 -15.76 4.36C-15.63 3.54 -15.43 2.71 -15.17 1.87C-14.91 1.03 -14.58 0.18 -14.19 -0.68C-14.09 -0.89 -13.99 -1.10 -13.89 -1.31C-13.79 -1.52 -13.68 -1.73 -13.57 -1.94C-13.49 -2.08 -13.41 -2.22 -13.33 -2.37C-13.25 -2.51 -13.17 -2.66 -13.09 -2.80C-11.88 -4.88 -10.35 -6.85 -8.60 -8.60C-6.85 -10.35 -4.88 -11.88 -2.80 -13.09C-2.65 -13.17 -2.51 -13.26 -2.36 -13.34C-2.21 -13.42 -2.06 -13.50 -1.91 -13.58C-1.69 -13.69 -1.48 -13.80 -1.26 -13.91C-1.05 -14.02 -0.83 -14.12 -0.61 -14.22C0.24 -14.60 1.09 -14.93 1.92 -15.18C2.76 -15.44 3.59 -15.64 4.40 -15.77C4.64 -15.80 4.87 -15.83 5.09 -15.86C5.32 -15.89 5.55 -15.91 5.78 -15.92C6.36 -15.96 6.94 -15.96 7.49 -15.93C8.05 -15.89 8.60 -15.82 9.12 -15.70C10.86 -15.33 12.32 -14.55 13.44 -13.44C14.55 -12.32 15.33 -10.86 15.70 -9.12C15.82 -8.59 15.89 -8.04 15.93 -7.47C15.96 -6.91 15.96 -6.32 15.92 -5.73C15.90 -5.50 15.88 -5.28 15.85 -5.05C15.83 -4.82 15.80 -4.59 15.76 -4.35C15.63 -3.55 15.43 -2.72 15.17 -1.88C14.91 -1.05 14.59 -0.20 14.20 0.65C14.11 0.86 14.01 1.07 13.90 1.28C13.80 1.49 13.69 1.70 13.58 1.91Z;M9.12 -15.70C9.21 -15.68 9.29 -15.67 9.37 -15.65C9.45 -15.63 9.53 -15.61 9.61 -15.58C10.09 -15.46 10.55 -15.30 10.98 -15.11C11.41 -14.92 11.82 -14.69 12.20 -14.44C12.65 -14.14 13.07 -13.80 13.45 -13.42C13.82 -13.04 14.16 -12.63 14.46 -12.17C14.71 -11.79 14.93 -11.38 15.12 -10.95C15.31 -10.52 15.47 -10.06 15.59 -9.58C15.61 -9.51 15.63 -9.43 15.65 -9.35C15.67 -9.28 15.69 -9.20 15.70 -9.12C15.76 -8.84 15.81 -8.56 15.85 -8.27C15.89 -7.98 15.91 -7.69 15.93 -7.39C15.96 -6.94 15.96 -6.48 15.93 -6.01C15.91 -5.54 15.86 -5.06 15.79 -4.58C15.73 -4.16 15.65 -3.74 15.56 -3.31C15.46 -2.89 15.35 -2.46 15.22 -2.02C15.13 -1.75 15.04 -1.48 14.95 -1.21C14.85 -0.93 14.75 -0.66 14.64 -0.38C14.56 -0.17 14.47 0.04 14.38 0.25C14.29 0.46 14.19 0.68 14.09 0.89C13.85 1.40 13.59 1.92 13.30 2.43C13.23 2.55 13.16 2.68 13.09 2.80C12.83 3.24 12.56 3.68 12.28 4.10C11.96 4.58 11.63 5.05 11.29 5.51C11.01 5.87 10.73 6.23 10.43 6.59C10.07 7.03 9.69 7.46 9.30 7.88C8.62 8.60 7.91 9.29 7.17 9.94C6.30 10.70 5.38 11.41 4.43 12.06C3.90 12.42 3.36 12.76 2.80 13.09C2.55 13.23 2.30 13.37 2.05 13.50C1.00 14.07 -0.05 14.54 -1.10 14.91C-2.28 15.33 -3.44 15.63 -4.58 15.79C-5.54 15.93 -6.48 15.98 -7.38 15.93C-7.98 15.90 -8.56 15.82 -9.12 15.70C-9.29 15.67 -9.45 15.63 -9.61 15.58C-10.57 15.33 -11.43 14.94 -12.20 14.44C-13.10 13.85 -13.87 13.08 -14.46 12.17C-14.96 11.41 -15.34 10.54 -15.59 9.58C-15.63 9.43 -15.67 9.28 -15.70 9.12C-15.82 8.56 -15.90 7.98 -15.93 7.39C-15.98 6.49 -15.93 5.54 -15.79 4.58C-15.67 3.74 -15.48 2.89 -15.22 2.02C-15.05 1.48 -14.86 0.93 -14.64 0.38C-14.47 -0.04 -14.29 -0.46 -14.09 -0.89C-13.85 -1.40 -13.59 -1.92 -13.30 -2.43C-13.23 -2.55 -13.16 -2.68 -13.09 -2.80C-12.83 -3.24 -12.56 -3.68 -12.28 -4.10C-11.96 -4.58 -11.63 -5.05 -11.29 -5.51C-11.01 -5.87 -10.73 -6.23 -10.43 -6.59C-10.07 -7.03 -9.69 -7.46 -9.30 -7.88C-8.62 -8.60 -7.91 -9.29 -7.17 -9.94C-6.30 -10.70 -5.38 -11.41 -4.43 -12.06C-3.90 -12.42 -3.36 -12.76 -2.80 -13.09C-2.55 -13.23 -2.30 -13.37 -2.05 -13.50C-1.00 -14.07 0.05 -14.54 1.10 -14.91C2.28 -15.33 3.44 -15.63 4.58 -15.79C5.54 -15.93 6.48 -15.98 7.38 -15.93C7.98 -15.90 8.56 -15.82 9.12 -15.70Z;M4.61 -12.04C4.69 -12.05 4.78 -12.06 4.86 -12.08C4.94 -12.10 5.03 -12.13 5.11 -12.16C5.56 -12.35 6.02 -12.54 6.48 -12.73C6.93 -12.91 7.39 -13.10 7.85 -13.29C8.43 -13.53 9.04 -13.42 9.50 -13.09C9.95 -12.77 10.24 -12.22 10.20 -11.59C10.16 -11.09 10.12 -10.60 10.09 -10.10C10.05 -9.61 10.02 -9.11 9.98 -8.62C9.98 -8.53 9.98 -8.45 9.98 -8.37C9.99 -8.28 10.00 -8.20 10.02 -8.12C10.09 -7.81 10.24 -7.53 10.46 -7.31C10.68 -7.08 10.96 -6.92 11.28 -6.84C11.76 -6.72 12.24 -6.60 12.72 -6.49C13.20 -6.37 13.68 -6.26 14.16 -6.14C14.78 -5.99 15.21 -5.54 15.38 -5.01C15.55 -4.48 15.47 -3.87 15.06 -3.38C14.74 -3.00 14.42 -2.62 14.10 -2.24C13.78 -1.86 13.46 -1.48 13.14 -1.11C12.87 -0.79 12.74 -0.39 12.74 0.00C12.74 0.39 12.87 0.78 13.14 1.10C13.78 1.85 14.42 2.60 15.06 3.36C15.24 3.56 15.35 3.79 15.42 4.03C15.65 4.90 15.14 5.88 14.17 6.12C13.21 6.35 12.24 6.59 11.28 6.83C10.47 7.03 9.92 7.78 9.99 8.62C10.06 9.60 10.14 10.58 10.21 11.57C10.31 12.83 9.05 13.76 7.87 13.28C6.95 12.90 6.03 12.53 5.11 12.16C4.57 11.94 3.97 12.01 3.51 12.32C3.32 12.46 3.15 12.63 3.02 12.84C2.50 13.68 1.98 14.52 1.46 15.36C0.80 16.44 -0.77 16.45 -1.44 15.37C-1.96 14.53 -2.49 13.68 -3.01 12.84C-3.36 12.28 -3.98 11.98 -4.61 12.04C-4.78 12.05 -4.94 12.09 -5.11 12.16C-6.02 12.54 -6.93 12.91 -7.85 13.29C-9.02 13.77 -10.29 12.85 -10.20 11.59C-10.12 10.60 -10.05 9.61 -9.98 8.62C-9.97 8.45 -9.98 8.28 -10.02 8.12C-10.16 7.50 -10.64 6.99 -11.28 6.84C-12.24 6.60 -13.20 6.37 -14.16 6.14C-15.39 5.84 -15.88 4.35 -15.06 3.38C-14.42 2.62 -13.78 1.86 -13.14 1.11C-12.60 0.47 -12.60 -0.46 -13.14 -1.10C-13.78 -1.85 -14.42 -2.60 -15.06 -3.36C-15.24 -3.56 -15.35 -3.79 -15.42 -4.03C-15.65 -4.90 -15.14 -5.88 -14.17 -6.12C-13.21 -6.35 -12.24 -6.59 -11.28 -6.83C-10.47 -7.03 -9.92 -7.78 -9.99 -8.62C-10.06 -9.60 -10.14 -10.58 -10.21 -11.57C-10.31 -12.83 -9.05 -13.76 -7.87 -13.28C-6.95 -12.90 -6.03 -12.53 -5.11 -12.16C-4.57 -11.94 -3.97 -12.01 -3.51 -12.32C-3.32 -12.46 -3.15 -12.63 -3.02 -12.84C-2.50 -13.68 -1.98 -14.52 -1.46 -15.36C-0.80 -16.44 0.77 -16.45 1.44 -15.37C1.96 -14.53 2.49 -13.68 3.01 -12.84C3.36 -12.28 3.98 -11.98 4.61 -12.04Z;M3.98 -11.53C4.06 -11.54 4.14 -11.56 4.23 -11.58C4.31 -11.61 4.39 -11.64 4.48 -11.68C4.93 -11.92 5.39 -12.15 5.85 -12.39C6.31 -12.63 6.77 -12.88 7.24 -13.13C7.84 -13.45 8.48 -13.37 8.94 -13.05C9.41 -12.73 9.69 -12.16 9.60 -11.51C9.52 -11.00 9.45 -10.49 9.38 -9.99C9.32 -9.48 9.25 -8.98 9.20 -8.48C9.19 -8.40 9.18 -8.31 9.19 -8.23C9.19 -8.14 9.20 -8.06 9.22 -7.98C9.29 -7.67 9.46 -7.39 9.70 -7.17C9.95 -6.96 10.26 -6.81 10.63 -6.76C11.17 -6.69 11.72 -6.62 12.27 -6.56C12.82 -6.49 13.37 -6.42 13.93 -6.36C14.64 -6.25 15.14 -5.80 15.35 -5.25C15.57 -4.70 15.49 -4.06 15.04 -3.57C14.69 -3.18 14.33 -2.78 13.98 -2.39C13.63 -1.99 13.28 -1.60 12.93 -1.21C12.64 -0.87 12.50 -0.46 12.51 -0.04C12.52 0.38 12.69 0.80 13.01 1.13C13.78 1.91 14.54 2.70 15.31 3.49C15.52 3.70 15.66 3.95 15.74 4.20C16.04 5.14 15.50 6.19 14.44 6.40C13.38 6.60 12.33 6.81 11.28 7.01C10.40 7.19 9.81 8.00 9.93 8.90C10.06 9.96 10.20 11.02 10.34 12.09C10.55 13.43 9.20 14.38 7.97 13.75C7.04 13.21 6.12 12.69 5.21 12.17C4.66 11.87 4.06 11.91 3.61 12.22C3.42 12.35 3.27 12.53 3.15 12.75C2.71 13.63 2.27 14.52 1.82 15.43C1.23 16.60 -0.39 16.56 -1.00 15.31C-1.46 14.33 -1.93 13.36 -2.40 12.41C-2.71 11.77 -3.34 11.45 -3.98 11.53C-4.14 11.55 -4.31 11.60 -4.48 11.68C-5.38 12.15 -6.30 12.63 -7.24 13.13C-8.45 13.76 -9.79 12.82 -9.60 11.51C-9.45 10.49 -9.31 9.48 -9.20 8.48C-9.18 8.31 -9.19 8.14 -9.22 7.98C-9.36 7.35 -9.90 6.85 -10.63 6.76C-11.72 6.62 -12.82 6.49 -13.93 6.36C-15.35 6.13 -15.93 4.56 -15.04 3.57C-14.33 2.78 -13.63 1.99 -12.93 1.21C-12.34 0.54 -12.37 -0.46 -13.01 -1.13C-13.78 -1.91 -14.54 -2.70 -15.31 -3.49C-15.52 -3.70 -15.66 -3.95 -15.74 -4.20C-16.04 -5.14 -15.50 -6.19 -14.44 -6.40C-13.38 -6.60 -12.33 -6.81 -11.28 -7.01C-10.40 -7.19 -9.81 -8.00 -9.93 -8.90C-10.06 -9.96 -10.20 -11.02 -10.34 -12.09C-10.55 -13.43 -9.20 -14.38 -7.97 -13.75C-7.04 -13.21 -6.12 -12.69 -5.21 -12.17C-4.66 -11.87 -4.06 -11.91 -3.61 -12.22C-3.42 -12.35 -3.27 -12.53 -3.15 -12.75C-2.71 -13.63 -2.27 -14.52 -1.82 -15.43C-1.23 -16.60 0.39 -16.56 1.00 -15.31C1.46 -14.33 1.93 -13.36 2.40 -12.41C2.71 -11.77 3.34 -11.45 3.98 -11.53Z;M4.61 -12.04C4.69 -12.05 4.78 -12.06 4.86 -12.08C4.94 -12.10 5.03 -12.13 5.11 -12.16C5.56 -12.35 6.02 -12.54 6.48 -12.73C6.93 -12.91 7.39 -13.10 7.85 -13.29C8.43 -13.53 9.04 -13.42 9.50 -13.09C9.95 -12.77 10.24 -12.22 10.20 -11.59C10.16 -11.09 10.12 -10.60 10.09 -10.10C10.05 -9.61 10.02 -9.11 9.98 -8.62C9.98 -8.53 9.98 -8.45 9.98 -8.37C9.99 -8.28 10.00 -8.20 10.02 -8.12C10.09 -7.81 10.24 -7.53 10.46 -7.31C10.68 -7.08 10.96 -6.92 11.28 -6.84C11.76 -6.72 12.24 -6.60 12.72 -6.49C13.20 -6.37 13.68 -6.26 14.16 -6.14C14.78 -5.99 15.21 -5.54 15.38 -5.01C15.55 -4.48 15.47 -3.87 15.06 -3.38C14.74 -3.00 14.42 -2.62 14.10 -2.24C13.78 -1.86 13.46 -1.48 13.14 -1.11C12.87 -0.79 12.74 -0.39 12.74 0.00C12.74 0.39 12.87 0.78 13.14 1.10C13.78 1.85 14.42 2.60 15.06 3.36C15.24 3.56 15.35 3.79 15.42 4.03C15.65 4.90 15.14 5.88 14.17 6.12C13.21 6.35 12.24 6.59 11.28 6.83C10.47 7.03 9.92 7.78 9.99 8.62C10.06 9.60 10.14 10.58 10.21 11.57C10.31 12.83 9.05 13.76 7.87 13.28C6.95 12.90 6.03 12.53 5.11 12.16C4.57 11.94 3.97 12.01 3.51 12.32C3.32 12.46 3.15 12.63 3.02 12.84C2.50 13.68 1.98 14.52 1.46 15.36C0.80 16.44 -0.77 16.45 -1.44 15.37C-1.96 14.53 -2.49 13.68 -3.01 12.84C-3.36 12.28 -3.98 11.98 -4.61 12.04C-4.78 12.05 -4.94 12.09 -5.11 12.16C-6.02 12.54 -6.93 12.91 -7.85 13.29C-9.02 13.77 -10.29 12.85 -10.20 11.59C-10.12 10.60 -10.05 9.61 -9.98 8.62C-9.97 8.45 -9.98 8.28 -10.02 8.12C-10.16 7.50 -10.64 6.99 -11.28 6.84C-12.24 6.60 -13.20 6.37 -14.16 6.14C-15.39 5.84 -15.88 4.35 -15.06 3.38C-14.42 2.62 -13.78 1.86 -13.14 1.11C-12.60 0.47 -12.60 -0.46 -13.14 -1.10C-13.78 -1.85 -14.42 -2.60 -15.06 -3.36C-15.24 -3.56 -15.35 -3.79 -15.42 -4.03C-15.65 -4.90 -15.14 -5.88 -14.17 -6.12C-13.21 -6.35 -12.24 -6.59 -11.28 -6.83C-10.47 -7.03 -9.92 -7.78 -9.99 -8.62C-10.06 -9.60 -10.14 -10.58 -10.21 -11.57C-10.31 -12.83 -9.05 -13.76 -7.87 -13.28C-6.95 -12.90 -6.03 -12.53 -5.11 -12.16C-4.57 -11.94 -3.97 -12.01 -3.51 -12.32C-3.32 -12.46 -3.15 -12.63 -3.02 -12.84C-2.50 -13.68 -1.98 -14.52 -1.46 -15.36C-0.80 -16.44 0.77 -16.45 1.44 -15.37C1.96 -14.53 2.49 -13.68 3.01 -12.84C3.36 -12.28 3.98 -11.98 4.61 -12.04Z;M4.61 -12.04C4.69 -12.05 4.78 -12.06 4.86 -12.08C4.94 -12.10 5.03 -12.13 5.11 -12.16C5.56 -12.35 6.02 -12.54 6.48 -12.73C6.93 -12.91 7.39 -13.10 7.85 -13.29C8.43 -13.53 9.04 -13.42 9.50 -13.09C9.95 -12.77 10.24 -12.22 10.20 -11.59C10.16 -11.09 10.12 -10.60 10.09 -10.10C10.05 -9.61 10.02 -9.11 9.98 -8.62C9.98 -8.53 9.98 -8.45 9.98 -8.37C9.99 -8.28 10.00 -8.20 10.02 -8.12C10.09 -7.81 10.24 -7.53 10.46 -7.31C10.68 -7.08 10.96 -6.92 11.28 -6.84C11.76 -6.72 12.24 -6.60 12.72 -6.49C13.20 -6.37 13.68 -6.26 14.16 -6.14C14.78 -5.99 15.21 -5.54 15.38 -5.01C15.55 -4.48 15.47 -3.87 15.06 -3.38C14.74 -3.00 14.42 -2.62 14.10 -2.24C13.78 -1.86 13.46 -1.48 13.14 -1.11C12.87 -0.79 12.74 -0.39 12.74 0.00C12.74 0.39 12.87 0.78 13.14 1.10C13.78 1.85 14.42 2.60 15.06 3.36C15.24 3.56 15.35 3.79 15.42 4.03C15.65 4.90 15.14 5.88 14.17 6.12C13.21 6.35 12.24 6.59 11.28 6.83C10.47 7.03 9.92 7.78 9.99 8.62C10.06 9.60 10.14 10.58 10.21 11.57C10.31 12.83 9.05 13.76 7.87 13.28C6.95 12.90 6.03 12.53 5.11 12.16C4.57 11.94 3.97 12.01 3.51 12.32C3.32 12.46 3.15 12.63 3.02 12.84C2.50 13.68 1.98 14.52 1.46 15.36C0.80 16.44 -0.77 16.45 -1.44 15.37C-1.96 14.53 -2.49 13.68 -3.01 12.84C-3.36 12.28 -3.98 11.98 -4.61 12.04C-4.78 12.05 -4.94 12.09 -5.11 12.16C-6.02 12.54 -6.93 12.91 -7.85 13.29C-9.02 13.77 -10.29 12.85 -10.20 11.59C-10.12 10.60 -10.05 9.61 -9.98 8.62C-9.97 8.45 -9.98 8.28 -10.02 8.12C-10.16 7.50 -10.64 6.99 -11.28 6.84C-12.24 6.60 -13.20 6.37 -14.16 6.14C-15.39 5.84 -15.88 4.35 -15.06 3.38C-14.42 2.62 -13.78 1.86 -13.14 1.11C-12.60 0.47 -12.60 -0.46 -13.14 -1.10C-13.78 -1.85 -14.42 -2.60 -15.06 -3.36C-15.24 -3.56 -15.35 -3.79 -15.42 -4.03C-15.65 -4.90 -15.14 -5.88 -14.17 -6.12C-13.21 -6.35 -12.24 -6.59 -11.28 -6.83C-10.47 -7.03 -9.92 -7.78 -9.99 -8.62C-10.06 -9.60 -10.14 -10.58 -10.21 -11.57C-10.31 -12.83 -9.05 -13.76 -7.87 -13.28C-6.95 -12.90 -6.03 -12.53 -5.11 -12.16C-4.57 -11.94 -3.97 -12.01 -3.51 -12.32C-3.32 -12.46 -3.15 -12.63 -3.02 -12.84C-2.50 -13.68 -1.98 -14.52 -1.46 -15.36C-0.80 -16.44 0.77 -16.45 1.44 -15.37C1.96 -14.53 2.49 -13.68 3.01 -12.84C3.36 -12.28 3.98 -11.98 4.61 -12.04Z;M-11.28 -6.83C-10.47 -7.03 -9.92 -7.78 -9.99 -8.62C-10.01 -8.89 -10.03 -9.17 -10.05 -9.45C-10.11 -10.16 -10.16 -10.86 -10.21 -11.57C-10.31 -12.83 -9.05 -13.76 -7.87 -13.28C-7.21 -13.01 -6.55 -12.74 -5.90 -12.47C-5.63 -12.37 -5.37 -12.26 -5.11 -12.16C-4.34 -11.84 -3.45 -12.13 -3.02 -12.84C-2.87 -13.08 -2.72 -13.32 -2.58 -13.56C-2.21 -14.16 -1.83 -14.76 -1.46 -15.36C-0.80 -16.44 0.77 -16.45 1.44 -15.37C1.81 -14.77 2.19 -14.16 2.56 -13.56C2.71 -13.32 2.86 -13.08 3.01 -12.84C3.45 -12.13 4.34 -11.84 5.11 -12.16C5.37 -12.27 5.62 -12.38 5.88 -12.48C6.54 -12.75 7.19 -13.02 7.85 -13.29C9.02 -13.77 10.29 -12.85 10.20 -11.59C10.15 -10.88 10.09 -10.17 10.04 -9.46C10.02 -9.18 10.00 -8.90 9.98 -8.62C9.92 -7.79 10.47 -7.03 11.28 -6.84C11.55 -6.77 11.82 -6.71 12.10 -6.64C12.78 -6.47 13.47 -6.31 14.16 -6.14C15.39 -5.84 15.88 -4.35 15.06 -3.38C14.60 -2.84 14.14 -2.30 13.69 -1.75C13.50 -1.54 13.32 -1.32 13.14 -1.11C12.60 -0.47 12.60 0.46 13.14 1.10C13.33 1.31 13.51 1.53 13.69 1.74C14.15 2.28 14.61 2.82 15.06 3.36C15.89 4.32 15.40 5.81 14.17 6.12C13.48 6.29 12.79 6.46 12.10 6.63C11.83 6.69 11.55 6.76 11.28 6.83C10.47 7.03 9.92 7.78 9.99 8.62C10.01 8.89 10.03 9.17 10.05 9.45C10.11 10.16 10.16 10.86 10.21 11.57C10.31 12.83 9.05 13.76 7.87 13.28C6.95 12.90 6.03 12.53 5.11 12.16C4.34 11.84 3.45 12.13 3.02 12.84C2.50 13.68 1.98 14.52 1.46 15.36C1.18 15.83 0.72 16.10 0.24 16.16C-0.39 16.24 -1.06 15.98 -1.44 15.37C-1.96 14.53 -2.49 13.68 -3.01 12.84C-3.45 12.13 -4.34 11.84 -5.11 12.16C-5.37 12.27 -5.62 12.38 -5.88 12.48C-6.54 12.75 -7.19 13.02 -7.85 13.29C-9.02 13.77 -10.29 12.85 -10.20 11.59C-10.15 10.88 -10.09 10.17 -10.04 9.46C-10.02 9.18 -10.00 8.90 -9.98 8.62C-9.92 7.79 -10.47 7.03 -11.28 6.84C-11.55 6.77 -11.82 6.71 -12.10 6.64C-12.78 6.47 -13.47 6.31 -14.16 6.14C-15.39 5.84 -15.88 4.35 -15.06 3.38C-14.60 2.84 -14.14 2.30 -13.69 1.75C-13.50 1.54 -13.32 1.32 -13.14 1.11C-12.60 0.47 -12.60 -0.46 -13.14 -1.10C-13.33 -1.31 -13.51 -1.53 -13.69 -1.74C-14.15 -2.28 -14.61 -2.82 -15.06 -3.36C-15.89 -4.32 -15.40 -5.81 -14.17 -6.12C-13.48 -6.29 -12.79 -6.46 -12.10 -6.63C-11.83 -6.69 -11.55 -6.76 -11.28 -6.83Z\";\n\n/** keyTimes for the morph: (i + step)/7 over steps [0, .35, .52, .85], + 1. */\nexport const MORPH_TIMES = \"0;0.05;0.0743;0.1214;0.1429;0.1429;0.1929;0.2171;0.2643;0.2857;0.2857;0.3357;0.36;0.4071;0.4286;0.4286;0.4786;0.5029;0.55;0.5714;0.5714;0.6214;0.6457;0.6929;0.7143;0.7143;0.7643;0.7886;0.8357;0.8571;0.8571;0.9071;0.9314;0.9786;1;1\";\n\n/** keySplines replaying the Compose morph spring (through / brake / settle / dwell). */\nexport const MORPH_SPLINES =\n \"0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1;0 0 1 1;0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1;0 0 1 1;0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1;0 0 1 1;0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1;0 0 1 1;0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1;0 0 1 1;0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1;0 0 1 1;0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1;0 0 1 1\";\n","import {cn} from \"../../utils/helpers\";\nimport {\n MORPH_SPLINES,\n MORPH_TIMES,\n MORPH_VALUES,\n} from \"./_loadingIndicatorShapes\";\n\n/* The M3 active indicator is the EXACT MaterialShapes morph\n * (SoftBurst → Cookie9 → Pentagon → Pill → Sunny → Cookie4 → Oval): the\n * keyframe paths in `_loadingIndicatorShapes` are generated 1:1 from the\n * androidx.graphics.shapes geometry (RoundedPolygon corner-rounding + Morph)\n * by scripts/gen-loading-indicator.mjs. The svg is the 48dp container (the\n * Compose draw surface), NOT the 38dp active size: the shapes scale to the\n * 38dp nominal but the spring overshoot pulses them larger, and a 38px svg\n * would clip the pulse peak (svg defaults to overflow:hidden). Paths are\n * centered at the origin (a translate(24 24) group positions them in the 48px\n * box); the rotation kick accumulates with accumulate=\"sum\", which sums every\n * rotate component — an embedded cx/cy would drift the axis. */\nconst FIRST_SHAPE = MORPH_VALUES.slice(0, MORPH_VALUES.indexOf(\";\"));\n\n/* The rotation kick replays the same 650ms morph spring (damping 0.6,\n * stiffness 200): the rotation is `progress * 90` in Compose, so it passes\n * through 90° and the spring overshoot extrapolates to 102.6° (90 × 1.14)\n * before settling — through (~35%), brake at the overshoot (~52%), settle\n * (~85%), dwell. +90° accumulates per morph. */\nconst ROTATION_TIMES = \"0;0.35;0.52;0.85;1\";\nconst ROTATION_SPLINES = \"0.4 0 0.9 0.6;0.1 0.4 0.4 1;0.45 0 0.4 1;0 0 1 1\";\nconst ROTATION_VALUES = \"0;90;102.6;90;90\";\n\nexport interface LoadingIndicatorLabels {\n /** Accessible name (aria-label). Default \"Loading\". */\n label?: string;\n}\n\nconst LOADING_INDICATOR_LABELS: Required<LoadingIndicatorLabels> = {\n label: \"Loading\",\n};\n\nexport interface LoadingIndicatorProps {\n className?: string;\n /** Contained: paints the 48dp fully-round container\n * (primary-container) under an on-primary-container indicator. */\n contained?: boolean;\n /** Customizable accessible name. */\n labels?: LoadingIndicatorLabels;\n}\n\n/**\n * M3 Expressive loading indicator: the exact 38dp MaterialShapes morph\n * (SoftBurst → Cookie9 → Pentagon → Pill → Sunny → Cookie4 → Oval) on 650ms\n * spring ticks (through the target at speed, 14% overshoot at the brake,\n * settle, dwell) with a +90° rotation kick per morph on top of the 4666ms\n * global rotation, inside a 48dp container. Default paints only the primary\n * shape; `contained` adds the primary-container circle. Indeterminate by\n * design — for determinate progress use Progress/Circle.\n */\nfunction LoadingIndicator({\n className,\n contained,\n labels,\n}: LoadingIndicatorProps) {\n const l = {...LOADING_INDICATOR_LABELS, ...labels};\n return (\n <span\n aria-label={l.label}\n className={cn(\n \"relative inline-flex size-12 shrink-0 items-center justify-center\",\n contained && \"rounded-full bg-primary-container\",\n className,\n )}\n role=\"progressbar\">\n <svg\n className={cn(\n \"animate-[spin_4666ms_linear_infinite]\",\n contained ? \"text-on-primary-container\" : \"text-primary\",\n )}\n fill=\"currentColor\"\n height={48}\n viewBox=\"0 0 48 48\"\n width={48}>\n <g transform=\"translate(24 24)\">\n <g>\n {/* +90° kick per morph, accumulating forever\n * (plain angles about the origin). */}\n <animateTransform\n accumulate=\"sum\"\n additive=\"sum\"\n attributeName=\"transform\"\n calcMode=\"spline\"\n dur=\"650ms\"\n keySplines={ROTATION_SPLINES}\n keyTimes={ROTATION_TIMES}\n repeatCount=\"indefinite\"\n type=\"rotate\"\n values={ROTATION_VALUES}\n />\n <path d={FIRST_SHAPE}>\n <animate\n attributeName=\"d\"\n calcMode=\"spline\"\n dur=\"4550ms\"\n keySplines={MORPH_SPLINES}\n keyTimes={MORPH_TIMES}\n repeatCount=\"indefinite\"\n values={MORPH_VALUES}\n />\n </path>\n </g>\n </g>\n </svg>\n </span>\n );\n}\n\nexport {LoadingIndicator};\n","import {cn} from \"../../utils/helpers\";\n\nexport interface ProgressLabels {\n /** Accessible name (aria-label). Default \"Progress\". */\n label?: string;\n}\n\nconst PROGRESS_LABELS: Required<ProgressLabels> = {label: \"Progress\"};\n\nexport interface ProgressProps {\n className?: string;\n /** Looping animation instead of a fixed value. */\n indeterminate?: boolean;\n /** Customizable accessible name. */\n labels?: ProgressLabels;\n /** Track/indicator thickness in px (spec: default 4, configurable —\n * the thick sample is 8). The stop indicator stays 4. */\n thickness?: number;\n /** 0–100. */\n value?: number;\n /** M3 Expressive: the active indicator ripples as a sine wave. */\n wavy?: boolean;\n}\n\n/* Sine-like stroke (quadratic approximation), amplitude 3, centered in a\n * (thickness + 6)px-tall box. The determinate active wave is wavelength 40,\n * the indeterminate one 20 (md.comp tokens). 2460px spans any realistic bar;\n * a half wavelength is `q<wavelength/4> ∓6 <wavelength/2> 0`. */\nfunction wavePath(center: number, wavelength = 40): string {\n const control = wavelength / 4;\n const half = wavelength / 2;\n const reps = Math.ceil(2460 / wavelength);\n const cycle = `q${control} -6 ${half} 0q${control} 6 ${half} 0`;\n return `M0 ${center}${cycle.repeat(reps)}`;\n}\n\n/**\n * M3 Expressive linear progress indicator: primary active indicator over\n * a secondary-container track with a 4px gap and a stop indicator.\n * Determinate transitions follow @material/web (250ms); the flat\n * indeterminate runs the @material/web 2s two-bar choreography. The `wavy`\n * indeterminate runs that same two-bar choreography — two primary segments\n * sweep across the track (their head/tail clip-path is derived from the flat\n * variant's translate/scale timing) — but each segment shows the same\n * traveling sine as the determinate active indicator (wavelength 40,\n * amplitude 3, one wavelength per second).\n */\nfunction Progress({\n className,\n indeterminate,\n labels,\n thickness = 4,\n value = 0,\n wavy,\n}: ProgressProps) {\n const l = {...PROGRESS_LABELS, ...labels};\n const clamped = Math.min(100, Math.max(0, value));\n const height = wavy ? thickness + 6 : thickness;\n\n // Traveling sine stroke shared by every wavy surface (determinate active\n // indicator and both indeterminate segments). The 2460px width spans any\n // realistic bar; `.wavePhase` shifts it one wavelength (40px) per second.\n const renderWave = () => (\n <div className=\"wavePhase\">\n <svg\n aria-hidden\n className=\"shrink-0\"\n fill=\"none\"\n height={height}\n viewBox={`0 0 2460 ${height}`}\n width={2460}>\n <path\n d={wavePath(height / 2)}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={thickness}\n />\n </svg>\n </div>\n );\n\n return (\n <div\n aria-label={l.label}\n aria-valuemax={100}\n aria-valuemin={0}\n aria-valuenow={indeterminate ? undefined : clamped}\n className={cn(\"relative w-full\", className)}\n role=\"progressbar\"\n style={{height}}>\n {indeterminate ? (\n wavy ? (\n // Two primary wave segments sweep across a secondary-container\n // track — the @material/web 2s two-bar choreography (each segment's\n // head/tail clip-path is derived from the flat variant's\n // translate/scale timing), but the active indicator is the same\n // traveling sine as the determinate variant.\n <div className=\"absolute inset-0 overflow-hidden\">\n <div\n className=\"absolute inset-x-0 top-1/2 -translate-y-1/2 rounded-full bg-secondary-container\"\n style={{height: thickness}}\n />\n <div className=\"waveSeg waveSegPrimary text-primary\">\n {renderWave()}\n </div>\n <div className=\"waveSeg waveSegSecondary text-primary\">\n {renderWave()}\n </div>\n </div>\n ) : (\n // @material/web two-bar: a primary + a secondary bar translate and\n // scale across the secondary-container track.\n <div className=\"absolute inset-0 overflow-hidden rounded-full\">\n <div className=\"absolute inset-0 bg-secondary-container\" />\n <div className=\"absolute inset-0 overflow-hidden\">\n <div className=\"linearBar linearPrimaryBar rounded-full text-primary\">\n <div className=\"linearBarInner\" />\n </div>\n <div className=\"linearBar linearSecondaryBar rounded-full text-primary\">\n <div className=\"linearBarInner\" />\n </div>\n </div>\n </div>\n )\n ) : (\n <>\n {/* active indicator */}\n {wavy ? (\n <div\n className=\"linearDeterminate absolute inset-y-0 left-0 overflow-hidden text-primary\"\n style={{width: `${clamped}%`}}>\n {renderWave()}\n </div>\n ) : (\n <div\n className=\"linearDeterminate absolute inset-y-0 left-0 rounded-full bg-primary\"\n style={{width: `${clamped}%`}}\n />\n )}\n {/* track (4px gap from the active indicator) */}\n <div\n className={cn(\n \"linearDeterminate absolute right-0 rounded-full bg-secondary-container\",\n wavy ? \"top-1/2 -translate-y-1/2\" : \"inset-y-0\",\n )}\n style={{\n height: wavy ? thickness : undefined,\n width: `max(calc(${100 - clamped}% - ${clamped > 0 ? 4 : 0}px), 0px)`,\n }}\n />\n {/* stop indicator (always 4; thick variants inset it\n * by the 2px trailing space of the spec sample) */}\n <span\n className=\"absolute top-1/2 size-1 -translate-y-1/2 rounded-full bg-primary\"\n style={{right: thickness > 4 ? 2 : 0}}\n />\n </>\n )}\n </div>\n );\n}\n\nexport {Progress};\n","import {MouseEventHandler, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useRipple} from \"../../utils/_ripple\";\n\nexport interface SearchItemProps {\n children?: ReactNode;\n className?: string;\n label?: ReactNode;\n leftElement?: ReactNode;\n onClick?: MouseEventHandler<HTMLButtonElement>;\n rightElement?: ReactNode;\n}\n\n/** M3 search suggestion row: height 56, body-large, state layer. */\nfunction SearchItem({\n children,\n className,\n label,\n leftElement,\n onClick,\n rightElement,\n}: SearchItemProps) {\n useRipple();\n return (\n <button\n className={cn(\n \"state-layer flex h-14 w-full shrink-0 cursor-pointer items-center justify-start px-4 text-body-large text-on-surface\",\n className,\n )}\n onClick={onClick}\n type=\"button\">\n {leftElement ? (\n <span className=\"mr-4 flex h-6 w-6 shrink-0 items-center justify-center leading-none text-on-surface-variant\">\n {leftElement}\n </span>\n ) : null}\n <span className=\"flex w-full items-center gap-4 truncate text-left\">\n {label ?? children}\n </span>\n {rightElement ? (\n <span className=\"flex min-w-max pl-7 text-body-small text-on-surface-variant\">\n {rightElement}\n </span>\n ) : null}\n </button>\n );\n}\n\nexport {SearchItem};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface SearchInputLabels {\n /** Input placeholder. Default \"Search\". */\n placeholder?: string;\n}\n\nconst SEARCH_INPUT_LABELS: Required<SearchInputLabels> = {\n placeholder: \"Search\",\n};\n\nexport interface SearchInputProps extends Omit<\n ComponentProps<\"input\">,\n \"placeholder\" | \"size\"\n> {\n /** Class for the wrapper. */\n className?: string;\n inputClassName?: string;\n /** Customizable text (input placeholder). */\n labels?: SearchInputLabels;\n /** Leading slot (56px box), e.g. a search icon or back button. */\n leftElement?: ReactNode;\n /** Trailing slot (56px box), e.g. an avatar or mic icon. */\n rightElement?: ReactNode;\n}\n\n/**\n * M3 search bar input row: height 56, body-large text, visible placeholder\n * (search bars do not float labels). Transparent background — the `Search`\n * wrapper provides the container color and shape. Leading icon = on-surface\n * (the search icon is the primary affordance per the search-bar token set);\n * trailing icon/avatar = on-surface-variant.\n */\nfunction SearchInput({\n className,\n inputClassName,\n labels,\n leftElement,\n rightElement,\n ...inputProps\n}: SearchInputProps) {\n const l = {...SEARCH_INPUT_LABELS, ...labels};\n return (\n <div className={cn(\"relative flex h-14 w-full\", className)}>\n {leftElement ? (\n <div className=\"absolute left-0 flex h-14 w-14 items-center justify-center text-on-surface\">\n {leftElement}\n </div>\n ) : null}\n <input\n autoComplete=\"off\"\n className={cn(\n \"h-14 w-full bg-transparent text-body-large text-on-surface outline-none placeholder:text-on-surface-variant\",\n leftElement ? \"pl-14\" : \"pl-4\",\n rightElement ? \"pr-14\" : \"pr-4\",\n inputClassName,\n )}\n type=\"search\"\n {...inputProps}\n placeholder={l.placeholder}\n />\n {rightElement ? (\n <div className=\"absolute right-0 flex h-14 w-14 items-center justify-center text-on-surface-variant\">\n {rightElement}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport {SearchInput};\n","import {ReactNode, useRef, useState} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useOutsideClose} from \"../_useOutsideClose\";\nimport {SearchItem} from \"./SearchItem\";\nimport {SearchInput} from \"./SearchInput\";\n\nexport interface SearchProps {\n /** The search bar content (usually a SearchInput). */\n children: ReactNode;\n className?: string;\n /**\n * M3 baseline (\"divided\") style: the bar joins the results panel with a\n * divider instead of staying a separate, gapped card. The M3 Expressive\n * spec marks this \"not recommended — use contained\" (the default).\n */\n divided?: boolean;\n /** Suggestions shown while open (Search.Item list). */\n result?: ReactNode;\n /** Class for the results container. */\n resultClassName?: string;\n}\n\n/**\n * M3 search bar + docked search view. Default = the M3 Expressive **contained**\n * style: a persistent full-pill bar on surface-container-high that opens a\n * separate results card below (corner-medium, 2dp gap, no divider). The legacy\n * **divided** style (`divided`) joins the bar and results with a divider and\n * squares off the bar's bottom corners — kept for baseline parity. Closes on\n * outside click or Escape.\n */\nfunction Search({\n children,\n className,\n divided = false,\n result,\n resultClassName,\n}: SearchProps) {\n const [isActive, setIsActive] = useState(false);\n const wrapper = useRef<HTMLDivElement>(null);\n const open = isActive && Boolean(result);\n // Menu choreography: open 500ms emphasized, close 150ms accelerate.\n const {exiting, mounted} = useDismissable(open, 150);\n\n useOutsideClose(wrapper, () => setIsActive(false), isActive);\n\n return (\n <div\n className={cn(\n \"relative z-30 flex h-fit w-full min-w-[360px] max-w-[720px] cursor-pointer bg-surface-container-high text-on-surface\",\n // Contained (M3 Expressive): the bar stays a persistent 28px\n // pill (real px — corner-full would snap instead of morphing).\n // Divided (baseline): its bottom corners square off in step\n // with the panel reveal and round back with its exit.\n divided && open\n ? \"rounded-[28px] rounded-b-none transition-all duration-500 ease-emphasized\"\n : divided\n ? \"rounded-[28px] transition-all duration-150 ease-emphasized-accelerate\"\n : \"rounded-[28px]\",\n className,\n )}\n onClick={() => setIsActive(true)}\n onFocus={() => setIsActive(true)}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setIsActive(false);\n }}\n ref={wrapper}\n role=\"search\">\n {children}\n {mounted ? (\n <div\n className={cn(\n \"absolute top-full left-0 flex w-full flex-col\",\n // Contained: 2dp gap between the bar and the card.\n divided ? \"\" : \"pt-0.5\",\n )}>\n <div\n className={cn(\n // Both styles carry shadow-mm-3 (level 3); bleed the\n // static edges so the clip-path reveal doesn't crop\n // that shadow (the box-shadow gotcha).\n \"flex max-h-[310px] flex-col overflow-hidden overflow-y-auto bg-surface-container-high py-2 shadow-mm-3 [--menu-clip-bleed:-24px]\",\n divided\n ? \"rounded-b-extra-large border-t border-outline\"\n : // Separate card: corner-medium all around.\n \"rounded-medium\",\n exiting ? \"animate-menu-out\" : \"animate-menu-in\",\n resultClassName,\n )}>\n {result}\n </div>\n </div>\n ) : null}\n </div>\n );\n}\n\nSearch.Item = SearchItem;\nSearch.Input = SearchInput;\n\nexport {Search};\n","// Internal: controlled/uncontrolled state for form-like components.\n// Not exported from the public barrel.\nimport {useCallback, useRef, useState} from \"react\";\n\n/**\n * Controllable state. When `controlled` is defined the component is fully\n * driven by props (internal updates are ignored); otherwise an internal\n * state seeded with `defaultValue` is used.\n */\nexport function useControlled<T>(\n controlled: T | undefined,\n defaultValue: T,\n): [T, (next: T) => void] {\n const isControlled = useRef(controlled !== undefined).current;\n const [internal, setInternal] = useState<T>(defaultValue);\n\n const value =\n isControlled && controlled !== undefined ? controlled : internal;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setInternal(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n","// Internal helpers shared by SelectFilled/SelectOutlined. Not exported\n// from the public barrel.\nimport {KeyboardEvent, ReactNode, useEffect, useRef, useState} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useControlled} from \"../../utils/_useControlled\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useOutsideClose} from \"../_useOutsideClose\";\n\n/* @material/web select: max time between typeahead keystrokes. */\nconst TYPEAHEAD_BUFFER_MS = 200;\n\nexport interface SelectOption {\n disabled?: boolean;\n /** Display content; defaults to the value. */\n label?: ReactNode;\n value: string;\n}\n\nexport interface SelectBaseProps {\n /** Class for the wrapper. */\n className?: string;\n defaultValue?: string;\n disabled?: boolean;\n error?: boolean;\n errorText?: ReactNode;\n id?: string;\n /** Floating label. */\n label?: string;\n /** Leading icon (24px box; the field pads 48 on that side). */\n leftElement?: ReactNode;\n /** Posts the value in native forms via a hidden input. */\n name?: string;\n /** Fires with the next selected value. */\n onChange?: (value: string) => void;\n options: SelectOption[];\n supportingText?: ReactNode;\n value?: string;\n}\n\n/** Typeahead text of an option (string labels win over the value). */\nfunction optionText(option: SelectOption): string {\n return typeof option.label === \"string\" ? option.label : option.value;\n}\n\n/**\n * Select behavior shared by both variants: controlled value, open/close\n * with the menu exit animation, keyboard navigation and the 200ms\n * typeahead of @material/web.\n */\nexport function useSelect({\n defaultValue,\n disabled,\n onChange,\n options,\n value: valueProp,\n}: Pick<\n SelectBaseProps,\n \"defaultValue\" | \"disabled\" | \"onChange\" | \"options\" | \"value\"\n>) {\n const [value, setValue] = useControlled(valueProp, defaultValue ?? \"\");\n const [isOpen, setIsOpen] = useState(false);\n const [focused, setFocused] = useState(false);\n const [highlighted, setHighlighted] = useState(-1);\n const wrapper = useRef<HTMLDivElement>(null);\n const typeahead = useRef({buffer: \"\", time: 0});\n const {exiting, mounted} = useDismissable(isOpen, 150);\n\n useOutsideClose(wrapper, () => setIsOpen(false), isOpen);\n\n const selectedIndex = options.findIndex((option) => option.value === value);\n\n /** Next enabled index from `start` in `delta` direction (wraps). */\n const move = (start: number, delta: number) => {\n for (let step = 1; step <= options.length; step += 1) {\n const index =\n (start + delta * step + options.length * step) % options.length;\n if (!options[index]?.disabled) return index;\n }\n return -1;\n };\n\n const openMenu = () => {\n if (disabled) return;\n setHighlighted(\n selectedIndex >= 0 && !options[selectedIndex]?.disabled\n ? selectedIndex\n : move(-1, 1),\n );\n setIsOpen(true);\n };\n\n const commit = (next: string) => {\n setValue(next);\n onChange?.(next);\n setIsOpen(false);\n };\n\n /** First enabled option matching the accumulated typeahead buffer. */\n const typeaheadFind = (char: string) => {\n const now = Date.now();\n const stale = now - typeahead.current.time > TYPEAHEAD_BUFFER_MS;\n typeahead.current = {\n buffer: (stale ? \"\" : typeahead.current.buffer) + char.toLowerCase(),\n time: now,\n };\n return options.findIndex(\n (option) =>\n !option.disabled &&\n optionText(option).toLowerCase().startsWith(typeahead.current.buffer),\n );\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLButtonElement>) => {\n if (disabled) return;\n const {key} = event;\n const printable =\n key.length === 1 &&\n key !== \" \" &&\n !event.altKey &&\n !event.ctrlKey &&\n !event.metaKey;\n\n if (!isOpen) {\n if ([\"ArrowDown\", \"ArrowUp\", \"Enter\", \" \"].includes(key)) {\n event.preventDefault();\n openMenu();\n } else if (printable) {\n // @material/web: typeahead while closed selects directly.\n const index = typeaheadFind(key);\n if (index >= 0) {\n setValue(options[index].value);\n onChange?.(options[index].value);\n }\n }\n return;\n }\n\n switch (key) {\n case \"ArrowDown\":\n event.preventDefault();\n setHighlighted((current) => move(current, 1));\n break;\n case \"ArrowUp\":\n event.preventDefault();\n setHighlighted((current) => move(current, -1));\n break;\n case \"Home\":\n event.preventDefault();\n setHighlighted(move(-1, 1));\n break;\n case \"End\":\n event.preventDefault();\n setHighlighted(move(options.length, -1));\n break;\n case \"Enter\":\n case \" \": {\n event.preventDefault();\n const option = options[highlighted];\n if (option && !option.disabled) commit(option.value);\n break;\n }\n case \"Escape\":\n event.preventDefault();\n setIsOpen(false);\n break;\n case \"Tab\":\n setIsOpen(false);\n break;\n default:\n if (printable) {\n const index = typeaheadFind(key);\n if (index >= 0) setHighlighted(index);\n }\n }\n };\n\n return {\n commit,\n exiting,\n focused: focused && !disabled,\n handleKeyDown,\n highlighted,\n isOpen,\n mounted,\n openMenu,\n selectedIndex,\n setFocused,\n setHighlighted,\n setIsOpen,\n value,\n wrapper,\n };\n}\n\nexport interface SelectMenuProps {\n baseId: string;\n exiting: boolean;\n highlighted: number;\n onHighlight: (index: number) => void;\n onSelect: (value: string) => void;\n options: SelectOption[];\n value: string;\n}\n\n/**\n * The select listbox: the M3E vertical-menu surface (corner-large 16,\n * surface-container-low, elevation 3) matching the field width, with the\n * @material/web open/close animation (500ms emphasized reveal / 150ms\n * accelerate). Options are 48dp with an inset state layer, label-large;\n * the selected one morphs to corner-medium with a tertiary-container fill\n * (the vertical-menu selected state). Listbox semantics are kept.\n */\nexport function SelectMenu({\n baseId,\n exiting,\n highlighted,\n onHighlight,\n onSelect,\n options,\n value,\n}: SelectMenuProps) {\n useEffect(() => {\n if (highlighted < 0) return;\n document\n .getElementById(`${baseId}-opt-${highlighted}`)\n ?.scrollIntoView({block: \"nearest\"});\n }, [baseId, highlighted]);\n\n return (\n <ul\n className={cn(\n \"absolute top-full left-0 z-30 mt-1 flex max-h-[280px] w-full min-w-max flex-col overflow-hidden overflow-y-auto rounded-large bg-surface-container-low py-0.5 shadow-mm-3 [--menu-clip-bleed:-24px]\",\n exiting ? \"animate-menu-out\" : \"animate-menu-in\",\n )}\n id={`${baseId}-listbox`}\n role=\"listbox\">\n {options.map((option, index) => {\n const isSelected = option.value === value;\n return (\n <li\n aria-disabled={option.disabled || undefined}\n aria-selected={isSelected}\n className={cn(\n \"mx-1 my-0.5 flex h-11 shrink-0 cursor-pointer items-center rounded-extra-small px-3 text-label-large first:rounded-t-medium last:rounded-b-medium\",\n isSelected\n ? \"rounded-medium bg-tertiary-container text-on-tertiary-container\"\n : \"text-on-surface\",\n highlighted === index && !isSelected && \"bg-on-surface/8\",\n option.disabled && \"cursor-not-allowed text-on-surface/38\",\n )}\n id={`${baseId}-opt-${index}`}\n key={option.value}\n onClick={() => {\n if (!option.disabled) onSelect(option.value);\n }}\n onMouseDown={(event) => event.preventDefault()}\n onMouseEnter={() => {\n if (!option.disabled) onHighlight(index);\n }}\n role=\"option\">\n <span className=\"truncate\">{option.label ?? option.value}</span>\n </li>\n );\n })}\n </ul>\n );\n}\n\n/**\n * M3 dropdown caret: down/up arrows cross-faded while the menu is open,\n * like @material/web's select (75ms linear delayed 75ms — half the menu\n * animation).\n */\nexport function SelectCaret({open = false}: {open?: boolean}) {\n const fade = \"ease-md-linear transition-opacity delay-75 duration-75\";\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={24}\n viewBox=\"0 0 24 24\"\n width={24}>\n <path\n className={cn(fade, open ? \"opacity-0\" : \"opacity-100\")}\n d=\"M7 10l5 5 5-5z\"\n />\n <path\n className={cn(fade, open ? \"opacity-100\" : \"opacity-0\")}\n d=\"M7 15l5-5 5 5z\"\n />\n </svg>\n );\n}\n","import {useId} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {\n FieldIcon,\n FloatingLabel,\n labelColor,\n SupportingText,\n} from \"../text-field/_fieldShared\";\nimport {\n SelectCaret,\n SelectMenu,\n useSelect,\n type SelectBaseProps,\n type SelectOption,\n} from \"./_selectShared\";\n\nexport type {SelectOption};\nexport type SelectFilledProps = SelectBaseProps;\n\n/**\n * M3 filled select: the filled text field anatomy (height 56, shape small\n * on the top corners, surface-container-highest, floating label, active\n * indicator) opening an options menu with the @material/web animation.\n * Controllable via `value` + `onChange`; keyboard navigation and 200ms\n * typeahead included.\n */\nfunction SelectFilled({\n className,\n defaultValue,\n disabled,\n error,\n errorText,\n id,\n label,\n leftElement,\n name,\n onChange,\n options,\n supportingText,\n value: valueProp,\n}: SelectFilledProps) {\n const autoId = useId();\n const triggerId = id ?? `${autoId}-trigger`;\n const {\n commit,\n exiting,\n focused,\n handleKeyDown,\n highlighted,\n isOpen,\n mounted,\n openMenu,\n selectedIndex,\n setFocused,\n setHighlighted,\n setIsOpen,\n value,\n wrapper,\n } = useSelect({\n defaultValue,\n disabled,\n onChange,\n options,\n value: valueProp,\n });\n const selected = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n const active = focused || isOpen;\n const floating = active || Boolean(selected);\n const describedById =\n (error && errorText) || supportingText ? `${autoId}-support` : undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div className=\"relative\" ref={wrapper}>\n <div className=\"group relative flex h-14 w-full overflow-hidden rounded-t-small\">\n {leftElement ? (\n <FieldIcon className=\"top-1/2 left-3 z-10 -translate-y-1/2\">\n {leftElement}\n </FieldIcon>\n ) : null}\n <button\n aria-activedescendant={\n isOpen && highlighted >= 0\n ? `${autoId}-opt-${highlighted}`\n : undefined\n }\n aria-controls={`${autoId}-listbox`}\n aria-describedby={describedById}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error || undefined}\n className={cn(\n \"h-14 w-full cursor-pointer bg-surface-container-highest pr-12 pl-4 text-left text-body-large text-on-surface outline-none disabled:cursor-not-allowed disabled:bg-on-surface/4 disabled:text-on-surface/38\",\n label && \"pt-5 pb-1\",\n leftElement && \"pl-12\",\n )}\n disabled={disabled}\n id={triggerId}\n onBlur={() => setFocused(false)}\n onClick={() => (isOpen ? setIsOpen(false) : openMenu())}\n onFocus={() => setFocused(true)}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n type=\"button\">\n <span className=\"block truncate\">\n {selected ? (selected.label ?? selected.value) : \" \"}\n </span>\n </button>\n {/* hover state layer */}\n {!disabled ? (\n <span\n aria-hidden\n className=\"ease-md-linear pointer-events-none absolute inset-0 bg-on-surface opacity-0 transition-opacity duration-[15ms] group-hover:opacity-8\"\n />\n ) : null}\n {/* active indicator */}\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-x-0 bottom-0 transition-all\",\n error\n ? \"bg-error\"\n : active\n ? \"bg-primary\"\n : \"bg-on-surface-variant\",\n active || error ? \"h-0.5\" : \"h-px\",\n disabled && \"bg-on-surface/38\",\n )}\n />\n {label ? (\n <FloatingLabel\n className={labelColor({\n disabled,\n error,\n focused: active,\n })}\n floating={floating}\n floatingClassName={cn(\n \"top-2 text-body-small\",\n leftElement ? \"left-12\" : \"left-4\",\n )}\n htmlFor={triggerId}\n restingClassName={cn(\n \"top-1/2 -translate-y-1/2 text-body-large\",\n leftElement ? \"left-12\" : \"left-4\",\n )}>\n {label}\n </FloatingLabel>\n ) : null}\n <FieldIcon\n className={cn(\n \"pointer-events-none top-1/2 right-3 -translate-y-1/2\",\n error && \"text-error\",\n disabled && \"text-on-surface/38\",\n )}>\n <SelectCaret open={isOpen} />\n </FieldIcon>\n </div>\n {mounted ? (\n <SelectMenu\n baseId={autoId}\n exiting={exiting}\n highlighted={highlighted}\n onHighlight={setHighlighted}\n onSelect={commit}\n options={options}\n value={value}\n />\n ) : null}\n </div>\n {name ? <input name={name} type=\"hidden\" value={value} /> : null}\n <SupportingText\n error={error}\n errorText={errorText}\n id={describedById}\n supportingText={supportingText}\n />\n </div>\n );\n}\n\nexport {SelectFilled};\n","import {useId} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {\n FieldIcon,\n FloatingLabel,\n labelColor,\n SupportingText,\n} from \"../text-field/_fieldShared\";\nimport {\n SelectCaret,\n SelectMenu,\n useSelect,\n type SelectBaseProps,\n} from \"./_selectShared\";\n\nexport type SelectOutlinedProps = SelectBaseProps;\n\n/**\n * M3 outlined select: the outlined text field anatomy (height 56, shape\n * small, fieldset/legend label notch) opening an options menu with the\n * @material/web animation. Controllable via `value` + `onChange`;\n * keyboard navigation and 200ms typeahead included.\n */\nfunction SelectOutlined({\n className,\n defaultValue,\n disabled,\n error,\n errorText,\n id,\n label,\n leftElement,\n name,\n onChange,\n options,\n supportingText,\n value: valueProp,\n}: SelectOutlinedProps) {\n const autoId = useId();\n const triggerId = id ?? `${autoId}-trigger`;\n const {\n commit,\n exiting,\n focused,\n handleKeyDown,\n highlighted,\n isOpen,\n mounted,\n openMenu,\n selectedIndex,\n setFocused,\n setHighlighted,\n setIsOpen,\n value,\n wrapper,\n } = useSelect({\n defaultValue,\n disabled,\n onChange,\n options,\n value: valueProp,\n });\n const selected = selectedIndex >= 0 ? options[selectedIndex] : undefined;\n const active = focused || isOpen;\n const floating = active || Boolean(selected);\n const describedById =\n (error && errorText) || supportingText ? `${autoId}-support` : undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div className=\"relative\" ref={wrapper}>\n <div className=\"group relative flex h-14 w-full\">\n {leftElement ? (\n <FieldIcon className=\"top-1/2 left-3 -translate-y-1/2\">\n {leftElement}\n </FieldIcon>\n ) : null}\n <button\n aria-activedescendant={\n isOpen && highlighted >= 0\n ? `${autoId}-opt-${highlighted}`\n : undefined\n }\n aria-controls={`${autoId}-listbox`}\n aria-describedby={describedById}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-invalid={error || undefined}\n className={cn(\n \"h-14 w-full cursor-pointer bg-transparent pr-12 pl-4 text-left text-body-large text-on-surface outline-none disabled:cursor-not-allowed disabled:text-on-surface/38\",\n leftElement && \"pl-12\",\n )}\n disabled={disabled}\n id={triggerId}\n onBlur={() => setFocused(false)}\n onClick={() => (isOpen ? setIsOpen(false) : openMenu())}\n onFocus={() => setFocused(true)}\n onKeyDown={handleKeyDown}\n role=\"combobox\"\n type=\"button\">\n <span className=\"block truncate\">\n {selected ? (selected.label ?? selected.value) : \" \"}\n </span>\n </button>\n {/* outline with label notch */}\n <fieldset\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 m-0 min-w-0 rounded-small px-2 transition-colors\",\n error\n ? active\n ? \"border-2 border-error\"\n : \"border border-error\"\n : active\n ? \"border-2 border-primary\"\n : \"border border-outline group-hover:border-on-surface\",\n disabled &&\n \"border-on-surface/12 group-hover:border-on-surface/12\",\n )}>\n {label ? (\n <legend\n className={cn(\n \"invisible h-0 px-0 text-body-small whitespace-nowrap transition-all\",\n floating ? \"max-w-full px-1\" : \"max-w-0\",\n )}>\n {label}\n </legend>\n ) : null}\n </fieldset>\n {label ? (\n <FloatingLabel\n className={labelColor({\n disabled,\n error,\n focused: active,\n })}\n floating={floating}\n floatingClassName=\"top-0 left-3 -translate-y-1/2 px-1 text-body-small\"\n htmlFor={triggerId}\n restingClassName={cn(\n \"top-1/2 -translate-y-1/2 text-body-large\",\n leftElement ? \"left-12\" : \"left-4\",\n )}>\n {label}\n </FloatingLabel>\n ) : null}\n <FieldIcon\n className={cn(\n \"pointer-events-none top-1/2 right-3 -translate-y-1/2\",\n error && \"text-error\",\n disabled && \"text-on-surface/38\",\n )}>\n <SelectCaret open={isOpen} />\n </FieldIcon>\n </div>\n {mounted ? (\n <SelectMenu\n baseId={autoId}\n exiting={exiting}\n highlighted={highlighted}\n onHighlight={setHighlighted}\n onSelect={commit}\n options={options}\n value={value}\n />\n ) : null}\n </div>\n {name ? <input name={name} type=\"hidden\" value={value} /> : null}\n <SupportingText\n error={error}\n errorText={errorText}\n id={describedById}\n supportingText={supportingText}\n />\n </div>\n );\n}\n\nexport {SelectOutlined};\n","import {ReactNode, useEffect, useRef} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useFocusTrap} from \"../_useFocusTrap\";\n\nexport interface BottomSheetProps {\n children?: ReactNode;\n className?: string;\n /** Show the M3 drag handle (32x4). Default true. */\n dragHandle?: boolean;\n isVisible?: boolean;\n /** Accessible name for the sheet (it is a modal dialog). */\n label?: string;\n onClose?: () => void;\n}\n\n/**\n * M3 modal bottom sheet: extra-large top corners, surface-container-low,\n * 32% scrim, slides up and animates out before unmounting.\n */\nfunction BottomSheet({\n children,\n className,\n dragHandle = true,\n isVisible = false,\n label,\n onClose,\n}: BottomSheetProps) {\n const {exiting, mounted} = useDismissable(isVisible, 200);\n const panel = useRef<HTMLDivElement>(null);\n const trapTab = useFocusTrap(panel, mounted);\n\n useEffect(() => {\n if (!mounted) return;\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [mounted]);\n\n useEffect(() => {\n if (!isVisible || !onClose) return;\n const handler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [isVisible, onClose]);\n\n if (!mounted) return null;\n\n return (\n <div\n className={cn(\n \"fixed inset-0 z-40 flex items-end justify-center bg-scrim/32\",\n exiting ? \"animate-scrim-sheet-out\" : \"animate-scrim-sheet-in\",\n )}\n onClick={onClose}>\n <div\n aria-label={label}\n aria-modal=\"true\"\n className={cn(\n \"mt-18 flex max-h-[calc(100vh-72px)] w-full max-w-[640px] flex-col overflow-y-auto rounded-t-extra-large bg-surface-container-low px-6 pb-7 text-on-surface shadow-mm-1\",\n exiting\n ? \"animate-transition-bottom-out\"\n : \"animate-transition-bottom\",\n className,\n )}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={trapTab}\n ref={panel}\n role=\"dialog\"\n tabIndex={-1}>\n {dragHandle ? (\n // Decorative — Escape and the scrim close the sheet.\n <div\n aria-hidden\n className=\"flex items-center justify-center py-[22px]\">\n <span className=\"flex h-1 w-8 rounded-full bg-on-surface-variant\" />\n </div>\n ) : (\n <div className=\"pt-6\" />\n )}\n {children}\n </div>\n </div>\n );\n}\n\nexport {BottomSheet};\n","import {ReactNode, useEffect, useId, useRef} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useFocusTrap} from \"../_useFocusTrap\";\nimport {IconButton} from \"../button/IconButton\";\n\nexport interface SideSheetLabels {\n /** aria-label for the default close button. Default \"Close\". */\n close?: string;\n /** Accessible name for the sheet when no `title` is rendered.\n * Default \"Side sheet\". */\n label?: string;\n}\n\nconst SIDE_SHEET_LABELS: Required<SideSheetLabels> = {\n close: \"Close\",\n label: \"Side sheet\",\n};\n\nexport interface SideSheetProps {\n children?: ReactNode;\n className?: string;\n /** true renders the default close icon button; pass a node for a\n * custom one. */\n closeButton?: boolean | ReactNode;\n isVisible?: boolean;\n /** Customizable accessible names. */\n labels?: SideSheetLabels;\n onClose?: () => void;\n /** Header title (title-large). */\n title?: ReactNode;\n}\n\nfunction CloseIcon() {\n return (\n <svg aria-hidden fill=\"none\" height={24} viewBox=\"0 0 24 24\" width={24}>\n <path\n d=\"m6 6 12 12M18 6 6 18\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={2}\n />\n </svg>\n );\n}\n\n/**\n * M3 modal side sheet: docked right, width up to 400, large start corners,\n * surface-container-low, 32% scrim, slides in from the right and animates\n * out before unmounting.\n */\nfunction SideSheet({\n children,\n className,\n closeButton,\n isVisible = false,\n labels,\n onClose,\n title,\n}: SideSheetProps) {\n const {exiting, mounted} = useDismissable(isVisible, 200);\n const l = {...SIDE_SHEET_LABELS, ...labels};\n const panel = useRef<HTMLElement>(null);\n const trapTab = useFocusTrap(panel, mounted);\n const titleId = useId();\n\n useEffect(() => {\n if (!mounted) return;\n const previous = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = previous;\n };\n }, [mounted]);\n\n useEffect(() => {\n if (!isVisible || !onClose) return;\n const handler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handler);\n return () => document.removeEventListener(\"keydown\", handler);\n }, [isVisible, onClose]);\n\n if (!mounted) return null;\n\n return (\n <div\n className={cn(\n \"fixed inset-0 z-40 flex justify-end bg-scrim/32\",\n exiting ? \"animate-scrim-sheet-out\" : \"animate-scrim-sheet-in\",\n )}\n onClick={onClose}>\n <aside\n aria-label={!title ? l.label : undefined}\n aria-labelledby={title ? titleId : undefined}\n aria-modal=\"true\"\n className={cn(\n \"flex h-full w-[360px] max-w-[90vw] flex-col overflow-y-auto rounded-l-large bg-surface-container-low p-6 text-on-surface shadow-mm-1 sm:w-[400px]\",\n exiting ? \"animate-transition-right-out\" : \"animate-transition-right\",\n className,\n )}\n onClick={(event) => event.stopPropagation()}\n onKeyDown={trapTab}\n ref={panel}\n role=\"dialog\"\n tabIndex={-1}>\n {title || closeButton ? (\n <div className=\"mb-4 flex w-full items-center justify-between gap-3\">\n <div\n className=\"flex w-full justify-start text-title-large text-on-surface-variant\"\n id={titleId}>\n {title}\n </div>\n {closeButton === true ? (\n <IconButton\n aria-label={l.close}\n icon={<CloseIcon />}\n onClick={onClose}\n variant=\"standard\"\n />\n ) : (\n closeButton\n )}\n </div>\n ) : null}\n {children}\n </aside>\n </div>\n );\n}\n\nexport {SideSheet};\n","// Internal: M3 Expressive slider size presets (md.comp.slider.{xsmall…xlarge}\n// — DSDB v34 / m3.material.io measurements). The handle is always 4dp wide;\n// the gap (6), inner corner (2), stop (4) and value indicator (44×48) are\n// common to every size. Strings are full Tailwind literals so the scanner\n// picks them up.\nexport type SliderSize = \"xs\" | \"s\" | \"m\" | \"l\" | \"xl\";\n\nexport interface SliderSizeConfig {\n /** Container = handle height (the handle is the tallest part). */\n container: string;\n /** Track height. */\n track: string;\n /** Handle height. */\n handle: string;\n /** Active outer (leading) corner = inactive outer (trailing) corner. */\n cornerL: string;\n cornerR: string;\n /** Inset-icon box size (\"\" = the size has no inset icon). */\n icon: string;\n}\n\nexport const SLIDER_SIZES: Record<SliderSize, SliderSizeConfig> = {\n // track 16 / handle 44 / corner 8 (full at 16dp)\n xs: {\n container: \"h-11\",\n track: \"h-4\",\n handle: \"h-11\",\n cornerL: \"rounded-l-small\",\n cornerR: \"rounded-r-small\",\n icon: \"\",\n },\n // track 24 / handle 44 / corner 8\n s: {\n container: \"h-11\",\n track: \"h-6\",\n handle: \"h-11\",\n cornerL: \"rounded-l-small\",\n cornerR: \"rounded-r-small\",\n icon: \"\",\n },\n // track 40 / handle 52 / corner 12 / icon 24\n m: {\n container: \"h-13\",\n track: \"h-10\",\n handle: \"h-13\",\n cornerL: \"rounded-l-medium\",\n cornerR: \"rounded-r-medium\",\n icon: \"size-6\",\n },\n // track 56 / handle 68 / corner 16 / icon 24\n l: {\n container: \"h-17\",\n track: \"h-14\",\n handle: \"h-17\",\n cornerL: \"rounded-l-large\",\n cornerR: \"rounded-r-large\",\n icon: \"size-6\",\n },\n // track 96 / handle 108 / corner 28 / icon 32\n xl: {\n container: \"h-27\",\n track: \"h-24\",\n handle: \"h-27\",\n cornerL: \"rounded-l-extra-large\",\n cornerR: \"rounded-r-extra-large\",\n icon: \"size-8\",\n },\n};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useControlled} from \"../../utils/_useControlled\";\nimport {SLIDER_SIZES, SliderSize} from \"./_sliderSizes\";\n\nexport interface SliderLabels {\n /** Accessible name (aria-label) for the range input. Default \"Slider\". */\n label?: string;\n}\n\nconst SLIDER_LABELS: Required<SliderLabels> = {label: \"Slider\"};\n\nexport interface SliderProps {\n className?: string;\n defaultValue?: number;\n disabled?: boolean;\n /** Inset leading icon for the thick M3E sizes (`m`/`l`/`xl`); two-toned\n * to follow the track (on-primary over active, on-secondary-container\n * over inactive). */\n icon?: ReactNode;\n /** Customizable accessible name. */\n labels?: SliderLabels;\n max?: number;\n min?: number;\n /** Fires with the next numeric value. */\n onChange?: (value: number) => void;\n /** Show the value indicator on hover/drag. Default true. */\n showLabel?: boolean;\n /** M3E track size: `xs` (default), `s`, `m`, `l`, `xl`. */\n size?: SliderSize;\n step?: number;\n /** Suffix rendered inside the value indicator. */\n tooltipChildren?: ReactNode;\n value?: number;\n}\n\n/**\n * M3 Expressive continuous slider: inset track with a 6px gap around the 4dp\n * handle, an on-secondary-container stop indicator on the inactive track and\n * a 44×48 inverse-surface value indicator on hover/drag. `size` selects the\n * track scale (xs–xl); the thick sizes (m/l/xl) host an optional inset\n * `icon`. Controllable via `value` + `onChange`.\n */\nfunction Slider({\n className,\n defaultValue,\n disabled,\n icon,\n labels,\n max = 100,\n min = 0,\n onChange,\n showLabel = true,\n size = \"xs\",\n step,\n tooltipChildren,\n value: valueProp,\n}: SliderProps) {\n const l = {...SLIDER_LABELS, ...labels};\n const [value, setValue] = useControlled(valueProp, defaultValue ?? min);\n const pct = max > min ? ((value - min) / (max - min)) * 100 : 0;\n // Keeps the 4px handle inside the track at both extremes.\n const inset = (0.5 - pct / 100) * 4;\n const center = `${pct}% + ${inset}px`;\n const sz = SLIDER_SIZES[size];\n\n return (\n <div\n className={cn(\n \"relative flex w-full items-center\",\n sz.container,\n className,\n )}>\n <input\n aria-label={l.label}\n className=\"peer absolute inset-0 z-10 size-full cursor-pointer appearance-none bg-transparent opacity-0 disabled:cursor-not-allowed\"\n disabled={disabled}\n max={max}\n min={min}\n onChange={(event) => {\n const next = Number(event.target.value);\n setValue(next);\n onChange?.(next);\n }}\n step={step}\n type=\"range\"\n value={value}\n />\n {/* inactive track */}\n <div\n className={cn(\n \"bg-secondary-container pointer-events-none absolute right-0 rounded-l-[2px]\",\n sz.track,\n sz.cornerR,\n disabled && \"bg-on-surface/12\",\n )}\n style={{\n width: `max(calc(${100 - pct}% - ${inset}px - 8px), 0px)`,\n }}\n />\n {/* inset icon — two layers so it follows the track colour like the\n * stop indicators: this on-secondary-container base shows over the\n * inactive track; the on-primary copy inside the active track below\n * paints over it in the active region. Both sit at the same leading\n * position (10dp, centered) so the split at the active-track edge is\n * seamless. */}\n {icon && sz.icon ? (\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute top-1/2 left-2.5 flex -translate-y-1/2 items-center justify-center leading-none\",\n sz.icon,\n disabled ? \"text-on-surface/38\" : \"text-on-secondary-container\",\n )}>\n {icon}\n </span>\n ) : null}\n {/* active track (6px gap to the handle). The on-primary inset icon\n * lives INSIDE it (overflow-hidden): it paints over the base copy\n * in the active region and is clipped as the track shrinks, so the\n * icon reads on-primary on the active track and on-secondary-\n * container on the inactive one. */}\n <div\n className={cn(\n \"bg-primary pointer-events-none absolute left-0 overflow-hidden rounded-r-[2px]\",\n sz.track,\n sz.cornerL,\n disabled && \"bg-on-surface/38\",\n )}\n style={{\n width: `max(calc(${center} - 8px), 0px)`,\n }}>\n {icon && sz.icon ? (\n <span\n aria-hidden\n className={cn(\n \"absolute top-1/2 left-2.5 flex -translate-y-1/2 items-center justify-center leading-none\",\n sz.icon,\n disabled ? \"text-on-surface/38\" : \"text-on-primary\",\n )}>\n {icon}\n </span>\n ) : null}\n </div>\n {/* stop indicator: sits on the inactive track, so it takes\n * on-secondary-container; 6dp from the trailing end */}\n <span\n aria-hidden\n className={cn(\n \"bg-on-secondary-container pointer-events-none absolute right-1.5 size-1 rounded-full\",\n disabled && \"bg-on-surface/38\",\n )}\n />\n {/* handle (4dp wide, height per size, narrowing to 2 pressed) */}\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute w-1 -translate-x-1/2 rounded-full transition-[width] duration-100 ease-emphasized peer-focus-visible:outline-3 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-secondary peer-active:w-0.5\",\n sz.handle,\n disabled ? \"bg-on-surface/38\" : \"bg-primary\",\n )}\n style={{left: `calc(${center})`}}\n />\n {/* value indicator: 44dp tall, 48dp min-width, label-large, 12dp\n * above the handle (inverse-surface, SliderTokens) */}\n {showLabel && !disabled ? (\n <span\n aria-hidden\n className=\"bg-inverse-surface pointer-events-none absolute bottom-full mb-3 flex h-11 min-w-12 -translate-x-1/2 items-center justify-center rounded-full px-2 text-label-large text-inverse-on-surface opacity-0 transition-opacity peer-hover:opacity-100 peer-focus-visible:opacity-100 peer-active:opacity-100\"\n style={{left: `calc(${center})`}}>\n <span className=\"relative flex items-center gap-0.5\">\n {value}\n {tooltipChildren}\n </span>\n </span>\n ) : null}\n </div>\n );\n}\n\nexport {Slider};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useControlled} from \"../../utils/_useControlled\";\nimport {SLIDER_SIZES, SliderSize} from \"./_sliderSizes\";\n\nexport interface SliderDualValue {\n max: number;\n min: number;\n}\n\nexport interface SliderDualLabels {\n /** Base accessible name; each handle appends its suffix. Default \"Range slider\". */\n label?: string;\n /** Suffix for the upper handle's aria-label. Default \"maximum\". */\n maximum?: string;\n /** Suffix for the lower handle's aria-label. Default \"minimum\". */\n minimum?: string;\n}\n\nconst SLIDER_DUAL_LABELS: Required<SliderDualLabels> = {\n label: \"Range slider\",\n maximum: \"maximum\",\n minimum: \"minimum\",\n};\n\nexport interface SliderDualProps {\n className?: string;\n defaultValue?: SliderDualValue;\n disabled?: boolean;\n /** Customizable accessible names. */\n labels?: SliderDualLabels;\n max?: number;\n min?: number;\n /** Fires with the next {min, max} pair. */\n onChange?: (value: SliderDualValue) => void;\n /** Show value indicators on hover/drag. Default true. */\n showLabel?: boolean;\n /** M3E track size: `xs` (default), `s`, `m`, `l`, `xl`. (The inset icon\n * is single-slider only.) */\n size?: SliderSize;\n step?: number;\n /** Suffix rendered inside the value indicators. */\n tooltipChildren?: ReactNode;\n value?: SliderDualValue;\n}\n\nconst thumbInteractive =\n \"pointer-events-none absolute inset-0 size-full appearance-none bg-transparent \" +\n \"[&::-webkit-slider-thumb]:pointer-events-auto [&::-webkit-slider-thumb]:size-11 [&::-webkit-slider-thumb]:cursor-pointer [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full \" +\n \"[&::-moz-range-thumb]:pointer-events-auto [&::-moz-range-thumb]:size-11 [&::-moz-range-thumb]:cursor-pointer [&::-moz-range-thumb]:appearance-none [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border-0 [&::-moz-range-thumb]:bg-transparent\";\n\n/**\n * M3 Expressive range slider: 16px inset track, two 4x44 handles with 6px\n * gaps, stop indicators at both ends and inverse-surface value indicators.\n * Controllable via `value` ({min, max}) + `onChange`.\n */\nfunction SliderDual({\n className,\n defaultValue,\n disabled,\n labels,\n max = 100,\n min = 0,\n onChange,\n showLabel = true,\n size = \"xs\",\n step,\n tooltipChildren,\n value: valueProp,\n}: SliderDualProps) {\n const l = {...SLIDER_DUAL_LABELS, ...labels};\n const [val, setVal] = useControlled<SliderDualValue>(\n valueProp,\n defaultValue ?? {max, min},\n );\n const sz = SLIDER_SIZES[size];\n const stepSize = step ?? 1;\n const range = max > min ? max - min : 1;\n const minPct = ((val.min - min) / range) * 100;\n const maxPct = ((val.max - min) / range) * 100;\n // Keeps the 4px handles inside the track at the extremes.\n const inset = (pct: number) => (0.5 - pct / 100) * 4;\n const center = (pct: number) => `${pct}% + ${inset(pct)}px`;\n\n const update = (next: SliderDualValue) => {\n setVal(next);\n onChange?.(next);\n };\n\n const indicator = (pct: number, value: number, peer: string) => (\n <span\n aria-hidden\n className={cn(\n // Expressive value indicator: 44dp tall, 48dp min-width,\n // label-large, 12dp above the handle (SliderTokens).\n \"bg-inverse-surface pointer-events-none absolute bottom-full mb-3 flex h-11 min-w-12 -translate-x-1/2 items-center justify-center rounded-full px-2 text-label-large text-inverse-on-surface opacity-0 transition-opacity\",\n peer,\n )}\n style={{left: `calc(${center(pct)})`}}>\n <span className=\"relative flex items-center gap-0.5\">\n {value}\n {tooltipChildren}\n </span>\n </span>\n );\n\n const handle = (pct: number, peer: string) => (\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute w-1 -translate-x-1/2 rounded-full transition-[width] duration-100 ease-emphasized\",\n sz.handle,\n disabled ? \"bg-on-surface/38\" : \"bg-primary\",\n peer,\n )}\n style={{left: `calc(${center(pct)})`}}\n />\n );\n\n return (\n <div\n className={cn(\n \"relative flex w-full items-center\",\n sz.container,\n className,\n )}>\n {/* left inactive track */}\n <div\n className={cn(\n \"bg-secondary-container pointer-events-none absolute left-0 rounded-r-[2px]\",\n sz.track,\n sz.cornerL,\n disabled && \"bg-on-surface/12\",\n )}\n style={{\n width: `max(calc(${center(minPct)} - 8px), 0px)`,\n }}\n />\n {/* active segment (6px gap to each handle) */}\n <div\n className={cn(\n \"bg-primary pointer-events-none absolute rounded-[2px]\",\n sz.track,\n disabled && \"bg-on-surface/38\",\n )}\n style={{\n left: `calc(${center(minPct)} + 8px)`,\n width: `max(calc(${maxPct - minPct}% + ${inset(maxPct) - inset(minPct)}px - 16px), 0px)`,\n }}\n />\n {/* right inactive track */}\n <div\n className={cn(\n \"bg-secondary-container pointer-events-none absolute right-0 rounded-l-[2px]\",\n sz.track,\n sz.cornerR,\n disabled && \"bg-on-surface/12\",\n )}\n style={{\n width: `max(calc(${100 - maxPct}% - ${inset(maxPct)}px - 8px), 0px)`,\n }}\n />\n {/* stop indicators: on the inactive track → on-secondary-container;\n * 6dp from each end */}\n <span\n aria-hidden\n className={cn(\n \"bg-on-secondary-container pointer-events-none absolute left-1.5 size-1 rounded-full\",\n disabled && \"bg-on-surface/38\",\n )}\n />\n <span\n aria-hidden\n className={cn(\n \"bg-on-secondary-container pointer-events-none absolute right-1.5 size-1 rounded-full\",\n disabled && \"bg-on-surface/38\",\n )}\n />\n <input\n aria-label={`${l.label} ${l.minimum}`}\n className={cn(\"peer/min z-10 opacity-0\", thumbInteractive)}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(event) => {\n const next = Math.min(Number(event.target.value), val.max - stepSize);\n update({...val, min: next});\n }}\n step={step}\n type=\"range\"\n value={val.min}\n />\n <input\n aria-label={`${l.label} ${l.maximum}`}\n className={cn(\"peer/max z-10 opacity-0\", thumbInteractive)}\n disabled={disabled}\n max={max}\n min={min}\n onChange={(event) => {\n const next = Math.max(Number(event.target.value), val.min + stepSize);\n update({...val, max: next});\n }}\n step={step}\n type=\"range\"\n value={val.max}\n />\n {/* handles (4x44 narrowing to 2 pressed) */}\n {handle(\n minPct,\n \"peer-active/min:w-0.5 peer-focus-visible/min:outline-3 peer-focus-visible/min:outline-offset-2 peer-focus-visible/min:outline-secondary\",\n )}\n {handle(\n maxPct,\n \"peer-active/max:w-0.5 peer-focus-visible/max:outline-3 peer-focus-visible/max:outline-offset-2 peer-focus-visible/max:outline-secondary\",\n )}\n {showLabel && !disabled ? (\n <>\n {indicator(\n minPct,\n val.min,\n \"peer-hover/min:opacity-100 peer-focus-visible/min:opacity-100 peer-active/min:opacity-100\",\n )}\n {indicator(\n maxPct,\n val.max,\n \"peer-hover/max:opacity-100 peer-focus-visible/max:opacity-100 peer-active/max:opacity-100\",\n )}\n </>\n ) : null}\n </div>\n );\n}\n\nexport {SliderDual};\n","import {ReactNode, useEffect, useRef, useState} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useDismissable} from \"../_useDismissable\";\nimport {useRipple} from \"../../utils/_ripple\";\n\nexport interface SnackbarLabels {\n /** aria-label for the dismiss (close) button. Default \"Dismiss\". */\n dismiss?: string;\n}\n\nconst SNACKBAR_LABELS: Required<SnackbarLabels> = {dismiss: \"Dismiss\"};\n\nexport interface SnackbarProps {\n /** Optional action button label (rendered as an M3 text button). */\n actionLabel?: string;\n /** Auto-close after N ms (calls onClose). Pauses on hover/focus. */\n autoHideDuration?: number;\n /** Extra trailing content (e.g. custom buttons). */\n button?: ReactNode;\n className?: string;\n /** Custom close icon (defaults to an X). */\n closeIcon?: ReactNode;\n isVisible: boolean;\n /** Customizable accessible names. */\n labels?: SnackbarLabels;\n onAction?: () => void;\n onClose?: () => void;\n /** Show the close icon button. */\n showClose?: boolean;\n text?: ReactNode;\n}\n\nfunction CloseIcon() {\n return (\n <svg aria-hidden fill=\"none\" height={24} viewBox=\"0 0 24 24\" width={24}>\n <path\n d=\"m6 6 12 12M18 6 6 18\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeWidth={2}\n />\n </svg>\n );\n}\n\n/**\n * M3 snackbar: shape extra-small, inverse-surface, min height 48, width\n * 344–600, body-medium. Action and close render as real M3 buttons\n * recolored to inverse roles. `autoHideDuration` closes it automatically\n * and pauses while hovered or focused (M3 a11y guidance).\n */\nfunction Snackbar({\n actionLabel,\n autoHideDuration,\n button,\n className,\n closeIcon,\n isVisible,\n labels,\n onAction,\n onClose,\n showClose,\n text,\n}: SnackbarProps) {\n useRipple();\n const l = {...SNACKBAR_LABELS, ...labels};\n const {exiting, mounted} = useDismissable(isVisible, 200);\n const [paused, setPaused] = useState(false);\n const timer = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (!isVisible || !autoHideDuration || !onClose || paused) return;\n timer.current = setTimeout(onClose, autoHideDuration);\n return () => {\n if (timer.current) clearTimeout(timer.current);\n };\n }, [autoHideDuration, isVisible, onClose, paused]);\n\n return (\n <>\n {/* Persistent polite live region: it stays mounted across the\n * snackbar's show/hide so a screen reader announces the message as\n * a CONTENT CHANGE — a region inserted already-populated is\n * announced unreliably. */}\n <div\n aria-atomic=\"true\"\n aria-live=\"polite\"\n className=\"sr-only\"\n role=\"status\">\n {isVisible ? text : \"\"}\n </div>\n {mounted ? (\n <div\n className={cn(\n \"flex min-h-12 w-full max-w-[600px] items-center justify-between gap-2 rounded-extra-small bg-inverse-surface py-1 pr-2 pl-4 text-body-medium text-inverse-on-surface shadow-mm-3 sm:min-w-[344px]\",\n exiting ? \"animate-snackbar-out\" : \"animate-snackbar-in\",\n className,\n )}\n onBlur={() => setPaused(false)}\n onFocus={() => setPaused(true)}\n onMouseEnter={() => setPaused(true)}\n onMouseLeave={() => setPaused(false)}>\n {/* py-2.5 → 14dp effective vertical text padding with the\n * container py-1, so two-line snackbars reach 68dp (single\n * 48). */}\n <div className=\"flex py-2.5\">{text}</div>\n <div className=\"flex shrink-0 flex-row items-center gap-1\">\n {actionLabel ? (\n <button\n className=\"btn text px-3 text-inverse-primary\"\n onClick={onAction}\n type=\"button\">\n {actionLabel}\n </button>\n ) : null}\n {button}\n {showClose ? (\n <button\n aria-label={l.dismiss}\n className=\"iconBtn standard text-inverse-on-surface\"\n onClick={onClose}\n type=\"button\">\n <span className=\"flex h-6 w-6 items-center justify-center leading-none\">\n {closeIcon ?? <CloseIcon />}\n </span>\n </button>\n ) : null}\n </div>\n </div>\n ) : null}\n </>\n );\n}\n\nexport {Snackbar};\n","import {ReactNode, useEffect, useState} from \"react\";\nimport {createPortal} from \"react-dom\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface SnackbarWrapperProps {\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Fixed bottom-centered stacking area for snackbars, portaled to\n * `document.body`. The portal is what makes snackbars reliable: a plain\n * `position: fixed` element stays trapped in the stacking context of any\n * positioned, z-indexed ancestor, so app content could paint over it no\n * matter how high its `z-index` is. Rendering into `body` lets it always sit\n * above the page. SSR-safe: renders nothing until mounted on the client.\n */\nfunction SnackbarWrapper({children, className}: SnackbarWrapperProps) {\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n if (!mounted) return null;\n\n return createPortal(\n <div className=\"pointer-events-none fixed inset-x-4 top-auto bottom-0 z-60 flex justify-center\">\n <div\n className={cn(\n \"pointer-events-auto absolute bottom-4 flex w-full max-w-[600px] flex-col items-center justify-center gap-3\",\n className,\n )}>\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n\nexport {SnackbarWrapper};\n","import {MouseEventHandler} from \"react\";\nimport {Media, type MediaInjectionProps} from \"../../elements/common/_media\";\nimport {cn, type ImageSrc} from \"../../utils/helpers\";\n\nexport interface BusinessItemProps extends MediaInjectionProps {\n alt?: string;\n className?: string;\n height?: number;\n onClick?: MouseEventHandler<HTMLDivElement>;\n radius?: number;\n /** Static primary ring. */\n ring?: boolean;\n src?: ImageSrc;\n /** Label below (label-large, start-aligned). */\n text?: string;\n width?: number;\n}\n\n/**\n * Story item for brand/business content: rounded media with an optional\n * primary ring and a start-aligned label. Media is injectable.\n */\nfunction BusinessItem({\n alt,\n children,\n className,\n height = 64,\n image,\n onClick,\n radius = 9999,\n render,\n ring,\n src,\n text,\n width = 64,\n}: BusinessItemProps) {\n return (\n <div className={cn(\"flex max-w-min flex-col\", className)}>\n <div\n className={cn(\"flex items-center p-0.5\", ring && \"ring-2 ring-primary\")}\n style={{borderRadius: radius}}>\n <div\n className=\"relative flex cursor-pointer items-center justify-center overflow-hidden bg-surface-container-low text-body-small text-on-surface-variant\"\n onClick={onClick}\n style={{borderRadius: radius, height, width}}>\n <Media\n alt={alt ?? text ?? \"\"}\n className=\"absolute inset-0 size-full\"\n image={image}\n render={render}\n src={src}\n style={{borderRadius: radius}}>\n {children}\n </Media>\n </div>\n </div>\n {text ? (\n <div className=\"flex w-full items-center justify-start px-2 pt-2 text-left text-label-large leading-tight text-on-surface\">\n {text}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport {BusinessItem};\n","import {MouseEventHandler, ReactNode} from \"react\";\nimport {Media, type MediaInjectionProps} from \"../../elements/common/_media\";\nimport {cn, type ImageSrc} from \"../../utils/helpers\";\nimport {Badge} from \"../badge/Badge\";\n\nexport interface UserItemProps extends MediaInjectionProps {\n alt?: string;\n badge?: boolean;\n badgeColor?: string;\n badgeIcon?: ReactNode;\n badgeText?: string;\n className?: string;\n /** Bottom-centered badge (e.g. \"LIVE\"). */\n live?: boolean;\n liveColor?: string;\n liveIcon?: ReactNode;\n liveText?: string;\n name?: string;\n onClick?: MouseEventHandler<HTMLDivElement>;\n radius?: number;\n /** Animated decorative ring (token-based gradient). */\n ring?: boolean;\n size?: number;\n src?: ImageSrc;\n}\n\n/**\n * Circular story item with optional ring, badges and name below. Media is\n * injectable (render > image > children) with a native <img> fallback.\n */\nfunction UserItem({\n alt,\n badge,\n badgeColor,\n badgeIcon,\n badgeText,\n children,\n className,\n image,\n live,\n liveColor,\n liveIcon,\n liveText,\n name,\n onClick,\n radius = 9999,\n render,\n ring,\n size = 64,\n src,\n}: UserItemProps) {\n return (\n <div className={cn(\"relative flex max-w-min flex-col\", className)}>\n <div\n className=\"relative z-10 flex cursor-pointer items-center justify-center overflow-hidden bg-surface-container-low text-body-small text-on-surface-variant\"\n onClick={onClick}\n style={{borderRadius: radius, height: size, width: size}}>\n <Media\n alt={alt ?? name ?? \"\"}\n className=\"absolute inset-0 size-full\"\n image={image}\n render={render}\n src={src}\n style={{borderRadius: radius}}>\n {children}\n </Media>\n </div>\n {badge ? (\n <div className=\"absolute -top-0.5 -right-0.5 z-20 flex justify-end\">\n <Badge className={badgeColor} icon={badgeIcon} text={badgeText} />\n </div>\n ) : null}\n {live ? (\n <div\n className=\"absolute z-20 flex w-full justify-center\"\n style={{top: size - 8}}>\n <Badge\n className={liveColor}\n icon={liveIcon}\n text={liveText ?? \"LIVE\"}\n />\n </div>\n ) : null}\n {name ? (\n <div className=\"flex w-full items-center justify-center pt-2 text-center text-label-medium leading-tight text-on-surface\">\n {name}\n </div>\n ) : null}\n {ring ? (\n <div\n aria-hidden\n className=\"absolute -top-1 -left-1 z-0 flex animate-spin-lazy rounded-full bg-conic from-primary via-tertiary to-primary p-0.5\"\n style={{height: size + 8, width: size + 8}}>\n <div className=\"size-full rounded-full bg-surface\" />\n </div>\n ) : null}\n </div>\n );\n}\n\nexport {UserItem};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {BusinessItem} from \"./BusinessItem\";\nimport {UserItem} from \"./UserItem\";\n\nexport interface StoriesProps {\n children: ReactNode;\n className?: string;\n}\n\n/**\n * Horizontal scrollable story strip. Compose with Stories.User /\n * Stories.Business.\n */\nfunction Stories({children, className}: StoriesProps) {\n return (\n <div\n className={cn(\n \"flex h-fit w-full flex-row gap-4 overflow-x-auto px-4 pt-3 pb-4\",\n className,\n )}>\n {children}\n </div>\n );\n}\n\nStories.Business = BusinessItem;\nStories.User = UserItem;\n\nexport {Stories};\n","import {KeyboardEvent as ReactKeyboardEvent, ReactNode, useRef} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useControlled} from \"../../utils/_useControlled\";\nimport {useIsomorphicLayoutEffect} from \"../../utils/_useIsomorphicLayoutEffect\";\nimport {useRipple} from \"../../utils/_ripple\";\n\n/* M3 Expressive tab-indicator motion = the default-spatial spring (Compose\n * `MotionSchemeKeyTokens.DefaultSpatial`, same spring the nav indicators\n * use), read from the token so it stays a single source of truth. The mw\n * 250ms emphasized was pre-Expressive. */\nlet cachedIndicatorEasing: string | null = null;\nfunction indicatorEasing() {\n if (cachedIndicatorEasing !== null) return cachedIndicatorEasing;\n const fallback = \"cubic-bezier(0.2, 0, 0, 1)\";\n if (typeof document === \"undefined\") return fallback;\n const value = getComputedStyle(document.documentElement)\n .getPropertyValue(\"--md-sys-motion-spring-default-spatial\")\n .trim();\n cachedIndicatorEasing = value || fallback;\n return cachedIndicatorEasing;\n}\n\n/**\n * Internal: slides the active-tab indicator from its previous position\n * (FLIP) with the default-spatial spring (450ms). Returns the ref to attach\n * to the indicator of the currently selected tab.\n */\nexport function useTabIndicator(selected: string) {\n const indicatorRef = useRef<HTMLSpanElement>(null);\n const previousRect = useRef<DOMRect | null>(null);\n\n useIsomorphicLayoutEffect(() => {\n const indicator = indicatorRef.current;\n if (!indicator) return;\n const next = indicator.getBoundingClientRect();\n const previous = previousRect.current;\n previousRect.current = next;\n if (!previous || next.width === 0) return;\n const dx = previous.left - next.left;\n const scale = previous.width / next.width;\n if (dx === 0 && scale === 1) return;\n indicator.animate(\n [\n {transform: `translateX(${dx}px) scaleX(${scale})`},\n {transform: \"none\"},\n ],\n {duration: 450, easing: indicatorEasing()},\n );\n }, [selected]);\n\n return indicatorRef;\n}\n\n/**\n * Shared roving-focus keyboard handler for a tablist: Left/Right move between\n * enabled tabs (with wrap), Home/End jump to the first/last, and the tab is\n * activated as focus lands on it (automatic activation, WAI-ARIA tabs). Tab\n * buttons must carry id `tab-<id>`.\n */\nexport function onTabListKeyDown(\n event: ReactKeyboardEvent<HTMLDivElement>,\n tabs: {disabled?: boolean; id: string}[],\n selected: string,\n select: (id: string) => void,\n) {\n const enabled = tabs.filter((tab) => !tab.disabled);\n if (!enabled.length) return;\n const current = enabled.findIndex((tab) => tab.id === selected);\n let next: number;\n switch (event.key) {\n case \"ArrowRight\":\n next = (current + 1) % enabled.length;\n break;\n case \"ArrowLeft\":\n next = (current - 1 + enabled.length) % enabled.length;\n break;\n case \"Home\":\n next = 0;\n break;\n case \"End\":\n next = enabled.length - 1;\n break;\n default:\n return;\n }\n event.preventDefault();\n const target = enabled[next];\n if (!target) return;\n select(target.id);\n event.currentTarget\n .querySelector<HTMLElement>(`[id=\"tab-${target.id}\"]`)\n ?.focus();\n}\n\nexport interface TabItem {\n /** Panel content rendered below when the tab is selected. */\n content?: ReactNode;\n disabled?: boolean;\n header?: ReactNode;\n icon?: ReactNode;\n id: string;\n}\n\nexport interface TabsPrimaryProps {\n className?: string;\n defaultSelected?: string;\n onChange?: (id: string) => void;\n /** Class for the selected tab's panel. */\n panelClassName?: string;\n selected?: string;\n tabs: TabItem[];\n}\n\n/**\n * M3 primary tabs: container 48 (64 with icon), title-small labels, 3px\n * content-width indicator with full top corners. Controllable via\n * `selected` + `onChange`.\n */\nfunction TabsPrimary({\n className,\n defaultSelected,\n onChange,\n panelClassName,\n selected: selectedProp,\n tabs,\n}: TabsPrimaryProps) {\n useRipple();\n const [selected, setSelected] = useControlled(\n selectedProp,\n defaultSelected ?? tabs[0]?.id ?? \"\",\n );\n const selectedTab = tabs.find((tab) => tab.id === selected);\n const hasIcons = tabs.some((tab) => tab.icon);\n const indicatorRef = useTabIndicator(selected);\n\n const select = (id: string) => {\n setSelected(id);\n onChange?.(id);\n };\n\n return (\n <div className={cn(\"flex h-fit w-full flex-col\", className)}>\n <div\n className=\"flex flex-row items-stretch overflow-x-auto border-b border-outline-variant\"\n onKeyDown={(event) => onTabListKeyDown(event, tabs, selected, select)}\n role=\"tablist\">\n {tabs.map((tab) => {\n const isSelected = tab.id === selected;\n return (\n <button\n aria-controls={tab.content ? `panel-${tab.id}` : undefined}\n aria-selected={isSelected}\n className={cn(\n \"state-layer flex w-full min-w-20 flex-auto items-center justify-center px-4 text-center text-title-small transition-colors duration-200 disabled:cursor-not-allowed disabled:text-on-surface/38 sm:min-w-max\",\n hasIcons ? \"h-16\" : \"h-12\",\n isSelected\n ? \"text-primary\"\n : \"text-on-surface-variant hover:text-on-surface focus-visible:text-on-surface\",\n )}\n disabled={tab.disabled}\n id={`tab-${tab.id}`}\n key={tab.id}\n onClick={() => select(tab.id)}\n role=\"tab\"\n tabIndex={isSelected ? 0 : -1}\n type=\"button\">\n <span className=\"relative flex h-full flex-col items-center justify-center gap-0.5\">\n {tab.icon ? (\n <span className=\"flex h-6 w-6 items-center justify-center leading-none\">\n {tab.icon}\n </span>\n ) : null}\n {tab.header}\n {isSelected ? (\n // Primary indicator: 3dp, inset 2dp each\n // side, min length 24dp, fully-rounded top\n // corners (spec: 3,3,0,0).\n <span\n className=\"absolute inset-x-0.5 bottom-0 mx-auto h-[3px] min-w-6 origin-left rounded-t-full bg-primary\"\n ref={indicatorRef}\n />\n ) : null}\n </span>\n </button>\n );\n })}\n </div>\n\n {selectedTab?.content !== undefined ? (\n <div\n aria-labelledby={`tab-${selectedTab.id}`}\n className={cn(\n \"flex w-full flex-col gap-4 p-4 text-body-medium text-on-surface\",\n panelClassName,\n )}\n id={`panel-${selectedTab.id}`}\n role=\"tabpanel\">\n {selectedTab.content}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport {TabsPrimary};\n","import {cn} from \"../../utils/helpers\";\nimport {useControlled} from \"../../utils/_useControlled\";\nimport {onTabListKeyDown, useTabIndicator, type TabItem} from \"./TabsPrimary\";\nimport {useRipple} from \"../../utils/_ripple\";\n\nexport interface TabsSecondaryProps {\n className?: string;\n defaultSelected?: string;\n onChange?: (id: string) => void;\n /** Class for the selected tab's panel. */\n panelClassName?: string;\n selected?: string;\n tabs: TabItem[];\n}\n\n/**\n * M3 secondary tabs: container 48, title-small labels, 2px full-width\n * indicator. Controllable via `selected` + `onChange`.\n */\nfunction TabsSecondary({\n className,\n defaultSelected,\n onChange,\n panelClassName,\n selected: selectedProp,\n tabs,\n}: TabsSecondaryProps) {\n useRipple();\n const [selected, setSelected] = useControlled(\n selectedProp,\n defaultSelected ?? tabs[0]?.id ?? \"\",\n );\n const selectedTab = tabs.find((tab) => tab.id === selected);\n const indicatorRef = useTabIndicator(selected);\n\n const select = (id: string) => {\n setSelected(id);\n onChange?.(id);\n };\n\n return (\n <div className={cn(\"flex w-full flex-col\", className)}>\n <div\n className=\"flex h-12 flex-row overflow-x-auto border-b border-outline-variant\"\n onKeyDown={(event) => onTabListKeyDown(event, tabs, selected, select)}\n role=\"tablist\">\n {tabs.map((tab) => {\n const isSelected = tab.id === selected;\n return (\n <button\n aria-controls={tab.content ? `panel-${tab.id}` : undefined}\n aria-selected={isSelected}\n className={cn(\n \"state-layer relative flex h-12 w-full min-w-[100px] flex-auto items-center justify-center gap-2 px-4 text-center text-title-small transition-colors duration-200 disabled:cursor-not-allowed disabled:text-on-surface/38 sm:min-w-max\",\n isSelected\n ? \"text-on-surface\"\n : \"text-on-surface-variant hover:text-on-surface focus-visible:text-on-surface\",\n )}\n disabled={tab.disabled}\n id={`tab-${tab.id}`}\n key={tab.id}\n onClick={() => select(tab.id)}\n role=\"tab\"\n tabIndex={isSelected ? 0 : -1}\n type=\"button\">\n {tab.icon ? (\n <span className=\"flex h-6 w-6 items-center justify-center leading-none\">\n {tab.icon}\n </span>\n ) : null}\n {tab.header}\n {isSelected ? (\n <span\n className=\"absolute inset-x-0 bottom-0 h-0.5 origin-left bg-primary\"\n ref={indicatorRef}\n />\n ) : null}\n </button>\n );\n })}\n </div>\n\n {selectedTab?.content !== undefined ? (\n <div\n aria-labelledby={`tab-${selectedTab.id}`}\n className={cn(\n \"flex w-full flex-col gap-4 p-4 text-body-medium text-on-surface\",\n panelClassName,\n )}\n id={`panel-${selectedTab.id}`}\n role=\"tabpanel\">\n {selectedTab.content}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport {TabsSecondary};\n","import {ChangeEvent, ComponentProps, ReactNode, useId} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {\n FieldIcon,\n FloatingLabel,\n labelColor,\n SupportingText,\n useFieldState,\n} from \"./_fieldShared\";\n\nexport interface InputFilledProps extends Omit<\n ComponentProps<\"input\">,\n \"size\"\n> {\n /** Class for the wrapper. */\n className?: string;\n error?: boolean;\n errorText?: ReactNode;\n inputClassName?: string;\n /** Floating label. */\n label?: string;\n /** Leading icon (24px box; input pads 48 on that side). */\n leftElement?: ReactNode;\n /** Trailing icon. */\n rightElement?: ReactNode;\n supportingText?: ReactNode;\n}\n\n/**\n * M3 filled text field: height 56, shape small on the top corners,\n * surface-container-highest container with an active indicator line. The\n * floating label is driven by focus/value state.\n */\nfunction InputFilled({\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n className,\n defaultValue,\n disabled,\n error,\n errorText,\n id,\n inputClassName,\n label,\n leftElement,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n rightElement,\n supportingText,\n value,\n ...inputProps\n}: InputFilledProps) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const {focused, hasValue, setFocused, setInternalHasValue} = useFieldState(\n value,\n defaultValue,\n disabled,\n );\n const floating = focused || hasValue;\n const hasSupport = !!((error && errorText) || supportingText);\n const descId = `${inputId}-desc`;\n const describedBy =\n [ariaDescribedBy, hasSupport ? descId : undefined]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div className=\"group relative flex h-14 w-full overflow-hidden rounded-t-extra-small\">\n {leftElement ? (\n <FieldIcon className=\"top-1/2 left-3 z-10 -translate-y-1/2\">\n {leftElement}\n </FieldIcon>\n ) : null}\n <input\n aria-describedby={describedBy}\n aria-invalid={ariaInvalid ?? (error || undefined)}\n className={cn(\n \"h-14 w-full bg-surface-container-highest text-body-large text-on-surface outline-none placeholder:text-on-surface-variant disabled:cursor-not-allowed disabled:bg-on-surface/4 disabled:text-on-surface/38\",\n label && \"pt-5 pb-1\",\n // One padding class per side (never px-4 + pl-13): a consumer's\n // own Tailwind re-emits .px-4 later in the shared utilities layer\n // and would otherwise override the leading-icon inset.\n leftElement ? \"pl-13\" : \"pl-4\",\n rightElement ? \"pr-13\" : \"pr-4\",\n inputClassName,\n )}\n defaultValue={defaultValue}\n disabled={disabled}\n id={inputId}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n onChange={(event: ChangeEvent<HTMLInputElement>) => {\n setInternalHasValue(event.target.value.length > 0);\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n placeholder={floating || !label ? placeholder : undefined}\n value={value}\n {...inputProps}\n />\n {/* hover state layer */}\n {!disabled ? (\n <span\n aria-hidden\n className=\"ease-md-linear pointer-events-none absolute inset-0 bg-on-surface opacity-0 transition-opacity duration-[15ms] group-hover:opacity-8\"\n />\n ) : null}\n {/* active indicator */}\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-x-0 bottom-0 transition-all\",\n error\n ? \"bg-error\"\n : focused\n ? \"bg-primary\"\n : \"bg-on-surface-variant\",\n // hover darkens the indicator to on-surface (1dp)\n !disabled && !focused && !error && \"group-hover:bg-on-surface\",\n focused || error ? \"h-0.5\" : \"h-px\",\n disabled && \"bg-on-surface/38\",\n )}\n />\n {label ? (\n <FloatingLabel\n className={labelColor({disabled, error, focused})}\n floating={floating}\n floatingClassName={cn(\n \"top-2 text-body-small\",\n leftElement ? \"left-13\" : \"left-4\",\n )}\n htmlFor={inputId}\n restingClassName={cn(\n \"top-1/2 -translate-y-1/2 text-body-large\",\n leftElement ? \"left-13\" : \"left-4\",\n )}>\n {label}\n </FloatingLabel>\n ) : null}\n {rightElement ? (\n <FieldIcon className=\"top-1/2 right-3 z-10 -translate-y-1/2\">\n {rightElement}\n </FieldIcon>\n ) : null}\n </div>\n <SupportingText\n error={error}\n errorText={errorText}\n id={hasSupport ? descId : undefined}\n supportingText={supportingText}\n />\n </div>\n );\n}\n\nexport {InputFilled};\n","import {ChangeEvent, ComponentProps, ReactNode, useId} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {\n FieldIcon,\n FloatingLabel,\n labelColor,\n SupportingText,\n useFieldState,\n} from \"./_fieldShared\";\n\nexport interface TextFieldFilledProps extends ComponentProps<\"textarea\"> {\n /** Class for the wrapper. */\n className?: string;\n error?: boolean;\n errorText?: ReactNode;\n inputClassName?: string;\n /** Floating label. */\n label?: string;\n /** Leading icon (24px box). */\n leftElement?: ReactNode;\n /** Trailing icon. */\n rightElement?: ReactNode;\n supportingText?: ReactNode;\n}\n\n/**\n * M3 filled text field, multi-line (textarea). Same anatomy as\n * InputFilled with a top-aligned resting label.\n */\nfunction TextFieldFilled({\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n className,\n defaultValue,\n disabled,\n error,\n errorText,\n id,\n inputClassName,\n label,\n leftElement,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n rightElement,\n rows = 4,\n supportingText,\n value,\n ...textareaProps\n}: TextFieldFilledProps) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const {focused, hasValue, setFocused, setInternalHasValue} = useFieldState(\n value,\n defaultValue,\n disabled,\n );\n const floating = focused || hasValue;\n const hasSupport = !!((error && errorText) || supportingText);\n const descId = `${inputId}-desc`;\n const describedBy =\n [ariaDescribedBy, hasSupport ? descId : undefined]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div className=\"group relative flex w-full overflow-hidden rounded-t-extra-small\">\n {leftElement ? (\n <FieldIcon className=\"top-4 left-3 z-10\">{leftElement}</FieldIcon>\n ) : null}\n <textarea\n aria-describedby={describedBy}\n aria-invalid={ariaInvalid ?? (error || undefined)}\n className={cn(\n \"min-h-14 w-full bg-surface-container-highest pb-2 text-body-large text-on-surface outline-none placeholder:text-on-surface-variant disabled:cursor-not-allowed disabled:bg-on-surface/4 disabled:text-on-surface/38\",\n label ? \"pt-6\" : \"pt-4\",\n // One padding class per side (never px-4 + pl-13): a consumer's\n // own Tailwind re-emits .px-4 later in the shared utilities layer\n // and would otherwise override the leading-icon inset.\n leftElement ? \"pl-13\" : \"pl-4\",\n rightElement ? \"pr-13\" : \"pr-4\",\n inputClassName,\n )}\n defaultValue={defaultValue}\n disabled={disabled}\n id={inputId}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n onChange={(event: ChangeEvent<HTMLTextAreaElement>) => {\n setInternalHasValue(event.target.value.length > 0);\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n placeholder={floating || !label ? placeholder : undefined}\n rows={rows}\n value={value}\n {...textareaProps}\n />\n {!disabled ? (\n <span\n aria-hidden\n className=\"ease-md-linear pointer-events-none absolute inset-0 bg-on-surface opacity-0 transition-opacity duration-[15ms] group-hover:opacity-8\"\n />\n ) : null}\n <span\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-x-0 bottom-0 transition-all\",\n error\n ? \"bg-error\"\n : focused\n ? \"bg-primary\"\n : \"bg-on-surface-variant\",\n !disabled && !focused && !error && \"group-hover:bg-on-surface\",\n focused || error ? \"h-0.5\" : \"h-px\",\n disabled && \"bg-on-surface/38\",\n )}\n />\n {label ? (\n <FloatingLabel\n className={labelColor({disabled, error, focused})}\n floating={floating}\n floatingClassName={cn(\n \"top-2 text-body-small\",\n leftElement ? \"left-13\" : \"left-4\",\n )}\n htmlFor={inputId}\n restingClassName={cn(\n \"top-4 text-body-large\",\n leftElement ? \"left-13\" : \"left-4\",\n )}>\n {label}\n </FloatingLabel>\n ) : null}\n {rightElement ? (\n <FieldIcon className=\"top-4 right-3 z-10\">{rightElement}</FieldIcon>\n ) : null}\n </div>\n <SupportingText\n error={error}\n errorText={errorText}\n id={hasSupport ? descId : undefined}\n supportingText={supportingText}\n />\n </div>\n );\n}\n\nexport {TextFieldFilled};\n","import {ChangeEvent, ComponentProps, ReactNode, useId} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {\n FieldIcon,\n FloatingLabel,\n labelColor,\n SupportingText,\n useFieldState,\n} from \"./_fieldShared\";\n\nexport interface TextFieldOutlinedProps extends ComponentProps<\"textarea\"> {\n /** Class for the wrapper. */\n className?: string;\n error?: boolean;\n errorText?: ReactNode;\n inputClassName?: string;\n /** Floating label. */\n label?: string;\n /** Leading icon (24px box). */\n leftElement?: ReactNode;\n /** Trailing icon. */\n rightElement?: ReactNode;\n supportingText?: ReactNode;\n}\n\n/**\n * M3 outlined text field, multi-line (textarea). Same anatomy as\n * InputOutlined with a top-aligned resting label.\n */\nfunction TextFieldOutlined({\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n className,\n defaultValue,\n disabled,\n error,\n errorText,\n id,\n inputClassName,\n label,\n leftElement,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n rightElement,\n rows = 4,\n supportingText,\n value,\n ...textareaProps\n}: TextFieldOutlinedProps) {\n const autoId = useId();\n const inputId = id ?? autoId;\n const {focused, hasValue, setFocused, setInternalHasValue} = useFieldState(\n value,\n defaultValue,\n disabled,\n );\n const floating = focused || hasValue;\n const hasSupport = !!((error && errorText) || supportingText);\n const descId = `${inputId}-desc`;\n const describedBy =\n [ariaDescribedBy, hasSupport ? descId : undefined]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div className={cn(\"w-full\", className)}>\n <div className=\"group relative flex w-full\">\n {leftElement ? (\n <FieldIcon className=\"top-4 left-3\">{leftElement}</FieldIcon>\n ) : null}\n <textarea\n aria-describedby={describedBy}\n aria-invalid={ariaInvalid ?? (error || undefined)}\n className={cn(\n \"min-h-14 w-full bg-transparent py-4 text-body-large text-on-surface outline-none placeholder:text-on-surface-variant disabled:cursor-not-allowed disabled:text-on-surface/38\",\n // One padding class per side (never px-4 + pl-13): a consumer's\n // own Tailwind re-emits .px-4 later in the shared utilities layer\n // and would otherwise override the leading-icon inset.\n leftElement ? \"pl-13\" : \"pl-4\",\n rightElement ? \"pr-13\" : \"pr-4\",\n inputClassName,\n )}\n defaultValue={defaultValue}\n disabled={disabled}\n id={inputId}\n onBlur={(event) => {\n setFocused(false);\n onBlur?.(event);\n }}\n onChange={(event: ChangeEvent<HTMLTextAreaElement>) => {\n setInternalHasValue(event.target.value.length > 0);\n onChange?.(event);\n }}\n onFocus={(event) => {\n setFocused(true);\n onFocus?.(event);\n }}\n placeholder={floating || !label ? placeholder : undefined}\n rows={rows}\n value={value}\n {...textareaProps}\n />\n <fieldset\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 m-0 min-w-0 rounded-extra-small px-2 transition-colors\",\n error\n ? focused\n ? \"border-2 border-error\"\n : \"border border-error\"\n : focused\n ? \"border-2 border-primary\"\n : \"border border-outline group-hover:border-on-surface\",\n disabled && \"border-on-surface/12 group-hover:border-on-surface/12\",\n )}>\n {label ? (\n <legend\n className={cn(\n \"invisible h-0 px-0 text-body-small whitespace-nowrap transition-all\",\n floating ? \"max-w-full px-1\" : \"max-w-0\",\n )}>\n {label}\n </legend>\n ) : null}\n </fieldset>\n {label ? (\n <FloatingLabel\n className={labelColor({disabled, error, focused})}\n floating={floating}\n floatingClassName=\"top-0 left-3 -translate-y-1/2 px-1 text-body-small\"\n htmlFor={inputId}\n restingClassName={cn(\n \"top-4 text-body-large\",\n leftElement ? \"left-13\" : \"left-4\",\n )}>\n {label}\n </FloatingLabel>\n ) : null}\n {rightElement ? (\n <FieldIcon className=\"top-4 right-3\">{rightElement}</FieldIcon>\n ) : null}\n </div>\n <SupportingText\n error={error}\n errorText={errorText}\n id={hasSupport ? descId : undefined}\n supportingText={supportingText}\n />\n </div>\n );\n}\n\nexport {TextFieldOutlined};\n","import {\n KeyboardEvent as ReactKeyboardEvent,\n PointerEvent as ReactPointerEvent,\n ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {Button} from \"../button/Button\";\nimport {Dialog} from \"../dialogs/Dialog\";\nimport {DialogContext} from \"../dialogs/_context\";\nimport {IconButton} from \"../button/IconButton\";\n\nexport interface TimeValue {\n /** 0–23. */\n hours: number;\n /** 0–59. */\n minutes: number;\n}\n\nexport interface TimePickerLabels {\n /** AM period label. Default \"AM\". */\n am?: string;\n /** Cancel action. Default \"Cancel\". */\n cancel?: ReactNode;\n /** Confirm/commit action. Default \"OK\". */\n confirm?: ReactNode;\n /** Hour input aria-label. Default \"Hour\". */\n hour?: string;\n /** Minute input aria-label. Default \"Minute\". */\n minute?: string;\n /** PM period label. Default \"PM\". */\n pm?: string;\n /** Supporting line above the time. Default \"Select time\". */\n supporting?: ReactNode;\n /** Toggle aria-label while in input mode. Default \"Switch to dial\". */\n switchToDial?: string;\n /** Toggle aria-label while in dial mode. Default \"Switch to keyboard input\". */\n switchToInput?: string;\n}\n\nconst TIME_LABELS: Required<TimePickerLabels> = {\n am: \"AM\",\n cancel: \"Cancel\",\n confirm: \"OK\",\n hour: \"Hour\",\n minute: \"Minute\",\n pm: \"PM\",\n supporting: \"Select time\",\n switchToDial: \"Switch to dial\",\n switchToInput: \"Switch to keyboard input\",\n};\n\nexport interface TimePickerProps {\n /** Start in keyboard-input mode. */\n input?: boolean;\n isVisible: boolean;\n /** Customizable text and accessible names. */\n labels?: TimePickerLabels;\n onClose: () => void;\n onConfirm?: (value: TimeValue) => void;\n value?: TimeValue;\n}\n\nconst clockIcon = (\n <svg aria-hidden className=\"h-6 w-6 fill-current\" viewBox=\"0 0 24 24\">\n <path d=\"M12 2a10 10 0 1 0 0 20 10 10 0 0 0 0-20zm0 18a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67V7z\" />\n </svg>\n);\nconst keyboardIcon = (\n <svg aria-hidden className=\"h-6 w-6 fill-current\" viewBox=\"0 0 24 24\">\n <path d=\"M20 5H4a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2zm-9 3h2v2h-2V8zm0 3h2v2h-2v-2zM8 8h2v2H8V8zm0 3h2v2H8v-2zm-1 2H5v-2h2v2zm0-3H5V8h2v2zm9 7H8v-2h8v2zm0-4h-2v-2h2v2zm0-3h-2V8h2v2zm3 3h-2v-2h2v2zm0-3h-2V8h2v2z\" />\n </svg>\n);\n\n// Clock geometry: numbers sit on a 101dp radius inside the 256dp dial.\nconst DIAL = 256;\nconst CENTER = DIAL / 2;\nconst RADIUS = 101;\nconst to12 = (h: number) => ((h + 11) % 12) + 1;\nconst point = (unitAngleDeg: number) => {\n const rad = ((unitAngleDeg - 90) * Math.PI) / 180;\n return {\n x: CENTER + RADIUS * Math.cos(rad),\n y: CENTER + RADIUS * Math.sin(rad),\n };\n};\n\n/**\n * M3 modal time picker: a clock dial (256dp) with a draggable selector, the\n * big HH:MM time selector, an AM/PM period selector, and a keyboard-input\n * toggle. Container surface-container-high, level 3, extra-large (28).\n */\nfunction TimePicker(props: TimePickerProps) {\n return (\n <Dialog\n className=\"w-auto max-w-none min-w-0 p-6\"\n isVisible={props.isVisible}\n onClose={props.onClose}>\n <TimePickerBody {...props} />\n </Dialog>\n );\n}\n\nfunction TimePickerBody({\n input,\n labels,\n onClose,\n onConfirm,\n value = {hours: 12, minutes: 0},\n}: TimePickerProps) {\n const l = {...TIME_LABELS, ...labels};\n const [hours, setHours] = useState(value.hours);\n const [minutes, setMinutes] = useState(value.minutes);\n const [mode, setMode] = useState<\"hour\" | \"minute\">(\"hour\");\n const [inputMode, setInputMode] = useState(!!input);\n const dialRef = useRef<HTMLDivElement>(null);\n // Name the dialog by its supporting line (\"Select time\").\n const {headlineId, setLabelled} = useContext(DialogContext);\n useEffect(() => {\n setLabelled?.(true);\n return () => setLabelled?.(false);\n }, [setLabelled]);\n\n const period: \"AM\" | \"PM\" = hours < 12 ? \"AM\" : \"PM\";\n const setPeriod = (p: \"AM\" | \"PM\") => {\n if (p === period) return;\n setHours((h) => (p === \"PM\" ? (h % 12) + 12 : h % 12));\n };\n\n const angle = mode === \"hour\" ? (hours % 12) * 30 : minutes * 6;\n const handle = point(angle);\n\n const handlePointer = (e: ReactPointerEvent<HTMLDivElement>) => {\n if (e.buttons === 0 && e.type === \"pointermove\") return;\n const rect = dialRef.current?.getBoundingClientRect();\n if (!rect) return;\n const px = ((e.clientX - rect.left) / rect.width) * DIAL;\n const py = ((e.clientY - rect.top) / rect.height) * DIAL;\n let deg = (Math.atan2(py - CENTER, px - CENTER) * 180) / Math.PI + 90;\n if (deg < 0) deg += 360;\n if (mode === \"hour\") {\n const h12 = Math.round(deg / 30) % 12; // 0..11 (0 == 12 o'clock)\n const next = (h12 === 0 ? 12 : h12) % 12;\n setHours(next + (period === \"PM\" ? 12 : 0));\n } else {\n setMinutes(Math.round(deg / 6) % 60);\n }\n };\n\n // Keyboard operation for the dial slider (the input mode is the other\n // keyboard path); arrows step the focused hour/minute with wrap.\n const adjustDial = (delta: number) => {\n if (mode === \"hour\") {\n const next = ((to12(hours) - 1 + delta + 12) % 12) + 1;\n setHours((next % 12) + (period === \"PM\" ? 12 : 0));\n } else {\n setMinutes((m) => (m + delta + 60) % 60);\n }\n };\n const handleDialKey = (e: ReactKeyboardEvent<HTMLDivElement>) => {\n if (e.key === \"ArrowUp\" || e.key === \"ArrowRight\") {\n e.preventDefault();\n adjustDial(1);\n } else if (e.key === \"ArrowDown\" || e.key === \"ArrowLeft\") {\n e.preventDefault();\n adjustDial(-1);\n }\n };\n\n const numbers =\n mode === \"hour\"\n ? Array.from({length: 12}, (_, i) => i + 1) // 1..12\n : Array.from({length: 12}, (_, i) => i * 5); // 0,5,..,55\n\n return (\n <div className=\"flex flex-col gap-4\">\n <span\n className=\"text-label-medium text-on-surface-variant\"\n id={headlineId}>\n {l.supporting}\n </span>\n\n <div className=\"flex items-start gap-5\">\n {/* Time selector + period */}\n <div className=\"flex items-center gap-2\">\n {inputMode ? (\n <TimeNumberInput\n label={l.hour}\n max={12}\n min={1}\n onCommit={(v) => setHours((v % 12) + (period === \"PM\" ? 12 : 0))}\n value={to12(hours)}\n />\n ) : (\n <TimeField\n onClick={() => setMode(\"hour\")}\n selected={mode === \"hour\"}>\n {String(to12(hours)).padStart(2, \"0\")}\n </TimeField>\n )}\n <span className=\"text-display-large text-on-surface\">:</span>\n {inputMode ? (\n <TimeNumberInput\n label={l.minute}\n max={59}\n min={0}\n onCommit={(v) => setMinutes(v % 60)}\n value={minutes}\n />\n ) : (\n <TimeField\n onClick={() => setMode(\"minute\")}\n selected={mode === \"minute\"}>\n {String(minutes).padStart(2, \"0\")}\n </TimeField>\n )}\n </div>\n {/* AM/PM */}\n <div className=\"flex h-20 w-13 flex-col overflow-hidden rounded-small border border-outline\">\n {(\n [\n [\"AM\", l.am],\n [\"PM\", l.pm],\n ] as const\n ).map(([p, label], i) => (\n <button\n aria-pressed={period === p}\n className={cn(\n \"state-layer flex flex-1 cursor-pointer items-center justify-center text-title-medium\",\n i === 0 && \"border-b border-outline\",\n period === p\n ? \"bg-tertiary-container text-on-tertiary-container\"\n : \"text-on-surface-variant\",\n )}\n key={p}\n onClick={() => setPeriod(p)}\n type=\"button\">\n {label}\n </button>\n ))}\n </div>\n </div>\n\n {inputMode ? null : (\n /* Clock dial */\n <div\n aria-label={mode === \"hour\" ? l.hour : l.minute}\n aria-valuemax={mode === \"hour\" ? 12 : 59}\n aria-valuemin={mode === \"hour\" ? 1 : 0}\n aria-valuenow={mode === \"hour\" ? to12(hours) : minutes}\n aria-valuetext={\n mode === \"hour\"\n ? `${to12(hours)} ${period}`\n : String(minutes).padStart(2, \"0\")\n }\n className=\"relative mx-auto my-2 cursor-pointer touch-none rounded-full bg-surface-container-highest outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-solid focus-visible:outline-secondary\"\n onKeyDown={handleDialKey}\n onPointerDown={handlePointer}\n onPointerMove={handlePointer}\n onPointerUp={() => {\n // M3: releasing on an hour advances to minutes.\n if (mode === \"hour\") setMode(\"minute\");\n }}\n ref={dialRef}\n role=\"slider\"\n style={{height: DIAL, width: DIAL}}\n tabIndex={0}>\n {/* Selector: center dot, track, handle */}\n <svg\n className=\"pointer-events-none absolute inset-0\"\n height={DIAL}\n viewBox={`0 0 ${DIAL} ${DIAL}`}\n width={DIAL}>\n <circle\n cx={CENTER}\n cy={CENTER}\n fill=\"var(--md-sys-color-primary)\"\n r={4}\n />\n <line\n stroke=\"var(--md-sys-color-primary)\"\n strokeWidth={2}\n x1={CENTER}\n x2={handle.x}\n y1={CENTER}\n y2={handle.y}\n />\n <circle\n cx={handle.x}\n cy={handle.y}\n fill=\"var(--md-sys-color-primary)\"\n r={24}\n />\n </svg>\n {numbers.map((n) => {\n const a = mode === \"hour\" ? (n % 12) * 30 : n * 6;\n const p = point(a);\n const isSel = a === angle;\n return (\n <span\n className={cn(\n \"pointer-events-none absolute flex h-12 w-12 -translate-x-1/2 -translate-y-1/2 items-center justify-center rounded-full text-body-large\",\n isSel ? \"text-on-primary\" : \"text-on-surface\",\n )}\n key={n}\n style={{left: p.x, top: p.y}}>\n {mode === \"minute\" ? String(n).padStart(2, \"0\") : n}\n </span>\n );\n })}\n </div>\n )}\n\n <div className=\"mt-2 flex items-center justify-between\">\n <IconButton\n aria-label={inputMode ? l.switchToDial : l.switchToInput}\n icon={inputMode ? clockIcon : keyboardIcon}\n onClick={() => setInputMode((m) => !m)}\n variant=\"standard\"\n />\n <div className=\"flex gap-2\">\n <Button onClick={onClose} variant=\"text\">\n {l.cancel}\n </Button>\n <Button\n onClick={() => {\n onConfirm?.({hours, minutes});\n onClose();\n }}\n variant=\"text\">\n {l.confirm}\n </Button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction TimeNumberInput({\n label,\n max,\n min,\n onCommit,\n value,\n}: {\n label: string;\n max: number;\n min: number;\n onCommit: (v: number) => void;\n value: number;\n}) {\n const [text, setText] = useState(String(value).padStart(2, \"0\"));\n return (\n <input\n aria-label={label}\n className=\"state-layer h-18 w-24 rounded-small bg-surface-container-highest text-center text-display-medium text-on-surface outline-none focus:bg-primary-container focus:text-on-primary-container focus:-outline-offset-2 focus:outline-2 focus:outline-solid focus:outline-primary\"\n inputMode=\"numeric\"\n onBlur={() => {\n const n = Math.min(max, Math.max(min, parseInt(text, 10) || min));\n onCommit(n);\n setText(String(n).padStart(2, \"0\"));\n }}\n onChange={(e) => setText(e.target.value.replace(/\\D/g, \"\").slice(0, 2))}\n value={text}\n />\n );\n}\n\nfunction TimeField({\n children,\n onClick,\n selected,\n}: {\n children: ReactNode;\n onClick: () => void;\n selected: boolean;\n}) {\n return (\n <button\n aria-pressed={selected}\n className={cn(\n \"state-layer flex h-20 w-24 cursor-pointer items-center justify-center rounded-small text-display-large tabular-nums\",\n selected\n ? \"bg-primary-container text-on-primary-container\"\n : \"bg-surface-container-highest text-on-surface\",\n )}\n onClick={onClick}\n type=\"button\">\n {children}\n </button>\n );\n}\n\nexport {TimePicker};\n","import {useCallback, useEffect, useSyncExternalStore} from \"react\";\n\n/** Themes shipped with the library. Custom themes work by overriding the\n * --md-sys-* tokens in CSS; this type covers the built-in ones. */\nexport type MaterialTheme = \"light\" | \"dark\";\n\nconst STORAGE_KEY = \"md-theme\";\nconst THEME_EVENT = \"md-theme-change\";\nconst THEMES: readonly MaterialTheme[] = [\"light\", \"dark\"];\n/** Themes whose palette is dark — they also toggle the `dark` class. */\nconst DARK_THEMES: readonly MaterialTheme[] = [\"dark\"];\n\nfunction isMaterialTheme(value: unknown): value is MaterialTheme {\n return THEMES.includes(value as MaterialTheme);\n}\n\nfunction resolve(theme: MaterialTheme): \"light\" | \"dark\" {\n return DARK_THEMES.includes(theme) ? \"dark\" : \"light\";\n}\n\n/**\n * Imperatively apply a theme: sets `data-theme` on <html>, toggles the\n * `dark` class for dark palettes and persists the choice. SSR-safe (no-op\n * on the server).\n */\nexport function setMaterialTheme(theme: MaterialTheme): void {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n root.setAttribute(\"data-theme\", theme);\n root.classList.toggle(\"dark\", resolve(theme) === \"dark\");\n try {\n localStorage.setItem(STORAGE_KEY, theme);\n } catch {\n // Storage may be unavailable (private mode, SSR mismatch) — theming\n // still works for the session.\n }\n window.dispatchEvent(new CustomEvent(THEME_EVENT, {detail: theme}));\n}\n\nfunction subscribe(onChange: () => void): () => void {\n window.addEventListener(THEME_EVENT, onChange);\n window.addEventListener(\"storage\", onChange);\n return () => {\n window.removeEventListener(THEME_EVENT, onChange);\n window.removeEventListener(\"storage\", onChange);\n };\n}\n\nfunction getSnapshot(): MaterialTheme {\n const attr = document.documentElement.getAttribute(\"data-theme\");\n return isMaterialTheme(attr) ? attr : \"light\";\n}\n\nfunction getServerSnapshot(): MaterialTheme {\n return \"light\";\n}\n\n/**\n * Theme state without a provider. Reads/writes `data-theme` on\n * `document.documentElement`, persists to localStorage (\"md-theme\") and\n * stays in sync across hook instances and browser tabs.\n */\nexport function useMaterialTheme(): {\n theme: MaterialTheme;\n resolvedTheme: \"light\" | \"dark\";\n setTheme: (theme: MaterialTheme) => void;\n} {\n const theme = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n\n // Restore the persisted theme once on mount.\n useEffect(() => {\n let stored: string | null;\n try {\n stored = localStorage.getItem(STORAGE_KEY);\n } catch {\n return;\n }\n if (isMaterialTheme(stored) && stored !== getSnapshot()) {\n setMaterialTheme(stored);\n }\n }, []);\n\n const setTheme = useCallback((next: MaterialTheme) => {\n setMaterialTheme(next);\n }, []);\n\n return {theme, resolvedTheme: resolve(theme), setTheme};\n}\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useMaterialTheme} from \"../../utils/theme\";\nimport {IconButton, type IconButtonVariant} from \"../button/IconButton\";\n\nexport interface ToggleThemeLabels {\n /** Suffix after the theme name when `label` is shown. Default \"theme\". */\n name?: string;\n /** aria-label while light (clicking switches to dark). Default \"Switch to dark theme\". */\n toDark?: string;\n /** aria-label while dark (clicking switches to light). Default \"Switch to light theme\". */\n toLight?: string;\n}\n\nconst TOGGLE_THEME_LABELS: Required<ToggleThemeLabels> = {\n name: \"theme\",\n toDark: \"Switch to dark theme\",\n toLight: \"Switch to light theme\",\n};\n\nexport interface ToggleThemeProps {\n className?: string;\n /** Icon shown while dark (click switches to light). */\n darkIcon?: ReactNode;\n /** Show the current theme name next to the button. */\n label?: boolean;\n /** Customizable text and accessible names. */\n labels?: ToggleThemeLabels;\n /** Icon shown while light (click switches to dark). */\n lightIcon?: ReactNode;\n variant?: IconButtonVariant;\n}\n\nfunction SunIcon() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={24}\n viewBox=\"0 0 24 24\"\n width={24}>\n <path d=\"M12 17a5 5 0 1 0 0-10 5 5 0 0 0 0 10Zm-1-15h2v3h-2V2Zm0 17h2v3h-2v-3ZM3.5 4.9 4.9 3.5l2.2 2.1-1.5 1.5-2.1-2.2Zm13.4 13.4 1.5-1.5 2.1 2.2-1.4 1.4-2.2-2.1ZM19 11h3v2h-3v-2ZM2 11h3v2H2v-2Zm15-4.4 2.1-2.1 1.4 1.4-2.1 2.1-1.4-1.4ZM3.5 19.1l2.2-2.2 1.4 1.5-2.1 2.1-1.5-1.4Z\" />\n </svg>\n );\n}\n\nfunction MoonIcon() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={24}\n viewBox=\"0 0 24 24\"\n width={24}>\n <path d=\"M12.3 21c-5 0-9.1-4-9.1-9 0-4.6 3.5-8.5 8-9a.8.8 0 0 1 .8 1.2 7.2 7.2 0 0 0 6.3 10.7c.9 0 1.8-.2 2.6-.5a.8.8 0 0 1 1 1A9.1 9.1 0 0 1 12.4 21Z\" />\n </svg>\n );\n}\n\n/**\n * Light/dark toggle backed by useMaterialTheme (persists to localStorage,\n * toggles data-theme + the dark class on <html>).\n */\nfunction ToggleTheme({\n className,\n darkIcon,\n label,\n labels,\n lightIcon,\n variant = \"tonal\",\n}: ToggleThemeProps) {\n const {resolvedTheme, setTheme, theme} = useMaterialTheme();\n const isDark = resolvedTheme === \"dark\";\n const l = {...TOGGLE_THEME_LABELS, ...labels};\n\n return (\n <div className={cn(\"flex w-fit flex-row items-center gap-3\", className)}>\n {label ? (\n <p className=\"flex text-body-medium text-on-surface capitalize\">\n {theme} {l.name}\n </p>\n ) : null}\n <IconButton\n aria-label={isDark ? l.toLight : l.toDark}\n icon={isDark ? (lightIcon ?? <SunIcon />) : (darkIcon ?? <MoonIcon />)}\n onClick={() => setTheme(isDark ? \"light\" : \"dark\")}\n variant={variant}\n />\n </div>\n );\n}\n\nexport {ToggleTheme};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useMaterialTheme, type MaterialTheme} from \"../../utils/theme\";\nimport {IconButton, type IconButtonVariant} from \"../button/IconButton\";\nimport {OverflowMenu} from \"../overflow-menu/OverflowMenu\";\n\nexport interface ToggleThemeMenuItem {\n id: MaterialTheme;\n label: string;\n}\n\nexport interface ToggleThemeMenuLabels {\n /** Suffix after the theme name when `label` is shown. Default \"theme\". */\n name?: string;\n /** aria-label for the menu trigger. Default \"Choose theme\". */\n trigger?: string;\n}\n\nconst TOGGLE_THEME_MENU_LABELS: Required<ToggleThemeMenuLabels> = {\n name: \"theme\",\n trigger: \"Choose theme\",\n};\n\nexport interface ToggleThemeMenuProps {\n className?: string;\n /** Trigger icon (defaults to a palette glyph). */\n icon?: ReactNode;\n /** Show the current theme name next to the trigger. */\n label?: boolean;\n /** Customizable text and accessible names for the trigger. The theme\n * names themselves are translated through `themes`. */\n labels?: ToggleThemeMenuLabels;\n /** Selectable themes (defaults to the built-in light/dark; pass your\n * own list when shipping custom token sets, also to translate the\n * theme names). */\n themes?: ToggleThemeMenuItem[];\n variant?: IconButtonVariant;\n}\n\nconst DEFAULT_THEMES: ToggleThemeMenuItem[] = [\n {id: \"light\", label: \"Light\"},\n {id: \"dark\", label: \"Dark\"},\n];\n\nfunction PaletteIcon() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={24}\n viewBox=\"0 0 24 24\"\n width={24}>\n <path d=\"M12 22a10 10 0 1 1 10-10c0 3.3-2.2 5-4.5 5H15.7c-1 0-1.7.8-1.7 1.7 0 .4.2.8.4 1.1.3.3.5.7.5 1.2 0 1-.8 2-1.9 2H12Zm-5.5-9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm3-4a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm5 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm3 4a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z\" />\n </svg>\n );\n}\n\n/**\n * Theme picker menu backed by useMaterialTheme. Lists the built-in themes\n * (or a custom set) and marks the active one.\n */\nfunction ToggleThemeMenu({\n className,\n icon,\n label,\n labels,\n themes = DEFAULT_THEMES,\n variant = \"tonal\",\n}: ToggleThemeMenuProps) {\n const {setTheme, theme} = useMaterialTheme();\n const l = {...TOGGLE_THEME_MENU_LABELS, ...labels};\n\n return (\n <div className={cn(\"flex w-fit flex-row items-center gap-3\", className)}>\n {label ? (\n <p className=\"flex text-body-medium text-on-surface capitalize\">\n {theme} {l.name}\n </p>\n ) : null}\n <OverflowMenu\n bottomRight\n menu={themes.map((item) => (\n <OverflowMenu.Item\n key={item.id}\n label={item.label}\n onClick={() => setTheme(item.id)}\n selected={theme === item.id}\n />\n ))}>\n <IconButton\n aria-label={l.trigger}\n icon={icon ?? <PaletteIcon />}\n variant={variant}\n />\n </OverflowMenu>\n </div>\n );\n}\n\nexport {ToggleThemeMenu};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface DockedToolbarProps extends ComponentProps<\"div\"> {\n /** Vibrant color scheme (primary-container) instead of the standard\n * surface-container. */\n vibrant?: boolean;\n}\n\n/**\n * M3 Expressive docked toolbar: a full-width 64dp bar (surface-container,\n * 16dp edge paddings, 32dp default gap, square corners) pinned to the\n * bottom of the window. Successor of the baseline bottom app bar; FABs\n * placed inside sit flat (no own elevation). Ghost icon buttons follow\n * the toolbar selection colors via `aria-pressed`.\n */\nfunction DockedToolbar({\n children,\n className,\n vibrant,\n ...props\n}: DockedToolbarProps) {\n return (\n <div\n className={cn(\"toolbar dockedToolbar\", vibrant && \"vibrant\", className)}\n role=\"toolbar\"\n {...props}>\n {children}\n </div>\n );\n}\n\nexport {DockedToolbar};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\n/** Side of the toolbar the FAB sits on (end = trailing/bottom). */\nexport type FloatingToolbarFabPosition = \"start\" | \"end\";\n\nexport interface FloatingToolbarProps extends ComponentProps<\"div\"> {\n /** Collapse choreography (fast-spatial spring): with `fab` the whole\n * pill clips away toward the FAB, which grows 56 → 80 (medium);\n * without it only `leading`/`trailing` collapse. Drive it from your\n * scroll handler. Default true. */\n expanded?: boolean;\n /** Adjacent FAB slot (a `<FAB>`), 8dp from the pill. The toolbar\n * controls its size and elevation (level 2, hover 3). */\n fab?: ReactNode;\n /** FAB side: end (default) or start. */\n fabPosition?: FloatingToolbarFabPosition;\n /** Remove the default level-3 elevation (spec guideline for visually\n * distinct backgrounds). */\n flat?: boolean;\n /** Leading actions that collapse away when `expanded` is false. */\n leading?: ReactNode;\n /** Trailing actions that collapse away when `expanded` is false. */\n trailing?: ReactNode;\n /** Vertical orientation (64dp wide, 24dp min screen margin). */\n vertical?: boolean;\n /** Vibrant color scheme (primary-container) instead of the standard\n * surface-container. */\n vibrant?: boolean;\n}\n\n/**\n * M3 Expressive floating toolbar: a 64dp pill (8dp paddings, 4dp gap,\n * shape full, level 3) floating above the content with a 16dp (24dp\n * vertical) screen margin — position the wrapper yourself. Standard\n * (surface-container) or vibrant (primary-container) schemes; ghost icon\n * buttons follow the toolbar selection colors via `aria-pressed`. The\n * expand/collapse motion ports the Compose fast-spatial spring\n * (damping 0.6 / stiffness 800).\n */\nfunction FloatingToolbar({\n children,\n className,\n expanded = true,\n fab,\n fabPosition = \"end\",\n flat,\n leading,\n trailing,\n vertical,\n vibrant,\n ...props\n}: FloatingToolbarProps) {\n const hasFab = fab !== undefined && fab !== null;\n const collapsed = !expanded;\n return (\n <div\n aria-orientation={vertical ? \"vertical\" : undefined}\n className={cn(\n \"toolbar floatingToolbar\",\n vertical ? \"floatingVertical\" : \"floatingHorizontal\",\n vibrant && \"vibrant\",\n flat && \"floatingFlat\",\n hasFab && \"floatingWithFab\",\n hasFab && fabPosition === \"start\" && \"floatingFabStart\",\n collapsed && \"floatingCollapsed\",\n className,\n )}\n role=\"toolbar\"\n {...props}>\n <div className=\"floatingClip\">\n <div\n className=\"floatingPill\"\n inert={(hasFab && collapsed) || undefined}>\n {leading != null ? (\n <div className=\"floatingSlot\" inert={collapsed || undefined}>\n <div className=\"floatingLeading\">{leading}</div>\n </div>\n ) : null}\n <div className=\"floatingContent\">{children}</div>\n {trailing != null ? (\n <div className=\"floatingSlot\" inert={collapsed || undefined}>\n <div className=\"floatingTrailing\">{trailing}</div>\n </div>\n ) : null}\n </div>\n </div>\n {hasFab ? <div className=\"floatingFab\">{fab}</div> : null}\n </div>\n );\n}\n\nexport {FloatingToolbar};\n","import {\n cloneElement,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useId,\n useState,\n} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface TooltipProps {\n /** Action slot for rich tooltips (e.g. a text Button). */\n action?: ReactNode;\n bottomLeft?: boolean;\n bottomRight?: boolean;\n /** Trigger content. */\n children?: ReactNode;\n className?: string;\n /** Supporting text. */\n text?: ReactNode;\n /** Subhead for rich tooltips (title-small). */\n title?: ReactNode;\n topLeft?: boolean;\n topRight?: boolean;\n /** plain = label on inverse-surface; rich = card-like container. */\n variant?: \"plain\" | \"rich\";\n}\n\n/**\n * M3 tooltip shown on hover/focus. Plain: shape extra-small on\n * inverse-surface. Rich: shape medium on surface-container with optional\n * subhead and action. Position with the corner flags (default\n * bottomLeft).\n */\nfunction Tooltip({\n action,\n bottomLeft,\n bottomRight,\n children,\n className,\n text,\n title,\n topLeft,\n topRight,\n variant = \"plain\",\n}: TooltipProps) {\n const noPosition = !topLeft && !topRight && !bottomLeft && !bottomRight;\n const rich = variant === \"rich\";\n const tooltipId = useId();\n // WCAG 1.4.13: Escape dismisses the tooltip without moving focus/pointer;\n // it reappears once hover/focus leaves and returns.\n const [dismissed, setDismissed] = useState(false);\n\n // Wire the trigger to the tooltip for screen readers: when the trigger is a\n // single element, merge our id into its `aria-describedby` so the supporting\n // text is announced on focus/hover (APG tooltip pattern). Otherwise the\n // tooltip stays a programmatic `role=\"tooltip\"` the consumer can reference.\n let trigger = children;\n if (isValidElement(children)) {\n const el = children as ReactElement<{\"aria-describedby\"?: string}>;\n trigger = cloneElement(el, {\n \"aria-describedby\": [el.props[\"aria-describedby\"], tooltipId]\n .filter(Boolean)\n .join(\" \"),\n });\n }\n\n return (\n <div\n className=\"group relative flex w-fit\"\n data-dismissed={dismissed ? \"\" : undefined}\n onBlur={() => setDismissed(false)}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") setDismissed(true);\n }}\n onPointerLeave={() => setDismissed(false)}>\n {trigger}\n <div\n id={tooltipId}\n className={cn(\n \"tooltip absolute z-40 my-1\",\n rich\n ? \"pointer-events-none w-max max-w-[320px] rounded-medium bg-surface-container px-4 pt-3 pb-2 shadow-mm-2 group-hover:pointer-events-auto group-focus-within:pointer-events-auto\"\n : \"pointer-events-none max-w-[200px] rounded-extra-small bg-inverse-surface px-2 py-1\",\n topRight && \"right-0 bottom-full\",\n topLeft && \"bottom-full left-0\",\n bottomRight && \"top-full right-0\",\n (bottomLeft || noPosition) && \"top-full left-0\",\n className,\n )}\n role=\"tooltip\">\n {rich ? (\n <div className=\"flex w-max max-w-full flex-col gap-1\">\n {title ? (\n <span className=\"text-title-small text-on-surface-variant\">\n {title}\n </span>\n ) : null}\n {text ? (\n <span className=\"text-body-medium text-on-surface-variant\">\n {text}\n </span>\n ) : null}\n {action ? <span className=\"-ml-3 flex pt-1\">{action}</span> : null}\n </div>\n ) : (\n <span className=\"flex w-max max-w-full text-body-small text-inverse-on-surface\">\n {text}\n </span>\n )}\n </div>\n </div>\n );\n}\n\nexport {Tooltip};\n","import {cn} from \"../../utils/helpers\";\nimport {type AppBarRowProps} from \"./SmallAppBar\";\n\n/** M3 center-aligned top app bar: the small app bar with centered title text\n * (M3E merged center-aligned into small as a configuration). Height 64,\n * title-large centered (+ optional label-medium subtitle). */\nfunction CenterAppBar({\n children,\n className,\n leftElement,\n rightElement,\n subtitle,\n title,\n}: AppBarRowProps) {\n return (\n <div\n className={cn(\n \"flex h-16 w-full items-center px-1 text-on-surface\",\n className,\n )}>\n <div className=\"flex w-12 shrink-0 items-center\">{leftElement}</div>\n <div className=\"flex w-full min-w-0 flex-col items-center justify-center px-3 text-center\">\n <h1 className=\"max-w-full truncate text-title-large\">\n {title ?? children}\n </h1>\n {subtitle ? (\n <p className=\"max-w-full truncate text-label-medium text-on-surface-variant\">\n {subtitle}\n </p>\n ) : null}\n </div>\n <div className=\"flex w-12 min-w-max shrink-0 flex-row items-center justify-end\">\n {rightElement}\n </div>\n </div>\n );\n}\n\nexport {CenterAppBar};\n","import {cn} from \"../../utils/helpers\";\nimport {type CollapsingAppBarProps} from \"./MediumAppBar\";\n\n/** M3E large top app bar (flexible): display-small title at the bottom,\n * height 120 (152 with a subtitle). The M3 baseline large app bar is no\n * longer recommended; this is the flexible default. */\nfunction LargeAppBar({\n children,\n className,\n leftElement,\n rightElement,\n subtitle,\n title,\n}: CollapsingAppBarProps) {\n const hasSubtitle = subtitle != null;\n return (\n <div\n className={cn(\n \"flex w-full flex-col text-on-surface\",\n // flexible 120 / 152 with subtitle (mt-auto pushes the title\n // block to just above the bottom padding).\n hasSubtitle ? \"min-h-38 pb-5\" : \"min-h-30 pb-3\",\n className,\n )}>\n <div className=\"flex h-16 w-full items-center justify-between px-1\">\n <div className=\"flex shrink-0 items-center\">{leftElement}</div>\n <div className=\"flex min-w-max shrink-0 flex-row items-center\">\n {rightElement}\n </div>\n </div>\n <div className=\"mt-auto flex w-full flex-col px-4\">\n <h1 className=\"text-display-small\">{title ?? children}</h1>\n {hasSubtitle ? (\n <p className=\"text-title-medium text-on-surface-variant\">\n {subtitle}\n </p>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport {LargeAppBar};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface CollapsingAppBarProps {\n children?: ReactNode;\n className?: string;\n leftElement?: ReactNode;\n rightElement?: ReactNode;\n /** Supporting line under the title (label-large). */\n subtitle?: ReactNode;\n /** Title fallback when no children are passed. */\n title?: ReactNode;\n}\n\n/** M3E medium top app bar (flexible): headline-medium title at the bottom,\n * height 112 (136 with a subtitle). The M3 baseline medium app bar is no\n * longer recommended; this is the flexible default. */\nfunction MediumAppBar({\n children,\n className,\n leftElement,\n rightElement,\n subtitle,\n title,\n}: CollapsingAppBarProps) {\n const hasSubtitle = subtitle != null;\n return (\n <div\n className={cn(\n \"flex w-full flex-col text-on-surface\",\n // height token + bottom padding so total = spec height with\n // the title baseline-bottom-aligned (mt-auto on the block):\n // 112 / 136 with subtitle.\n hasSubtitle ? \"min-h-34 pb-4\" : \"min-h-28 pb-3\",\n className,\n )}>\n <div className=\"flex h-16 w-full items-center justify-between px-1\">\n <div className=\"flex shrink-0 items-center\">{leftElement}</div>\n <div className=\"flex min-w-max shrink-0 flex-row items-center\">\n {rightElement}\n </div>\n </div>\n <div className=\"mt-auto flex w-full flex-col px-4\">\n <h1 className=\"text-headline-medium\">{title ?? children}</h1>\n {hasSubtitle ? (\n <p className=\"text-label-large text-on-surface-variant\">{subtitle}</p>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport {MediumAppBar};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface AppBarRowProps {\n children?: ReactNode;\n className?: string;\n leftElement?: ReactNode;\n rightElement?: ReactNode;\n /** Optional supporting line under the title (label-medium, M3E). */\n subtitle?: ReactNode;\n /** Title fallback when no children are passed. */\n title?: ReactNode;\n}\n\n/** M3 small top app bar: height 64, bar padding 4, title-large start-aligned\n * (+ optional label-medium subtitle, M3E). */\nfunction SmallAppBar({\n children,\n className,\n leftElement,\n rightElement,\n subtitle,\n title,\n}: AppBarRowProps) {\n return (\n <div\n className={cn(\n \"flex h-16 w-full items-center px-1 text-on-surface\",\n className,\n )}>\n {leftElement ? (\n <div className=\"flex shrink-0 items-center\">{leftElement}</div>\n ) : null}\n <div className=\"flex w-full min-w-0 flex-col justify-center px-3\">\n <h1 className=\"truncate text-title-large\">{title ?? children}</h1>\n {subtitle ? (\n <p className=\"truncate text-label-medium text-on-surface-variant\">\n {subtitle}\n </p>\n ) : null}\n </div>\n {rightElement ? (\n <div className=\"flex min-w-max shrink-0 flex-row items-center\">\n {rightElement}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport {SmallAppBar};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {CenterAppBar} from \"./CenterAppBar\";\nimport {LargeAppBar} from \"./LargeAppBar\";\nimport {MediumAppBar} from \"./MediumAppBar\";\nimport {SmallAppBar} from \"./SmallAppBar\";\n\nexport type TopAppBarProps = ComponentProps<\"header\">;\n\n/**\n * M3 top app bar container (surface at rest; swap to surface-container on\n * scroll via className). Compose with TopAppBar.Small / .Center / .Medium /\n * .Large.\n */\nfunction TopAppBar({children, className, ...props}: TopAppBarProps) {\n return (\n <header\n className={cn(\n \"flex w-full flex-col bg-surface text-on-surface\",\n className,\n )}\n {...props}>\n {children}\n </header>\n );\n}\n\nTopAppBar.Small = SmallAppBar;\nTopAppBar.Medium = MediumAppBar;\nTopAppBar.Large = LargeAppBar;\nTopAppBar.Center = CenterAppBar;\n\nexport {TopAppBar};\n","import {ComponentProps, useEffect, useRef} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport type VideoProps = ComponentProps<\"video\">;\n\n/**\n * Native looping video for ambient/media content: muted, autoplay and\n * inline by default (override via props), object-fit cover. Autoplay is\n * decorative motion lasting >5s, so it is paused under\n * `prefers-reduced-motion: reduce` (WCAG 2.2.2 Pause, Stop, Hide); pass\n * `controls` for an explicit play affordance.\n */\nfunction Video({\n autoPlay = true,\n className,\n loop = true,\n muted = true,\n playsInline = true,\n ref,\n ...props\n}: VideoProps) {\n const innerRef = useRef<HTMLVideoElement>(null);\n\n useEffect(() => {\n const video = innerRef.current;\n if (!video || !autoPlay) return;\n // Keep ambient autoplay paused while the user prefers reduced motion.\n // The `play` listener also catches the browser's autoplay-when-ready,\n // which fires asynchronously (after this effect has run).\n const reduced = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const pauseIfReduced = () => {\n if (reduced.matches) video.pause();\n };\n const sync = () => {\n if (reduced.matches) video.pause();\n else void video.play().catch(() => {});\n };\n sync();\n video.addEventListener(\"play\", pauseIfReduced);\n reduced.addEventListener(\"change\", sync);\n return () => {\n video.removeEventListener(\"play\", pauseIfReduced);\n reduced.removeEventListener(\"change\", sync);\n };\n }, [autoPlay]);\n\n return (\n <video\n autoPlay={autoPlay}\n className={cn(\"h-full w-full object-cover\", className)}\n loop={loop}\n muted={muted}\n playsInline={playsInline}\n ref={(node) => {\n innerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n {...props}\n />\n );\n}\n\nexport {Video};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useControlled} from \"../../utils/_useControlled\";\nimport {useRipple} from \"../../utils/_ripple\";\n\nexport interface AmountLabels {\n /** aria-label for the decrement button. Default \"Decrease\". */\n decrease?: string;\n /** aria-label for the increment button. Default \"Increase\". */\n increase?: string;\n /** aria-label for the group. Default \"Amount\". */\n label?: string;\n}\n\nconst AMOUNT_LABELS: Required<AmountLabels> = {\n decrease: \"Decrease\",\n increase: \"Increase\",\n label: \"Amount\",\n};\n\nexport interface AmountProps {\n className?: string;\n defaultValue?: number;\n disabled?: boolean;\n /** Customizable accessible names. */\n labels?: AmountLabels;\n max?: number;\n min?: number;\n minusIcon?: ReactNode;\n /** Fires with the next numeric value. */\n onChange?: (value: number) => void;\n plusIcon?: ReactNode;\n step?: number;\n value?: number;\n}\n\nfunction MinusIcon() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={18}\n viewBox=\"0 0 24 24\"\n width={18}>\n <path d=\"M5 11h14v2H5z\" />\n </svg>\n );\n}\n\nfunction PlusIcon() {\n return (\n <svg\n aria-hidden\n fill=\"currentColor\"\n height={18}\n viewBox=\"0 0 24 24\"\n width={18}>\n <path d=\"M11 5h2v6h6v2h-6v6h-2v-6H5v-2h6z\" />\n </svg>\n );\n}\n\n/**\n * Quantity stepper. Controllable: pass `value` + `onChange`, or let it\n * manage internal state seeded by `defaultValue` (uncontrolled fallback).\n */\nfunction Amount({\n className,\n defaultValue,\n disabled,\n labels,\n max,\n min = 0,\n minusIcon,\n onChange,\n plusIcon,\n step = 1,\n value: valueProp,\n}: AmountProps) {\n useRipple();\n const l = {...AMOUNT_LABELS, ...labels};\n const [value, setValue] = useControlled(valueProp, defaultValue ?? min);\n\n const update = (next: number) => {\n const clamped = Math.min(\n max ?? Number.POSITIVE_INFINITY,\n Math.max(min, next),\n );\n if (clamped === value) return;\n setValue(clamped);\n onChange?.(clamped);\n };\n\n const buttonClass =\n \"iconBtn standard m-0.5 size-8 rounded-[6px] before:hidden\";\n\n return (\n <div\n aria-label={l.label}\n className={cn(\n \"flex w-fit items-center rounded-small bg-surface-container-high\",\n className,\n )}\n role=\"group\">\n <button\n aria-label={l.decrease}\n className={buttonClass}\n disabled={disabled || value - step < min}\n onClick={() => update(value - step)}\n type=\"button\">\n {minusIcon ?? <MinusIcon />}\n </button>\n <div\n aria-live=\"polite\"\n className={cn(\n \"flex min-w-6 items-center justify-center px-0.5 text-body-medium text-on-surface tabular-nums\",\n disabled && \"text-on-surface/38\",\n )}>\n {value}\n </div>\n <button\n aria-label={l.increase}\n className={buttonClass}\n disabled={disabled || (max !== undefined && value + step > max)}\n onClick={() => update(value + step)}\n type=\"button\">\n {plusIcon ?? <PlusIcon />}\n </button>\n </div>\n );\n}\n\nexport {Amount};\n","import {ChangeEvent, ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface CheckboxProps extends Omit<\n ComponentProps<\"input\">,\n \"type\" | \"size\" | \"children\"\n> {\n /** Class for the wrapping <label>. */\n className?: string;\n /** Class for the visual box. */\n inputClassName?: string;\n label?: ReactNode;\n}\n\n/**\n * M3 checkbox: custom-rendered 18x18 box (2px shape, 2px outline) with a\n * 40px circular state layer. Controlled via `checked` + `onChange` or\n * uncontrolled via `defaultChecked` — the native input is the source of\n * truth, so group semantics behave exactly like the platform's.\n */\nfunction Checkbox({\n className,\n disabled,\n inputClassName,\n label,\n onChange,\n ...inputProps\n}: CheckboxProps) {\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event);\n };\n\n return (\n <label\n className={cn(\n \"inline-flex w-fit cursor-pointer items-center gap-1 select-none\",\n disabled && \"cursor-not-allowed\",\n className,\n )}>\n <span className=\"relative inline-flex size-10 shrink-0 items-center justify-center\">\n <input\n type=\"checkbox\"\n className=\"peer absolute inset-0 z-1 size-full cursor-[inherit] appearance-none rounded-full outline-none\"\n disabled={disabled}\n onChange={handleChange}\n {...inputProps}\n />\n {/* state layer (40px) */}\n <span\n aria-hidden\n className={cn(\n \"peerLayer pointer-events-none absolute inset-0 rounded-full bg-on-surface opacity-0 peer-checked:bg-primary\",\n !disabled &&\n \"peer-hover:opacity-8 peer-focus-visible:opacity-12 peer-active:opacity-12\",\n )}\n />\n {/* 18x18 container, 2px shape, 2px outline; colors swap in\n * 50ms linear, the mark draws via .checkDraw (350/150ms). */}\n <span\n aria-hidden\n className={cn(\n \"ease-md-linear pointer-events-none flex size-[18px] items-center justify-center rounded-[2px] border-2 transition-colors duration-[50ms] peer-focus-visible:outline-3 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-secondary\",\n !disabled &&\n \"border-on-surface-variant text-on-primary peer-checked:border-primary peer-checked:bg-primary\",\n disabled &&\n \"border-on-surface/38 text-surface peer-checked:border-transparent peer-checked:bg-on-surface/38\",\n inputClassName,\n )}>\n {/* shrink-0: the 18px viewBox must render 1:1, not get\n * squeezed to the 14px content box by the 2px border (it\n * is the full-container icon, like @material/web's). */}\n <svg\n aria-hidden\n className=\"shrink-0\"\n fill=\"none\"\n height={18}\n viewBox=\"0 0 18 18\"\n width={18}>\n <path\n className=\"checkDraw\"\n d=\"M3.8 9.3 7.2 12.7 14.2 5.7\"\n pathLength={1}\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n />\n </svg>\n </span>\n </span>\n {label ? (\n <span\n className={cn(\n \"text-body-medium text-on-surface\",\n disabled && \"text-on-surface/38\",\n )}>\n {label}\n </span>\n ) : null}\n </label>\n );\n}\n\nexport {Checkbox};\n","import {CSSProperties, MouseEventHandler, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface MediaFrameProps {\n /** Aspect ratio of the frame (e.g. 16/9 or \"4 / 3\"). */\n aspect?: number | string;\n /** Content of the frame (usually media). */\n children?: ReactNode;\n className?: string;\n height?: number | string;\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** Clip the content to the frame shape. Default true. */\n overflow?: boolean;\n /** Shown behind/instead of the content (icon, initials...). */\n placeholder?: ReactNode;\n /** Corner radius in px, or any CSS value (e.g. \"var(--md-sys-shape-corner-large)\"). */\n radius?: number | string;\n /** Shorthand for equal width/height. */\n size?: number | string;\n style?: CSSProperties;\n width?: number | string;\n}\n\n/**\n * Presentational frame for media: size/aspect/radius/overflow plus an\n * optional placeholder. Renders no image of its own — pair it with `Img`\n * or inject any media as children.\n */\nfunction MediaFrame({\n aspect,\n children,\n className,\n height,\n onClick,\n overflow = true,\n placeholder,\n radius,\n size,\n style,\n width,\n}: MediaFrameProps) {\n return (\n <div\n className={cn(\n \"relative flex items-center justify-center bg-surface-container-highest text-on-surface-variant\",\n overflow && \"overflow-hidden\",\n className,\n )}\n onClick={onClick}\n style={{\n aspectRatio: aspect,\n borderRadius: radius,\n height: height ?? size,\n width: width ?? size,\n ...style,\n }}>\n {placeholder ? (\n <span className=\"absolute inset-0 flex items-center justify-center\">\n {placeholder}\n </span>\n ) : null}\n {children}\n </div>\n );\n}\n\nexport {MediaFrame};\n","import {CSSProperties, MouseEventHandler, ReactNode} from \"react\";\nimport {type ImageSrc} from \"../../utils/helpers\";\nimport {Media, type MediaInjectionProps, type ObjectFit} from \"./_media\";\nimport {MediaFrame} from \"./MediaFrame\";\n\nexport interface ImgProps extends MediaInjectionProps {\n alt?: string;\n /** Aspect ratio of the frame (e.g. 16/9). */\n aspect?: number | string;\n className?: string;\n height?: number | string;\n objectFit?: ObjectFit;\n onClick?: MouseEventHandler<HTMLDivElement>;\n /** Shown when there is no media or it fails to load. */\n placeholder?: ReactNode;\n /** Corner radius in px or any CSS value. */\n radius?: number | string;\n /** Shorthand for equal width/height. */\n size?: number | string;\n /** Plain URL or StaticImageData. Ignored when media is injected. */\n src?: ImageSrc | null;\n style?: CSSProperties;\n width?: number | string;\n}\n\n/**\n * MediaFrame + image. Uses a native <img> by default; the consumer can\n * inject its framework's image via `render` > `image` > `children`. Falls\n * back to the placeholder when there is no source or it errors.\n */\nfunction Img({\n alt = \"\",\n aspect,\n children,\n className,\n height,\n image,\n objectFit = \"cover\",\n onClick,\n placeholder,\n radius,\n render,\n size,\n src,\n style,\n width,\n}: ImgProps) {\n return (\n <MediaFrame\n aspect={aspect}\n className={className}\n height={height}\n onClick={onClick}\n placeholder={placeholder}\n radius={radius}\n size={size}\n style={style}\n width={width}>\n <Media\n alt={alt}\n className=\"absolute inset-0 size-full\"\n image={image}\n objectFit={objectFit}\n render={render}\n src={src}>\n {children}\n </Media>\n </MediaFrame>\n );\n}\n\nexport {Img};\n","import {cn} from \"../../utils/helpers\";\nimport {Spinner} from \"./_Spinner\";\n\nexport interface LoadingLabels {\n /** Accessible label (status text). Default \"Loading\". */\n label?: string;\n}\n\nconst LOADING_LABELS: Required<LoadingLabels> = {label: \"Loading\"};\n\nexport interface LoadingProps {\n className?: string;\n /** Customizable accessible name. */\n labels?: LoadingLabels;\n /** Diameter in px (M3 default 40 — `CircularProgressIndicatorTokens.Size`;\n * 48 is only the wavy baseline). */\n size?: number;\n /** Stroke width in px (M3 active indicator: 4). */\n strokeWidth?: number;\n}\n\n/**\n * Icon-sized circular indeterminate spinner — an SVG arc with round caps\n * that grows ~10°↔270° while it spins (shares `_Spinner` with `Circle`).\n * This IS `<Circle indeterminate />`,\n * kept as a convenience that inherits `currentColor` (defaults to primary) and\n * announces via `role=\"status\"` so it can drop inline in buttons/text. It is\n * NOT the shape-morphing M3 `LoadingIndicator`.\n */\nfunction Loading({\n className,\n labels,\n size = 40,\n strokeWidth = 4,\n}: LoadingProps) {\n const l = {...LOADING_LABELS, ...labels};\n return (\n <span\n aria-label={l.label}\n className={cn(\"relative inline-flex text-primary\", className)}\n role=\"status\"\n style={{height: size, width: size}}>\n <Spinner size={size} strokeWidth={strokeWidth} />\n </span>\n );\n}\n\nexport {Loading};\n","import {ComponentProps} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface MaterialSymbolProps extends Omit<\n ComponentProps<\"span\">,\n \"children\"\n> {\n /** FILL axis (false = outlined glyph, true = filled). */\n fill?: boolean;\n /** GRAD axis (-25..200). */\n grade?: number;\n /** Ligature name, e.g. \"favorite\". */\n name: string;\n /** opsz axis (20..48). Defaults to `size`. */\n opticalSize?: number;\n /** Font size in px. */\n size?: number;\n /** Symbol style — must match the font the consumer loaded. */\n variant?: \"rounded\" | \"outlined\" | \"sharp\";\n /** wght axis (100..700). */\n weight?: number;\n}\n\nconst VARIANT_CLASS = {\n rounded: \"material-symbols-rounded\",\n outlined: \"material-symbols-outlined\",\n sharp: \"material-symbols-sharp\",\n} as const;\n\n/**\n * Zero-dependency Material Symbols glyph. Renders a ligature span; it only\n * displays if the consumer loaded the corresponding Material Symbols\n * variable font (e.g. from Google Fonts). The library bundles no font.\n */\nfunction MaterialSymbol({\n className,\n fill = false,\n grade = 0,\n name,\n opticalSize,\n size = 24,\n style,\n variant = \"rounded\",\n weight = 400,\n ...rest\n}: MaterialSymbolProps) {\n return (\n <span\n aria-hidden\n className={cn(\n VARIANT_CLASS[variant],\n \"inline-block leading-none select-none\",\n className,\n )}\n style={{\n fontSize: size,\n fontVariationSettings: `'FILL' ${fill ? 1 : 0}, 'wght' ${weight}, 'GRAD' ${grade}, 'opsz' ${opticalSize ?? size}`,\n ...style,\n }}\n {...rest}>\n {name}\n </span>\n );\n}\n\nexport {MaterialSymbol};\n","import {ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface RadioProps extends Omit<\n ComponentProps<\"input\">,\n \"type\" | \"size\" | \"children\"\n> {\n /** Class for the wrapping <label>. */\n className?: string;\n label?: ReactNode;\n}\n\n/**\n * M3 radio button: custom-rendered 20px ring + 10px dot with a 40px\n * circular state layer. The native input is the source of truth, so\n * uncontrolled groups (shared `name`) keep native semantics; pass\n * `checked` + `onChange` for controlled usage.\n */\nfunction Radio({className, disabled, label, ...inputProps}: RadioProps) {\n return (\n <label\n className={cn(\n \"inline-flex w-fit cursor-pointer items-center gap-1 select-none\",\n disabled && \"cursor-not-allowed\",\n className,\n )}>\n <span className=\"relative inline-flex size-10 shrink-0 items-center justify-center\">\n <input\n type=\"radio\"\n className=\"peer absolute inset-0 z-1 size-full cursor-[inherit] appearance-none rounded-full outline-none\"\n disabled={disabled}\n {...inputProps}\n />\n {/* state layer (40px) */}\n <span\n aria-hidden\n className={cn(\n \"peerLayer pointer-events-none absolute inset-0 rounded-full bg-on-surface opacity-0 peer-checked:bg-primary\",\n !disabled &&\n \"peer-hover:opacity-8 peer-focus-visible:opacity-12 peer-active:opacity-12\",\n )}\n />\n {/* 20px ring (color swaps in 50ms linear) */}\n <span\n aria-hidden\n className={cn(\n \"ease-md-linear pointer-events-none flex size-5 items-center justify-center rounded-full border-2 transition-colors duration-[50ms] peer-focus-visible:outline-3 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-secondary\",\n !disabled &&\n \"border-on-surface-variant peer-checked:border-primary\",\n disabled && \"border-on-surface/38\",\n )}\n />\n {/* 10px dot (grows 300ms emphasized-decelerate) */}\n <span\n aria-hidden\n className={cn(\n \"radioDot pointer-events-none absolute size-2.5 scale-0 rounded-full opacity-0 peer-checked:scale-100 peer-checked:opacity-100\",\n !disabled && \"bg-primary\",\n disabled && \"bg-on-surface/38\",\n )}\n />\n </span>\n {label ? (\n <span\n className={cn(\n \"text-body-medium text-on-surface\",\n disabled && \"text-on-surface/38\",\n )}>\n {label}\n </span>\n ) : null}\n </label>\n );\n}\n\nexport {Radio};\n","import {ChangeEvent, ComponentProps, ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\nimport {useControlled} from \"../../utils/_useControlled\";\n\nexport interface SwitchProps extends Omit<\n ComponentProps<\"input\">,\n \"type\" | \"size\" | \"children\" | \"checked\" | \"defaultChecked\"\n> {\n checked?: boolean;\n /** Class for the wrapping <label>. */\n className?: string;\n defaultChecked?: boolean;\n /** Icon shown inside the handle when selected (M3 \"with icon\": the\n * handle grows to 24 and the icon renders at 16). */\n icon?: ReactNode;\n label?: ReactNode;\n /** Optional icon for the unselected handle. */\n uncheckedIcon?: ReactNode;\n}\n\n/**\n * M3 switch: 52x32 track (2px outline), handle 16↔24 (28 pressed), 40px\n * state layer. Controllable: `checked` + `onChange`, or uncontrolled via\n * `defaultChecked` (internal state through useControlled).\n */\nfunction Switch({\n checked: checkedProp,\n className,\n defaultChecked,\n disabled,\n icon,\n label,\n onChange,\n uncheckedIcon,\n ...inputProps\n}: SwitchProps) {\n const [checked, setChecked] = useControlled(\n checkedProp,\n defaultChecked ?? false,\n );\n const hasIcon = Boolean(icon || uncheckedIcon);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setChecked(event.target.checked);\n onChange?.(event);\n };\n\n return (\n <label\n className={cn(\n \"group inline-flex w-fit cursor-pointer items-center gap-3 select-none\",\n disabled && \"cursor-not-allowed\",\n className,\n )}>\n <span className=\"relative h-8 w-13 shrink-0\">\n <input\n type=\"checkbox\"\n role=\"switch\"\n className=\"peer absolute inset-0 z-1 m-0 size-full cursor-[inherit] appearance-none rounded-full outline-none\"\n checked={checked}\n disabled={disabled}\n onChange={handleChange}\n {...inputProps}\n />\n {/* track 52x32, outline 2 */}\n <span\n aria-hidden\n className={cn(\n \"switchTrack absolute inset-0 rounded-full border-2 peer-focus-visible:outline-3 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-secondary\",\n !disabled &&\n (checked\n ? \"border-primary bg-primary\"\n : \"border-outline bg-surface-container-highest\"),\n disabled &&\n (checked\n ? \"border-transparent bg-on-surface/12\"\n : \"border-on-surface/12 bg-surface-variant/12\"),\n )}\n />\n {/* state layer 40, centered on the handle */}\n <span\n aria-hidden\n className={cn(\n \"switchLayer pointer-events-none absolute top-1/2 size-10 -translate-y-1/2 rounded-full opacity-0\",\n checked ? \"left-4 bg-primary\" : \"-left-1 bg-on-surface\",\n !disabled &&\n \"peer-hover:opacity-8 peer-focus-visible:opacity-12 peer-active:opacity-12\",\n )}\n />\n {/* handle 16 ↔ 24 (28 pressed; 24 with icon) */}\n <span\n aria-hidden\n className={cn(\n \"switchHandle pointer-events-none absolute top-1/2 flex -translate-y-1/2 items-center justify-center rounded-full\",\n checked\n ? \"left-6 size-6\"\n : hasIcon\n ? \"left-1 size-6\"\n : \"left-2 size-4\",\n !disabled &&\n (checked\n ? \"bg-on-primary text-on-primary-container peer-hover:bg-primary-container peer-focus-visible:bg-primary-container peer-active:bg-primary-container\"\n : \"bg-outline text-surface-container-highest peer-hover:bg-on-surface-variant peer-focus-visible:bg-on-surface-variant peer-active:bg-on-surface-variant\"),\n !disabled &&\n (checked\n ? \"group-active:left-[22px] group-active:size-7\"\n : \"group-active:left-0.5 group-active:size-7\"),\n disabled &&\n (checked\n ? \"bg-surface text-on-surface/38\"\n : \"bg-on-surface/38 text-surface-container-highest\"),\n )}>\n {hasIcon ? (\n <span className=\"flex size-4 items-center justify-center leading-none\">\n {checked ? icon : uncheckedIcon}\n </span>\n ) : null}\n </span>\n </span>\n {label ? (\n <span\n className={cn(\n \"text-body-medium text-on-surface\",\n disabled && \"text-on-surface/38\",\n )}>\n {label}\n </span>\n ) : null}\n </label>\n );\n}\n\nexport {Switch};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../../utils/helpers\";\n\nexport interface TextElementProps {\n /** Supporting text (body-medium, on-surface-variant). */\n body?: ReactNode;\n bodyStyle?: string;\n className?: string;\n /** Overline label (label-medium, on-surface-variant). */\n label?: ReactNode;\n labelStyle?: string;\n /** Main text (title-medium, on-surface). */\n title?: ReactNode;\n titleStyle?: string;\n}\n\n/** Label / title / body text stack using the M3 type scale. */\nfunction TextElement({\n body,\n bodyStyle,\n className,\n label,\n labelStyle,\n title,\n titleStyle,\n}: TextElementProps) {\n return (\n <div\n className={cn(\n \"flex flex-col items-start justify-center text-on-surface\",\n className,\n )}>\n {label ? (\n <p\n className={cn(\n \"text-label-medium text-on-surface-variant\",\n labelStyle,\n )}>\n {label}\n </p>\n ) : null}\n {title ? (\n <h2 className={cn(\"text-title-medium\", titleStyle)}>{title}</h2>\n ) : null}\n {body ? (\n <p\n className={cn(\"text-body-medium text-on-surface-variant\", bodyStyle)}>\n {body}\n </p>\n ) : null}\n </div>\n );\n}\n\nexport {TextElement};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../utils/helpers\";\n\nexport interface ContainerProps {\n children?: ReactNode;\n className?: string;\n /** Padding class override (default p-6). */\n padding?: string;\n}\n\n/**\n * Dotted showcase panel (token-based dot grid) for presenting components\n * over a neutral, theme-aware background.\n */\nfunction Container({children, className, padding}: ContainerProps) {\n return (\n <div\n className={cn(\n \"mx-6 my-6 flex gap-2 overflow-x-auto rounded-large\",\n padding ?? \"p-6\",\n className,\n )}\n style={{\n backgroundImage:\n \"radial-gradient(var(--md-sys-color-outline-variant) 0.5px, transparent 0.5px)\",\n backgroundPosition: \"10px 10px\",\n backgroundSize: \"20px 20px\",\n }}>\n {children}\n </div>\n );\n}\n\nexport {Container};\n","import {ReactNode} from \"react\";\nimport {cn} from \"../utils/helpers\";\n\nexport interface SectionProps {\n children: ReactNode;\n className?: string;\n}\n\n/** Responsive content section: column on small screens, row on large. */\nfunction Section({children, className}: SectionProps) {\n return (\n <section\n className={cn(\n \"flex h-fit w-full flex-col items-center gap-6 px-3 lg:flex-row\",\n className,\n )}>\n {children}\n </section>\n );\n}\n\nexport {Section};\n"]}