@mond-design-system/react 1.0.0-alpha.1 → 1.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/cx.ts","../src/components/Text/Text.module.css","../src/components/Text/Text.tsx","../src/components/Heading/Heading.module.css","../src/components/Heading/Heading.tsx","../src/components/Spinner/Spinner.module.css","../src/components/Spinner/Spinner.tsx","../src/components/Icon/Icon.module.css","../src/components/Icon/Icon.tsx","../src/components/Button/Button.module.css","../src/components/Button/Button.tsx","../src/components/Link/Link.module.css","../src/components/Link/Link.tsx","../src/components/Avatar/Avatar.module.css","../src/components/Avatar/Avatar.tsx","../src/components/AvatarGroup/AvatarGroup.module.css","../src/components/AvatarGroup/AvatarGroup.tsx","../src/components/Badge/Badge.module.css","../src/components/Badge/Badge.tsx","../src/components/Chip/Chip.module.css","../src/components/Chip/Chip.tsx","../src/components/Chip/ChipGroup.module.css","../src/components/Chip/ChipGroup.tsx","../src/components/Chip/ChipBar.module.css","../src/components/Chip/ChipBar.tsx","../src/components/CountButton/CountButton.module.css","../src/components/CountButton/CountButton.tsx","../src/components/Field/Field.module.css","../src/components/Field/Field.tsx","../src/components/Select/Select.module.css","../src/components/Select/Select.tsx","../src/hooks/overlayHistory.ts","../src/hooks/useOverlay.ts","../src/hooks/usePresence.ts","../src/components/Overlay/Overlay.module.css","../src/components/Overlay/Overlay.tsx","../src/components/Sheet/Sheet.module.css","../src/components/Sheet/Sheet.tsx","../src/components/DateTimePicker/DateTimePicker.module.css","../src/components/DateTimePicker/DateTimePicker.tsx","../src/components/Tag/Tag.module.css","../src/components/Tag/Tag.tsx","../src/components/Divider/Divider.module.css","../src/components/Divider/Divider.tsx","../src/components/Skeleton/Skeleton.module.css","../src/components/Skeleton/Skeleton.tsx","../src/components/ProgressBar/ProgressBar.module.css","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Input/Input.module.css","../src/components/Input/Input.tsx","../src/components/PasswordInput/PasswordInput.module.css","../src/components/PasswordInput/PasswordInput.tsx","../src/components/Textarea/Textarea.module.css","../src/components/Textarea/Textarea.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.module.css","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.module.css","../src/components/Switch/Switch.tsx","../src/components/SegmentedControl/SegmentedControl.module.css","../src/components/SegmentedControl/SegmentedControl.tsx","../src/components/SearchField/SearchField.module.css","../src/components/SearchField/SearchField.tsx","../src/components/List/List.module.css","../src/components/List/List.tsx","../src/components/EmptyState/EmptyState.module.css","../src/components/EmptyState/EmptyState.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Toast/Toast.module.css","../src/components/Toast/Toast.tsx","../src/components/Stack/Stack.module.css","../src/components/Stack/Stack.tsx","../src/components/Inline/Inline.module.css","../src/components/Inline/Inline.tsx","../src/components/Container/Container.module.css","../src/components/Container/Container.tsx","../src/components/Card/Card.module.css","../src/components/Card/Card.tsx","../src/components/Modal/Modal.module.css","../src/components/Modal/Modal.tsx","../src/components/ConfirmDialog/ConfirmDialog.module.css","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/Screen/Screen.module.css","../src/components/Screen/Screen.tsx","../src/components/AppBar/AppBar.module.css","../src/components/AppBar/AppBar.tsx","../src/components/TabBar/TabBar.module.css","../src/components/TabBar/TabBar.tsx","../src/hooks/useRovingGroup.ts"],"names":["text","variant-body","variant-label","variant-note","variant-meta","variant-eyebrow","tone-primary","tone-secondary","tone-muted","tone-inverse","tone-accent","tone-on-media","tone-danger","tone-warning","tone-success","align-left","align-center","align-right","truncate","createElement","heading","variant-display","variant-title","variant-subtitle","spinner","jsx","icon","size-sm","size-md","size-lg","createContext","useContext","button","variant-primary","variant-secondary","variant-ghost","variant-danger","fullWidth","icon-only","jsxs","link","variant-inline","variant-standalone","avatar","image","initials","group","item","overflow","Children","badge","tone-neutral","chip","variant-soft","variant-outline","selected","interactive","disabled","Fragment","gap-hairline","gap-tight","gap-base","bar","bordered","fade","glyph","SPINNER_PX","field","label","required","message","error","useId","wrap","select","chevron","useRef","useEffect","useState","scrim","variant-modal","variant-sheet","createPortal","panel","header","body","footer","trigger","hasValue","triggerLabel","timeRow","grow","meridiem","colon","calendarHeader","monthLabel","weekdays","weekday","grid","day","today","outside","useMemo","tag","remove","removeGlyph","divider","horizontal","vertical","skeleton","pulse","variant-text","variant-rect","variant-circle","track","fill","indeterminate","input","toggle","textarea","count","root","box","dot","segment","face","glass","clear","clearGlyph","row","leading","trailing","title","description","action","list","tab","viewport","toast","close","closeGlyph","useCallback","stack","gap-loose","gap-section","align-start","align-end","align-stretch","inline","align-baseline","justify-start","justify-center","justify-end","justify-between","container","width-content","width-wide","card","variant-raised","screen","content","slot","active"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CSSProperties } from \"react\";\n\n/**\n * Join class names, dropping anything falsy.\n *\n * Every component takes a `className` from the call site and owns one of its\n * own from a CSS Module, so the merge happens in one place rather than in\n * forty slightly different inline expressions.\n */\nexport function cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(\" \");\n}\n\n/**\n * A style object that may also carry CSS custom properties.\n *\n * `React.CSSProperties` has no index signature, so `{ '--mds-x': 1 }` is a\n * type error against it. Values that genuinely vary per render (a slider's\n * percent, an avatar's pixel size) belong in a custom property the stylesheet\n * reads — this types that without an assertion.\n */\nexport type CSSVars = CSSProperties & Record<`--${string}`, string | number>;\n",".text {\n margin: 0;\n}\n\n/* Type roles — the core shorthands. */\n.variant-body { font: var(--mds-type-body); }\n.variant-label { font: var(--mds-type-label); }\n.variant-note { font: var(--mds-type-note); }\n.variant-meta { font: var(--mds-type-meta); }\n.variant-eyebrow {\n font: var(--mds-type-eyebrow);\n letter-spacing: var(--mds-tracking-eyebrow);\n text-transform: uppercase;\n}\n\n/* Tones — semantic aliases only. */\n.tone-primary { color: var(--mds-text-primary); }\n.tone-secondary { color: var(--mds-text-secondary); }\n.tone-muted { color: var(--mds-text-muted); }\n.tone-inverse { color: var(--mds-text-inverse); }\n.tone-accent { color: var(--mds-text-accent); }\n.tone-on-media { color: var(--mds-text-on-media); }\n.tone-danger { color: var(--mds-status-danger); }\n.tone-warning { color: var(--mds-status-warning); }\n.tone-success { color: var(--mds-status-success); }\n\n.align-left { text-align: left; }\n.align-center { text-align: center; }\n.align-right { text-align: right; }\n\n.truncate {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n","import type { HTMLAttributes, JSX, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Text.module.css\";\n\nexport type TextVariant = \"body\" | \"label\" | \"note\" | \"meta\" | \"eyebrow\";\n\nexport type TextTone =\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"inverse\"\n | \"accent\"\n | \"on-media\"\n | \"danger\"\n | \"warning\"\n | \"success\";\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n /** Type role from the core scale. Default \"body\". */\n variant?: TextVariant;\n /** Element override when the default doesn't fit the markup. */\n as?: keyof JSX.IntrinsicElements;\n /** Semantic color. Variants carry sensible defaults. */\n tone?: TextTone;\n align?: \"left\" | \"center\" | \"right\";\n /** Single-line ellipsis. */\n truncate?: boolean;\n}\n\nconst ELEMENT: Record<TextVariant, keyof JSX.IntrinsicElements> = {\n body: \"p\",\n label: \"span\",\n note: \"p\",\n meta: \"span\",\n eyebrow: \"span\",\n};\n\nconst DEFAULT_TONE: Partial<Record<TextVariant, TextTone>> = {\n note: \"secondary\",\n meta: \"muted\",\n eyebrow: \"muted\",\n};\n\n/**\n * Body-copy primitive. One class per type role — screens never hand-roll styled tags.\n *\n * ```tsx\n * <Text>Body copy.</Text>\n * <Text variant=\"label\" as=\"span\">Field label</Text>\n * <Text variant=\"meta\" tone=\"muted\">Updated 2h ago</Text>\n * <Text truncate>Very long single line…</Text>\n * ```\n */\nexport function Text({\n variant = \"body\",\n as,\n tone,\n align,\n truncate = false,\n className,\n ...rest\n}: TextProps): ReactElement {\n const element = as ?? ELEMENT[variant];\n const resolvedTone = tone ?? DEFAULT_TONE[variant] ?? \"primary\";\n return createElement(element, {\n className: cx(\n styles.text,\n styles[`variant-${variant}`],\n styles[`tone-${resolvedTone}`],\n align && styles[`align-${align}`],\n truncate && styles.truncate,\n className,\n ),\n ...rest,\n });\n}\n",".heading {\n margin: 0;\n}\n\n.variant-display {\n font: var(--mds-type-display);\n letter-spacing: var(--mds-tracking-display);\n}\n.variant-title { font: var(--mds-type-title); }\n.variant-subtitle { font: var(--mds-type-subtitle); }\n\n.tone-primary { color: var(--mds-text-primary); }\n.tone-secondary { color: var(--mds-text-secondary); }\n.tone-inverse { color: var(--mds-text-inverse); }\n.tone-accent { color: var(--mds-text-accent); }\n.tone-on-media { color: var(--mds-text-on-media); }\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Heading.module.css\";\n\nexport type HeadingVariant = \"display\" | \"title\" | \"subtitle\";\nexport type HeadingLevel = 1 | 2 | 3 | 4;\nexport type HeadingTone = \"primary\" | \"secondary\" | \"inverse\" | \"accent\" | \"on-media\";\n\nexport interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n /** Document outline level → h1–h4, with a matching default type role. Default 2. */\n level?: HeadingLevel;\n /** Type role override — outline level and visual size are separate concerns. */\n variant?: HeadingVariant;\n tone?: HeadingTone;\n}\n\nconst LEVEL_VARIANT: Record<HeadingLevel, HeadingVariant> = {\n 1: \"display\",\n 2: \"title\",\n 3: \"subtitle\",\n 4: \"subtitle\",\n};\n\n/**\n * Brand headings on the core roles. `level` = semantics, `variant` = size.\n *\n * ```tsx\n * <Heading level={1}>Sessions</Heading>\n * <Heading level={2} variant=\"subtitle\" tone=\"secondary\">This week</Heading>\n * ```\n */\nexport function Heading({\n level = 2,\n variant,\n tone = \"primary\",\n className,\n ...rest\n}: HeadingProps): ReactElement {\n return createElement(`h${level}`, {\n className: cx(\n styles.heading,\n styles[`variant-${variant ?? LEVEL_VARIANT[level]}`],\n styles[`tone-${tone}`],\n className,\n ),\n ...rest,\n });\n}\n","@keyframes spin {\n to { transform: rotate(360deg); }\n}\n\n.spinner {\n display: inline-block;\n flex: none;\n width: var(--spinner-size);\n height: var(--spinner-size);\n border: var(--spinner-border) solid var(--mds-border-strong);\n border-top-color: currentcolor;\n border-radius: var(--mds-radius-pill);\n animation: spin 0.7s linear infinite;\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx, type CSSVars } from \"../../internal/cx\";\nimport styles from \"./Spinner.module.css\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n /** Diameter in px. Default 20. */\n size?: number;\n /** Accessible label. Default \"Loading\". */\n label?: string;\n}\n\n/**\n * Indeterminate loading ring. Arc takes currentColor, so it matches whatever\n * text it sits beside. Keyframe is local: CSS Modules localizes\n * animation-name, a global one resolves to nothing. base.css stops it under\n * prefers-reduced-motion.\n *\n * ```tsx\n * <Spinner label=\"Loading sessions\" />\n * ```\n */\nexport function Spinner({\n size = 20,\n label = \"Loading\",\n className,\n style,\n ...rest\n}: SpinnerProps): ReactElement {\n /* Per-instance knobs, not design tokens. Ring thickness scales with the\n diameter, floored so small spinners stay visible. */\n const vars: CSSVars = {\n \"--spinner-size\": `${size}px`,\n \"--spinner-border\": `${Math.max(2, Math.round(size / 10))}px`,\n };\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={cx(styles.spinner, className)}\n style={{ ...vars, ...style }}\n {...rest}\n />\n );\n}\n",".icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n color: inherit;\n}\n\n.size-sm { width: var(--mds-icon-sm); height: var(--mds-icon-sm); }\n.size-md { width: var(--mds-icon-md); height: var(--mds-icon-md); }\n.size-lg { width: var(--mds-icon-lg); height: var(--mds-icon-lg); }\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Icon.module.css\";\n\nexport interface IconRenderProps {\n /** Pixel size of the requested step. */\n size: number;\n}\n\n/** Brand-owned glyph resolver: name → rendered glyph (svg, font ligature, …). */\nexport type IconRender = (name: string, props: IconRenderProps) => ReactNode;\n\nconst IconContext = createContext<IconRender | null>(null);\n\nexport interface IconProviderProps {\n render: IconRender;\n children: ReactNode;\n}\n\n/**\n * Registry seam. The system never bundles an icon set — the app registers its\n * own (lucide, Material Symbols, …) once, at the root. Iconography is brand,\n * like color.\n *\n * ```tsx\n * // App root: map names to your icon set once.\n * <IconProvider render={(name, { size }) => <MyGlyph name={name} width={size} />}>\n * <App />\n * </IconProvider>\n *\n * // Anywhere below:\n * <Icon name=\"check\" size=\"sm\" />\n * ```\n */\nexport function IconProvider({ render, children }: IconProviderProps): ReactElement {\n return <IconContext.Provider value={render}>{children}</IconContext.Provider>;\n}\n\nexport type IconSize = \"sm\" | \"md\" | \"lg\";\n\n/* Must match --mds-icon-* in core/layout.css — the renderer needs a number,\n a stylesheet cannot hand one over. */\nconst SIZE_PX: Record<IconSize, number> = { sm: 16, md: 20, lg: 24 };\n\nexport interface IconProps extends HTMLAttributes<HTMLSpanElement> {\n /** Glyph name in the app's registered set. */\n name: string;\n /** Default \"md\". */\n size?: IconSize;\n /** Accessible name. Omitted = decorative (aria-hidden). */\n label?: string;\n}\n\nconst warned = new Set<string>();\n\n/** A glyph from the app-registered set, sized on the core scale. */\nexport function Icon({ name, size = \"md\", label, className, ...rest }: IconProps): ReactElement {\n const render = useContext(IconContext);\n if (render === null && !warned.has(name)) {\n warned.add(name);\n console.error(\n `Icon \"${name}\": no IconProvider above this tree. Register the app's icon set once at the root.`,\n );\n }\n return (\n <span\n className={cx(styles.icon, styles[`size-${size}`], className)}\n {...(label ? { role: \"img\", \"aria-label\": label } : { \"aria-hidden\": true })}\n {...rest}\n >\n {render?.(name, { size: SIZE_PX[size] })}\n </span>\n );\n}\n",".button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--mds-gap-tight);\n border: var(--mds-border-width) solid transparent;\n border-radius: var(--mds-radius-control);\n font-family: var(--mds-font-body);\n font-weight: var(--mds-weight-semibold);\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n text-decoration: none;\n transition: background-color var(--mds-transition-control), color var(--mds-transition-control);\n}\n\n/* Sizes — height from the control scale, padding from the space scale. */\n.size-sm {\n height: var(--mds-control-h-sm);\n padding: 0 var(--mds-space-3);\n font-size: var(--mds-text-sm);\n}\n\n.size-md {\n height: var(--mds-control-h-md);\n padding: 0 var(--mds-space-4);\n font-size: var(--mds-text-base);\n}\n\n.size-lg {\n height: var(--mds-control-h-lg);\n padding: 0 var(--mds-space-5);\n font-size: var(--mds-text-lg);\n}\n\n/* Variants */\n.variant-primary {\n background: var(--mds-action-bg);\n color: var(--mds-action-fg);\n}\n\n.variant-primary:hover:not(:disabled) { background: var(--mds-action-bg-hover); }\n.variant-primary:active:not(:disabled) { background: var(--mds-action-bg-active); }\n\n.variant-secondary {\n background: transparent;\n color: var(--mds-text-primary);\n border-color: var(--mds-control-border);\n}\n\n.variant-ghost {\n background: transparent;\n color: var(--mds-text-primary);\n}\n\n.variant-secondary:hover:not(:disabled),\n.variant-ghost:hover:not(:disabled) {\n background: var(--mds-surface-sunken);\n}\n\n.variant-danger {\n background: var(--mds-status-danger);\n color: var(--mds-status-danger-contrast);\n}\n\n.variant-danger:hover:not(:disabled) { filter: brightness(0.94); }\n\n/* Unavailable is a color, not a fade — opacity composites unpredictably. */\n.button:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n border-color: transparent;\n cursor: not-allowed;\n}\n\n.fullWidth {\n width: 100%;\n}\n\n/* Icon-only: circle, one glyph, width locked to the control height. */\n.icon-only {\n padding: 0;\n border-radius: var(--mds-radius-pill);\n}\n\n.icon-only.size-sm { width: var(--mds-control-h-sm); }\n.icon-only.size-md { width: var(--mds-control-h-md); }\n.icon-only.size-lg { width: var(--mds-control-h-lg); }\n","import type { ButtonHTMLAttributes, ElementType, ReactElement, ReactNode, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Spinner } from \"../Spinner/Spinner\";\nimport styles from \"./Button.module.css\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ninterface ButtonBaseProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"type\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Glyph slots — pass an <Icon> or any node. Agnostic of icon set. */\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n /** Spinner replaces the left slot; disables and announces busy. */\n loading?: boolean;\n fullWidth?: boolean;\n type?: \"button\" | \"submit\" | \"reset\";\n /** Renders an <a> — for navigation styled as a button. */\n href?: string;\n /** Element override, e.g. a router's Link. */\n as?: ElementType;\n ref?: Ref<HTMLButtonElement>;\n}\n\n/* Icon-only collapses the button to a circle holding one glyph. A glyph says\n nothing to a screen reader, so the type demands the name. */\ntype IconOnlyEnforcement =\n | { iconOnly: true; \"aria-label\": string }\n | { iconOnly?: false | undefined };\n\nexport type ButtonProps = ButtonBaseProps & IconOnlyEnforcement;\n\n/* Spinner diameter per control size — matches the icon steps. */\nconst SPINNER_PX: Record<ButtonSize, number> = { sm: 16, md: 18, lg: 20 };\n\n/**\n * The tappable action. Semantics: button by default, link when `href`/`as` says so.\n *\n * ```tsx\n * <Button onClick={save}>Save</Button>\n * <Button variant=\"secondary\" size=\"sm\">Cancel</Button>\n * <Button variant=\"danger\" loading={deleting} onClick={remove}>Delete</Button>\n * <Button iconOnly aria-label=\"Close\" variant=\"ghost\"><Icon name=\"close\" /></Button>\n * <Button href=\"/settings\">Settings</Button>\n * ```\n */\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n loading = false,\n disabled = false,\n fullWidth = false,\n iconOnly = false,\n type = \"button\",\n href,\n as,\n className,\n children,\n ...rest\n}: ButtonProps): ReactElement {\n const Element: ElementType = as ?? (href !== undefined ? \"a\" : \"button\");\n const isButton = Element === \"button\";\n const own = isButton ? { type, disabled: disabled || loading } : { href };\n\n return (\n <Element\n className={cx(\n styles.button,\n styles[`variant-${variant}`],\n styles[`size-${size}`],\n fullWidth && styles.fullWidth,\n iconOnly && styles[\"icon-only\"],\n className,\n )}\n aria-busy={loading || undefined}\n {...own}\n {...rest}\n >\n {loading ? <Spinner size={SPINNER_PX[size]} /> : iconLeft}\n {children}\n {!loading && iconRight}\n </Element>\n );\n}\n",".link {\n color: var(--mds-text-accent);\n border-radius: var(--mds-radius-1); /* focus outline hugs the text */\n transition: color var(--mds-transition-control);\n}\n\n.variant-inline {\n text-decoration: underline;\n text-underline-offset: 0.15em;\n}\n\n.variant-standalone {\n text-decoration: none;\n font-weight: var(--mds-weight-medium);\n}\n\n.link:hover {\n color: var(--mds-accent-hover);\n}\n","import type { AnchorHTMLAttributes, ElementType, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Link.module.css\";\n\nexport type LinkVariant = \"inline\" | \"standalone\";\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /** inline = underlined, lives in running text. standalone = nav/action link. */\n variant?: LinkVariant;\n /** Opens in a new tab with rel protection. */\n external?: boolean;\n /** Element override, e.g. a router's Link. */\n as?: ElementType;\n ref?: Ref<HTMLAnchorElement>;\n}\n\n/**\n * Text link. Inline links keep their underline: color alone fails WCAG 1.4.1\n * for links inside prose.\n *\n * ```tsx\n * <Text>Read the <Link href=\"/terms\">terms</Link>.</Text>\n * <Link variant=\"standalone\" href=\"https://example.com\" external>Docs</Link>\n * <Link as={NextLink} href=\"/about\">About</Link>\n * ```\n */\nexport function Link({\n variant = \"inline\",\n external = false,\n as: Element = \"a\",\n className,\n ...rest\n}: LinkProps): ReactElement {\n const externalProps = external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n return (\n <Element\n className={cx(styles.link, styles[`variant-${variant}`], className)}\n {...externalProps}\n {...rest}\n />\n );\n}\n",".avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n overflow: hidden;\n border-radius: var(--mds-radius-avatar);\n background: var(--mds-surface-sunken);\n color: var(--mds-text-secondary);\n font-family: var(--mds-font-body);\n font-weight: var(--mds-weight-semibold);\n user-select: none;\n}\n\n.size-sm { width: var(--mds-avatar-sm); height: var(--mds-avatar-sm); font-size: var(--mds-text-xs); }\n.size-md { width: var(--mds-avatar-md); height: var(--mds-avatar-md); font-size: var(--mds-text-sm); }\n.size-lg { width: var(--mds-avatar-lg); height: var(--mds-avatar-lg); font-size: var(--mds-text-xl); }\n\n.image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.initials {\n line-height: 1;\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Avatar.module.css\";\n\nexport type AvatarSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n /** Person's display name — accessible name and initials source. */\n name: string;\n /** Image URL; initials render when absent or empty. */\n src?: string;\n size?: AvatarSize;\n}\n\n/* First + last word: \"Ada Byron King Lovelace\" → AL. Middle names add noise\n at 24px. */\nfunction initials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n const first = words[0]?.[0] ?? \"\";\n const last = words.length > 1 ? (words.at(-1)?.[0] ?? \"\") : \"\";\n return (first + last).toUpperCase();\n}\n\n/**\n * Person marker. Image when available, initials otherwise — never an empty circle.\n *\n * ```tsx\n * <Avatar name=\"Ada Lovelace\" src=\"/ada.jpg\" />\n * <Avatar name=\"Grace Hopper\" size=\"lg\" />\n * ```\n */\nexport function Avatar({ name, src, size = \"md\", className, ...rest }: AvatarProps): ReactElement {\n return (\n <span className={cx(styles.avatar, styles[`size-${size}`], className)} {...rest}>\n {src ? (\n <img className={styles.image} src={src} alt={name} />\n ) : (\n <span role=\"img\" aria-label={name} className={styles.initials}>\n {initials(name)}\n </span>\n )}\n </span>\n );\n}\n",".group {\n display: inline-flex;\n align-items: center;\n}\n\n/* Overlap by a tight step; ring separates neighbours. */\n.item {\n display: inline-flex;\n border-radius: var(--mds-radius-avatar);\n box-shadow: 0 0 0 var(--mds-focus-width) var(--mds-surface-card);\n}\n\n.item + .item {\n margin-left: calc(-1 * var(--mds-space-2));\n}\n\n.overflow {\n align-items: center;\n justify-content: center;\n flex: none;\n background: var(--mds-surface-sunken);\n color: var(--mds-text-secondary);\n font-family: var(--mds-font-body);\n font-weight: var(--mds-weight-semibold);\n user-select: none;\n}\n\n.size-sm { width: var(--mds-avatar-sm); height: var(--mds-avatar-sm); font-size: var(--mds-text-xs); }\n.size-md { width: var(--mds-avatar-md); height: var(--mds-avatar-md); font-size: var(--mds-text-sm); }\n.size-lg { width: var(--mds-avatar-lg); height: var(--mds-avatar-lg); font-size: var(--mds-text-xl); }\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { Children } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport type { AvatarSize } from \"../Avatar/Avatar\";\nimport styles from \"./AvatarGroup.module.css\";\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Avatar children. */\n children: ReactNode;\n /** Visible cap; the rest collapse into \"+N\". Default 4. */\n max?: number;\n /** Sizes the overflow chip to match the avatars. Default \"md\". */\n size?: AvatarSize;\n}\n\n/**\n * Overlapping stack of avatars with a \"+N\" chip past `max`.\n *\n * ```tsx\n * <AvatarGroup max={3}>\n * <Avatar name=\"Ada Lovelace\" />\n * <Avatar name=\"Grace Hopper\" />\n * <Avatar name=\"Margaret Hamilton\" />\n * <Avatar name=\"Katherine Johnson\" />\n * </AvatarGroup>\n * ```\n */\nexport function AvatarGroup({\n children,\n max = 4,\n size = \"md\",\n className,\n ...rest\n}: AvatarGroupProps): ReactElement {\n const all = Children.toArray(children);\n const visible = all.slice(0, max);\n const hidden = all.length - visible.length;\n\n return (\n <div className={cx(styles.group, className)} {...rest}>\n {visible.map((child, i) => (\n <span key={i} className={styles.item}>\n {child}\n </span>\n ))}\n {hidden > 0 && (\n <span\n className={cx(styles.item, styles.overflow, styles[`size-${size}`])}\n aria-label={`${hidden} more`}\n >\n +{hidden}\n </span>\n )}\n </div>\n );\n}\n",".badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(--mds-space-2);\n min-width: var(--mds-space-5);\n height: var(--mds-space-5);\n border-radius: var(--mds-radius-pill);\n font: var(--mds-type-meta);\n font-weight: var(--mds-weight-semibold);\n white-space: nowrap;\n}\n\n.tone-neutral {\n background: var(--mds-surface-sunken);\n color: var(--mds-text-primary);\n}\n\n.tone-accent {\n background: var(--mds-accent-soft);\n color: var(--mds-text-primary);\n}\n\n.tone-danger {\n background: var(--mds-status-danger-soft);\n color: var(--mds-text-primary);\n}\n\n.tone-warning {\n background: var(--mds-status-warning-soft);\n color: var(--mds-text-primary);\n}\n\n.tone-success {\n background: var(--mds-status-success-soft);\n color: var(--mds-text-primary);\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Badge.module.css\";\n\nexport type BadgeTone = \"neutral\" | \"accent\" | \"danger\" | \"warning\" | \"success\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: BadgeTone;\n}\n\n/**\n * Small status marker — counts, \"new\", state words. Soft fill, strong text.\n *\n * ```tsx\n * <Badge tone=\"success\">Paid</Badge>\n * <Badge tone=\"danger\">3</Badge>\n * ```\n */\nexport function Badge({ tone = \"neutral\", className, ...rest }: BadgeProps): ReactElement {\n return <span className={cx(styles.badge, styles[`tone-${tone}`], className)} {...rest} />;\n}\n",".chip {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n padding: var(--mds-space-1) var(--mds-space-3);\n border-radius: var(--mds-radius-chip);\n font: var(--mds-type-label);\n white-space: nowrap;\n cursor: default;\n transition: var(--mds-transition-control);\n}\n\n/* Unselected skins. */\n.variant-soft {\n background: var(--mds-accent-soft);\n border: var(--mds-border-width) solid transparent;\n color: var(--mds-text-accent);\n}\n\n.variant-outline {\n background: transparent;\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n color: var(--mds-text-secondary);\n}\n\n/* After the variants, so a selected chip wins whichever it was built from. */\n.selected {\n background: var(--mds-accent);\n border-color: transparent;\n color: var(--mds-accent-contrast);\n}\n\n/* Only the button branch gets pointer + hover feedback; a selected chip is\n already at full accent and would only muddy under a filter. */\n.interactive {\n cursor: pointer;\n}\n\n.interactive:not(.selected):hover {\n filter: brightness(0.97);\n}\n\n.disabled {\n opacity: 0.5;\n}\n","import type { HTMLAttributes, MouseEventHandler, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Chip.module.css\";\n\nexport type ChipVariant = \"soft\" | \"outline\";\n\nexport interface ChipProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /** Unselected appearance. Default \"soft\". */\n variant?: ChipVariant;\n /** Toggle state. When given on an interactive chip it also sets aria-pressed;\n * omit for a plain action chip so it does not announce as a toggle. */\n selected?: boolean;\n /** Leading glyph, e.g. `<Icon name=\"check\" size=\"sm\" />`. */\n icon?: ReactNode;\n /** When provided, Chip renders as a `<button>`. */\n onClick?: MouseEventHandler;\n disabled?: boolean;\n}\n\n/**\n * Compact pill for filters and single/multi choices. Interactive (a button,\n * with aria-pressed when `selected` is given) when `onClick` is set, otherwise\n * a static pill. For a passive content label use Tag instead.\n *\n * ```tsx\n * <Chip selected={filter === \"all\"} onClick={() => setFilter(\"all\")}>All</Chip>\n * <Chip variant=\"outline\" icon={<Icon name=\"pin\" size=\"sm\" />}>Nearby</Chip>\n * ```\n */\nexport function Chip({\n children,\n variant = \"soft\",\n selected,\n icon,\n onClick,\n disabled = false,\n className,\n ...rest\n}: ChipProps): ReactElement {\n const interactive = typeof onClick === \"function\";\n\n const shared = {\n className: cx(\n styles.chip,\n styles[`variant-${variant}`],\n selected && styles.selected,\n interactive && !disabled && styles.interactive,\n disabled && styles.disabled,\n className,\n ),\n ...rest,\n };\n\n const content = (\n <>\n {icon}\n {children}\n </>\n );\n\n return interactive ? (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n aria-pressed={selected === undefined ? undefined : selected}\n {...shared}\n >\n {content}\n </button>\n ) : (\n <span {...shared}>{content}</span>\n );\n}\n",".group {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.gap-hairline {\n gap: var(--mds-gap-hairline);\n}\n\n.gap-tight {\n gap: var(--mds-gap-tight);\n}\n\n.gap-base {\n gap: var(--mds-gap);\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./ChipGroup.module.css\";\n\nexport type ChipGroupGap = \"hairline\" | \"tight\" | \"base\";\n\nexport interface ChipGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Chips (or any inline items) laid out in a wrapping group. */\n children: ReactNode;\n /** Space between items, on the gap scale. Default \"tight\". */\n gap?: ChipGroupGap;\n}\n\n/**\n * Wrapping row of Chips for multi-select choices inside a form (pick several\n * days, locations, tags…). Items wrap onto new lines so nothing scrolls\n * off-screen; use ChipBar for a single-line scrolling filter strip.\n *\n * ```tsx\n * <ChipGroup>\n * {days.map((day) => (\n * <Chip key={day} selected={picked.has(day)} onClick={() => toggle(day)}>\n * {day}\n * </Chip>\n * ))}\n * </ChipGroup>\n * ```\n */\nexport function ChipGroup({ children, gap = \"tight\", className, ...rest }: ChipGroupProps): ReactElement {\n return (\n <div className={cx(styles.group, styles[`gap-${gap}`], className)} {...rest}>\n {children}\n </div>\n );\n}\n",".bar {\n display: flex;\n align-items: center;\n overflow-x: auto;\n scrollbar-width: none;\n min-width: 0;\n}\n\n.gap-hairline {\n gap: var(--mds-gap-hairline);\n}\n\n.gap-tight {\n gap: var(--mds-gap-tight);\n}\n\n.gap-base {\n gap: var(--mds-gap);\n}\n\n/* Frames the strip so its overflow reads as a scroll area. */\n.bordered {\n padding: var(--mds-space-1) var(--mds-space-3);\n border-radius: var(--mds-radius-pill);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n background: var(--mds-surface-sunken);\n}\n\n/* Fade only the trailing edge; the leading chip stays fully legible at rest.\n `black` is a mask stop, not a colour — only its alpha is read, so it is\n theme-independent by definition and deliberately not a token. */\n.fade {\n mask-image: linear-gradient(to right, black calc(100% - var(--mds-space-6)), transparent);\n}\n\n/* Each child keeps its intrinsic width so the row never wraps. */\n.item {\n flex: none;\n display: flex;\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { Children } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./ChipBar.module.css\";\n\nexport type ChipBarGap = \"hairline\" | \"tight\" | \"base\";\n\nexport interface ChipBarProps extends HTMLAttributes<HTMLDivElement> {\n /** Chips (or any inline items) laid out in a single scrolling row. */\n children: ReactNode;\n /** Space between items, on the gap scale. Default \"tight\". */\n gap?: ChipBarGap;\n /** Frame the strip so overflow reads as a scroll area. Default false. */\n bordered?: boolean;\n /** Fade the trailing edge to hint that the row scrolls. Default true. */\n fade?: boolean;\n}\n\n/**\n * Horizontally scrollable single-line row of Chips — a filter strip. Items\n * never wrap; the row scrolls when they overflow. `fade` dissolves the\n * trailing edge so the last chip hints at more rather than getting chopped\n * mid-word. Use ChipGroup for a wrapping set of choices inside a form.\n *\n * ```tsx\n * <ChipBar>\n * {segments.map((s) => (\n * <Chip key={s} selected={s === segment} onClick={() => setSegment(s)}>\n * {s}\n * </Chip>\n * ))}\n * </ChipBar>\n * ```\n */\nexport function ChipBar({\n children,\n gap = \"tight\",\n bordered = false,\n fade = true,\n className,\n ...rest\n}: ChipBarProps): ReactElement {\n return (\n <div\n className={cx(styles.bar, styles[`gap-${gap}`], bordered && styles.bordered, fade && styles.fade, className)}\n {...rest}\n >\n {Children.map(children, (child) => (\n <div className={styles.item}>{child}</div>\n ))}\n </div>\n );\n}\n",".button {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n padding: var(--mds-space-1) var(--mds-space-2);\n margin: calc(-1 * var(--mds-space-1)) calc(-1 * var(--mds-space-2));\n border: none;\n background: transparent;\n border-radius: var(--mds-radius-control);\n color: var(--mds-text-secondary);\n font: var(--mds-type-label);\n cursor: pointer;\n transition: var(--mds-transition-control);\n}\n\n.button:hover:not(:disabled) {\n background: var(--mds-surface-sunken);\n}\n\n.button:active:not(:disabled) {\n background: var(--mds-surface-selected);\n}\n\n.button:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n/* Active tint — the glyph inherits it via currentColor. */\n.tone-accent {\n color: var(--mds-accent);\n}\n\n.tone-danger {\n color: var(--mds-status-danger);\n}\n\n.glyph {\n display: inline-flex;\n align-items: center;\n}\n","import type { ButtonHTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Spinner } from \"../Spinner/Spinner\";\nimport styles from \"./CountButton.module.css\";\n\nexport type CountButtonTone = \"accent\" | \"danger\";\n\n/* Matches --mds-icon-md; the spinner replaces an md glyph without reflow. */\nconst SPINNER_PX = 20;\n\nexport interface CountButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"aria-label\" | \"aria-pressed\"> {\n /** Glyph shown before the text, e.g. `<Icon name=\"heart\" />` (md). */\n icon: ReactNode;\n /** Accessible label (required) — describes the action for screen readers. */\n label: string;\n /**\n * Toggle state. When defined, sets `aria-pressed` and tints the control\n * with the tone colour. Omit for non-toggle actions (e.g. comment).\n */\n active?: boolean;\n /** Token the active tint reads. Default \"accent\". */\n tone?: CountButtonTone;\n /**\n * The write behind this action is in flight. Swaps the glyph for a spinner\n * of the same size and locks the control — a second tap in that window\n * would toggle the write straight back off.\n */\n loading?: boolean;\n /** Visible text beside the icon — typically a count or a word. */\n children?: ReactNode;\n}\n\n/**\n * Inline, chrome-less pressable pairing an icon with a count or word — like,\n * comment, react actions. Owns hover, press, disabled, loading and active\n * (`aria-pressed`) states so consumers never hand-roll button chrome.\n *\n * The app owns the glyph, so it also owns the filled/outline swap:\n *\n * ```tsx\n * <CountButton\n * icon={<Icon name={liked ? \"heart-filled\" : \"heart\"} />}\n * label={liked ? \"Unlike\" : \"Like\"}\n * active={liked}\n * loading={likeMutation.isPending}\n * onClick={() => likeMutation.mutate()}\n * >\n * {likeCount}\n * </CountButton>\n * ```\n */\nexport function CountButton({\n icon,\n label,\n active,\n tone = \"accent\",\n disabled = false,\n loading = false,\n className,\n children,\n ...rest\n}: CountButtonProps): ReactElement {\n const isToggle = active !== undefined;\n\n return (\n <button\n type=\"button\"\n disabled={disabled || loading}\n aria-label={label}\n aria-pressed={isToggle ? active : undefined}\n aria-busy={loading || undefined}\n className={cx(styles.button, active && styles[`tone-${tone}`], className)}\n {...rest}\n >\n {/* The button's own aria-busy announces the wait; the spinner is decor. */}\n {loading ? <Spinner size={SPINNER_PX} label=\"\" aria-hidden=\"true\" /> : <span className={styles.glyph}>{icon}</span>}\n {children != null ? <span>{children}</span> : null}\n </button>\n );\n}\n",".field {\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-hairline);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.required {\n color: var(--mds-status-danger);\n margin-left: var(--mds-space-1);\n}\n\n.message {\n font: var(--mds-type-note);\n color: var(--mds-text-secondary);\n}\n\n.error {\n color: var(--mds-status-danger);\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createContext, useContext, useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Field.module.css\";\n\nexport interface FieldContextValue {\n /** Control id — the label points here. */\n id: string;\n /** Space-joined ids of hint/error, for aria-describedby. */\n describedBy: string | undefined;\n invalid: boolean;\n}\n\nconst FieldContext = createContext<FieldContextValue | null>(null);\n\n/** Controls call this to pick up Field wiring. Null outside a Field. */\nexport function useFieldContext(): FieldContextValue | null {\n return useContext(FieldContext);\n}\n\nexport interface FieldProps {\n label: string;\n children: ReactNode;\n /** Guidance under the control. */\n hint?: string;\n /** Validation message; replaces the hint and flags the control invalid. */\n error?: string;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Label + control + hint/error, wired for assistive tech. The control inside\n * (Input, Textarea, Select, …) picks up id, aria-describedby and aria-invalid\n * from context — no manual plumbing at call sites.\n *\n * ```tsx\n * <Field label=\"Email\" hint=\"Work email preferred\" error={errors.email} required>\n * <Input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} />\n * </Field>\n * ```\n */\nexport function Field({ label, children, hint, error, required = false, className }: FieldProps): ReactElement {\n const id = useId();\n const messageId = `${id}-message`;\n const message = error ?? hint;\n\n return (\n <div className={cx(styles.field, className)}>\n <label className={styles.label} htmlFor={id}>\n {label}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n <FieldContext.Provider\n value={{ id, describedBy: message ? messageId : undefined, invalid: error !== undefined }}\n >\n {children}\n </FieldContext.Provider>\n {message && (\n <span id={messageId} className={cx(styles.message, error !== undefined && styles.error)}>\n {message}\n </span>\n )}\n </div>\n );\n}\n",".wrap {\n position: relative;\n display: inline-flex;\n width: 100%;\n}\n\n.select {\n appearance: none;\n width: 100%;\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n cursor: pointer;\n transition: border-color var(--mds-transition-control);\n}\n\n.select:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n cursor: not-allowed;\n}\n\n.select[aria-invalid=\"true\"] {\n border-color: var(--mds-status-danger);\n}\n\n/* Room for the chevron. */\n.size-sm { height: var(--mds-control-h-sm); padding: 0 var(--mds-space-7) 0 var(--mds-space-2); font-size: var(--mds-text-sm); }\n.size-md { height: var(--mds-control-h-md); padding: 0 var(--mds-space-8) 0 var(--mds-space-3); font-size: var(--mds-text-base); }\n.size-lg { height: var(--mds-control-h-lg); padding: 0 var(--mds-space-8) 0 var(--mds-space-4); font-size: var(--mds-text-base); }\n\n.chevron {\n position: absolute;\n right: var(--mds-space-2);\n top: 50%;\n transform: translateY(-50%);\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n color: var(--mds-text-secondary);\n pointer-events: none;\n}\n","import type { ReactElement, Ref, SelectHTMLAttributes } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useFieldContext } from \"../Field/Field\";\nimport styles from \"./Select.module.css\";\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, \"size\"> {\n size?: SelectSize;\n ref?: Ref<HTMLSelectElement>;\n}\n\n/**\n * Native select, styled. Native = free keyboard, mobile pickers, screen\n * reader behavior; a custom popover earns its complexity only when options\n * need rich content.\n *\n * ```tsx\n * <Field label=\"Language\">\n * <Select value={lang} onChange={(e) => setLang(e.target.value)}>\n * <option value=\"de\">Deutsch</option>\n * <option value=\"en\">English</option>\n * </Select>\n * </Field>\n * ```\n */\nexport function Select({ size = \"md\", className, children, ...rest }: SelectProps): ReactElement {\n const field = useFieldContext();\n return (\n <span className={styles.wrap}>\n <select\n id={rest.id ?? field?.id}\n aria-describedby={rest[\"aria-describedby\"] ?? field?.describedBy}\n aria-invalid={rest[\"aria-invalid\"] ?? (field?.invalid || undefined)}\n className={cx(styles.select, styles[`size-${size}`], className)}\n {...rest}\n >\n {children}\n </select>\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.chevron}>\n <path d=\"M4 6l4 4 4-4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n );\n}\n","import { createContext } from \"react\";\n\nexport interface OverlayHistory {\n /**\n * An overlay has opened. The implementation adds a history entry, and calls\n * `onPop` if the user goes back to it. Returns a dispose for when the\n * overlay closes some other way — its close button, Escape, the scrim, or\n * unmounting. The implementation owes the entry back: one left behind is a\n * back tap that does nothing.\n */\n register(onPop: () => void): () => void;\n}\n\n/**\n * On a phone, back is also the dismiss gesture: an open overlay that ignores\n * it costs the user the screen underneath instead. The library owns *when* an\n * overlay opens and closes; the app owns the history mechanism, because a raw\n * `history.pushState` from a library corrupts a router's own bookkeeping\n * (React Router keeps its index in `history.state`).\n *\n * Null wherever no app has supplied one — Storybook, a unit test, a consumer\n * that has not opted in. Overlays go on working; they just do not answer back.\n *\n * `useOverlay` registers every open overlay, so Modal, Sheet and\n * ConfirmDialog are covered with no per-call-site wiring:\n *\n * ```tsx\n * // App root — e.g. backed by the app router:\n * const overlayHistory = useMemo<OverlayHistory>(() => ({\n * register(onPop) {\n * pushOverlayEntry(onPop); // app-owned, via the router\n * return () => popOverlayEntry(); // give the entry back\n * },\n * }), []);\n *\n * <OverlayHistoryContext.Provider value={overlayHistory}>\n * <App />\n * </OverlayHistoryContext.Provider>\n * ```\n */\nexport const OverlayHistoryContext = createContext<OverlayHistory | null>(null);\n","import { useContext, useEffect, useRef } from \"react\";\nimport type { RefObject } from \"react\";\nimport { OverlayHistoryContext } from \"./overlayHistory\";\n\nexport interface UseOverlayOptions {\n open: boolean;\n onClose: () => void;\n}\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 * Shared modal-surface behaviour: focus capture and restore, Escape to\n * close, Tab cycling inside the panel, body scroll lock. Attach the\n * returned ref to the dialog element (it needs tabIndex={-1}).\n *\n * Anchor-positioned overlays (Tooltip/Popover) will extend this hook with\n * a floating-ui middleware pass; the options object leaves room for that.\n */\nexport function useOverlay<T extends HTMLElement>(options: UseOverlayOptions): RefObject<T | null> {\n const ref = useRef<T>(null);\n const { open, onClose } = options;\n const close = useRef(onClose);\n useEffect(() => {\n close.current = onClose;\n }, [onClose]);\n\n /* Back-button contract: an app that supplies OverlayHistory gets every open\n overlay registered, so back dismisses the innermost one instead of leaving\n the screen underneath. Null context (Storybook, tests, non-opted apps) is\n a no-op. The register/dispose pair keeps history balanced either way. */\n const overlayHistory = useContext(OverlayHistoryContext);\n useEffect(() => {\n if (!open || !overlayHistory) return;\n return overlayHistory.register(() => close.current());\n }, [open, overlayHistory]);\n\n useEffect(() => {\n if (!open) return;\n const panel = ref.current;\n const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n panel?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n close.current();\n return;\n }\n if (event.key !== \"Tab\" || !panel) return;\n const focusable = [...panel.querySelectorAll<HTMLElement>(FOCUSABLE)];\n if (focusable.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === panel)) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first?.focus();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n const bodyOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.body.style.overflow = bodyOverflow;\n previous?.focus();\n };\n }, [open]);\n\n return ref;\n}\n","import { useEffect, useState } from \"react\";\n\nexport interface Presence {\n /** Keep the element in the DOM (true during exit animation). */\n mounted: boolean;\n /** Drive the visual state — false during exit. */\n visible: boolean;\n}\n\n/**\n * Exit-animation helper. `open` flips instantly; `mounted` lags by\n * `durationMs` on close so the exit transition can play.\n */\nexport function usePresence(open: boolean, durationMs: number): Presence {\n const [mounted, setMounted] = useState(open);\n\n // Sync on open belongs in render, not an effect (\"adjusting state when\n // props change\" pattern) — the effect only owns the exit timer.\n if (open && !mounted) setMounted(true);\n\n useEffect(() => {\n if (open) return;\n const timer = setTimeout(() => setMounted(false), durationMs);\n return () => clearTimeout(timer);\n }, [open, durationMs]);\n\n return { mounted: open || mounted, visible: open };\n}\n",".scrim {\n position: fixed;\n inset: 0;\n display: flex;\n background: var(--mds-scrim);\n opacity: 0;\n transition: opacity var(--mds-dur-base) var(--mds-ease-standard);\n}\n\n.scrim[data-open] {\n opacity: 1;\n}\n\n.variant-modal {\n z-index: var(--mds-z-modal);\n align-items: center;\n justify-content: center;\n padding: var(--mds-pad-page-x);\n}\n\n.variant-sheet {\n z-index: var(--mds-z-sheet);\n align-items: flex-end;\n}\n","import { createPortal } from \"react-dom\";\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useOverlay } from \"../../hooks/useOverlay\";\nimport { usePresence } from \"../../hooks/usePresence\";\nimport styles from \"./Overlay.module.css\";\n\n/** Matches --mds-dur-base; usePresence needs the number in JS. */\nexport const OVERLAY_EXIT_MS = 200;\n\nexport interface OverlayProps {\n open: boolean;\n onClose: () => void;\n /** Accessible name of the dialog. */\n label: string;\n variant: \"modal\" | \"sheet\";\n /** Scrim click dismisses. Confirmations turn this off. */\n closeOnScrimClick: boolean;\n panelClassName: string | undefined;\n children: ReactNode;\n}\n\n/**\n * Internal shell shared by Modal and Sheet: portal, scrim, dialog\n * semantics, useOverlay behaviour, exit-animation presence. Not exported\n * from the package.\n */\nexport function Overlay({ open, onClose, label, variant, closeOnScrimClick, panelClassName, children }: OverlayProps) {\n const { mounted, visible } = usePresence(open, OVERLAY_EXIT_MS);\n const ref = useOverlay<HTMLDivElement>({ open, onClose });\n\n if (!mounted) return null;\n\n return createPortal(\n <div\n className={cx(styles.scrim, styles[`variant-${variant}`])}\n data-open={visible || undefined}\n data-testid=\"mds-scrim\"\n onClick={closeOnScrimClick ? onClose : undefined}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label}\n tabIndex={-1}\n className={panelClassName}\n data-open={visible || undefined}\n onClick={(event) => event.stopPropagation()}\n >\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n",".panel {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-height: 85dvh;\n background: var(--mds-surface-raised);\n border-radius: var(--mds-radius-sheet) var(--mds-radius-sheet) 0 0;\n box-shadow: var(--mds-elevation-sheet);\n transform: translateY(100%);\n transition: var(--mds-transition-sheet);\n}\n\n.panel[data-open] {\n transform: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: var(--mds-pad-card) var(--mds-pad-card) 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.body {\n flex: 1;\n overflow-y: auto;\n padding: var(--mds-pad-card);\n}\n\n.footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--mds-gap);\n padding: 0 var(--mds-pad-card) var(--mds-pad-card);\n}\n","import type { ReactNode } from \"react\";\nimport { Overlay } from \"../Overlay/Overlay\";\nimport styles from \"./Sheet.module.css\";\n\nexport interface SheetProps {\n open: boolean;\n onClose: () => void;\n /** Accessible name of the dialog. */\n label: string;\n /** Scrim click dismisses. Default true. */\n closeOnScrimClick?: boolean;\n children: ReactNode;\n}\n\n/**\n * Bottom sheet. Same composition and dismissal model as Modal:\n *\n * ```tsx\n * <Sheet open={open} onClose={() => setOpen(false)} label=\"Filters\">\n * <SheetHeader>Filters</SheetHeader>\n * <SheetBody>…</SheetBody>\n * <SheetFooter><Button onClick={apply}>Apply</Button></SheetFooter>\n * </Sheet>\n * ```\n */\nexport function Sheet({ open, onClose, label, closeOnScrimClick = true, children }: SheetProps) {\n return (\n <Overlay\n open={open}\n onClose={onClose}\n label={label}\n variant=\"sheet\"\n closeOnScrimClick={closeOnScrimClick}\n panelClassName={styles.panel}\n >\n {children}\n </Overlay>\n );\n}\n\nexport function SheetHeader({ children }: { children: ReactNode }) {\n return <div className={styles.header}>{children}</div>;\n}\n\nexport function SheetBody({ children }: { children: ReactNode }) {\n return <div className={styles.body}>{children}</div>;\n}\n\nexport function SheetFooter({ children }: { children: ReactNode }) {\n return <div className={styles.footer}>{children}</div>;\n}\n","/* Trigger — reads like an Input so it sits beside form fields. */\n.trigger {\n display: flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n width: 100%;\n height: var(--mds-control-h-md);\n padding: 0 var(--mds-pad-control);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-muted);\n font: var(--mds-type-body);\n text-align: left;\n cursor: pointer;\n transition: var(--mds-transition-control);\n}\n\n.trigger:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.hasValue {\n color: var(--mds-text-primary);\n}\n\n.triggerLabel {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.glyph {\n flex: none;\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n\n.timeRow {\n display: flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n margin-bottom: var(--mds-stack-group);\n color: var(--mds-text-secondary);\n}\n\n.grow {\n flex: 1;\n}\n\n.meridiem {\n flex: none;\n}\n\n.colon {\n color: var(--mds-text-muted);\n}\n\n.calendarHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--mds-gap-tight);\n}\n\n.monthLabel {\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n margin-bottom: var(--mds-space-1);\n}\n\n.weekday {\n text-align: center;\n font: var(--mds-type-meta);\n color: var(--mds-text-muted);\n}\n\n/* Fixed 6-row height so the panel does not jump between 4/5/6-week months. */\n.grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n grid-auto-rows: var(--mds-tap-min);\n min-height: calc(6 * var(--mds-tap-min));\n align-items: stretch;\n}\n\n.day {\n border: none;\n background: transparent;\n border-radius: var(--mds-radius-control);\n color: var(--mds-text-primary);\n font: var(--mds-type-body);\n cursor: pointer;\n transition: var(--mds-transition-control);\n}\n\n.day:hover:not(:disabled) {\n background: var(--mds-surface-sunken);\n}\n\n.day:disabled {\n color: var(--mds-text-muted);\n opacity: 0.5;\n cursor: default;\n}\n\n.today {\n font-weight: var(--mds-weight-semibold);\n color: var(--mds-text-accent);\n}\n\n.selected {\n background: var(--mds-accent);\n color: var(--mds-accent-contrast);\n}\n\n.selected:hover:not(:disabled) {\n background: var(--mds-accent-hover);\n}\n\n/* Neighbour-month filler: keeps the week shape, draws no attention. */\n.outside {\n visibility: hidden;\n}\n","import type { KeyboardEvent, ReactElement } from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Button } from \"../Button/Button\";\nimport { Select } from \"../Select/Select\";\nimport { Sheet, SheetBody, SheetFooter, SheetHeader } from \"../Sheet/Sheet\";\nimport styles from \"./DateTimePicker.module.css\";\n\nexport interface DateTimePickerLabels {\n /** Accessible name of the picker dialog. */\n dialog: string;\n previousMonth: string;\n nextMonth: string;\n today: string;\n done: string;\n hour: string;\n minute: string;\n dayPeriod: string;\n}\n\nconst DEFAULT_LABELS: DateTimePickerLabels = {\n dialog: \"Pick date and time\",\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n today: \"Today\",\n done: \"Done\",\n hour: \"Hour\",\n minute: \"Minutes\",\n dayPeriod: \"AM/PM\",\n};\n\nexport interface DateTimePickerProps {\n /** Current value as an ISO 8601 string. */\n value?: string | undefined;\n /** Fires with the combined ISO string when the user confirms. */\n onChange: (iso: string) => void;\n /** Shown on the trigger when nothing is selected. */\n placeholder?: string | undefined;\n /** Earliest selectable moment as an ISO string. Default: now. */\n min?: string | undefined;\n /** Minute granularity. Default 5; use 30 for :00/:30 only. */\n minuteStep?: number | undefined;\n disabled?: boolean | undefined;\n /** Applied to the trigger button so a `<label htmlFor>` can point at it. */\n id?: string | undefined;\n /** Field name for the trigger, e.g. \"Starts\". Announced alongside the value. */\n \"aria-label\"?: string | undefined;\n /** BCP 47 tag for names, week start and hour cycle. Default: runtime locale. */\n locale?: string | undefined;\n /** Overrides for the picker's own strings (defaults are English). */\n labels?: Partial<DateTimePickerLabels> | undefined;\n}\n\n/* --- Intl-derived locale facts, computed once per locale ------------------ */\n\ninterface LocaleData {\n /** JS day index (0 = Sunday) the week starts on. */\n firstDay: number;\n /** Weekday column headers, ordered from firstDay. */\n weekdays: string[];\n /** 12-hour clock? */\n hour12: boolean;\n /** Localized day-period labels, e.g. [\"AM\", \"PM\"]. */\n dayPeriods: [string, string];\n monthTitle: Intl.DateTimeFormat;\n dayLabel: Intl.DateTimeFormat;\n full: Intl.DateTimeFormat;\n}\n\n/* getWeekInfo is not in the TS lib yet; some engines expose it as an accessor. */\ninterface WeekInfoLocale extends Intl.Locale {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n}\n\nfunction localeData(locale: string | undefined): LocaleData {\n const resolved = new Intl.DateTimeFormat(locale).resolvedOptions().locale;\n\n /* Spec counts 1 = Monday … 7 = Sunday; JS Date counts 0 = Sunday. Engines\n without weekInfo fall back to Monday — most of the world's week start. */\n const intlLocale = new Intl.Locale(resolved) as WeekInfoLocale;\n const weekInfo = intlLocale.getWeekInfo?.() ?? intlLocale.weekInfo;\n const firstDay = (weekInfo?.firstDay ?? 1) % 7;\n\n /* 2021-08-01 was a Sunday; format a known week to get the headers. */\n const weekdayFmt = new Intl.DateTimeFormat(resolved, { weekday: \"short\", timeZone: \"UTC\" });\n const weekdays = Array.from({ length: 7 }, (_, i) =>\n weekdayFmt.format(new Date(Date.UTC(2021, 7, 1 + ((firstDay + i) % 7)))),\n );\n\n const hourFmt = new Intl.DateTimeFormat(resolved, { hour: \"numeric\" });\n const { hourCycle } = hourFmt.resolvedOptions();\n const hour12 = hourCycle === \"h11\" || hourCycle === \"h12\";\n\n const periodOf = (hour: number): string =>\n new Intl.DateTimeFormat(resolved, { hour: \"numeric\", hour12: true })\n .formatToParts(new Date(2021, 0, 1, hour))\n .find((part) => part.type === \"dayPeriod\")?.value ?? (hour < 12 ? \"AM\" : \"PM\");\n\n return {\n firstDay,\n weekdays,\n hour12,\n dayPeriods: [periodOf(9), periodOf(21)],\n monthTitle: new Intl.DateTimeFormat(resolved, { month: \"long\", year: \"numeric\" }),\n dayLabel: new Intl.DateTimeFormat(resolved, { month: \"long\", day: \"numeric\", year: \"numeric\" }),\n full: new Intl.DateTimeFormat(resolved, {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }),\n };\n}\n\n/* --- date arithmetic ------------------------------------------------------ */\n\nfunction startOfDay(d: Date): number {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n}\n\nfunction snapMinutes(d: Date, step: number): Date {\n const out = new Date(d);\n out.setMinutes(Math.round(out.getMinutes() / step) * step, 0, 0);\n return out;\n}\n\nfunction addDays(d: Date, n: number): Date {\n const o = new Date(d);\n o.setDate(o.getDate() + n);\n return o;\n}\n\nfunction addMonths(d: Date, n: number): Date {\n const o = new Date(d);\n o.setMonth(o.getMonth() + n);\n return o;\n}\n\nfunction minuteOptions(step: number): number[] {\n const s = Math.max(1, Math.min(60, Math.floor(step)));\n return Array.from({ length: Math.floor(60 / s) }, (_, i) => i * s);\n}\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, \"0\");\n}\n\n/* --- glyphs — internal chrome, like Tag's remove ✕; no registry contract --- */\n\nconst chevronLeft = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <path d=\"M10 3l-5 5 5 5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\nconst chevronRight = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <path d=\"M6 3l5 5-5 5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\nconst calendarGlyph = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 6.5h11M5.5 2v2.5M10.5 2v2.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n);\nconst clockGlyph = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <circle cx=\"8\" cy=\"8\" r=\"5.75\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 5v3.25l2 1.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n/**\n * Mobile-first date + time picker. A trigger styled like Input opens a bottom\n * sheet with a month calendar (roving-focus grid, arrow keys move the day)\n * and native Select time controls. Controlled via `value` (ISO); emits the\n * combined ISO string on confirm. All names, the week start and the 12/24-hour\n * clock come from `Intl` for the given locale.\n *\n * ```tsx\n * <Field label=\"Starts\">\n * <DateTimePicker\n * value={startsAt}\n * onChange={setStartsAt}\n * min={new Date().toISOString()}\n * minuteStep={30}\n * locale={i18n.language}\n * />\n * </Field>\n * ```\n */\nexport function DateTimePicker({\n value,\n onChange,\n placeholder = \"Select date & time\",\n min,\n minuteStep = 5,\n disabled = false,\n id,\n \"aria-label\": ariaLabel,\n locale,\n labels,\n}: DateTimePickerProps): ReactElement {\n const text: DateTimePickerLabels = { ...DEFAULT_LABELS, ...labels };\n const intl = useMemo(() => localeData(locale), [locale]);\n\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<Date>(() => new Date());\n const [view, setView] = useState<{ y: number; m: number }>(() => {\n const d = new Date();\n return { y: d.getFullYear(), m: d.getMonth() };\n });\n /* The calendar grid is a single tab stop: `focusedDay` is the one day that\n carries tabIndex 0; arrow keys move it (roving focus), crossing months. */\n const [focusedDay, setFocusedDay] = useState<Date>(() => new Date());\n const dayRefs = useRef<Map<number, HTMLButtonElement>>(new Map());\n const pendingFocusRef = useRef(false);\n\n const minDate = min ? new Date(min) : new Date();\n const minStart = startOfDay(minDate);\n\n /* Re-seed the draft + visible month from the current value each time the\n panel opens. When `value` precedes `min` the roving tab stop clamps to\n `min`, and the view must follow it or no day in the grid is focusable. */\n function openPicker(): void {\n const base = snapMinutes(value ? new Date(value) : new Date(), minuteStep);\n setDraft(base);\n const start = startOfDay(base) >= minStart ? base : new Date(minStart);\n setView({ y: start.getFullYear(), m: start.getMonth() });\n setFocusedDay(start);\n setOpen(true);\n }\n\n /* Move DOM focus onto the roving target after an arrow-key move (only then —\n never steal focus when the panel first opens). */\n useEffect(() => {\n if (!pendingFocusRef.current) return;\n pendingFocusRef.current = false;\n dayRefs.current.get(startOfDay(focusedDay))?.focus();\n }, [focusedDay, view]);\n\n const h24 = draft.getHours();\n const h12 = h24 % 12 || 12;\n const isPM = h24 >= 12;\n\n function setHour(v: string): void {\n const nd = new Date(draft);\n nd.setHours(intl.hour12 ? (Number(v) % 12) + (isPM ? 12 : 0) : Number(v));\n setDraft(nd);\n }\n function setMinute(v: string): void {\n const nd = new Date(draft);\n nd.setMinutes(Number(v), 0, 0);\n setDraft(nd);\n }\n function setMeridiem(v: string): void {\n const nd = new Date(draft);\n nd.setHours((h12 % 12) + (v === \"pm\" ? 12 : 0));\n setDraft(nd);\n }\n function pickDay(day: number): void {\n const nd = new Date(draft);\n nd.setFullYear(view.y, view.m, day);\n setDraft(nd);\n }\n /* First selectable day in a month — the 1st, or `min` when it falls\n mid-month. Keeps the roving tab stop pointed at an enabled, in-view day. */\n function firstFocusableInView(y: number, m: number): Date {\n const monthStart = new Date(y, m, 1);\n return startOfDay(monthStart) >= minStart ? monthStart : new Date(minStart);\n }\n function shiftMonth(delta: number): void {\n let m = view.m + delta;\n let y = view.y;\n if (m < 0) { m = 11; y -= 1; }\n if (m > 11) { m = 0; y += 1; }\n setView({ y, m });\n setFocusedDay(firstFocusableInView(y, m));\n }\n function goToday(): void {\n const t = new Date();\n setView({ y: t.getFullYear(), m: t.getMonth() });\n setFocusedDay(startOfDay(t) >= minStart ? t : new Date(minStart));\n }\n /* Move the roving focus to `next` (clamped to >= min), following it across a\n month boundary, then focus the target cell once it renders. */\n function focusDate(next: Date): void {\n if (startOfDay(next) < minStart) return;\n pendingFocusRef.current = true;\n if (next.getMonth() !== view.m || next.getFullYear() !== view.y) {\n setView({ y: next.getFullYear(), m: next.getMonth() });\n }\n setFocusedDay(next);\n }\n function onDayKeyDown(e: KeyboardEvent<HTMLButtonElement>, cell: Date): void {\n /* Home/End go to the locale's start/end of week, not Sunday/Saturday. */\n const weekOffset = (cell.getDay() - intl.firstDay + 7) % 7;\n switch (e.key) {\n case \"ArrowLeft\": e.preventDefault(); focusDate(addDays(cell, -1)); break;\n case \"ArrowRight\": e.preventDefault(); focusDate(addDays(cell, 1)); break;\n case \"ArrowUp\": e.preventDefault(); focusDate(addDays(cell, -7)); break;\n case \"ArrowDown\": e.preventDefault(); focusDate(addDays(cell, 7)); break;\n case \"Home\": e.preventDefault(); focusDate(addDays(cell, -weekOffset)); break;\n case \"End\": e.preventDefault(); focusDate(addDays(cell, 6 - weekOffset)); break;\n case \"PageUp\": e.preventDefault(); focusDate(addMonths(cell, -1)); break;\n case \"PageDown\": e.preventDefault(); focusDate(addMonths(cell, 1)); break;\n case \"Enter\":\n case \" \":\n e.preventDefault();\n pickDay(cell.getDate());\n break;\n default: break;\n }\n }\n function confirm(): void {\n onChange(draft.toISOString());\n setOpen(false);\n }\n\n const first = new Date(view.y, view.m, 1);\n const startWeekday = (first.getDay() - intl.firstDay + 7) % 7;\n const daysInMonth = new Date(view.y, view.m + 1, 0).getDate();\n const prevDisabled =\n view.y < minDate.getFullYear() || (view.y === minDate.getFullYear() && view.m <= minDate.getMonth());\n const todayStart = startOfDay(new Date());\n const draftStart = startOfDay(draft);\n\n /* Render the month's natural span of weeks: trailing days of the previous\n month, in-month days 1..N, then enough of the next month to complete the\n last week (4/5/6 rows). Neighbour-month days are dimmed + non-interactive;\n the grid reserves 6 rows of height so the panel never jumps. */\n const spanCells = Math.ceil((startWeekday + daysInMonth) / 7) * 7;\n const dayCells = Array.from({ length: spanCells }, (_, i) => {\n const cell = new Date(view.y, view.m, 1 - startWeekday + i);\n const inMonth = cell.getMonth() === view.m && cell.getFullYear() === view.y;\n const cellStart = cell.getTime();\n const isDisabled = !inMonth || cellStart < minStart;\n const isSelected = inMonth && cellStart === draftStart;\n const isToday = inMonth && cellStart === todayStart;\n const isFocusTarget = inMonth && !isDisabled && cellStart === startOfDay(focusedDay);\n return (\n <button\n key={`c-${i}`}\n type=\"button\"\n disabled={isDisabled}\n /* Single tab stop: only the roving-focus day is tabbable; the rest are\n reached with the arrow keys (WCAG 2.1.1 / grid pattern). */\n tabIndex={isFocusTarget ? 0 : -1}\n ref={\n inMonth && !isDisabled\n ? (el): void => {\n if (el) dayRefs.current.set(cellStart, el);\n else dayRefs.current.delete(cellStart);\n }\n : undefined\n }\n aria-hidden={inMonth ? undefined : true}\n aria-label={intl.dayLabel.format(cell)}\n aria-pressed={isSelected}\n onClick={inMonth ? () => pickDay(cell.getDate()) : undefined}\n onKeyDown={inMonth && !isDisabled ? (e) => onDayKeyDown(e, cell) : undefined}\n className={cx(styles.day, isToday && styles.today, isSelected && styles.selected, !inMonth && styles.outside)}\n >\n {cell.getDate()}\n </button>\n );\n });\n\n return (\n <>\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n /* Announce the field name (when given) alongside the current value. */\n aria-label={\n ariaLabel\n ? `${ariaLabel}: ${value ? intl.full.format(new Date(value)) : placeholder}`\n : undefined\n }\n onClick={openPicker}\n className={cx(styles.trigger, value && styles.hasValue)}\n >\n {calendarGlyph}\n <span className={styles.triggerLabel}>{value ? intl.full.format(new Date(value)) : placeholder}</span>\n </button>\n\n <Sheet open={open} onClose={() => setOpen(false)} label={ariaLabel ?? text.dialog}>\n <SheetHeader>{intl.full.format(draft)}</SheetHeader>\n <SheetBody>\n <div className={styles.timeRow}>\n {clockGlyph}\n {intl.hour12 ? (\n <>\n <Select aria-label={text.hour} value={String(h12)} onChange={(e) => setHour(e.target.value)} className={styles.grow}>\n {Array.from({ length: 12 }, (_, i) => (\n <option key={i + 1} value={String(i + 1)}>\n {i + 1}\n </option>\n ))}\n </Select>\n <span className={styles.colon} aria-hidden=\"true\">:</span>\n <Select aria-label={text.minute} value={String(draft.getMinutes())} onChange={(e) => setMinute(e.target.value)} className={styles.grow}>\n {minuteOptions(minuteStep).map((m) => (\n <option key={m} value={String(m)}>\n {pad2(m)}\n </option>\n ))}\n </Select>\n <Select aria-label={text.dayPeriod} value={isPM ? \"pm\" : \"am\"} onChange={(e) => setMeridiem(e.target.value)} className={styles.meridiem}>\n <option value=\"am\">{intl.dayPeriods[0]}</option>\n <option value=\"pm\">{intl.dayPeriods[1]}</option>\n </Select>\n </>\n ) : (\n <>\n <Select aria-label={text.hour} value={String(h24)} onChange={(e) => setHour(e.target.value)} className={styles.grow}>\n {Array.from({ length: 24 }, (_, i) => (\n <option key={i} value={String(i)}>\n {pad2(i)}\n </option>\n ))}\n </Select>\n <span className={styles.colon} aria-hidden=\"true\">:</span>\n <Select aria-label={text.minute} value={String(draft.getMinutes())} onChange={(e) => setMinute(e.target.value)} className={styles.grow}>\n {minuteOptions(minuteStep).map((m) => (\n <option key={m} value={String(m)}>\n {pad2(m)}\n </option>\n ))}\n </Select>\n </>\n )}\n </div>\n\n <div role=\"group\" aria-label={intl.monthTitle.format(first)}>\n <div className={styles.calendarHeader}>\n <Button\n iconOnly\n aria-label={text.previousMonth}\n variant=\"ghost\"\n size=\"sm\"\n disabled={prevDisabled}\n onClick={() => shiftMonth(-1)}\n >\n {chevronLeft}\n </Button>\n <span className={styles.monthLabel}>{intl.monthTitle.format(first)}</span>\n <Button iconOnly aria-label={text.nextMonth} variant=\"ghost\" size=\"sm\" onClick={() => shiftMonth(1)}>\n {chevronRight}\n </Button>\n </div>\n <div className={styles.weekdays}>\n {intl.weekdays.map((w, i) => (\n <span key={`wd-${i}`} aria-hidden=\"true\" className={styles.weekday}>\n {w}\n </span>\n ))}\n </div>\n <div className={styles.grid}>{dayCells}</div>\n </div>\n </SheetBody>\n <SheetFooter>\n <Button variant=\"ghost\" onClick={goToday}>\n {text.today}\n </Button>\n <Button variant=\"primary\" onClick={confirm}>\n {text.done}\n </Button>\n </SheetFooter>\n </Sheet>\n </>\n );\n}\n",".tag {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n padding: var(--mds-space-1) var(--mds-space-2);\n border-radius: var(--mds-radius-tag);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n background: var(--mds-surface-card);\n color: var(--mds-text-secondary);\n font: var(--mds-type-label);\n white-space: nowrap;\n}\n\n.tone-accent {\n background: var(--mds-accent-soft);\n border-color: transparent;\n color: var(--mds-text-primary);\n}\n\n.remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n padding: 0;\n margin-right: calc(-1 * var(--mds-space-1));\n width: var(--mds-icon-md);\n height: var(--mds-icon-md);\n border-radius: var(--mds-radius-pill);\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n\n.remove:hover {\n background: var(--mds-surface-sunken);\n}\n\n.removeGlyph {\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Tag.module.css\";\n\nexport type TagTone = \"neutral\" | \"accent\";\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n tone?: TagTone;\n /** Renders a labelled ✕ button. Label reads \"Remove <content>\" when content is text. */\n onRemove?: () => void;\n}\n\n/**\n * Content label chip — categories, filters, topics.\n *\n * ```tsx\n * <Tag>Design</Tag>\n * <Tag tone=\"accent\" onRemove={() => remove(id)}>Beginner</Tag>\n * ```\n */\nexport function Tag({ children, tone = \"neutral\", onRemove, className, ...rest }: TagProps): ReactElement {\n const text = typeof children === \"string\" ? children : undefined;\n return (\n <span className={cx(styles.tag, styles[`tone-${tone}`], className)} {...rest}>\n {children}\n {onRemove && (\n <button\n type=\"button\"\n className={styles.remove}\n aria-label={text ? `Remove ${text}` : \"Remove\"}\n onClick={onRemove}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.removeGlyph}>\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </span>\n );\n}\n",".divider {\n background: var(--mds-border-subtle);\n flex: none;\n}\n\n.horizontal {\n height: var(--mds-border-width);\n width: 100%;\n}\n\n.vertical {\n width: var(--mds-border-width);\n align-self: stretch;\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Divider.module.css\";\n\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n/**\n * Visual separator. Semantic separator role via <hr>-equivalent div.\n *\n * ```tsx\n * <Divider />\n * <Divider orientation=\"vertical\" />\n * ```\n */\nexport function Divider({ orientation = \"horizontal\", className, ...rest }: DividerProps): ReactElement {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation === \"vertical\" ? \"vertical\" : undefined}\n className={cx(styles.divider, styles[orientation], className)}\n {...rest}\n />\n );\n}\n",".skeleton {\n display: block;\n background: var(--mds-surface-sunken);\n animation: pulse var(--mds-dur-pulse) var(--mds-ease-standard) infinite;\n width: var(--skeleton-w, 100%);\n}\n\n.variant-text {\n height: var(--skeleton-h, 1em);\n border-radius: var(--mds-radius-1);\n}\n\n.variant-rect {\n height: var(--skeleton-h, var(--mds-space-10));\n border-radius: var(--mds-radius-media);\n}\n\n.variant-circle {\n width: var(--skeleton-w, var(--mds-avatar-md));\n height: var(--skeleton-h, var(--mds-avatar-md));\n border-radius: var(--mds-radius-pill);\n}\n\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.55; }\n}\n","import type { CSSProperties, HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Skeleton.module.css\";\n\nexport type SkeletonVariant = \"text\" | \"rect\" | \"circle\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: SkeletonVariant;\n /** Any CSS length. Text defaults to full width, one line tall. */\n width?: string;\n height?: string;\n}\n\n/**\n * Loading placeholder. aria-hidden — the loading announcement belongs to the\n * region (aria-busy), not to each shimmering box.\n *\n * ```tsx\n * <div aria-busy={loading}>\n * {loading ? (\n * <Stack gap=\"tight\">\n * <Skeleton width=\"40%\" />\n * <Skeleton />\n * <Skeleton variant=\"rect\" height=\"8rem\" />\n * </Stack>\n * ) : (\n * content\n * )}\n * </div>\n * ```\n */\nexport function Skeleton({\n variant = \"text\",\n width,\n height,\n className,\n style,\n ...rest\n}: SkeletonProps): ReactElement {\n const vars = {\n ...(width ? { \"--skeleton-w\": width } : {}),\n ...(height ? { \"--skeleton-h\": height } : {}),\n } as CSSProperties;\n return (\n <span\n aria-hidden=\"true\"\n className={cx(styles.skeleton, styles[`variant-${variant}`], className)}\n style={{ ...vars, ...style }}\n {...rest}\n />\n );\n}\n",".track {\n display: block;\n width: 100%;\n height: var(--mds-space-2);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-sunken);\n overflow: hidden;\n}\n\n.fill {\n display: block;\n height: 100%;\n width: var(--progress, 0%);\n border-radius: inherit;\n background: var(--mds-accent);\n transition: width var(--mds-transition-control);\n}\n\n.indeterminate .fill {\n width: 40%;\n animation: slide var(--mds-dur-pulse) var(--mds-ease-standard) infinite;\n}\n\n@keyframes slide {\n from { transform: translateX(-100%); }\n to { transform: translateX(250%); }\n}\n","import type { CSSProperties, HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./ProgressBar.module.css\";\n\nexport interface ProgressBarProps extends HTMLAttributes<HTMLDivElement> {\n /** 0–100; clamped. Ignored when indeterminate. */\n value?: number;\n /** Accessible name — required. A bare bar announces nothing useful. */\n label: string;\n indeterminate?: boolean;\n}\n\n/**\n * Determinate or indeterminate progress track.\n *\n * ```tsx\n * <ProgressBar label=\"Upload\" value={64} />\n * <ProgressBar label=\"Syncing\" indeterminate />\n * ```\n */\nexport function ProgressBar({\n value = 0,\n label,\n indeterminate = false,\n className,\n style,\n ...rest\n}: ProgressBarProps): ReactElement {\n const clamped = Math.min(100, Math.max(0, value));\n return (\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={indeterminate ? undefined : clamped}\n className={cx(styles.track, indeterminate && styles.indeterminate, className)}\n style={{ ...( { \"--progress\": `${clamped}%` } as CSSProperties), ...style }}\n {...rest}\n >\n <span className={styles.fill} />\n </div>\n );\n}\n",".input {\n width: 100%;\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n transition: border-color var(--mds-transition-control);\n}\n\n.input::placeholder {\n color: var(--mds-text-muted);\n}\n\n.input:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n cursor: not-allowed;\n}\n\n.input[aria-invalid=\"true\"] {\n border-color: var(--mds-status-danger);\n}\n\n.size-sm { height: var(--mds-control-h-sm); padding: 0 var(--mds-space-2); font-size: var(--mds-text-sm); }\n.size-md { height: var(--mds-control-h-md); padding: 0 var(--mds-space-3); font-size: var(--mds-text-base); }\n.size-lg { height: var(--mds-control-h-lg); padding: 0 var(--mds-space-4); font-size: var(--mds-text-base); }\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useFieldContext } from \"../Field/Field\";\nimport styles from \"./Input.module.css\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n size?: InputSize;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Single-line text input. Inside a Field it inherits id/description/invalid.\n *\n * ```tsx\n * <Field label=\"Name\">\n * <Input value={name} onChange={(e) => setName(e.target.value)} />\n * </Field>\n *\n * <Input aria-label=\"Amount\" type=\"number\" size=\"sm\" />\n * ```\n */\nexport function Input({ size = \"md\", className, ...rest }: InputProps): ReactElement {\n const field = useFieldContext();\n return (\n <input\n id={rest.id ?? field?.id}\n aria-describedby={rest[\"aria-describedby\"] ?? field?.describedBy}\n aria-invalid={rest[\"aria-invalid\"] ?? (field?.invalid || undefined)}\n className={cx(styles.input, styles[`size-${size}`], className)}\n {...rest}\n />\n );\n}\n",".wrap {\n position: relative;\n display: block;\n}\n\n.input {\n width: 100%;\n /* Room for the toggle: its hit target plus the usual inline padding. */\n padding-right: calc(var(--mds-control-h-md) + var(--mds-space-1));\n}\n\n.toggle {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--mds-control-h-md);\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n color: var(--mds-text-muted);\n font-size: var(--mds-text-lg);\n cursor: pointer;\n transition: color var(--mds-transition-control);\n}\n\n.toggle:hover {\n color: var(--mds-text-primary);\n}\n","import { useState } from \"react\";\nimport type { ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Input } from \"../Input/Input\";\nimport type { InputProps } from \"../Input/Input\";\nimport styles from \"./PasswordInput.module.css\";\n\nexport type PasswordInputProps = Omit<InputProps, \"type\">;\n\n/**\n * Password field with a reveal toggle. Composes Input, so inside a Field it\n * inherits id/description/invalid the same way.\n *\n * ```tsx\n * <Field label=\"Password\" hint=\"At least 12 characters\">\n * <PasswordInput autoComplete=\"new-password\" />\n * </Field>\n * ```\n */\nexport function PasswordInput({ className, ...rest }: PasswordInputProps): ReactElement {\n const [visible, setVisible] = useState(false);\n return (\n <span className={styles.wrap}>\n <Input {...rest} type={visible ? \"text\" : \"password\"} className={cx(styles.input, className)} />\n <button\n type=\"button\"\n className={styles.toggle}\n aria-label={visible ? \"Hide password\" : \"Show password\"}\n aria-pressed={visible}\n onClick={() => setVisible((v) => !v)}\n >\n {visible ? (\n /* eye-off */\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94\" />\n <path d=\"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19\" />\n <path d=\"M14.12 14.12a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n ) : (\n /* eye */\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n )}\n </button>\n </span>\n );\n}\n",".textarea {\n width: 100%;\n padding: var(--mds-space-2) var(--mds-space-3);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n font-size: var(--mds-text-base);\n line-height: var(--mds-leading-normal);\n resize: vertical;\n transition: border-color var(--mds-transition-control);\n}\n\n.textarea::placeholder {\n color: var(--mds-text-muted);\n}\n\n.textarea:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n cursor: not-allowed;\n resize: none;\n}\n\n.textarea[aria-invalid=\"true\"] {\n border-color: var(--mds-status-danger);\n}\n\n.wrap {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: var(--mds-gap-hairline);\n}\n\n.count {\n font: var(--mds-type-meta);\n color: var(--mds-text-muted);\n}\n","import { useState } from \"react\";\nimport type { ChangeEvent, ReactElement, Ref, TextareaHTMLAttributes } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useFieldContext } from \"../Field/Field\";\nimport styles from \"./Textarea.module.css\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Character counter under the control; pairs with native maxLength. */\n showCount?: boolean;\n ref?: Ref<HTMLTextAreaElement>;\n}\n\n/**\n * Multi-line text input. Inside a Field it inherits id/description/invalid.\n *\n * ```tsx\n * <Field label=\"Bio\">\n * <Textarea maxLength={160} showCount />\n * </Field>\n * ```\n */\nexport function Textarea({ rows = 3, showCount = false, className, ...rest }: TextareaProps): ReactElement {\n const field = useFieldContext();\n const [tracked, setTracked] = useState(() => String(rest.defaultValue ?? \"\"));\n const current = rest.value !== undefined ? String(rest.value) : tracked;\n\n const onChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n setTracked(event.target.value);\n rest.onChange?.(event);\n };\n\n const textarea = (\n <textarea\n id={rest.id ?? field?.id}\n aria-describedby={rest[\"aria-describedby\"] ?? field?.describedBy}\n aria-invalid={rest[\"aria-invalid\"] ?? (field?.invalid || undefined)}\n rows={rows}\n className={cx(styles.textarea, className)}\n {...rest}\n {...(showCount ? { onChange } : {})}\n />\n );\n\n if (!showCount) return textarea;\n return (\n <span className={styles.wrap}>\n {textarea}\n <span className={styles.count} aria-hidden=\"true\">\n {rest.maxLength !== undefined ? `${current.length}/${rest.maxLength}` : current.length}\n </span>\n </span>\n );\n}\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n cursor: pointer;\n min-height: var(--mds-tap-min);\n}\n\n.root:has(.box:disabled) {\n cursor: not-allowed;\n}\n\n.box {\n appearance: none;\n flex: none;\n margin: 0;\n width: var(--mds-check-size);\n height: var(--mds-check-size);\n /* em-based checkmark geometry scales with the box. */\n font-size: var(--mds-check-size);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-1);\n background: var(--mds-surface-card);\n display: inline-grid;\n place-content: center;\n cursor: inherit;\n transition: var(--mds-transition-control);\n}\n\n.box:checked {\n background: var(--mds-action-bg);\n border-color: var(--mds-action-bg);\n}\n\n.box:checked::after {\n content: \"\";\n width: 0.32em;\n height: 0.6em;\n margin-top: -0.12em;\n border: solid var(--mds-action-fg);\n border-width: 0 calc(var(--mds-border-width) * 2) calc(var(--mds-border-width) * 2) 0;\n transform: rotate(45deg);\n}\n\n.box:disabled {\n background: var(--mds-action-disabled-bg);\n border-color: var(--mds-border-strong);\n}\n\n.box:disabled:checked::after {\n border-color: var(--mds-action-disabled-fg);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.box:disabled ~ .label {\n color: var(--mds-action-disabled-fg);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Checkbox.module.css\";\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n /** Inline label — part of the click target. */\n label: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Native checkbox, styled box. Label is the touch target too.\n *\n * ```tsx\n * <Checkbox label=\"Remember me\" defaultChecked />\n * <Checkbox\n * label=\"Accept terms\"\n * checked={accepted}\n * onChange={(e) => setAccepted(e.target.checked)}\n * />\n * ```\n */\nexport function Checkbox({ label, className, ...rest }: CheckboxProps): ReactElement {\n return (\n <label className={cx(styles.root, className)}>\n <input type=\"checkbox\" className={styles.box} {...rest} />\n <span className={styles.label}>{label}</span>\n </label>\n );\n}\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n cursor: pointer;\n min-height: var(--mds-tap-min);\n}\n\n.root:has(.dot:disabled) {\n cursor: not-allowed;\n}\n\n.dot {\n appearance: none;\n flex: none;\n margin: 0;\n width: var(--mds-check-size);\n height: var(--mds-check-size);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-card);\n display: inline-grid;\n place-content: center;\n cursor: inherit;\n transition: var(--mds-transition-control);\n}\n\n.dot:checked {\n border-color: var(--mds-action-bg);\n}\n\n.dot:checked::after {\n content: \"\";\n width: 50%;\n height: 50%;\n border-radius: var(--mds-radius-pill);\n background: var(--mds-action-bg);\n}\n\n.dot:disabled {\n background: var(--mds-action-disabled-bg);\n border-color: var(--mds-border-strong);\n}\n\n.dot:disabled:checked::after {\n background: var(--mds-action-disabled-fg);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.dot:disabled ~ .label {\n color: var(--mds-action-disabled-fg);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Radio.module.css\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n /** Inline label — part of the click target. */\n label: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Native radio, styled dot. Group by `name`; wrap the group in\n * `<fieldset>`/`<legend>` for a group label.\n *\n * ```tsx\n * <fieldset>\n * <legend>Plan</legend>\n * <Radio name=\"plan\" label=\"Free\" checked={plan === \"free\"} onChange={() => setPlan(\"free\")} />\n * <Radio name=\"plan\" label=\"Pro\" checked={plan === \"pro\"} onChange={() => setPlan(\"pro\")} />\n * </fieldset>\n * ```\n */\nexport function Radio({ label, className, ...rest }: RadioProps): ReactElement {\n return (\n <label className={cx(styles.root, className)}>\n <input type=\"radio\" className={styles.dot} {...rest} />\n <span className={styles.label}>{label}</span>\n </label>\n );\n}\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n cursor: pointer;\n min-height: var(--mds-tap-min);\n}\n\n.root:has(.track:disabled) {\n cursor: not-allowed;\n}\n\n.track {\n appearance: none;\n flex: none;\n margin: 0;\n width: var(--mds-switch-w);\n height: var(--mds-switch-h);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-border-strong);\n position: relative;\n cursor: inherit;\n transition: background-color var(--mds-transition-control);\n}\n\n.track::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: var(--mds-space-1);\n transform: translateY(-50%);\n width: var(--mds-switch-knob);\n height: var(--mds-switch-knob);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-card);\n transition: transform var(--mds-transition-control);\n}\n\n.track:checked {\n background: var(--mds-action-bg);\n}\n\n.track:checked::after {\n transform: translateY(-50%)\n translateX(calc(var(--mds-switch-w) - var(--mds-switch-knob) - 2 * var(--mds-space-1)));\n}\n\n.track:disabled {\n background: var(--mds-action-disabled-bg);\n}\n\n.track:disabled::after {\n background: var(--mds-action-disabled-fg);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.track:disabled ~ .label {\n color: var(--mds-action-disabled-fg);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Switch.module.css\";\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n /** Inline label — part of the click target. */\n label: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * On/off toggle. Checkbox under the hood with role=\"switch\" — native\n * semantics and forms integration, switch announcement.\n *\n * ```tsx\n * <Switch\n * label=\"Notifications\"\n * checked={enabled}\n * onChange={(e) => setEnabled(e.target.checked)}\n * />\n * ```\n */\nexport function Switch({ label, className, ...rest }: SwitchProps): ReactElement {\n return (\n <label className={cx(styles.root, className)}>\n <input type=\"checkbox\" role=\"switch\" className={styles.track} {...rest} />\n <span className={styles.label}>{label}</span>\n </label>\n );\n}\n",".group {\n display: inline-flex;\n padding: var(--mds-space-1);\n gap: var(--mds-space-1);\n background: var(--mds-surface-sunken);\n border-radius: var(--mds-radius-control);\n}\n\n.segment {\n display: inline-flex;\n position: relative;\n cursor: pointer;\n}\n\n/* Radio overlays the whole segment, invisible but real — it stays the hit\n target and the focusable element. */\n.input {\n appearance: none;\n margin: 0;\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n cursor: inherit;\n}\n\n.face {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: calc(var(--mds-control-h-md) - 2 * var(--mds-space-1));\n padding: 0 var(--mds-space-3);\n border-radius: var(--mds-radius-1);\n font: var(--mds-type-label);\n color: var(--mds-text-secondary);\n white-space: nowrap;\n transition: var(--mds-transition-control);\n}\n\n.input:checked + .face {\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n box-shadow: var(--mds-elevation-card);\n}\n\n.input:focus-visible + .face {\n outline: var(--mds-focus-width) solid var(--mds-focus-ring-color);\n outline-offset: var(--mds-focus-offset);\n}\n","import type { ReactElement } from \"react\";\nimport { useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./SegmentedControl.module.css\";\n\nexport interface SegmentOption<T extends string = string> {\n value: T;\n label: string;\n}\n\nexport interface SegmentedControlProps<T extends string = string> {\n /** Accessible group name. */\n label: string;\n options: readonly SegmentOption<T>[];\n value: T;\n onChange: (value: T) => void;\n className?: string;\n}\n\n/**\n * Exclusive choice among few visible options. Native radios under the hood —\n * free keyboard model and semantics.\n *\n * ```tsx\n * <SegmentedControl\n * label=\"View\"\n * options={[\n * { value: \"list\", label: \"List\" },\n * { value: \"grid\", label: \"Grid\" },\n * ]}\n * value={view}\n * onChange={setView}\n * />\n * ```\n */\nexport function SegmentedControl<T extends string = string>({\n label,\n options,\n value,\n onChange,\n className,\n}: SegmentedControlProps<T>): ReactElement {\n const name = useId();\n return (\n <div role=\"radiogroup\" aria-label={label} className={cx(styles.group, className)}>\n {options.map((option) => (\n <label key={option.value} className={styles.segment}>\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={option.value === value}\n onChange={() => onChange(option.value)}\n className={styles.input}\n />\n <span className={styles.face}>{option.label}</span>\n </label>\n ))}\n </div>\n );\n}\n",".wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n}\n\n.glass {\n position: absolute;\n left: var(--mds-space-3);\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n color: var(--mds-text-muted);\n pointer-events: none;\n}\n\n.input {\n width: 100%;\n height: var(--mds-control-h-md);\n padding: 0 var(--mds-space-9) 0 var(--mds-space-8);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n font-size: var(--mds-text-base);\n transition: border-color var(--mds-transition-control);\n}\n\n.input::placeholder {\n color: var(--mds-text-muted);\n}\n\n/* Native clear crosses collide with ours. */\n.input::-webkit-search-cancel-button {\n display: none;\n}\n\n.clear {\n position: absolute;\n right: var(--mds-space-2);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--mds-icon-lg);\n height: var(--mds-icon-lg);\n border: none;\n border-radius: var(--mds-radius-pill);\n background: transparent;\n color: var(--mds-text-secondary);\n cursor: pointer;\n}\n\n.clear:hover {\n background: var(--mds-surface-sunken);\n}\n\n.clearGlyph {\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./SearchField.module.css\";\n\nexport interface SearchFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\" | \"value\" | \"onChange\"> {\n /** Accessible name. */\n label: string;\n value: string;\n /** Receives the new text — \"\" when cleared. */\n onChange: (value: string) => void;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Controlled search input with a clear affordance once there is text.\n *\n * ```tsx\n * <SearchField label=\"Search sessions\" value={query} onChange={setQuery} />\n * ```\n */\nexport function SearchField({ label, value, onChange, className, ...rest }: SearchFieldProps): ReactElement {\n return (\n <span className={cx(styles.wrap, className)}>\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glass}>\n <path\n d=\"M7 12a5 5 0 1 1 0-10 5 5 0 0 1 0 10Zm7 2-3.5-3.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <input\n type=\"search\"\n aria-label={label}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className={styles.input}\n {...rest}\n />\n {value !== \"\" && (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n className={styles.clear}\n onClick={() => onChange(\"\")}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.clearGlyph}>\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </span>\n );\n}\n",".group {\n list-style: none;\n margin: 0;\n padding: 0;\n background: var(--mds-surface-card);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n border-radius: var(--mds-radius-card);\n overflow: hidden;\n}\n\n.item + .item {\n border-top: var(--mds-border-width) solid var(--mds-border-subtle);\n}\n\n.row {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n width: 100%;\n min-height: var(--mds-tap-min);\n padding: var(--mds-space-3) var(--mds-pad-card);\n text-align: left;\n color: inherit;\n text-decoration: none;\n}\n\n/* Interactive rows reset button chrome and signal affordance. */\n.interactive {\n border: none;\n background: transparent;\n font: inherit;\n cursor: pointer;\n transition: background-color var(--mds-transition-control);\n}\n\n.interactive:hover {\n background: var(--mds-surface-sunken);\n}\n\n.leading,\n.trailing {\n display: inline-flex;\n flex: none;\n align-items: center;\n}\n\n.text {\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-hairline);\n min-width: 0;\n flex: 1;\n}\n\n.title {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.description {\n font: var(--mds-type-note);\n color: var(--mds-text-secondary);\n}\n","import type { HTMLAttributes, LiHTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./List.module.css\";\n\nexport interface ListGroupProps extends HTMLAttributes<HTMLUListElement> {\n children: ReactNode;\n}\n\n/**\n * Card-styled list container for ListItems.\n *\n * ```tsx\n * <ListGroup>\n * <ListItem\n * title=\"Profile\"\n * description=\"Name, avatar\"\n * leading={<Icon name=\"user\" />}\n * href=\"/profile\"\n * />\n * <ListItem title=\"Log out\" onClick={logout} />\n * </ListGroup>\n * ```\n */\nexport function ListGroup({ className, ...rest }: ListGroupProps): ReactElement {\n return <ul className={cx(styles.group, className)} {...rest} />;\n}\n\nexport interface ListItemProps extends Omit<LiHTMLAttributes<HTMLLIElement>, \"title\" | \"onClick\"> {\n title: string;\n description?: string;\n /** Slot before the text — Avatar, Icon, … */\n leading?: ReactNode;\n /** Slot after the text — Badge, chevron, … */\n trailing?: ReactNode;\n /** Makes the whole row a button. */\n onClick?: () => void;\n /** Makes the whole row a link. Wins over onClick. */\n href?: string;\n}\n\n/** One row. Static by default; interactive as one whole-row button/link. */\nexport function ListItem({\n title,\n description,\n leading,\n trailing,\n onClick,\n href,\n className,\n ...rest\n}: ListItemProps): ReactElement {\n const content = (\n <>\n {leading != null && <span className={styles.leading}>{leading}</span>}\n <span className={styles.text}>\n <span className={styles.title}>{title}</span>\n {description != null && <span className={styles.description}>{description}</span>}\n </span>\n {trailing != null && <span className={styles.trailing}>{trailing}</span>}\n </>\n );\n\n return (\n <li className={cx(styles.item, className)} {...rest}>\n {href !== undefined ? (\n <a className={cx(styles.row, styles.interactive)} href={href}>\n {content}\n </a>\n ) : onClick !== undefined ? (\n <button type=\"button\" className={cx(styles.row, styles.interactive)} onClick={onClick}>\n {content}\n </button>\n ) : (\n <span className={styles.row}>{content}</span>\n )}\n </li>\n );\n}\n",".root {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: var(--mds-stack-item);\n padding: var(--mds-space-10) var(--mds-pad-card);\n}\n\n.icon {\n display: inline-flex;\n color: var(--mds-text-muted);\n}\n\n.action {\n margin-top: var(--mds-space-2);\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Heading } from \"../Heading/Heading\";\nimport { Text } from \"../Text/Text\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n title: string;\n description?: string;\n /** Illustration or Icon slot. */\n icon?: ReactNode;\n /** Usually a Button. */\n action?: ReactNode;\n className?: string;\n}\n\n/**\n * Nothing-here view: explains the empty screen and offers the next step.\n *\n * ```tsx\n * <EmptyState\n * icon={<Icon name=\"inbox\" size=\"lg\" />}\n * title=\"No sessions yet\"\n * description=\"Create your first session to get started.\"\n * action={<Button onClick={create}>New session</Button>}\n * />\n * ```\n */\nexport function EmptyState({ title, description, icon, action, className }: EmptyStateProps): ReactElement {\n return (\n <div className={cx(styles.root, className)}>\n {icon != null && (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <Heading level={3}>{title}</Heading>\n {description !== undefined && <Text tone=\"secondary\">{description}</Text>}\n {action != null && <span className={styles.action}>{action}</span>}\n </div>\n );\n}\n",".list {\n display: flex;\n gap: var(--mds-space-1);\n border-bottom: var(--mds-border-width) solid var(--mds-border-subtle);\n}\n\n.tab {\n border: none;\n background: transparent;\n padding: var(--mds-space-2) var(--mds-space-3);\n margin-bottom: calc(-1 * var(--mds-border-width));\n border-bottom: calc(2 * var(--mds-border-width)) solid transparent;\n font: var(--mds-type-label);\n color: var(--mds-text-secondary);\n cursor: pointer;\n white-space: nowrap;\n transition: color var(--mds-transition-control);\n}\n\n.tab:hover {\n color: var(--mds-text-primary);\n}\n\n.selected {\n color: var(--mds-text-primary);\n border-bottom-color: var(--mds-accent);\n}\n\n.panel {\n padding-top: var(--mds-stack-item);\n}\n","import type { ButtonHTMLAttributes, HTMLAttributes, KeyboardEvent, ReactElement, ReactNode } from \"react\";\nimport { createContext, useContext, useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Tabs.module.css\";\n\ninterface TabsContextValue {\n value: string;\n onChange: (value: string) => void;\n baseId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabs(component: string): TabsContextValue {\n const context = useContext(TabsContext);\n if (context === null) throw new Error(`${component} must sit inside <Tabs>`);\n return context;\n}\n\nexport interface TabsProps {\n value: string;\n onChange: (value: string) => void;\n children: ReactNode;\n}\n\n/**\n * Controlled tabs root. Compose with TabList, Tab, TabPanel.\n *\n * ```tsx\n * <Tabs value={tab} onChange={setTab}>\n * <TabList label=\"Session details\">\n * <Tab value=\"info\">Info</Tab>\n * <Tab value=\"notes\">Notes</Tab>\n * </TabList>\n * <TabPanel value=\"info\">…</TabPanel>\n * <TabPanel value=\"notes\">…</TabPanel>\n * </Tabs>\n * ```\n */\nexport function Tabs({ value, onChange, children }: TabsProps): ReactElement {\n const baseId = useId();\n return <TabsContext.Provider value={{ value, onChange, baseId }}>{children}</TabsContext.Provider>;\n}\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n /** Accessible name for the tab set. */\n label: string;\n children: ReactNode;\n}\n\n/* Selection follows focus (WAI-APG \"automatic activation\") — panels here are\n local content, not expensive loads. */\nfunction onArrow(event: KeyboardEvent<HTMLDivElement>, onChange: (v: string) => void): void {\n const keys = [\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"];\n if (!keys.includes(event.key)) return;\n const tabs = [...event.currentTarget.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')];\n const current = tabs.findIndex((tab) => tab === document.activeElement);\n if (current === -1) return;\n event.preventDefault();\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? tabs.length - 1\n : (current + (event.key === \"ArrowRight\" ? 1 : -1) + tabs.length) % tabs.length;\n const tab = tabs[next];\n if (!tab) return;\n tab.focus();\n const value = tab.dataset.value;\n if (value !== undefined) onChange(value);\n}\n\nexport function TabList({ label, className, children, ...rest }: TabListProps): ReactElement {\n const { onChange } = useTabs(\"TabList\");\n return (\n <div\n role=\"tablist\"\n aria-label={label}\n className={cx(styles.list, className)}\n onKeyDown={(event) => onArrow(event, onChange)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nexport interface TabProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"type\"> {\n value: string;\n children: ReactNode;\n}\n\nexport function Tab({ value, className, children, ...rest }: TabProps): ReactElement {\n const tabs = useTabs(\"Tab\");\n const selected = tabs.value === value;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n id={`${tabs.baseId}-tab-${value}`}\n aria-selected={selected}\n aria-controls={`${tabs.baseId}-panel-${value}`}\n tabIndex={selected ? 0 : -1}\n data-value={value}\n className={cx(styles.tab, selected && styles.selected, className)}\n onClick={() => tabs.onChange(value)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nexport interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n}\n\nexport function TabPanel({ value, className, children, ...rest }: TabPanelProps): ReactElement {\n const tabs = useTabs(\"TabPanel\");\n const selected = tabs.value === value;\n return (\n <div\n role=\"tabpanel\"\n id={`${tabs.baseId}-panel-${value}`}\n aria-labelledby={`${tabs.baseId}-tab-${value}`}\n hidden={!selected}\n className={cx(styles.panel, className)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n",".viewport {\n position: fixed;\n bottom: var(--mds-space-4);\n left: 50%;\n transform: translateX(-50%);\n z-index: var(--mds-z-toast);\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-tight);\n width: min(var(--mds-modal-w), calc(100vw - 2 * var(--mds-space-4)));\n pointer-events: none;\n}\n\n.toast {\n display: flex;\n align-items: flex-start;\n gap: var(--mds-gap);\n padding: var(--mds-space-3) var(--mds-space-4);\n border-radius: var(--mds-radius-card);\n border-left: calc(3 * var(--mds-border-width)) solid var(--mds-border-strong);\n background: var(--mds-surface-raised);\n box-shadow: var(--mds-elevation-modal);\n pointer-events: auto;\n}\n\n.tone-success { border-left-color: var(--mds-status-success); }\n.tone-danger { border-left-color: var(--mds-status-danger); }\n\n.body {\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-hairline);\n flex: 1;\n min-width: 0;\n}\n\n.title {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.description {\n font: var(--mds-type-note);\n color: var(--mds-text-secondary);\n}\n\n.close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: var(--mds-icon-lg);\n height: var(--mds-icon-lg);\n border: none;\n border-radius: var(--mds-radius-pill);\n background: transparent;\n color: var(--mds-text-secondary);\n cursor: pointer;\n}\n\n.close:hover {\n background: var(--mds-surface-sunken);\n}\n\n.closeGlyph {\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Toast.module.css\";\n\nexport type ToastTone = \"neutral\" | \"success\" | \"danger\";\n\nexport interface ToastOptions {\n title: string;\n description?: string | undefined;\n tone?: ToastTone | undefined;\n /** ms until auto-dismiss. 0 = stays until dismissed. Default 5000. */\n duration?: number | undefined;\n}\n\ninterface ToastEntry extends Required<Pick<ToastOptions, \"title\" | \"tone\">> {\n id: number;\n description: string | undefined;\n}\n\ninterface ToastContextValue {\n toast: (options: ToastOptions) => number;\n dismiss: (id: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const context = useContext(ToastContext);\n if (context === null) throw new Error(\"useToast needs a <ToastProvider> above it\");\n return context;\n}\n\nexport interface ToastProviderProps {\n children: ReactNode;\n}\n\n/**\n * Mount once near the root. Renders the notification region itself.\n *\n * ```tsx\n * // App root\n * <ToastProvider>\n * <App />\n * </ToastProvider>\n *\n * // Anywhere below\n * const { toast } = useToast();\n * toast({ title: \"Saved\", tone: \"success\" });\n * ```\n */\nexport function ToastProvider({ children }: ToastProviderProps): ReactElement {\n const [toasts, setToasts] = useState<ToastEntry[]>([]);\n const nextId = useRef(1);\n\n const dismiss = useCallback((id: number) => {\n setToasts((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const toast = useCallback(\n ({ title, description, tone = \"neutral\", duration = 5000 }: ToastOptions) => {\n const id = nextId.current++;\n setToasts((current) => [...current, { id, title, description, tone }]);\n if (duration > 0) setTimeout(() => dismiss(id), duration);\n return id;\n },\n [dismiss],\n );\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <div role=\"region\" aria-label=\"Notifications\" className={styles.viewport}>\n {toasts.map((entry) => (\n <div key={entry.id} role=\"status\" className={cx(styles.toast, styles[`tone-${entry.tone}`])}>\n <span className={styles.body}>\n <span className={styles.title}>{entry.title}</span>\n {entry.description !== undefined && (\n <span className={styles.description}>{entry.description}</span>\n )}\n </span>\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n className={styles.close}\n onClick={() => dismiss(entry.id)}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.closeGlyph}>\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n",".stack {\n display: flex;\n flex-direction: column;\n}\n\n.gap-hairline { gap: var(--mds-gap-hairline); }\n.gap-tight { gap: var(--mds-gap-tight); }\n.gap-base { gap: var(--mds-gap); }\n.gap-loose { gap: var(--mds-gap-loose); }\n.gap-section { gap: var(--mds-stack-section); }\n\n.align-start { align-items: flex-start; }\n.align-center { align-items: center; }\n.align-end { align-items: flex-end; }\n.align-stretch { align-items: stretch; }\n","import type { ElementType, HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Stack.module.css\";\n\nexport type StackGap = \"hairline\" | \"tight\" | \"base\" | \"loose\" | \"section\";\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\";\n\nexport interface StackProps extends HTMLAttributes<HTMLElement> {\n /** Space between children, on the gap scale. Default \"base\". */\n gap?: StackGap;\n /** Cross-axis alignment. Default \"stretch\". */\n align?: StackAlign;\n /** Element to render. Default div. */\n as?: ElementType;\n}\n\n/**\n * Vertical flow. The parent owns spacing between siblings via gap —\n * children carry no outer margins. Token-bounded on purpose: no arbitrary\n * lengths, no style prop.\n *\n * ```tsx\n * <Stack gap=\"base\">\n * <Heading level={2}>Profile</Heading>\n * <Text tone=\"secondary\">Public information</Text>\n * </Stack>\n * ```\n */\nexport function Stack({\n gap = \"base\",\n align = \"stretch\",\n as = \"div\",\n className,\n ...rest\n}: StackProps): ReactElement {\n return createElement(as, {\n className: cx(styles.stack, styles[`gap-${gap}`], styles[`align-${align}`], className),\n ...rest,\n });\n}\n",".inline {\n display: flex;\n flex-direction: row;\n}\n\n.gap-hairline { gap: var(--mds-gap-hairline); }\n.gap-tight { gap: var(--mds-gap-tight); }\n.gap-base { gap: var(--mds-gap); }\n.gap-loose { gap: var(--mds-gap-loose); }\n\n.align-start { align-items: flex-start; }\n.align-center { align-items: center; }\n.align-end { align-items: flex-end; }\n.align-baseline { align-items: baseline; }\n\n.justify-start { justify-content: flex-start; }\n.justify-center { justify-content: center; }\n.justify-end { justify-content: flex-end; }\n.justify-between { justify-content: space-between; }\n\n.wrap {\n flex-wrap: wrap;\n}\n","import type { ElementType, HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Inline.module.css\";\n\nexport type InlineGap = \"hairline\" | \"tight\" | \"base\" | \"loose\";\nexport type InlineAlign = \"start\" | \"center\" | \"end\" | \"baseline\";\nexport type InlineJustify = \"start\" | \"center\" | \"end\" | \"between\";\n\nexport interface InlineProps extends HTMLAttributes<HTMLElement> {\n /** Space between children, on the gap scale. Default \"base\". */\n gap?: InlineGap;\n /** Cross-axis alignment. Default \"center\". */\n align?: InlineAlign;\n /** Main-axis distribution. Default \"start\". */\n justify?: InlineJustify;\n /** Allow wrapping onto new lines. */\n wrap?: boolean;\n /** Element to render. Default div. */\n as?: ElementType;\n}\n\n/**\n * Horizontal flow — Stack's row twin. Same token-bounded contract.\n *\n * ```tsx\n * <Inline gap=\"tight\" align=\"center\" justify=\"between\">\n * <Text variant=\"label\">Total</Text>\n * <Text>42</Text>\n * </Inline>\n * ```\n */\nexport function Inline({\n gap = \"base\",\n align = \"center\",\n justify = \"start\",\n wrap = false,\n as = \"div\",\n className,\n ...rest\n}: InlineProps): ReactElement {\n return createElement(as, {\n className: cx(\n styles.inline,\n styles[`gap-${gap}`],\n styles[`align-${align}`],\n styles[`justify-${justify}`],\n wrap && styles.wrap,\n className,\n ),\n ...rest,\n });\n}\n",".container {\n width: 100%;\n margin-inline: auto;\n padding-inline: var(--mds-pad-page-x);\n}\n\n.width-content { max-width: var(--mds-content-max); }\n.width-wide { max-width: var(--mds-content-max-wide); }\n","import type { ElementType, HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Container.module.css\";\n\nexport type ContainerWidth = \"content\" | \"wide\";\n\nexport interface ContainerProps extends HTMLAttributes<HTMLElement> {\n /** content = reading column, wide = desktop shell. Default \"content\". */\n width?: ContainerWidth;\n /** Element to render. Default div. */\n as?: ElementType;\n}\n\n/**\n * Centered max-width column with page-edge padding.\n *\n * ```tsx\n * <Container>\n * <Stack gap=\"section\">…</Stack>\n * </Container>\n * ```\n */\nexport function Container({\n width = \"content\",\n as = \"div\",\n className,\n ...rest\n}: ContainerProps): ReactElement {\n return createElement(as, {\n className: cx(styles.container, styles[`width-${width}`], className),\n ...rest,\n });\n}\n",".card {\n display: flex;\n flex-direction: column;\n background: var(--mds-surface-card);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n border-radius: var(--mds-radius-card);\n overflow: hidden;\n color: inherit;\n text-decoration: none;\n}\n\n.variant-raised {\n border-color: transparent;\n background: var(--mds-surface-raised);\n box-shadow: var(--mds-elevation-raised);\n}\n\n/* Whole-card button/link resets + affordance. */\n.interactive {\n padding: 0;\n margin: 0;\n font: inherit;\n text-align: left;\n cursor: pointer;\n transition: box-shadow var(--mds-transition-surface), background-color var(--mds-transition-surface);\n}\n\n.interactive:hover {\n box-shadow: var(--mds-elevation-hover);\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: var(--mds-pad-card) var(--mds-pad-card) 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.body {\n flex: 1;\n padding: var(--mds-pad-card);\n}\n\n.footer {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: 0 var(--mds-pad-card) var(--mds-pad-card);\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Card.module.css\";\n\nexport type CardVariant = \"card\" | \"raised\";\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLElement>, \"onClick\"> {\n children: ReactNode;\n /** card = flat on border, raised = elevated. Default \"card\". */\n variant?: CardVariant;\n /** Makes the whole card a button. */\n onClick?: () => void;\n /** Makes the whole card a link. Wins over onClick. */\n href?: string;\n}\n\n/**\n * Surface container. Compose with CardHeader/CardBody/CardFooter — the card\n * owns internal spacing, sections own their content.\n *\n * ```tsx\n * <Card>\n * <CardHeader><Heading level={3}>Next session</Heading></CardHeader>\n * <CardBody><Text>Tomorrow, 19:00</Text></CardBody>\n * <CardFooter><Button size=\"sm\">Join</Button></CardFooter>\n * </Card>\n *\n * <Card href=\"/items/42\" variant=\"flat\">…</Card>\n * ```\n */\nexport function Card({ children, variant = \"card\", onClick, href, className, ...rest }: CardProps): ReactElement {\n const cardClass = cx(styles.card, styles[`variant-${variant}`], className);\n\n if (href !== undefined) {\n return (\n <a className={cx(cardClass, styles.interactive)} href={href} {...rest}>\n {children}\n </a>\n );\n }\n if (onClick !== undefined) {\n return (\n <button type=\"button\" className={cx(cardClass, styles.interactive)} onClick={onClick} {...rest}>\n {children}\n </button>\n );\n }\n return (\n <div className={cardClass} {...rest}>\n {children}\n </div>\n );\n}\n\nexport type CardSectionProps = HTMLAttributes<HTMLDivElement>;\n\n/** Top slot — title row, media, tabs. */\nexport function CardHeader({ className, ...rest }: CardSectionProps): ReactElement {\n return <div className={cx(styles.header, className)} {...rest} />;\n}\n\n/** Main content slot. */\nexport function CardBody({ className, ...rest }: CardSectionProps): ReactElement {\n return <div className={cx(styles.body, className)} {...rest} />;\n}\n\n/** Bottom slot — actions, meta. */\nexport function CardFooter({ className, ...rest }: CardSectionProps): ReactElement {\n return <div className={cx(styles.footer, className)} {...rest} />;\n}\n",".panel {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: var(--mds-modal-w);\n max-height: 85dvh;\n background: var(--mds-surface-raised);\n border-radius: var(--mds-radius-3);\n box-shadow: var(--mds-elevation-modal);\n opacity: 0;\n transform: scale(0.96);\n transition:\n opacity var(--mds-dur-base) var(--mds-ease-standard),\n transform var(--mds-dur-base) var(--mds-ease-standard);\n}\n\n.panel[data-open] {\n opacity: 1;\n transform: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: var(--mds-pad-card) var(--mds-pad-card) 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.body {\n flex: 1;\n overflow-y: auto;\n padding: var(--mds-pad-card);\n}\n\n.footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--mds-gap);\n padding: 0 var(--mds-pad-card) var(--mds-pad-card);\n}\n","import type { ReactNode } from \"react\";\nimport { Overlay } from \"../Overlay/Overlay\";\nimport styles from \"./Modal.module.css\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n /** Accessible name of the dialog. */\n label: string;\n /** Scrim click dismisses. Default true. */\n closeOnScrimClick?: boolean;\n children: ReactNode;\n}\n\n/**\n * Centered dialog. Escape, scrim click (`closeOnScrimClick`), and focus trap\n * are handled. Compose the sections:\n *\n * ```tsx\n * <Modal open={open} onClose={() => setOpen(false)} label=\"Edit session\">\n * <ModalHeader>Edit session</ModalHeader>\n * <ModalBody>…</ModalBody>\n * <ModalFooter><Button onClick={save}>Save</Button></ModalFooter>\n * </Modal>\n * ```\n */\nexport function Modal({ open, onClose, label, closeOnScrimClick = true, children }: ModalProps) {\n return (\n <Overlay\n open={open}\n onClose={onClose}\n label={label}\n variant=\"modal\"\n closeOnScrimClick={closeOnScrimClick}\n panelClassName={styles.panel}\n >\n {children}\n </Overlay>\n );\n}\n\nexport function ModalHeader({ children }: { children: ReactNode }) {\n return <div className={styles.header}>{children}</div>;\n}\n\nexport function ModalBody({ children }: { children: ReactNode }) {\n return <div className={styles.body}>{children}</div>;\n}\n\nexport function ModalFooter({ children }: { children: ReactNode }) {\n return <div className={styles.footer}>{children}</div>;\n}\n",".description {\n margin: 0;\n font: var(--mds-type-body);\n color: var(--mds-text-secondary);\n}\n","import { Button } from \"../Button/Button\";\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from \"../Modal/Modal\";\nimport styles from \"./ConfirmDialog.module.css\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n description?: string | undefined;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n /** Style the confirm action as destructive. */\n danger?: boolean | undefined;\n}\n\n/**\n * Pre-composed Modal for the confirm/cancel pattern.\n *\n * ```tsx\n * <ConfirmDialog\n * open={open}\n * onClose={() => setOpen(false)}\n * onConfirm={deleteItem}\n * title=\"Delete item?\"\n * description=\"This cannot be undone.\"\n * confirmLabel=\"Delete\"\n * danger\n * />\n * ```\n */\nexport function ConfirmDialog({\n open,\n onClose,\n onConfirm,\n title,\n description,\n confirmLabel,\n cancelLabel = \"Cancel\",\n danger = false,\n}: ConfirmDialogProps) {\n return (\n <Modal open={open} onClose={onClose} label={title} closeOnScrimClick={false}>\n <ModalHeader>{title}</ModalHeader>\n <ModalBody>\n {description ? <p className={styles.description}>{description}</p> : null}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"secondary\" onClick={onClose}>\n {cancelLabel}\n </Button>\n <Button variant={danger ? \"danger\" : \"primary\"} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n",".screen {\n display: flex;\n flex-direction: column;\n min-height: 100dvh;\n background: var(--mds-surface-page);\n}\n\n.content {\n flex: 1;\n overflow-y: auto;\n padding: var(--mds-pad-page-y) var(--mds-pad-page-x);\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./Screen.module.css\";\n\n/**\n * Page scaffold. Compose:\n *\n * ```tsx\n * <Screen>\n * <AppBar title=\"Sessions\" />\n * <ScreenContent>…</ScreenContent>\n * <TabBar label=\"Primary\">…</TabBar>\n * </Screen>\n * ```\n */\nexport function Screen({ children }: { children: ReactNode }) {\n return <div className={styles.screen}>{children}</div>;\n}\n\n/** The scrollable main region of a Screen. */\nexport function ScreenContent({ children }: { children: ReactNode }) {\n return <main className={styles.content}>{children}</main>;\n}\n",".bar {\n position: sticky;\n top: 0;\n z-index: var(--mds-z-header);\n display: flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n height: var(--mds-header-h);\n padding-inline: var(--mds-pad-page-x);\n background: var(--mds-surface-page);\n border-bottom: var(--mds-border-width) solid var(--mds-border-subtle);\n}\n\n.title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n margin: 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.slot {\n display: flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./AppBar.module.css\";\n\nexport interface AppBarProps {\n title?: string | undefined;\n /** Left slot — typically a back icon-only Button. */\n leading?: ReactNode;\n /** Right slot — actions. */\n trailing?: ReactNode;\n}\n\n/**\n * Top app bar. Sticky, one per screen; the title is the page h1.\n *\n * ```tsx\n * <AppBar\n * title=\"Sessions\"\n * trailing={\n * <Button iconOnly aria-label=\"Settings\" variant=\"ghost\" onClick={openSettings}>\n * <Icon name=\"settings\" />\n * </Button>\n * }\n * />\n * ```\n */\nexport function AppBar({ title, leading, trailing }: AppBarProps) {\n return (\n <header className={styles.bar}>\n {leading ? <div className={styles.slot}>{leading}</div> : null}\n {title ? <h1 className={styles.title}>{title}</h1> : null}\n {trailing ? <div className={styles.slot}>{trailing}</div> : null}\n </header>\n );\n}\n",".bar {\n position: sticky;\n bottom: 0;\n z-index: var(--mds-z-tabbar);\n display: flex;\n align-items: stretch;\n height: var(--mds-tabbar-h);\n background: var(--mds-surface-page);\n border-top: var(--mds-border-width) solid var(--mds-border-subtle);\n padding-bottom: env(safe-area-inset-bottom);\n}\n\n.item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mds-gap-hairline);\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n font: var(--mds-type-meta);\n color: var(--mds-text-muted);\n text-decoration: none;\n transition: color var(--mds-transition-control);\n}\n\n.item:hover {\n color: var(--mds-text-secondary);\n}\n\n.active,\n.active:hover {\n color: var(--mds-text-accent);\n}\n\n.icon {\n display: inline-flex;\n}\n\n.label {\n line-height: 1;\n}\n","import type { MouseEventHandler, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./TabBar.module.css\";\n\nexport interface TabBarProps {\n /** Accessible name of the navigation landmark. */\n label: string;\n children: ReactNode;\n}\n\n/**\n * Bottom navigation. Items are links (or buttons for non-route actions);\n * they stay in the natural tab order — roving focus is for composite\n * widgets, not navigation landmarks.\n *\n * ```tsx\n * <TabBar label=\"Primary\">\n * <TabBarItem label=\"Home\" icon={<Icon name=\"home\" />} href=\"/\" active />\n * <TabBarItem label=\"Search\" icon={<Icon name=\"search\" />} href=\"/search\" />\n * </TabBar>\n * ```\n */\nexport function TabBar({ label, children }: TabBarProps) {\n return (\n <nav aria-label={label} className={styles.bar}>\n {children}\n </nav>\n );\n}\n\nexport interface TabBarItemProps {\n label: string;\n icon: ReactNode;\n href?: string | undefined;\n onClick?: MouseEventHandler | undefined;\n active?: boolean | undefined;\n}\n\nexport function TabBarItem({ label, icon, href, onClick, active = false }: TabBarItemProps) {\n const className = cx(styles.item, active && styles.active);\n const content = (\n <>\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n <span className={styles.label}>{label}</span>\n </>\n );\n if (href !== undefined) {\n return (\n <a href={href} className={className} aria-current={active ? \"page\" : undefined} onClick={onClick}>\n {content}\n </a>\n );\n }\n return (\n <button type=\"button\" className={className} aria-current={active ? \"page\" : undefined} onClick={onClick}>\n {content}\n </button>\n );\n}\n","import type { KeyboardEvent, RefObject } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface RovingGroupOptions {\n /** Selector for the focusable items inside the container. */\n selector: string;\n /** Arrow axis. Default \"horizontal\". */\n orientation?: \"horizontal\" | \"vertical\" | \"both\";\n}\n\n/**\n * Arrow-key focus movement for composite widgets (toolbars, menus, tab bars).\n * Wraps at the edges; Home/End jump. Returns a keydown handler for the\n * container.\n */\nexport function useRovingGroup(\n ref: RefObject<HTMLElement | null>,\n { selector, orientation = \"horizontal\" }: RovingGroupOptions,\n): (event: KeyboardEvent<HTMLElement>) => void {\n return useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const horizontal = orientation !== \"vertical\";\n const vertical = orientation !== \"horizontal\";\n const forward = (horizontal && event.key === \"ArrowRight\") || (vertical && event.key === \"ArrowDown\");\n const backward = (horizontal && event.key === \"ArrowLeft\") || (vertical && event.key === \"ArrowUp\");\n const home = event.key === \"Home\";\n const end = event.key === \"End\";\n if (!forward && !backward && !home && !end) return;\n\n const container = ref.current;\n if (container === null) return;\n const items = [...container.querySelectorAll<HTMLElement>(selector)].filter(\n (item) => !item.hasAttribute(\"disabled\"),\n );\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (items.length === 0 || current === -1) return;\n\n event.preventDefault();\n const next = home\n ? 0\n : end\n ? items.length - 1\n : (current + (forward ? 1 : -1) + items.length) % items.length;\n items[next]?.focus();\n },\n [ref, selector, orientation],\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/internal/cx.ts","../src/components/Text/Text.module.css","../src/components/Text/Text.tsx","../src/components/Heading/Heading.module.css","../src/components/Heading/Heading.tsx","../src/components/Spinner/Spinner.module.css","../src/components/Spinner/Spinner.tsx","../src/components/Icon/Icon.module.css","../src/components/Icon/Icon.tsx","../src/components/Button/Button.module.css","../src/components/Button/Button.tsx","../src/components/Link/Link.module.css","../src/components/Link/Link.tsx","../src/components/Avatar/Avatar.module.css","../src/components/Avatar/Avatar.tsx","../src/components/AvatarGroup/AvatarGroup.module.css","../src/components/AvatarGroup/AvatarGroup.tsx","../src/components/Badge/Badge.module.css","../src/components/Badge/Badge.tsx","../src/components/Chip/Chip.module.css","../src/components/Chip/Chip.tsx","../src/components/Chip/ChipGroup.module.css","../src/components/Chip/ChipGroup.tsx","../src/components/Chip/ChipBar.module.css","../src/components/Chip/ChipBar.tsx","../src/components/CountButton/CountButton.module.css","../src/components/CountButton/CountButton.tsx","../src/components/Field/Field.module.css","../src/components/Field/Field.tsx","../src/components/Select/Select.module.css","../src/components/Select/Select.tsx","../src/hooks/overlayHistory.ts","../src/hooks/useOverlay.ts","../src/hooks/usePresence.ts","../src/components/Overlay/Overlay.module.css","../src/components/Overlay/Overlay.tsx","../src/components/Sheet/Sheet.module.css","../src/components/Sheet/Sheet.tsx","../src/components/DateTimePicker/DateTimePicker.module.css","../src/components/DateTimePicker/DateTimePicker.tsx","../src/components/Tag/Tag.module.css","../src/components/Tag/Tag.tsx","../src/components/Divider/Divider.module.css","../src/components/Divider/Divider.tsx","../src/components/Skeleton/Skeleton.module.css","../src/components/Skeleton/Skeleton.tsx","../src/components/ProgressBar/ProgressBar.module.css","../src/components/ProgressBar/ProgressBar.tsx","../src/components/Input/Input.module.css","../src/components/Input/Input.tsx","../src/components/PasswordInput/PasswordInput.module.css","../src/components/PasswordInput/PasswordInput.tsx","../src/components/Textarea/Textarea.module.css","../src/components/Textarea/Textarea.tsx","../src/components/Checkbox/Checkbox.module.css","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.module.css","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.module.css","../src/components/Switch/Switch.tsx","../src/components/SegmentedControl/SegmentedControl.module.css","../src/components/SegmentedControl/SegmentedControl.tsx","../src/components/SearchField/SearchField.module.css","../src/components/SearchField/SearchField.tsx","../src/components/List/List.module.css","../src/components/List/List.tsx","../src/components/EmptyState/EmptyState.module.css","../src/components/EmptyState/EmptyState.tsx","../src/components/Tabs/Tabs.module.css","../src/components/Tabs/Tabs.tsx","../src/components/Toast/Toast.module.css","../src/components/Toast/Toast.tsx","../src/components/Stack/Stack.module.css","../src/components/Stack/Stack.tsx","../src/components/Inline/Inline.module.css","../src/components/Inline/Inline.tsx","../src/components/Container/Container.module.css","../src/components/Container/Container.tsx","../src/components/Card/Card.module.css","../src/components/Card/Card.tsx","../src/components/Modal/Modal.module.css","../src/components/Modal/Modal.tsx","../src/components/ConfirmDialog/ConfirmDialog.module.css","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/Screen/Screen.module.css","../src/components/Screen/Screen.tsx","../src/components/AppBar/AppBar.module.css","../src/components/AppBar/AppBar.tsx","../src/components/TabBar/TabBar.module.css","../src/components/TabBar/TabBar.tsx","../src/hooks/useRovingGroup.ts"],"names":["text","variant-body","variant-label","variant-note","variant-meta","variant-eyebrow","tone-primary","tone-secondary","tone-muted","tone-inverse","tone-accent","tone-on-media","tone-danger","tone-warning","tone-success","align-left","align-center","align-right","truncate","createElement","heading","variant-display","variant-title","variant-subtitle","spinner","jsx","icon","size-sm","size-md","size-lg","createContext","useContext","button","variant-primary","variant-secondary","variant-ghost","variant-danger","fullWidth","icon-only","jsxs","link","variant-inline","variant-standalone","avatar","image","initials","group","item","overflow","Children","badge","tone-neutral","chip","variant-soft","variant-outline","selected","interactive","disabled","Fragment","gap-hairline","gap-tight","gap-base","bar","bordered","fade","glyph","SPINNER_PX","field","label","required","message","error","useId","wrap","select","chevron","useRef","useEffect","useState","scrim","variant-modal","variant-sheet","createPortal","panel","header","body","footer","trigger","hasValue","triggerLabel","timeRow","grow","meridiem","colon","calendarHeader","monthLabel","weekdays","weekday","grid","day","today","outside","useMemo","tag","remove","removeGlyph","divider","horizontal","vertical","skeleton","pulse","variant-text","variant-rect","variant-circle","track","fill","indeterminate","input","toggle","textarea","count","root","box","dot","segment","face","glass","clear","clearGlyph","row","leading","trailing","title","description","action","list","tab","viewport","toast","close","closeGlyph","useCallback","stack","gap-loose","gap-section","align-start","align-end","align-stretch","inline","align-baseline","justify-start","justify-center","justify-end","justify-between","container","width-content","width-wide","card","variant-raised","screen","content","slot","active"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CSSProperties } from \"react\";\n\n/**\n * Join class names, dropping anything falsy.\n *\n * Every component takes a `className` from the call site and owns one of its\n * own from a CSS Module, so the merge happens in one place rather than in\n * forty slightly different inline expressions.\n */\nexport function cx(...parts: Array<string | false | null | undefined>): string {\n return parts.filter(Boolean).join(\" \");\n}\n\n/**\n * A style object that may also carry CSS custom properties.\n *\n * `React.CSSProperties` has no index signature, so `{ '--mds-x': 1 }` is a\n * type error against it. Values that genuinely vary per render (a slider's\n * percent, an avatar's pixel size) belong in a custom property the stylesheet\n * reads — this types that without an assertion.\n */\nexport type CSSVars = CSSProperties & Record<`--${string}`, string | number>;\n",".text {\n margin: 0;\n}\n\n/* Type roles — the core shorthands. */\n.variant-body { font: var(--mds-type-body); }\n.variant-label { font: var(--mds-type-label); }\n.variant-note { font: var(--mds-type-note); }\n.variant-meta { font: var(--mds-type-meta); }\n.variant-eyebrow {\n font: var(--mds-type-eyebrow);\n letter-spacing: var(--mds-tracking-eyebrow);\n text-transform: uppercase;\n}\n\n/* Tones — semantic aliases only. */\n.tone-primary { color: var(--mds-text-primary); }\n.tone-secondary { color: var(--mds-text-secondary); }\n.tone-muted { color: var(--mds-text-muted); }\n.tone-inverse { color: var(--mds-text-inverse); }\n.tone-accent { color: var(--mds-text-accent); }\n.tone-on-media { color: var(--mds-text-on-media); }\n.tone-danger { color: var(--mds-status-danger); }\n.tone-warning { color: var(--mds-status-warning); }\n.tone-success { color: var(--mds-status-success); }\n\n.align-left { text-align: left; }\n.align-center { text-align: center; }\n.align-right { text-align: right; }\n\n.truncate {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n","import type { HTMLAttributes, JSX, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Text.module.css\";\n\nexport type TextVariant = \"body\" | \"label\" | \"note\" | \"meta\" | \"eyebrow\";\n\nexport type TextTone =\n | \"primary\"\n | \"secondary\"\n | \"muted\"\n | \"inverse\"\n | \"accent\"\n | \"on-media\"\n | \"danger\"\n | \"warning\"\n | \"success\";\n\nexport interface TextProps extends HTMLAttributes<HTMLElement> {\n /** Type role from the core scale. Default \"body\". */\n variant?: TextVariant;\n /** Element override when the default doesn't fit the markup. */\n as?: keyof JSX.IntrinsicElements;\n /** Semantic color. Variants carry sensible defaults. */\n tone?: TextTone;\n align?: \"left\" | \"center\" | \"right\";\n /** Single-line ellipsis. */\n truncate?: boolean;\n}\n\nconst ELEMENT: Record<TextVariant, keyof JSX.IntrinsicElements> = {\n body: \"p\",\n label: \"span\",\n note: \"p\",\n meta: \"span\",\n eyebrow: \"span\",\n};\n\nconst DEFAULT_TONE: Partial<Record<TextVariant, TextTone>> = {\n note: \"secondary\",\n meta: \"muted\",\n eyebrow: \"muted\",\n};\n\n/**\n * Body-copy primitive. One class per type role — screens never hand-roll styled tags.\n *\n * ```tsx\n * <Text>Body copy.</Text>\n * <Text variant=\"label\" as=\"span\">Field label</Text>\n * <Text variant=\"meta\" tone=\"muted\">Updated 2h ago</Text>\n * <Text truncate>Very long single line…</Text>\n * ```\n */\nexport function Text({\n variant = \"body\",\n as,\n tone,\n align,\n truncate = false,\n className,\n ...rest\n}: TextProps): ReactElement {\n const element = as ?? ELEMENT[variant];\n const resolvedTone = tone ?? DEFAULT_TONE[variant] ?? \"primary\";\n return createElement(element, {\n className: cx(\n styles.text,\n styles[`variant-${variant}`],\n styles[`tone-${resolvedTone}`],\n align && styles[`align-${align}`],\n truncate && styles.truncate,\n className,\n ),\n ...rest,\n });\n}\n",".heading {\n margin: 0;\n}\n\n.variant-display {\n font: var(--mds-type-display);\n letter-spacing: var(--mds-tracking-display);\n}\n.variant-title { font: var(--mds-type-title); }\n.variant-subtitle { font: var(--mds-type-subtitle); }\n\n.tone-primary { color: var(--mds-text-primary); }\n.tone-secondary { color: var(--mds-text-secondary); }\n.tone-inverse { color: var(--mds-text-inverse); }\n.tone-accent { color: var(--mds-text-accent); }\n.tone-on-media { color: var(--mds-text-on-media); }\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Heading.module.css\";\n\nexport type HeadingVariant = \"display\" | \"title\" | \"subtitle\";\nexport type HeadingLevel = 1 | 2 | 3 | 4;\nexport type HeadingTone = \"primary\" | \"secondary\" | \"inverse\" | \"accent\" | \"on-media\";\n\nexport interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {\n /** Document outline level → h1–h4, with a matching default type role. Default 2. */\n level?: HeadingLevel;\n /** Type role override — outline level and visual size are separate concerns. */\n variant?: HeadingVariant;\n tone?: HeadingTone;\n}\n\nconst LEVEL_VARIANT: Record<HeadingLevel, HeadingVariant> = {\n 1: \"display\",\n 2: \"title\",\n 3: \"subtitle\",\n 4: \"subtitle\",\n};\n\n/**\n * Brand headings on the core roles. `level` = semantics, `variant` = size.\n *\n * ```tsx\n * <Heading level={1}>Sessions</Heading>\n * <Heading level={2} variant=\"subtitle\" tone=\"secondary\">This week</Heading>\n * ```\n */\nexport function Heading({\n level = 2,\n variant,\n tone = \"primary\",\n className,\n ...rest\n}: HeadingProps): ReactElement {\n return createElement(`h${level}`, {\n className: cx(\n styles.heading,\n styles[`variant-${variant ?? LEVEL_VARIANT[level]}`],\n styles[`tone-${tone}`],\n className,\n ),\n ...rest,\n });\n}\n","@keyframes spin {\n to { transform: rotate(360deg); }\n}\n\n.spinner {\n display: inline-block;\n flex: none;\n width: var(--spinner-size);\n height: var(--spinner-size);\n border: var(--spinner-border) solid var(--mds-border-strong);\n border-top-color: currentcolor;\n border-radius: var(--mds-radius-pill);\n animation: spin 0.7s linear infinite;\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx, type CSSVars } from \"../../internal/cx\";\nimport styles from \"./Spinner.module.css\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n /** Diameter in px. Default 20. */\n size?: number;\n /** Accessible label. Default \"Loading\". */\n label?: string;\n}\n\n/**\n * Indeterminate loading ring. Arc takes currentColor, so it matches whatever\n * text it sits beside. Keyframe is local: CSS Modules localizes\n * animation-name, a global one resolves to nothing. base.css stops it under\n * prefers-reduced-motion.\n *\n * ```tsx\n * <Spinner label=\"Loading sessions\" />\n * ```\n */\nexport function Spinner({\n size = 20,\n label = \"Loading\",\n className,\n style,\n ...rest\n}: SpinnerProps): ReactElement {\n /* Per-instance knobs, not design tokens. Ring thickness scales with the\n diameter, floored so small spinners stay visible. */\n const vars: CSSVars = {\n \"--spinner-size\": `${size}px`,\n \"--spinner-border\": `${Math.max(2, Math.round(size / 10))}px`,\n };\n return (\n <span\n role=\"status\"\n aria-label={label}\n className={cx(styles.spinner, className)}\n style={{ ...vars, ...style }}\n {...rest}\n />\n );\n}\n",".icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n color: inherit;\n}\n\n.size-sm { width: var(--mds-icon-sm); height: var(--mds-icon-sm); }\n.size-md { width: var(--mds-icon-md); height: var(--mds-icon-md); }\n.size-lg { width: var(--mds-icon-lg); height: var(--mds-icon-lg); }\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Icon.module.css\";\n\nexport interface IconRenderProps {\n /** Pixel size of the requested step. */\n size: number;\n}\n\n/** Brand-owned glyph resolver: name → rendered glyph (svg, font ligature, …). */\nexport type IconRender = (name: string, props: IconRenderProps) => ReactNode;\n\nconst IconContext = createContext<IconRender | null>(null);\n\nexport interface IconProviderProps {\n render: IconRender;\n children: ReactNode;\n}\n\n/**\n * Registry seam. The system never bundles an icon set — the app registers its\n * own (lucide, Material Symbols, …) once, at the root. Iconography is brand,\n * like color.\n *\n * ```tsx\n * // App root: map names to your icon set once.\n * <IconProvider render={(name, { size }) => <MyGlyph name={name} width={size} />}>\n * <App />\n * </IconProvider>\n *\n * // Anywhere below:\n * <Icon name=\"check\" size=\"sm\" />\n * ```\n */\nexport function IconProvider({ render, children }: IconProviderProps): ReactElement {\n return <IconContext.Provider value={render}>{children}</IconContext.Provider>;\n}\n\nexport type IconSize = \"sm\" | \"md\" | \"lg\";\n\n/* Must match --mds-icon-* in core/layout.css — the renderer needs a number,\n a stylesheet cannot hand one over. */\nconst SIZE_PX: Record<IconSize, number> = { sm: 16, md: 20, lg: 24 };\n\nexport interface IconProps extends HTMLAttributes<HTMLSpanElement> {\n /** Glyph name in the app's registered set. */\n name: string;\n /** Default \"md\". */\n size?: IconSize;\n /** Accessible name. Omitted = decorative (aria-hidden). */\n label?: string;\n}\n\nconst warned = new Set<string>();\n\n/** A glyph from the app-registered set, sized on the core scale. */\nexport function Icon({ name, size = \"md\", label, className, ...rest }: IconProps): ReactElement {\n const render = useContext(IconContext);\n if (render === null && !warned.has(name)) {\n warned.add(name);\n console.error(\n `Icon \"${name}\": no IconProvider above this tree. Register the app's icon set once at the root.`,\n );\n }\n return (\n <span\n className={cx(styles.icon, styles[`size-${size}`], className)}\n {...(label ? { role: \"img\", \"aria-label\": label } : { \"aria-hidden\": true })}\n {...rest}\n >\n {render?.(name, { size: SIZE_PX[size] })}\n </span>\n );\n}\n",".button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--mds-gap-tight);\n border: var(--mds-border-width) solid transparent;\n border-radius: var(--mds-radius-control);\n font-family: var(--mds-font-body);\n font-weight: var(--mds-weight-semibold);\n line-height: 1;\n white-space: nowrap;\n cursor: pointer;\n text-decoration: none;\n transition: background-color var(--mds-transition-control), color var(--mds-transition-control);\n}\n\n/* Sizes — height from the control scale, padding from the space scale. */\n.size-sm {\n height: var(--mds-control-h-sm);\n padding: 0 var(--mds-space-3);\n font-size: var(--mds-text-sm);\n}\n\n.size-md {\n height: var(--mds-control-h-md);\n padding: 0 var(--mds-space-4);\n font-size: var(--mds-text-base);\n}\n\n.size-lg {\n height: var(--mds-control-h-lg);\n padding: 0 var(--mds-space-5);\n font-size: var(--mds-text-lg);\n}\n\n/* Variants */\n.variant-primary {\n background: var(--mds-action-bg);\n color: var(--mds-action-fg);\n}\n\n.variant-primary:hover:not(:disabled) { background: var(--mds-action-bg-hover); }\n.variant-primary:active:not(:disabled) { background: var(--mds-action-bg-active); }\n\n.variant-secondary {\n background: transparent;\n color: var(--mds-text-primary);\n border-color: var(--mds-control-border);\n}\n\n.variant-ghost {\n background: transparent;\n color: var(--mds-text-primary);\n}\n\n.variant-secondary:hover:not(:disabled),\n.variant-ghost:hover:not(:disabled) {\n background: var(--mds-surface-sunken);\n}\n\n.variant-danger {\n background: var(--mds-status-danger);\n color: var(--mds-status-danger-contrast);\n}\n\n.variant-danger:hover:not(:disabled) { filter: brightness(0.94); }\n\n/* Unavailable is a color, not a fade — opacity composites unpredictably. */\n.button:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n border-color: transparent;\n cursor: not-allowed;\n}\n\n.fullWidth {\n width: 100%;\n}\n\n/* Icon-only: circle, one glyph, width locked to the control height. */\n.icon-only {\n padding: 0;\n border-radius: var(--mds-radius-pill);\n}\n\n.icon-only.size-sm { width: var(--mds-control-h-sm); }\n.icon-only.size-md { width: var(--mds-control-h-md); }\n.icon-only.size-lg { width: var(--mds-control-h-lg); }\n","import type { ButtonHTMLAttributes, ElementType, ReactElement, ReactNode, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Spinner } from \"../Spinner/Spinner\";\nimport styles from \"./Button.module.css\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\ninterface ButtonBaseProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"type\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Glyph slots — pass an <Icon> or any node. Agnostic of icon set. */\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n /** Spinner replaces the left slot; disables and announces busy. */\n loading?: boolean;\n fullWidth?: boolean;\n type?: \"button\" | \"submit\" | \"reset\";\n /** Renders an <a> — for navigation styled as a button. */\n href?: string;\n /** Element override, e.g. a router's Link. */\n as?: ElementType;\n ref?: Ref<HTMLButtonElement>;\n}\n\n/* Icon-only collapses the button to a circle holding one glyph. A glyph says\n nothing to a screen reader, so the type demands the name. */\ntype IconOnlyEnforcement =\n | { iconOnly: true; \"aria-label\": string }\n | { iconOnly?: false | undefined };\n\nexport type ButtonProps = ButtonBaseProps & IconOnlyEnforcement;\n\n/* Spinner diameter per control size — matches the icon steps. */\nconst SPINNER_PX: Record<ButtonSize, number> = { sm: 16, md: 18, lg: 20 };\n\n/**\n * The tappable action. Semantics: button by default, link when `href`/`as` says so.\n *\n * ```tsx\n * <Button onClick={save}>Save</Button>\n * <Button variant=\"secondary\" size=\"sm\">Cancel</Button>\n * <Button variant=\"danger\" loading={deleting} onClick={remove}>Delete</Button>\n * <Button iconOnly aria-label=\"Close\" variant=\"ghost\"><Icon name=\"close\" /></Button>\n * <Button href=\"/settings\">Settings</Button>\n * ```\n */\nexport function Button({\n variant = \"primary\",\n size = \"md\",\n iconLeft,\n iconRight,\n loading = false,\n disabled = false,\n fullWidth = false,\n iconOnly = false,\n type = \"button\",\n href,\n as,\n className,\n children,\n ...rest\n}: ButtonProps): ReactElement {\n const Element: ElementType = as ?? (href !== undefined ? \"a\" : \"button\");\n const isButton = Element === \"button\";\n const own = isButton ? { type, disabled: disabled || loading } : { href };\n\n return (\n <Element\n className={cx(\n styles.button,\n styles[`variant-${variant}`],\n styles[`size-${size}`],\n fullWidth && styles.fullWidth,\n iconOnly && styles[\"icon-only\"],\n className,\n )}\n aria-busy={loading || undefined}\n {...own}\n {...rest}\n >\n {loading ? <Spinner size={SPINNER_PX[size]} label=\"\" aria-hidden=\"true\" /> : iconLeft}\n {children}\n {!loading && iconRight}\n </Element>\n );\n}\n",".link {\n color: var(--mds-text-accent);\n border-radius: var(--mds-radius-1); /* focus outline hugs the text */\n transition: color var(--mds-transition-control);\n}\n\n.variant-inline {\n text-decoration: underline;\n text-underline-offset: 0.15em;\n}\n\n.variant-standalone {\n text-decoration: none;\n font-weight: var(--mds-weight-medium);\n}\n\n.link:hover {\n color: var(--mds-accent-hover);\n}\n","import type { AnchorHTMLAttributes, ElementType, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Link.module.css\";\n\nexport type LinkVariant = \"inline\" | \"standalone\";\n\nexport interface LinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /** inline = underlined, lives in running text. standalone = nav/action link. */\n variant?: LinkVariant;\n /** Opens in a new tab with rel protection. */\n external?: boolean;\n /** Element override, e.g. a router's Link. */\n as?: ElementType;\n ref?: Ref<HTMLAnchorElement>;\n}\n\n/**\n * Text link. Inline links keep their underline: color alone fails WCAG 1.4.1\n * for links inside prose.\n *\n * ```tsx\n * <Text>Read the <Link href=\"/terms\">terms</Link>.</Text>\n * <Link variant=\"standalone\" href=\"https://example.com\" external>Docs</Link>\n * <Link as={NextLink} href=\"/about\">About</Link>\n * ```\n */\nexport function Link({\n variant = \"inline\",\n external = false,\n as: Element = \"a\",\n className,\n ...rest\n}: LinkProps): ReactElement {\n const externalProps = external ? { target: \"_blank\", rel: \"noopener noreferrer\" } : {};\n return (\n <Element\n className={cx(styles.link, styles[`variant-${variant}`], className)}\n {...externalProps}\n {...rest}\n />\n );\n}\n",".avatar {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n overflow: hidden;\n border-radius: var(--mds-radius-avatar);\n background: var(--mds-surface-sunken);\n color: var(--mds-text-secondary);\n font-family: var(--mds-font-body);\n font-weight: var(--mds-weight-semibold);\n user-select: none;\n}\n\n.size-sm { width: var(--mds-avatar-sm); height: var(--mds-avatar-sm); font-size: var(--mds-text-xs); }\n.size-md { width: var(--mds-avatar-md); height: var(--mds-avatar-md); font-size: var(--mds-text-sm); }\n.size-lg { width: var(--mds-avatar-lg); height: var(--mds-avatar-lg); font-size: var(--mds-text-xl); }\n\n.image {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.initials {\n line-height: 1;\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Avatar.module.css\";\n\nexport type AvatarSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n /** Person's display name — accessible name and initials source. */\n name: string;\n /** Image URL; initials render when absent or empty. */\n src?: string;\n size?: AvatarSize;\n}\n\n/* First + last word: \"Ada Byron King Lovelace\" → AL. Middle names add noise\n at 24px. */\nfunction initials(name: string): string {\n const words = name.trim().split(/\\s+/).filter(Boolean);\n const first = words[0]?.[0] ?? \"\";\n const last = words.length > 1 ? (words.at(-1)?.[0] ?? \"\") : \"\";\n return (first + last).toUpperCase();\n}\n\n/**\n * Person marker. Image when available, initials otherwise — never an empty circle.\n *\n * ```tsx\n * <Avatar name=\"Ada Lovelace\" src=\"/ada.jpg\" />\n * <Avatar name=\"Grace Hopper\" size=\"lg\" />\n * ```\n */\nexport function Avatar({ name, src, size = \"md\", className, ...rest }: AvatarProps): ReactElement {\n return (\n <span className={cx(styles.avatar, styles[`size-${size}`], className)} {...rest}>\n {src ? (\n <img className={styles.image} src={src} alt={name} />\n ) : (\n <span role=\"img\" aria-label={name} className={styles.initials}>\n {initials(name)}\n </span>\n )}\n </span>\n );\n}\n",".group {\n display: inline-flex;\n align-items: center;\n}\n\n/* Overlap by a tight step; ring separates neighbours. */\n.item {\n display: inline-flex;\n border-radius: var(--mds-radius-avatar);\n box-shadow: 0 0 0 var(--mds-focus-width) var(--mds-surface-card);\n}\n\n.item + .item {\n margin-left: calc(-1 * var(--mds-space-2));\n}\n\n.overflow {\n align-items: center;\n justify-content: center;\n flex: none;\n background: var(--mds-surface-sunken);\n color: var(--mds-text-secondary);\n font-family: var(--mds-font-body);\n font-weight: var(--mds-weight-semibold);\n user-select: none;\n}\n\n.size-sm { width: var(--mds-avatar-sm); height: var(--mds-avatar-sm); font-size: var(--mds-text-xs); }\n.size-md { width: var(--mds-avatar-md); height: var(--mds-avatar-md); font-size: var(--mds-text-sm); }\n.size-lg { width: var(--mds-avatar-lg); height: var(--mds-avatar-lg); font-size: var(--mds-text-xl); }\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { Children } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport type { AvatarSize } from \"../Avatar/Avatar\";\nimport styles from \"./AvatarGroup.module.css\";\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Avatar children. */\n children: ReactNode;\n /** Visible cap; the rest collapse into \"+N\". Default 4. */\n max?: number;\n /** Sizes the overflow chip to match the avatars. Default \"md\". */\n size?: AvatarSize;\n}\n\n/**\n * Overlapping stack of avatars with a \"+N\" chip past `max`.\n *\n * ```tsx\n * <AvatarGroup max={3}>\n * <Avatar name=\"Ada Lovelace\" />\n * <Avatar name=\"Grace Hopper\" />\n * <Avatar name=\"Margaret Hamilton\" />\n * <Avatar name=\"Katherine Johnson\" />\n * </AvatarGroup>\n * ```\n */\nexport function AvatarGroup({\n children,\n max = 4,\n size = \"md\",\n className,\n ...rest\n}: AvatarGroupProps): ReactElement {\n const all = Children.toArray(children);\n const visible = all.slice(0, max);\n const hidden = all.length - visible.length;\n\n return (\n <div className={cx(styles.group, className)} {...rest}>\n {visible.map((child, i) => (\n <span key={i} className={styles.item}>\n {child}\n </span>\n ))}\n {hidden > 0 && (\n <span\n className={cx(styles.item, styles.overflow, styles[`size-${size}`])}\n aria-label={`${hidden} more`}\n >\n +{hidden}\n </span>\n )}\n </div>\n );\n}\n",".badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(--mds-space-2);\n min-width: var(--mds-space-5);\n height: var(--mds-space-5);\n border-radius: var(--mds-radius-pill);\n font: var(--mds-type-meta);\n font-weight: var(--mds-weight-semibold);\n white-space: nowrap;\n}\n\n.tone-neutral {\n background: var(--mds-surface-sunken);\n color: var(--mds-text-primary);\n}\n\n.tone-accent {\n background: var(--mds-accent-soft);\n color: var(--mds-text-primary);\n}\n\n.tone-danger {\n background: var(--mds-status-danger-soft);\n color: var(--mds-text-primary);\n}\n\n.tone-warning {\n background: var(--mds-status-warning-soft);\n color: var(--mds-text-primary);\n}\n\n.tone-success {\n background: var(--mds-status-success-soft);\n color: var(--mds-text-primary);\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Badge.module.css\";\n\nexport type BadgeTone = \"neutral\" | \"accent\" | \"danger\" | \"warning\" | \"success\";\n\nexport interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {\n tone?: BadgeTone;\n}\n\n/**\n * Small status marker — counts, \"new\", state words. Soft fill, strong text.\n *\n * ```tsx\n * <Badge tone=\"success\">Paid</Badge>\n * <Badge tone=\"danger\">3</Badge>\n * ```\n */\nexport function Badge({ tone = \"neutral\", className, ...rest }: BadgeProps): ReactElement {\n return <span className={cx(styles.badge, styles[`tone-${tone}`], className)} {...rest} />;\n}\n",".chip {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n padding: var(--mds-space-1) var(--mds-space-3);\n border-radius: var(--mds-radius-chip);\n font: var(--mds-type-label);\n white-space: nowrap;\n cursor: default;\n transition: var(--mds-transition-control);\n}\n\n/* Unselected skins. */\n.variant-soft {\n background: var(--mds-accent-soft);\n border: var(--mds-border-width) solid transparent;\n color: var(--mds-text-accent);\n}\n\n.variant-outline {\n background: transparent;\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n color: var(--mds-text-secondary);\n}\n\n/* After the variants, so a selected chip wins whichever it was built from. */\n.selected {\n background: var(--mds-accent);\n border-color: transparent;\n color: var(--mds-accent-contrast);\n}\n\n/* Only the button branch gets pointer + hover feedback; a selected chip is\n already at full accent and would only muddy under a filter. */\n.interactive {\n cursor: pointer;\n}\n\n.interactive:not(.selected):hover {\n filter: brightness(0.97);\n}\n\n.disabled {\n opacity: 0.5;\n}\n","import type { HTMLAttributes, MouseEventHandler, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Chip.module.css\";\n\nexport type ChipVariant = \"soft\" | \"outline\";\n\nexport interface ChipProps extends HTMLAttributes<HTMLElement> {\n children: ReactNode;\n /** Unselected appearance. Default \"soft\". */\n variant?: ChipVariant;\n /** Toggle state. When given on an interactive chip it also sets aria-pressed;\n * omit for a plain action chip so it does not announce as a toggle. */\n selected?: boolean;\n /** Leading glyph, e.g. `<Icon name=\"check\" size=\"sm\" />`. */\n icon?: ReactNode;\n /** When provided, Chip renders as a `<button>`. */\n onClick?: MouseEventHandler;\n disabled?: boolean;\n}\n\n/**\n * Compact pill for filters and single/multi choices. Interactive (a button,\n * with aria-pressed when `selected` is given) when `onClick` is set, otherwise\n * a static pill. For a passive content label use Tag instead.\n *\n * ```tsx\n * <Chip selected={filter === \"all\"} onClick={() => setFilter(\"all\")}>All</Chip>\n * <Chip variant=\"outline\" icon={<Icon name=\"pin\" size=\"sm\" />}>Nearby</Chip>\n * ```\n */\nexport function Chip({\n children,\n variant = \"soft\",\n selected,\n icon,\n onClick,\n disabled = false,\n className,\n ...rest\n}: ChipProps): ReactElement {\n const interactive = typeof onClick === \"function\";\n\n const shared = {\n className: cx(\n styles.chip,\n styles[`variant-${variant}`],\n selected && styles.selected,\n interactive && !disabled && styles.interactive,\n disabled && styles.disabled,\n className,\n ),\n ...rest,\n };\n\n const content = (\n <>\n {icon}\n {children}\n </>\n );\n\n return interactive ? (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n aria-pressed={selected === undefined ? undefined : selected}\n {...shared}\n >\n {content}\n </button>\n ) : (\n <span {...shared}>{content}</span>\n );\n}\n",".group {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n}\n\n.gap-hairline {\n gap: var(--mds-gap-hairline);\n}\n\n.gap-tight {\n gap: var(--mds-gap-tight);\n}\n\n.gap-base {\n gap: var(--mds-gap);\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./ChipGroup.module.css\";\n\nexport type ChipGroupGap = \"hairline\" | \"tight\" | \"base\";\n\nexport interface ChipGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Chips (or any inline items) laid out in a wrapping group. */\n children: ReactNode;\n /** Space between items, on the gap scale. Default \"tight\". */\n gap?: ChipGroupGap;\n}\n\n/**\n * Wrapping row of Chips for multi-select choices inside a form (pick several\n * days, locations, tags…). Items wrap onto new lines so nothing scrolls\n * off-screen; use ChipBar for a single-line scrolling filter strip.\n *\n * ```tsx\n * <ChipGroup>\n * {days.map((day) => (\n * <Chip key={day} selected={picked.has(day)} onClick={() => toggle(day)}>\n * {day}\n * </Chip>\n * ))}\n * </ChipGroup>\n * ```\n */\nexport function ChipGroup({ children, gap = \"tight\", className, ...rest }: ChipGroupProps): ReactElement {\n return (\n <div className={cx(styles.group, styles[`gap-${gap}`], className)} {...rest}>\n {children}\n </div>\n );\n}\n",".bar {\n display: flex;\n align-items: center;\n overflow-x: auto;\n scrollbar-width: none;\n min-width: 0;\n}\n\n.gap-hairline {\n gap: var(--mds-gap-hairline);\n}\n\n.gap-tight {\n gap: var(--mds-gap-tight);\n}\n\n.gap-base {\n gap: var(--mds-gap);\n}\n\n/* Frames the strip so its overflow reads as a scroll area. */\n.bordered {\n padding: var(--mds-space-1) var(--mds-space-3);\n border-radius: var(--mds-radius-pill);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n background: var(--mds-surface-sunken);\n}\n\n/* Fade only the trailing edge; the leading chip stays fully legible at rest.\n `black` is a mask stop, not a colour — only its alpha is read, so it is\n theme-independent by definition and deliberately not a token. */\n.fade {\n mask-image: linear-gradient(to right, black calc(100% - var(--mds-space-6)), transparent);\n}\n\n/* Each child keeps its intrinsic width so the row never wraps. */\n.item {\n flex: none;\n display: flex;\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { Children } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./ChipBar.module.css\";\n\nexport type ChipBarGap = \"hairline\" | \"tight\" | \"base\";\n\nexport interface ChipBarProps extends HTMLAttributes<HTMLDivElement> {\n /** Chips (or any inline items) laid out in a single scrolling row. */\n children: ReactNode;\n /** Space between items, on the gap scale. Default \"tight\". */\n gap?: ChipBarGap;\n /** Frame the strip so overflow reads as a scroll area. Default false. */\n bordered?: boolean;\n /** Fade the trailing edge to hint that the row scrolls. Default true. */\n fade?: boolean;\n}\n\n/**\n * Horizontally scrollable single-line row of Chips — a filter strip. Items\n * never wrap; the row scrolls when they overflow. `fade` dissolves the\n * trailing edge so the last chip hints at more rather than getting chopped\n * mid-word. Use ChipGroup for a wrapping set of choices inside a form.\n *\n * ```tsx\n * <ChipBar>\n * {segments.map((s) => (\n * <Chip key={s} selected={s === segment} onClick={() => setSegment(s)}>\n * {s}\n * </Chip>\n * ))}\n * </ChipBar>\n * ```\n */\nexport function ChipBar({\n children,\n gap = \"tight\",\n bordered = false,\n fade = true,\n className,\n ...rest\n}: ChipBarProps): ReactElement {\n return (\n <div\n className={cx(styles.bar, styles[`gap-${gap}`], bordered && styles.bordered, fade && styles.fade, className)}\n {...rest}\n >\n {Children.map(children, (child) => (\n <div className={styles.item}>{child}</div>\n ))}\n </div>\n );\n}\n",".button {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n padding: var(--mds-space-1) var(--mds-space-2);\n margin: calc(-1 * var(--mds-space-1)) calc(-1 * var(--mds-space-2));\n border: none;\n background: transparent;\n border-radius: var(--mds-radius-control);\n color: var(--mds-text-secondary);\n font: var(--mds-type-label);\n cursor: pointer;\n transition: var(--mds-transition-control);\n}\n\n.button:hover:not(:disabled) {\n background: var(--mds-surface-sunken);\n}\n\n.button:active:not(:disabled) {\n background: var(--mds-surface-selected);\n}\n\n.button:disabled {\n cursor: default;\n opacity: 0.6;\n}\n\n/* Active tint — the glyph inherits it via currentColor. */\n.tone-accent {\n color: var(--mds-accent);\n}\n\n.tone-danger {\n color: var(--mds-status-danger);\n}\n\n.glyph {\n display: inline-flex;\n align-items: center;\n}\n","import type { ButtonHTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Spinner } from \"../Spinner/Spinner\";\nimport styles from \"./CountButton.module.css\";\n\nexport type CountButtonTone = \"accent\" | \"danger\";\n\n/* Matches --mds-icon-md; the spinner replaces an md glyph without reflow. */\nconst SPINNER_PX = 20;\n\nexport interface CountButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"aria-label\" | \"aria-pressed\"> {\n /** Glyph shown before the text, e.g. `<Icon name=\"heart\" />` (md). */\n icon: ReactNode;\n /** Accessible label (required) — describes the action for screen readers. */\n label: string;\n /**\n * Toggle state. When defined, sets `aria-pressed` and tints the control\n * with the tone colour. Omit for non-toggle actions (e.g. comment).\n */\n active?: boolean;\n /** Token the active tint reads. Default \"accent\". */\n tone?: CountButtonTone;\n /**\n * The write behind this action is in flight. Swaps the glyph for a spinner\n * of the same size and locks the control — a second tap in that window\n * would toggle the write straight back off.\n */\n loading?: boolean;\n /** Visible text beside the icon — typically a count or a word. */\n children?: ReactNode;\n}\n\n/**\n * Inline, chrome-less pressable pairing an icon with a count or word — like,\n * comment, react actions. Owns hover, press, disabled, loading and active\n * (`aria-pressed`) states so consumers never hand-roll button chrome.\n *\n * The app owns the glyph, so it also owns the filled/outline swap:\n *\n * ```tsx\n * <CountButton\n * icon={<Icon name={liked ? \"heart-filled\" : \"heart\"} />}\n * label={liked ? \"Unlike\" : \"Like\"}\n * active={liked}\n * loading={likeMutation.isPending}\n * onClick={() => likeMutation.mutate()}\n * >\n * {likeCount}\n * </CountButton>\n * ```\n */\nexport function CountButton({\n icon,\n label,\n active,\n tone = \"accent\",\n disabled = false,\n loading = false,\n className,\n children,\n ...rest\n}: CountButtonProps): ReactElement {\n const isToggle = active !== undefined;\n\n return (\n <button\n type=\"button\"\n disabled={disabled || loading}\n aria-label={label}\n aria-pressed={isToggle ? active : undefined}\n aria-busy={loading || undefined}\n className={cx(styles.button, active && styles[`tone-${tone}`], className)}\n {...rest}\n >\n {/* The button's own aria-busy announces the wait; the spinner is decor. */}\n {loading ? <Spinner size={SPINNER_PX} label=\"\" aria-hidden=\"true\" /> : <span className={styles.glyph}>{icon}</span>}\n {children != null ? <span>{children}</span> : null}\n </button>\n );\n}\n",".field {\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-hairline);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.required {\n color: var(--mds-status-danger);\n margin-left: var(--mds-space-1);\n}\n\n.message {\n font: var(--mds-type-note);\n color: var(--mds-text-secondary);\n}\n\n.error {\n color: var(--mds-status-danger);\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createContext, useContext, useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Field.module.css\";\n\nexport interface FieldContextValue {\n /** Control id — the label points here. */\n id: string;\n /** Space-joined ids of hint/error, for aria-describedby. */\n describedBy: string | undefined;\n invalid: boolean;\n}\n\nconst FieldContext = createContext<FieldContextValue | null>(null);\n\n/** Controls call this to pick up Field wiring. Null outside a Field. */\nexport function useFieldContext(): FieldContextValue | null {\n return useContext(FieldContext);\n}\n\nexport interface FieldProps {\n label: string;\n children: ReactNode;\n /** Guidance under the control. */\n hint?: string;\n /** Validation message; replaces the hint and flags the control invalid. */\n error?: string;\n required?: boolean;\n className?: string;\n}\n\n/**\n * Label + control + hint/error, wired for assistive tech. The control inside\n * (Input, Textarea, Select, …) picks up id, aria-describedby and aria-invalid\n * from context — no manual plumbing at call sites.\n *\n * ```tsx\n * <Field label=\"Email\" hint=\"Work email preferred\" error={errors.email} required>\n * <Input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} />\n * </Field>\n * ```\n */\nexport function Field({ label, children, hint, error, required = false, className }: FieldProps): ReactElement {\n const id = useId();\n const messageId = `${id}-message`;\n const message = error ?? hint;\n\n return (\n <div className={cx(styles.field, className)}>\n <label className={styles.label} htmlFor={id}>\n {label}\n {required && (\n <span className={styles.required} aria-hidden=\"true\">\n *\n </span>\n )}\n </label>\n <FieldContext.Provider\n value={{ id, describedBy: message ? messageId : undefined, invalid: error !== undefined }}\n >\n {children}\n </FieldContext.Provider>\n {message && (\n <span id={messageId} className={cx(styles.message, error !== undefined && styles.error)}>\n {message}\n </span>\n )}\n </div>\n );\n}\n",".wrap {\n position: relative;\n display: inline-flex;\n width: 100%;\n}\n\n.select {\n appearance: none;\n width: 100%;\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n cursor: pointer;\n transition: border-color var(--mds-transition-control);\n}\n\n.select:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n cursor: not-allowed;\n}\n\n.select[aria-invalid=\"true\"] {\n border-color: var(--mds-status-danger);\n}\n\n/* Room for the chevron. */\n.size-sm { height: var(--mds-control-h-sm); padding: 0 var(--mds-space-7) 0 var(--mds-space-2); font-size: var(--mds-text-sm); }\n.size-md { height: var(--mds-control-h-md); padding: 0 var(--mds-space-8) 0 var(--mds-space-3); font-size: var(--mds-text-base); }\n.size-lg { height: var(--mds-control-h-lg); padding: 0 var(--mds-space-8) 0 var(--mds-space-4); font-size: var(--mds-text-base); }\n\n.chevron {\n position: absolute;\n right: var(--mds-space-2);\n top: 50%;\n transform: translateY(-50%);\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n color: var(--mds-text-secondary);\n pointer-events: none;\n}\n","import type { ReactElement, Ref, SelectHTMLAttributes } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useFieldContext } from \"../Field/Field\";\nimport styles from \"./Select.module.css\";\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, \"size\"> {\n size?: SelectSize;\n ref?: Ref<HTMLSelectElement>;\n}\n\n/**\n * Native select, styled. Native = free keyboard, mobile pickers, screen\n * reader behavior; a custom popover earns its complexity only when options\n * need rich content.\n *\n * ```tsx\n * <Field label=\"Language\">\n * <Select value={lang} onChange={(e) => setLang(e.target.value)}>\n * <option value=\"de\">Deutsch</option>\n * <option value=\"en\">English</option>\n * </Select>\n * </Field>\n * ```\n */\nexport function Select({ size = \"md\", className, children, ...rest }: SelectProps): ReactElement {\n const field = useFieldContext();\n return (\n <span className={styles.wrap}>\n <select\n id={rest.id ?? field?.id}\n aria-describedby={rest[\"aria-describedby\"] ?? field?.describedBy}\n aria-invalid={rest[\"aria-invalid\"] ?? (field?.invalid || undefined)}\n className={cx(styles.select, styles[`size-${size}`], className)}\n {...rest}\n >\n {children}\n </select>\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.chevron}>\n <path d=\"M4 6l4 4 4-4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </span>\n );\n}\n","import { createContext } from \"react\";\n\nexport interface OverlayHistory {\n /**\n * An overlay has opened. The implementation adds a history entry, and calls\n * `onPop` if the user goes back to it. Returns a dispose for when the\n * overlay closes some other way — its close button, Escape, the scrim, or\n * unmounting. The implementation owes the entry back: one left behind is a\n * back tap that does nothing.\n */\n register(onPop: () => void): () => void;\n}\n\n/**\n * On a phone, back is also the dismiss gesture: an open overlay that ignores\n * it costs the user the screen underneath instead. The library owns *when* an\n * overlay opens and closes; the app owns the history mechanism, because a raw\n * `history.pushState` from a library corrupts a router's own bookkeeping\n * (React Router keeps its index in `history.state`).\n *\n * Null wherever no app has supplied one — Storybook, a unit test, a consumer\n * that has not opted in. Overlays go on working; they just do not answer back.\n *\n * `useOverlay` registers every open overlay, so Modal, Sheet and\n * ConfirmDialog are covered with no per-call-site wiring:\n *\n * ```tsx\n * // App root — e.g. backed by the app router:\n * const overlayHistory = useMemo<OverlayHistory>(() => ({\n * register(onPop) {\n * pushOverlayEntry(onPop); // app-owned, via the router\n * return () => popOverlayEntry(); // give the entry back\n * },\n * }), []);\n *\n * <OverlayHistoryContext.Provider value={overlayHistory}>\n * <App />\n * </OverlayHistoryContext.Provider>\n * ```\n */\nexport const OverlayHistoryContext = createContext<OverlayHistory | null>(null);\n","import { useContext, useEffect, useRef } from \"react\";\nimport type { RefObject } from \"react\";\nimport { OverlayHistoryContext } from \"./overlayHistory\";\n\nexport interface UseOverlayOptions {\n open: boolean;\n onClose: () => void;\n}\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 * Shared modal-surface behaviour: focus capture and restore, Escape to\n * close, Tab cycling inside the panel, body scroll lock. Attach the\n * returned ref to the dialog element (it needs tabIndex={-1}).\n *\n * Anchor-positioned overlays (Tooltip/Popover) will extend this hook with\n * a floating-ui middleware pass; the options object leaves room for that.\n */\nexport function useOverlay<T extends HTMLElement>(options: UseOverlayOptions): RefObject<T | null> {\n const ref = useRef<T>(null);\n const { open, onClose } = options;\n const close = useRef(onClose);\n useEffect(() => {\n close.current = onClose;\n }, [onClose]);\n\n /* Back-button contract: an app that supplies OverlayHistory gets every open\n overlay registered, so back dismisses the innermost one instead of leaving\n the screen underneath. Null context (Storybook, tests, non-opted apps) is\n a no-op. The register/dispose pair keeps history balanced either way. */\n const overlayHistory = useContext(OverlayHistoryContext);\n useEffect(() => {\n if (!open || !overlayHistory) return;\n return overlayHistory.register(() => close.current());\n }, [open, overlayHistory]);\n\n useEffect(() => {\n if (!open) return;\n const panel = ref.current;\n const previous = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n panel?.focus();\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n close.current();\n return;\n }\n if (event.key !== \"Tab\" || !panel) return;\n const focusable = [...panel.querySelectorAll<HTMLElement>(FOCUSABLE)];\n if (focusable.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === panel)) {\n event.preventDefault();\n last?.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first?.focus();\n }\n };\n\n document.addEventListener(\"keydown\", onKeyDown);\n const bodyOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.removeEventListener(\"keydown\", onKeyDown);\n document.body.style.overflow = bodyOverflow;\n previous?.focus();\n };\n }, [open]);\n\n return ref;\n}\n","import { useEffect, useState } from \"react\";\n\nexport interface Presence {\n /** Keep the element in the DOM (true during exit animation). */\n mounted: boolean;\n /** Drive the visual state — false during exit. */\n visible: boolean;\n}\n\n/**\n * Exit-animation helper. `open` flips instantly; `mounted` lags by\n * `durationMs` on close so the exit transition can play.\n */\nexport function usePresence(open: boolean, durationMs: number): Presence {\n const [mounted, setMounted] = useState(open);\n\n // Sync on open belongs in render, not an effect (\"adjusting state when\n // props change\" pattern) — the effect only owns the exit timer.\n if (open && !mounted) setMounted(true);\n\n useEffect(() => {\n if (open) return;\n const timer = setTimeout(() => setMounted(false), durationMs);\n return () => clearTimeout(timer);\n }, [open, durationMs]);\n\n return { mounted: open || mounted, visible: open };\n}\n",".scrim {\n position: fixed;\n inset: 0;\n display: flex;\n background: var(--mds-scrim);\n opacity: 0;\n transition: opacity var(--mds-dur-base) var(--mds-ease-standard);\n}\n\n.scrim[data-open] {\n opacity: 1;\n}\n\n.variant-modal {\n z-index: var(--mds-z-modal);\n align-items: center;\n justify-content: center;\n padding: var(--mds-pad-page-x);\n}\n\n.variant-sheet {\n z-index: var(--mds-z-sheet);\n align-items: flex-end;\n}\n","import { createPortal } from \"react-dom\";\nimport type { ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useOverlay } from \"../../hooks/useOverlay\";\nimport { usePresence } from \"../../hooks/usePresence\";\nimport styles from \"./Overlay.module.css\";\n\n/** Matches --mds-dur-base; usePresence needs the number in JS. */\nexport const OVERLAY_EXIT_MS = 200;\n\nexport interface OverlayProps {\n open: boolean;\n onClose: () => void;\n /** Accessible name of the dialog. */\n label: string;\n variant: \"modal\" | \"sheet\";\n /** Scrim click dismisses. Confirmations turn this off. */\n closeOnScrimClick: boolean;\n panelClassName: string | undefined;\n children: ReactNode;\n}\n\n/**\n * Internal shell shared by Modal and Sheet: portal, scrim, dialog\n * semantics, useOverlay behaviour, exit-animation presence. Not exported\n * from the package.\n */\nexport function Overlay({ open, onClose, label, variant, closeOnScrimClick, panelClassName, children }: OverlayProps) {\n const { mounted, visible } = usePresence(open, OVERLAY_EXIT_MS);\n const ref = useOverlay<HTMLDivElement>({ open, onClose });\n\n if (!mounted) return null;\n\n return createPortal(\n <div\n className={cx(styles.scrim, styles[`variant-${variant}`])}\n data-open={visible || undefined}\n data-testid=\"mds-scrim\"\n onClick={closeOnScrimClick ? onClose : undefined}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={label}\n tabIndex={-1}\n className={panelClassName}\n data-open={visible || undefined}\n onClick={(event) => event.stopPropagation()}\n >\n {children}\n </div>\n </div>,\n document.body,\n );\n}\n",".panel {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-height: 85dvh;\n background: var(--mds-surface-raised);\n border-radius: var(--mds-radius-sheet) var(--mds-radius-sheet) 0 0;\n box-shadow: var(--mds-elevation-sheet);\n transform: translateY(100%);\n transition: var(--mds-transition-sheet);\n}\n\n.panel[data-open] {\n transform: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: var(--mds-pad-card) var(--mds-pad-card) 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.body {\n flex: 1;\n overflow-y: auto;\n padding: var(--mds-pad-card);\n}\n\n.footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--mds-gap);\n padding: 0 var(--mds-pad-card) var(--mds-pad-card);\n}\n","import type { ReactNode } from \"react\";\nimport { Overlay } from \"../Overlay/Overlay\";\nimport styles from \"./Sheet.module.css\";\n\nexport interface SheetProps {\n open: boolean;\n onClose: () => void;\n /** Accessible name of the dialog. */\n label: string;\n /** Scrim click dismisses. Default true. */\n closeOnScrimClick?: boolean;\n children: ReactNode;\n}\n\n/**\n * Bottom sheet. Same composition and dismissal model as Modal:\n *\n * ```tsx\n * <Sheet open={open} onClose={() => setOpen(false)} label=\"Filters\">\n * <SheetHeader>Filters</SheetHeader>\n * <SheetBody>…</SheetBody>\n * <SheetFooter><Button onClick={apply}>Apply</Button></SheetFooter>\n * </Sheet>\n * ```\n */\nexport function Sheet({ open, onClose, label, closeOnScrimClick = true, children }: SheetProps) {\n return (\n <Overlay\n open={open}\n onClose={onClose}\n label={label}\n variant=\"sheet\"\n closeOnScrimClick={closeOnScrimClick}\n panelClassName={styles.panel}\n >\n {children}\n </Overlay>\n );\n}\n\nexport function SheetHeader({ children }: { children: ReactNode }) {\n return <div className={styles.header}>{children}</div>;\n}\n\nexport function SheetBody({ children }: { children: ReactNode }) {\n return <div className={styles.body}>{children}</div>;\n}\n\nexport function SheetFooter({ children }: { children: ReactNode }) {\n return <div className={styles.footer}>{children}</div>;\n}\n","/* Trigger — reads like an Input so it sits beside form fields. */\n.trigger {\n display: flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n width: 100%;\n height: var(--mds-control-h-md);\n padding: 0 var(--mds-pad-control);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-muted);\n font: var(--mds-type-body);\n text-align: left;\n cursor: pointer;\n transition: var(--mds-transition-control);\n}\n\n.trigger:disabled {\n cursor: default;\n opacity: 0.5;\n}\n\n.hasValue {\n color: var(--mds-text-primary);\n}\n\n.triggerLabel {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.glyph {\n flex: none;\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n\n.timeRow {\n display: flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n margin-bottom: var(--mds-stack-group);\n color: var(--mds-text-secondary);\n}\n\n.grow {\n flex: 1;\n}\n\n.meridiem {\n flex: none;\n}\n\n.colon {\n color: var(--mds-text-muted);\n}\n\n.calendarHeader {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: var(--mds-gap-tight);\n}\n\n.monthLabel {\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n margin-bottom: var(--mds-space-1);\n}\n\n.weekday {\n text-align: center;\n font: var(--mds-type-meta);\n color: var(--mds-text-muted);\n}\n\n/* Fixed 6-row height so the panel does not jump between 4/5/6-week months. */\n.grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n grid-auto-rows: var(--mds-tap-min);\n min-height: calc(6 * var(--mds-tap-min));\n align-items: stretch;\n}\n\n.day {\n border: none;\n background: transparent;\n border-radius: var(--mds-radius-control);\n color: var(--mds-text-primary);\n font: var(--mds-type-body);\n cursor: pointer;\n transition: var(--mds-transition-control);\n}\n\n.day:hover:not(:disabled) {\n background: var(--mds-surface-sunken);\n}\n\n.day:disabled {\n color: var(--mds-text-muted);\n opacity: 0.5;\n cursor: default;\n}\n\n.today {\n font-weight: var(--mds-weight-semibold);\n color: var(--mds-text-accent);\n}\n\n.selected {\n background: var(--mds-accent);\n color: var(--mds-accent-contrast);\n}\n\n.selected:hover:not(:disabled) {\n background: var(--mds-accent-hover);\n}\n\n/* Neighbour-month filler: keeps the week shape, draws no attention. */\n.outside {\n visibility: hidden;\n}\n","import type { KeyboardEvent, ReactElement } from \"react\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Button } from \"../Button/Button\";\nimport { Select } from \"../Select/Select\";\nimport { Sheet, SheetBody, SheetFooter, SheetHeader } from \"../Sheet/Sheet\";\nimport styles from \"./DateTimePicker.module.css\";\n\nexport interface DateTimePickerLabels {\n /** Accessible name of the picker dialog. */\n dialog: string;\n previousMonth: string;\n nextMonth: string;\n today: string;\n done: string;\n hour: string;\n minute: string;\n dayPeriod: string;\n}\n\nconst DEFAULT_LABELS: DateTimePickerLabels = {\n dialog: \"Pick date and time\",\n previousMonth: \"Previous month\",\n nextMonth: \"Next month\",\n today: \"Today\",\n done: \"Done\",\n hour: \"Hour\",\n minute: \"Minutes\",\n dayPeriod: \"AM/PM\",\n};\n\nexport interface DateTimePickerProps {\n /** Current value as an ISO 8601 string. */\n value?: string | undefined;\n /** Fires with the combined ISO string when the user confirms. */\n onChange: (iso: string) => void;\n /** Shown on the trigger when nothing is selected. */\n placeholder?: string | undefined;\n /** Earliest selectable moment as an ISO string. Default: now. */\n min?: string | undefined;\n /** Minute granularity. Default 5; use 30 for :00/:30 only. */\n minuteStep?: number | undefined;\n disabled?: boolean | undefined;\n /** Applied to the trigger button so a `<label htmlFor>` can point at it. */\n id?: string | undefined;\n /** Field name for the trigger, e.g. \"Starts\". Announced alongside the value. */\n \"aria-label\"?: string | undefined;\n /** BCP 47 tag for names, week start and hour cycle. Default: runtime locale. */\n locale?: string | undefined;\n /** Overrides for the picker's own strings (defaults are English). */\n labels?: Partial<DateTimePickerLabels> | undefined;\n}\n\n/* --- Intl-derived locale facts, computed once per locale ------------------ */\n\ninterface LocaleData {\n /** JS day index (0 = Sunday) the week starts on. */\n firstDay: number;\n /** Weekday column headers, ordered from firstDay. */\n weekdays: string[];\n /** 12-hour clock? */\n hour12: boolean;\n /** Localized day-period labels, e.g. [\"AM\", \"PM\"]. */\n dayPeriods: [string, string];\n monthTitle: Intl.DateTimeFormat;\n dayLabel: Intl.DateTimeFormat;\n full: Intl.DateTimeFormat;\n}\n\n/* getWeekInfo is not in the TS lib yet; some engines expose it as an accessor. */\ninterface WeekInfoLocale extends Intl.Locale {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n}\n\nfunction localeData(locale: string | undefined): LocaleData {\n const resolved = new Intl.DateTimeFormat(locale).resolvedOptions().locale;\n\n /* Spec counts 1 = Monday … 7 = Sunday; JS Date counts 0 = Sunday. Engines\n without weekInfo fall back to Monday — most of the world's week start. */\n const intlLocale = new Intl.Locale(resolved) as WeekInfoLocale;\n const weekInfo = intlLocale.getWeekInfo?.() ?? intlLocale.weekInfo;\n const firstDay = (weekInfo?.firstDay ?? 1) % 7;\n\n /* 2021-08-01 was a Sunday; format a known week to get the headers. */\n const weekdayFmt = new Intl.DateTimeFormat(resolved, { weekday: \"short\", timeZone: \"UTC\" });\n const weekdays = Array.from({ length: 7 }, (_, i) =>\n weekdayFmt.format(new Date(Date.UTC(2021, 7, 1 + ((firstDay + i) % 7)))),\n );\n\n const hourFmt = new Intl.DateTimeFormat(resolved, { hour: \"numeric\" });\n const { hourCycle } = hourFmt.resolvedOptions();\n const hour12 = hourCycle === \"h11\" || hourCycle === \"h12\";\n\n const periodOf = (hour: number): string =>\n new Intl.DateTimeFormat(resolved, { hour: \"numeric\", hour12: true })\n .formatToParts(new Date(2021, 0, 1, hour))\n .find((part) => part.type === \"dayPeriod\")?.value ?? (hour < 12 ? \"AM\" : \"PM\");\n\n return {\n firstDay,\n weekdays,\n hour12,\n dayPeriods: [periodOf(9), periodOf(21)],\n monthTitle: new Intl.DateTimeFormat(resolved, { month: \"long\", year: \"numeric\" }),\n dayLabel: new Intl.DateTimeFormat(resolved, { month: \"long\", day: \"numeric\", year: \"numeric\" }),\n full: new Intl.DateTimeFormat(resolved, {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n }),\n };\n}\n\n/* --- date arithmetic ------------------------------------------------------ */\n\nfunction startOfDay(d: Date): number {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n}\n\nfunction snapMinutes(d: Date, step: number): Date {\n const out = new Date(d);\n out.setMinutes(Math.round(out.getMinutes() / step) * step, 0, 0);\n return out;\n}\n\nfunction addDays(d: Date, n: number): Date {\n const o = new Date(d);\n o.setDate(o.getDate() + n);\n return o;\n}\n\nfunction addMonths(d: Date, n: number): Date {\n const o = new Date(d);\n o.setMonth(o.getMonth() + n);\n return o;\n}\n\nfunction minuteOptions(step: number): number[] {\n const s = Math.max(1, Math.min(60, Math.floor(step)));\n return Array.from({ length: Math.floor(60 / s) }, (_, i) => i * s);\n}\n\nfunction pad2(n: number): string {\n return String(n).padStart(2, \"0\");\n}\n\n/* --- glyphs — internal chrome, like Tag's remove ✕; no registry contract --- */\n\nconst chevronLeft = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <path d=\"M10 3l-5 5 5 5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\nconst chevronRight = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <path d=\"M6 3l5 5-5 5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\nconst calendarGlyph = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <rect x=\"2.5\" y=\"3.5\" width=\"11\" height=\"10\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M2.5 6.5h11M5.5 2v2.5M10.5 2v2.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n);\nconst clockGlyph = (\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glyph}>\n <circle cx=\"8\" cy=\"8\" r=\"5.75\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n <path d=\"M8 5v3.25l2 1.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n);\n\n/**\n * Mobile-first date + time picker. A trigger styled like Input opens a bottom\n * sheet with a month calendar (roving-focus grid, arrow keys move the day)\n * and native Select time controls. Controlled via `value` (ISO); emits the\n * combined ISO string on confirm. All names, the week start and the 12/24-hour\n * clock come from `Intl` for the given locale.\n *\n * ```tsx\n * <Field label=\"Starts\">\n * <DateTimePicker\n * value={startsAt}\n * onChange={setStartsAt}\n * min={new Date().toISOString()}\n * minuteStep={30}\n * locale={i18n.language}\n * />\n * </Field>\n * ```\n */\nexport function DateTimePicker({\n value,\n onChange,\n placeholder = \"Select date & time\",\n min,\n minuteStep = 5,\n disabled = false,\n id,\n \"aria-label\": ariaLabel,\n locale,\n labels,\n}: DateTimePickerProps): ReactElement {\n const text: DateTimePickerLabels = { ...DEFAULT_LABELS, ...labels };\n const intl = useMemo(() => localeData(locale), [locale]);\n\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<Date>(() => new Date());\n const [view, setView] = useState<{ y: number; m: number }>(() => {\n const d = new Date();\n return { y: d.getFullYear(), m: d.getMonth() };\n });\n /* The calendar grid is a single tab stop: `focusedDay` is the one day that\n carries tabIndex 0; arrow keys move it (roving focus), crossing months. */\n const [focusedDay, setFocusedDay] = useState<Date>(() => new Date());\n const dayRefs = useRef<Map<number, HTMLButtonElement>>(new Map());\n const pendingFocusRef = useRef(false);\n\n const minDate = min ? new Date(min) : new Date();\n const minStart = startOfDay(minDate);\n\n /* Re-seed the draft + visible month from the current value each time the\n panel opens. When `value` precedes `min` the roving tab stop clamps to\n `min`, and the view must follow it or no day in the grid is focusable. */\n function openPicker(): void {\n const base = snapMinutes(value ? new Date(value) : new Date(), minuteStep);\n setDraft(base);\n const start = startOfDay(base) >= minStart ? base : new Date(minStart);\n setView({ y: start.getFullYear(), m: start.getMonth() });\n setFocusedDay(start);\n setOpen(true);\n }\n\n /* Move DOM focus onto the roving target after an arrow-key move (only then —\n never steal focus when the panel first opens). */\n useEffect(() => {\n if (!pendingFocusRef.current) return;\n pendingFocusRef.current = false;\n dayRefs.current.get(startOfDay(focusedDay))?.focus();\n }, [focusedDay, view]);\n\n const h24 = draft.getHours();\n const h12 = h24 % 12 || 12;\n const isPM = h24 >= 12;\n\n function setHour(v: string): void {\n const nd = new Date(draft);\n nd.setHours(intl.hour12 ? (Number(v) % 12) + (isPM ? 12 : 0) : Number(v));\n setDraft(nd);\n }\n function setMinute(v: string): void {\n const nd = new Date(draft);\n nd.setMinutes(Number(v), 0, 0);\n setDraft(nd);\n }\n function setMeridiem(v: string): void {\n const nd = new Date(draft);\n nd.setHours((h12 % 12) + (v === \"pm\" ? 12 : 0));\n setDraft(nd);\n }\n function pickDay(day: number): void {\n const nd = new Date(draft);\n nd.setFullYear(view.y, view.m, day);\n setDraft(nd);\n }\n /* First selectable day in a month — the 1st, or `min` when it falls\n mid-month. Keeps the roving tab stop pointed at an enabled, in-view day. */\n function firstFocusableInView(y: number, m: number): Date {\n const monthStart = new Date(y, m, 1);\n return startOfDay(monthStart) >= minStart ? monthStart : new Date(minStart);\n }\n function shiftMonth(delta: number): void {\n let m = view.m + delta;\n let y = view.y;\n if (m < 0) { m = 11; y -= 1; }\n if (m > 11) { m = 0; y += 1; }\n setView({ y, m });\n setFocusedDay(firstFocusableInView(y, m));\n }\n function goToday(): void {\n const t = new Date();\n setView({ y: t.getFullYear(), m: t.getMonth() });\n setFocusedDay(startOfDay(t) >= minStart ? t : new Date(minStart));\n }\n /* Move the roving focus to `next` (clamped to >= min), following it across a\n month boundary, then focus the target cell once it renders. */\n function focusDate(next: Date): void {\n if (startOfDay(next) < minStart) return;\n pendingFocusRef.current = true;\n if (next.getMonth() !== view.m || next.getFullYear() !== view.y) {\n setView({ y: next.getFullYear(), m: next.getMonth() });\n }\n setFocusedDay(next);\n }\n function onDayKeyDown(e: KeyboardEvent<HTMLButtonElement>, cell: Date): void {\n /* Home/End go to the locale's start/end of week, not Sunday/Saturday. */\n const weekOffset = (cell.getDay() - intl.firstDay + 7) % 7;\n switch (e.key) {\n case \"ArrowLeft\": e.preventDefault(); focusDate(addDays(cell, -1)); break;\n case \"ArrowRight\": e.preventDefault(); focusDate(addDays(cell, 1)); break;\n case \"ArrowUp\": e.preventDefault(); focusDate(addDays(cell, -7)); break;\n case \"ArrowDown\": e.preventDefault(); focusDate(addDays(cell, 7)); break;\n case \"Home\": e.preventDefault(); focusDate(addDays(cell, -weekOffset)); break;\n case \"End\": e.preventDefault(); focusDate(addDays(cell, 6 - weekOffset)); break;\n case \"PageUp\": e.preventDefault(); focusDate(addMonths(cell, -1)); break;\n case \"PageDown\": e.preventDefault(); focusDate(addMonths(cell, 1)); break;\n case \"Enter\":\n case \" \":\n e.preventDefault();\n pickDay(cell.getDate());\n break;\n default: break;\n }\n }\n function confirm(): void {\n onChange(draft.toISOString());\n setOpen(false);\n }\n\n const first = new Date(view.y, view.m, 1);\n const startWeekday = (first.getDay() - intl.firstDay + 7) % 7;\n const daysInMonth = new Date(view.y, view.m + 1, 0).getDate();\n const prevDisabled =\n view.y < minDate.getFullYear() || (view.y === minDate.getFullYear() && view.m <= minDate.getMonth());\n const todayStart = startOfDay(new Date());\n const draftStart = startOfDay(draft);\n\n /* Render the month's natural span of weeks: trailing days of the previous\n month, in-month days 1..N, then enough of the next month to complete the\n last week (4/5/6 rows). Neighbour-month days are dimmed + non-interactive;\n the grid reserves 6 rows of height so the panel never jumps. */\n const spanCells = Math.ceil((startWeekday + daysInMonth) / 7) * 7;\n const dayCells = Array.from({ length: spanCells }, (_, i) => {\n const cell = new Date(view.y, view.m, 1 - startWeekday + i);\n const inMonth = cell.getMonth() === view.m && cell.getFullYear() === view.y;\n const cellStart = cell.getTime();\n const isDisabled = !inMonth || cellStart < minStart;\n const isSelected = inMonth && cellStart === draftStart;\n const isToday = inMonth && cellStart === todayStart;\n const isFocusTarget = inMonth && !isDisabled && cellStart === startOfDay(focusedDay);\n return (\n <button\n key={`c-${i}`}\n type=\"button\"\n disabled={isDisabled}\n /* Single tab stop: only the roving-focus day is tabbable; the rest are\n reached with the arrow keys (WCAG 2.1.1 / grid pattern). */\n tabIndex={isFocusTarget ? 0 : -1}\n ref={\n inMonth && !isDisabled\n ? (el): void => {\n if (el) dayRefs.current.set(cellStart, el);\n else dayRefs.current.delete(cellStart);\n }\n : undefined\n }\n aria-hidden={inMonth ? undefined : true}\n aria-label={intl.dayLabel.format(cell)}\n aria-pressed={isSelected}\n onClick={inMonth ? () => pickDay(cell.getDate()) : undefined}\n onKeyDown={inMonth && !isDisabled ? (e) => onDayKeyDown(e, cell) : undefined}\n className={cx(styles.day, isToday && styles.today, isSelected && styles.selected, !inMonth && styles.outside)}\n >\n {cell.getDate()}\n </button>\n );\n });\n\n return (\n <>\n <button\n id={id}\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n /* Announce the field name (when given) alongside the current value. */\n aria-label={\n ariaLabel\n ? `${ariaLabel}: ${value ? intl.full.format(new Date(value)) : placeholder}`\n : undefined\n }\n onClick={openPicker}\n className={cx(styles.trigger, value && styles.hasValue)}\n >\n {calendarGlyph}\n <span className={styles.triggerLabel}>{value ? intl.full.format(new Date(value)) : placeholder}</span>\n </button>\n\n <Sheet open={open} onClose={() => setOpen(false)} label={ariaLabel ?? text.dialog}>\n <SheetHeader>{intl.full.format(draft)}</SheetHeader>\n <SheetBody>\n <div className={styles.timeRow}>\n {clockGlyph}\n {intl.hour12 ? (\n <>\n <Select aria-label={text.hour} value={String(h12)} onChange={(e) => setHour(e.target.value)} className={styles.grow}>\n {Array.from({ length: 12 }, (_, i) => (\n <option key={i + 1} value={String(i + 1)}>\n {i + 1}\n </option>\n ))}\n </Select>\n <span className={styles.colon} aria-hidden=\"true\">:</span>\n <Select aria-label={text.minute} value={String(draft.getMinutes())} onChange={(e) => setMinute(e.target.value)} className={styles.grow}>\n {minuteOptions(minuteStep).map((m) => (\n <option key={m} value={String(m)}>\n {pad2(m)}\n </option>\n ))}\n </Select>\n <Select aria-label={text.dayPeriod} value={isPM ? \"pm\" : \"am\"} onChange={(e) => setMeridiem(e.target.value)} className={styles.meridiem}>\n <option value=\"am\">{intl.dayPeriods[0]}</option>\n <option value=\"pm\">{intl.dayPeriods[1]}</option>\n </Select>\n </>\n ) : (\n <>\n <Select aria-label={text.hour} value={String(h24)} onChange={(e) => setHour(e.target.value)} className={styles.grow}>\n {Array.from({ length: 24 }, (_, i) => (\n <option key={i} value={String(i)}>\n {pad2(i)}\n </option>\n ))}\n </Select>\n <span className={styles.colon} aria-hidden=\"true\">:</span>\n <Select aria-label={text.minute} value={String(draft.getMinutes())} onChange={(e) => setMinute(e.target.value)} className={styles.grow}>\n {minuteOptions(minuteStep).map((m) => (\n <option key={m} value={String(m)}>\n {pad2(m)}\n </option>\n ))}\n </Select>\n </>\n )}\n </div>\n\n <div role=\"group\" aria-label={intl.monthTitle.format(first)}>\n <div className={styles.calendarHeader}>\n <Button\n iconOnly\n aria-label={text.previousMonth}\n variant=\"ghost\"\n size=\"sm\"\n disabled={prevDisabled}\n onClick={() => shiftMonth(-1)}\n >\n {chevronLeft}\n </Button>\n <span className={styles.monthLabel}>{intl.monthTitle.format(first)}</span>\n <Button iconOnly aria-label={text.nextMonth} variant=\"ghost\" size=\"sm\" onClick={() => shiftMonth(1)}>\n {chevronRight}\n </Button>\n </div>\n <div className={styles.weekdays}>\n {intl.weekdays.map((w, i) => (\n <span key={`wd-${i}`} aria-hidden=\"true\" className={styles.weekday}>\n {w}\n </span>\n ))}\n </div>\n <div className={styles.grid}>{dayCells}</div>\n </div>\n </SheetBody>\n <SheetFooter>\n <Button variant=\"ghost\" onClick={goToday}>\n {text.today}\n </Button>\n <Button variant=\"primary\" onClick={confirm}>\n {text.done}\n </Button>\n </SheetFooter>\n </Sheet>\n </>\n );\n}\n",".tag {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n padding: var(--mds-space-1) var(--mds-space-2);\n border-radius: var(--mds-radius-tag);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n background: var(--mds-surface-card);\n color: var(--mds-text-secondary);\n font: var(--mds-type-label);\n white-space: nowrap;\n}\n\n.tone-accent {\n background: var(--mds-accent-soft);\n border-color: transparent;\n color: var(--mds-text-primary);\n}\n\n.remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n padding: 0;\n margin-right: calc(-1 * var(--mds-space-1));\n width: var(--mds-icon-md);\n height: var(--mds-icon-md);\n border-radius: var(--mds-radius-pill);\n background: transparent;\n color: inherit;\n cursor: pointer;\n}\n\n.remove:hover {\n background: var(--mds-surface-sunken);\n}\n\n.removeGlyph {\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Tag.module.css\";\n\nexport type TagTone = \"neutral\" | \"accent\";\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n children: ReactNode;\n tone?: TagTone;\n /** Renders a labelled ✕ button. Label reads \"Remove <content>\" when content is text. */\n onRemove?: () => void;\n}\n\n/**\n * Content label chip — categories, filters, topics.\n *\n * ```tsx\n * <Tag>Design</Tag>\n * <Tag tone=\"accent\" onRemove={() => remove(id)}>Beginner</Tag>\n * ```\n */\nexport function Tag({ children, tone = \"neutral\", onRemove, className, ...rest }: TagProps): ReactElement {\n const text = typeof children === \"string\" ? children : undefined;\n return (\n <span className={cx(styles.tag, styles[`tone-${tone}`], className)} {...rest}>\n {children}\n {onRemove && (\n <button\n type=\"button\"\n className={styles.remove}\n aria-label={text ? `Remove ${text}` : \"Remove\"}\n onClick={onRemove}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.removeGlyph}>\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </span>\n );\n}\n",".divider {\n background: var(--mds-border-subtle);\n flex: none;\n}\n\n.horizontal {\n height: var(--mds-border-width);\n width: 100%;\n}\n\n.vertical {\n width: var(--mds-border-width);\n align-self: stretch;\n}\n","import type { HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Divider.module.css\";\n\nexport interface DividerProps extends HTMLAttributes<HTMLDivElement> {\n orientation?: \"horizontal\" | \"vertical\";\n}\n\n/**\n * Visual separator. Semantic separator role via <hr>-equivalent div.\n *\n * ```tsx\n * <Divider />\n * <Divider orientation=\"vertical\" />\n * ```\n */\nexport function Divider({ orientation = \"horizontal\", className, ...rest }: DividerProps): ReactElement {\n return (\n <div\n role=\"separator\"\n aria-orientation={orientation === \"vertical\" ? \"vertical\" : undefined}\n className={cx(styles.divider, styles[orientation], className)}\n {...rest}\n />\n );\n}\n",".skeleton {\n display: block;\n background: var(--mds-surface-sunken);\n animation: pulse var(--mds-dur-pulse) var(--mds-ease-standard) infinite;\n width: var(--skeleton-w, 100%);\n}\n\n.variant-text {\n height: var(--skeleton-h, 1em);\n border-radius: var(--mds-radius-1);\n}\n\n.variant-rect {\n height: var(--skeleton-h, var(--mds-space-10));\n border-radius: var(--mds-radius-media);\n}\n\n.variant-circle {\n width: var(--skeleton-w, var(--mds-avatar-md));\n height: var(--skeleton-h, var(--mds-avatar-md));\n border-radius: var(--mds-radius-pill);\n}\n\n@keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.55; }\n}\n","import type { CSSProperties, HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Skeleton.module.css\";\n\nexport type SkeletonVariant = \"text\" | \"rect\" | \"circle\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLSpanElement> {\n variant?: SkeletonVariant;\n /** Any CSS length. Text defaults to full width, one line tall. */\n width?: string;\n height?: string;\n}\n\n/**\n * Loading placeholder. aria-hidden — the loading announcement belongs to the\n * region (aria-busy), not to each shimmering box.\n *\n * ```tsx\n * <div aria-busy={loading}>\n * {loading ? (\n * <Stack gap=\"tight\">\n * <Skeleton width=\"40%\" />\n * <Skeleton />\n * <Skeleton variant=\"rect\" height=\"8rem\" />\n * </Stack>\n * ) : (\n * content\n * )}\n * </div>\n * ```\n */\nexport function Skeleton({\n variant = \"text\",\n width,\n height,\n className,\n style,\n ...rest\n}: SkeletonProps): ReactElement {\n const vars = {\n ...(width ? { \"--skeleton-w\": width } : {}),\n ...(height ? { \"--skeleton-h\": height } : {}),\n } as CSSProperties;\n return (\n <span\n aria-hidden=\"true\"\n className={cx(styles.skeleton, styles[`variant-${variant}`], className)}\n style={{ ...vars, ...style }}\n {...rest}\n />\n );\n}\n",".track {\n display: block;\n width: 100%;\n height: var(--mds-space-2);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-sunken);\n overflow: hidden;\n}\n\n.fill {\n display: block;\n height: 100%;\n width: var(--progress, 0%);\n border-radius: inherit;\n background: var(--mds-accent);\n transition: width var(--mds-transition-control);\n}\n\n.indeterminate .fill {\n width: 40%;\n animation: slide var(--mds-dur-pulse) var(--mds-ease-standard) infinite;\n}\n\n@keyframes slide {\n from { transform: translateX(-100%); }\n to { transform: translateX(250%); }\n}\n","import type { CSSProperties, HTMLAttributes, ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./ProgressBar.module.css\";\n\nexport interface ProgressBarProps extends HTMLAttributes<HTMLDivElement> {\n /** 0–100; clamped. Ignored when indeterminate. */\n value?: number;\n /** Accessible name — required. A bare bar announces nothing useful. */\n label: string;\n indeterminate?: boolean;\n}\n\n/**\n * Determinate or indeterminate progress track.\n *\n * ```tsx\n * <ProgressBar label=\"Upload\" value={64} />\n * <ProgressBar label=\"Syncing\" indeterminate />\n * ```\n */\nexport function ProgressBar({\n value = 0,\n label,\n indeterminate = false,\n className,\n style,\n ...rest\n}: ProgressBarProps): ReactElement {\n const clamped = Math.min(100, Math.max(0, value));\n return (\n <div\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={indeterminate ? undefined : clamped}\n className={cx(styles.track, indeterminate && styles.indeterminate, className)}\n style={{ ...( { \"--progress\": `${clamped}%` } as CSSProperties), ...style }}\n {...rest}\n >\n <span className={styles.fill} />\n </div>\n );\n}\n",".input {\n width: 100%;\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n transition: border-color var(--mds-transition-control);\n}\n\n.input::placeholder {\n color: var(--mds-text-muted);\n}\n\n.input:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n cursor: not-allowed;\n}\n\n.input[aria-invalid=\"true\"] {\n border-color: var(--mds-status-danger);\n}\n\n.size-sm { height: var(--mds-control-h-sm); padding: 0 var(--mds-space-2); font-size: var(--mds-text-sm); }\n.size-md { height: var(--mds-control-h-md); padding: 0 var(--mds-space-3); font-size: var(--mds-text-base); }\n.size-lg { height: var(--mds-control-h-lg); padding: 0 var(--mds-space-4); font-size: var(--mds-text-base); }\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useFieldContext } from \"../Field/Field\";\nimport styles from \"./Input.module.css\";\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface InputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n size?: InputSize;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Single-line text input. Inside a Field it inherits id/description/invalid.\n *\n * ```tsx\n * <Field label=\"Name\">\n * <Input value={name} onChange={(e) => setName(e.target.value)} />\n * </Field>\n *\n * <Input aria-label=\"Amount\" type=\"number\" size=\"sm\" />\n * ```\n */\nexport function Input({ size = \"md\", className, ...rest }: InputProps): ReactElement {\n const field = useFieldContext();\n return (\n <input\n id={rest.id ?? field?.id}\n aria-describedby={rest[\"aria-describedby\"] ?? field?.describedBy}\n aria-invalid={rest[\"aria-invalid\"] ?? (field?.invalid || undefined)}\n className={cx(styles.input, styles[`size-${size}`], className)}\n {...rest}\n />\n );\n}\n",".wrap {\n position: relative;\n display: block;\n}\n\n.input {\n width: 100%;\n /* Room for the toggle: its hit target plus the usual inline padding. */\n padding-right: calc(var(--mds-control-h-md) + var(--mds-space-1));\n}\n\n.toggle {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--mds-control-h-md);\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n color: var(--mds-text-muted);\n font-size: var(--mds-text-lg);\n cursor: pointer;\n transition: color var(--mds-transition-control);\n}\n\n.toggle:hover {\n color: var(--mds-text-primary);\n}\n","import { useState } from \"react\";\nimport type { ReactElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Input } from \"../Input/Input\";\nimport type { InputProps } from \"../Input/Input\";\nimport styles from \"./PasswordInput.module.css\";\n\nexport type PasswordInputProps = Omit<InputProps, \"type\">;\n\n/**\n * Password field with a reveal toggle. Composes Input, so inside a Field it\n * inherits id/description/invalid the same way.\n *\n * ```tsx\n * <Field label=\"Password\" hint=\"At least 12 characters\">\n * <PasswordInput autoComplete=\"new-password\" />\n * </Field>\n * ```\n */\nexport function PasswordInput({ className, ...rest }: PasswordInputProps): ReactElement {\n const [visible, setVisible] = useState(false);\n return (\n <span className={styles.wrap}>\n <Input {...rest} type={visible ? \"text\" : \"password\"} className={cx(styles.input, className)} />\n <button\n type=\"button\"\n className={styles.toggle}\n aria-label={visible ? \"Hide password\" : \"Show password\"}\n aria-pressed={visible}\n onClick={() => setVisible((v) => !v)}\n >\n {visible ? (\n /* eye-off */\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94\" />\n <path d=\"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19\" />\n <path d=\"M14.12 14.12a3 3 0 1 1-4.24-4.24\" />\n <line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\" />\n </svg>\n ) : (\n /* eye */\n <svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n )}\n </button>\n </span>\n );\n}\n",".textarea {\n width: 100%;\n padding: var(--mds-space-2) var(--mds-space-3);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-control);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n font-size: var(--mds-text-base);\n line-height: var(--mds-leading-normal);\n resize: vertical;\n transition: border-color var(--mds-transition-control);\n}\n\n.textarea::placeholder {\n color: var(--mds-text-muted);\n}\n\n.textarea:disabled {\n background: var(--mds-action-disabled-bg);\n color: var(--mds-action-disabled-fg);\n cursor: not-allowed;\n resize: none;\n}\n\n.textarea[aria-invalid=\"true\"] {\n border-color: var(--mds-status-danger);\n}\n\n.wrap {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: var(--mds-gap-hairline);\n}\n\n.count {\n font: var(--mds-type-meta);\n color: var(--mds-text-muted);\n}\n","import { useState } from \"react\";\nimport type { ChangeEvent, ReactElement, Ref, TextareaHTMLAttributes } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { useFieldContext } from \"../Field/Field\";\nimport styles from \"./Textarea.module.css\";\n\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n /** Character counter under the control; pairs with native maxLength. */\n showCount?: boolean;\n ref?: Ref<HTMLTextAreaElement>;\n}\n\n/**\n * Multi-line text input. Inside a Field it inherits id/description/invalid.\n *\n * ```tsx\n * <Field label=\"Bio\">\n * <Textarea maxLength={160} showCount />\n * </Field>\n * ```\n */\nexport function Textarea({ rows = 3, showCount = false, className, ...rest }: TextareaProps): ReactElement {\n const field = useFieldContext();\n const [tracked, setTracked] = useState(() => String(rest.defaultValue ?? \"\"));\n const current = rest.value !== undefined ? String(rest.value) : tracked;\n\n const onChange = (event: ChangeEvent<HTMLTextAreaElement>) => {\n setTracked(event.target.value);\n rest.onChange?.(event);\n };\n\n const textarea = (\n <textarea\n id={rest.id ?? field?.id}\n aria-describedby={rest[\"aria-describedby\"] ?? field?.describedBy}\n aria-invalid={rest[\"aria-invalid\"] ?? (field?.invalid || undefined)}\n rows={rows}\n className={cx(styles.textarea, className)}\n {...rest}\n {...(showCount ? { onChange } : {})}\n />\n );\n\n if (!showCount) return textarea;\n return (\n <span className={styles.wrap}>\n {textarea}\n <span className={styles.count} aria-hidden=\"true\">\n {rest.maxLength !== undefined ? `${current.length}/${rest.maxLength}` : current.length}\n </span>\n </span>\n );\n}\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n cursor: pointer;\n min-height: var(--mds-tap-min);\n}\n\n.root:has(.box:disabled) {\n cursor: not-allowed;\n}\n\n.box {\n appearance: none;\n flex: none;\n margin: 0;\n width: var(--mds-check-size);\n height: var(--mds-check-size);\n /* em-based checkmark geometry scales with the box. */\n font-size: var(--mds-check-size);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-1);\n background: var(--mds-surface-card);\n display: inline-grid;\n place-content: center;\n cursor: inherit;\n transition: var(--mds-transition-control);\n}\n\n.box:checked {\n background: var(--mds-action-bg);\n border-color: var(--mds-action-bg);\n}\n\n.box:checked::after {\n content: \"\";\n width: 0.32em;\n height: 0.6em;\n margin-top: -0.12em;\n border: solid var(--mds-action-fg);\n border-width: 0 calc(var(--mds-border-width) * 2) calc(var(--mds-border-width) * 2) 0;\n transform: rotate(45deg);\n}\n\n.box:disabled {\n background: var(--mds-action-disabled-bg);\n border-color: var(--mds-border-strong);\n}\n\n.box:disabled:checked::after {\n border-color: var(--mds-action-disabled-fg);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.box:disabled ~ .label {\n color: var(--mds-action-disabled-fg);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Checkbox.module.css\";\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n /** Inline label — part of the click target. */\n label: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Native checkbox, styled box. Label is the touch target too.\n *\n * ```tsx\n * <Checkbox label=\"Remember me\" defaultChecked />\n * <Checkbox\n * label=\"Accept terms\"\n * checked={accepted}\n * onChange={(e) => setAccepted(e.target.checked)}\n * />\n * ```\n */\nexport function Checkbox({ label, className, ...rest }: CheckboxProps): ReactElement {\n return (\n <label className={cx(styles.root, className)}>\n <input type=\"checkbox\" className={styles.box} {...rest} />\n <span className={styles.label}>{label}</span>\n </label>\n );\n}\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n cursor: pointer;\n min-height: var(--mds-tap-min);\n}\n\n.root:has(.dot:disabled) {\n cursor: not-allowed;\n}\n\n.dot {\n appearance: none;\n flex: none;\n margin: 0;\n width: var(--mds-check-size);\n height: var(--mds-check-size);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-card);\n display: inline-grid;\n place-content: center;\n cursor: inherit;\n transition: var(--mds-transition-control);\n}\n\n.dot:checked {\n border-color: var(--mds-action-bg);\n}\n\n.dot:checked::after {\n content: \"\";\n width: 50%;\n height: 50%;\n border-radius: var(--mds-radius-pill);\n background: var(--mds-action-bg);\n}\n\n.dot:disabled {\n background: var(--mds-action-disabled-bg);\n border-color: var(--mds-border-strong);\n}\n\n.dot:disabled:checked::after {\n background: var(--mds-action-disabled-fg);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.dot:disabled ~ .label {\n color: var(--mds-action-disabled-fg);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Radio.module.css\";\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n /** Inline label — part of the click target. */\n label: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Native radio, styled dot. Group by `name`; wrap the group in\n * `<fieldset>`/`<legend>` for a group label.\n *\n * ```tsx\n * <fieldset>\n * <legend>Plan</legend>\n * <Radio name=\"plan\" label=\"Free\" checked={plan === \"free\"} onChange={() => setPlan(\"free\")} />\n * <Radio name=\"plan\" label=\"Pro\" checked={plan === \"pro\"} onChange={() => setPlan(\"pro\")} />\n * </fieldset>\n * ```\n */\nexport function Radio({ label, className, ...rest }: RadioProps): ReactElement {\n return (\n <label className={cx(styles.root, className)}>\n <input type=\"radio\" className={styles.dot} {...rest} />\n <span className={styles.label}>{label}</span>\n </label>\n );\n}\n",".root {\n display: inline-flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n cursor: pointer;\n min-height: var(--mds-tap-min);\n}\n\n.root:has(.track:disabled) {\n cursor: not-allowed;\n}\n\n.track {\n appearance: none;\n flex: none;\n margin: 0;\n width: var(--mds-switch-w);\n height: var(--mds-switch-h);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-border-strong);\n position: relative;\n cursor: inherit;\n transition: background-color var(--mds-transition-control);\n}\n\n.track::after {\n content: \"\";\n position: absolute;\n top: 50%;\n left: var(--mds-space-1);\n transform: translateY(-50%);\n width: var(--mds-switch-knob);\n height: var(--mds-switch-knob);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-card);\n transition: transform var(--mds-transition-control);\n}\n\n.track:checked {\n background: var(--mds-action-bg);\n}\n\n.track:checked::after {\n transform: translateY(-50%)\n translateX(calc(var(--mds-switch-w) - var(--mds-switch-knob) - 2 * var(--mds-space-1)));\n}\n\n.track:disabled {\n background: var(--mds-action-disabled-bg);\n}\n\n.track:disabled::after {\n background: var(--mds-action-disabled-fg);\n}\n\n.label {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.track:disabled ~ .label {\n color: var(--mds-action-disabled-fg);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Switch.module.css\";\n\nexport interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\"> {\n /** Inline label — part of the click target. */\n label: string;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * On/off toggle. Checkbox under the hood with role=\"switch\" — native\n * semantics and forms integration, switch announcement.\n *\n * ```tsx\n * <Switch\n * label=\"Notifications\"\n * checked={enabled}\n * onChange={(e) => setEnabled(e.target.checked)}\n * />\n * ```\n */\nexport function Switch({ label, className, ...rest }: SwitchProps): ReactElement {\n return (\n <label className={cx(styles.root, className)}>\n <input type=\"checkbox\" role=\"switch\" className={styles.track} {...rest} />\n <span className={styles.label}>{label}</span>\n </label>\n );\n}\n",".group {\n display: inline-flex;\n padding: var(--mds-space-1);\n gap: var(--mds-space-1);\n background: var(--mds-surface-sunken);\n border-radius: var(--mds-radius-control);\n}\n\n.segment {\n display: inline-flex;\n position: relative;\n cursor: pointer;\n}\n\n/* Radio overlays the whole segment, invisible but real — it stays the hit\n target and the focusable element. */\n.input {\n appearance: none;\n margin: 0;\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n opacity: 0;\n cursor: inherit;\n}\n\n.face {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: calc(var(--mds-control-h-md) - 2 * var(--mds-space-1));\n padding: 0 var(--mds-space-3);\n border-radius: var(--mds-radius-1);\n font: var(--mds-type-label);\n color: var(--mds-text-secondary);\n white-space: nowrap;\n transition: var(--mds-transition-control);\n}\n\n.input:checked + .face {\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n box-shadow: var(--mds-elevation-card);\n}\n\n.input:focus-visible + .face {\n outline: var(--mds-focus-width) solid var(--mds-focus-ring-color);\n outline-offset: var(--mds-focus-offset);\n}\n","import type { ReactElement } from \"react\";\nimport { useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./SegmentedControl.module.css\";\n\nexport interface SegmentOption<T extends string = string> {\n value: T;\n label: string;\n}\n\nexport interface SegmentedControlProps<T extends string = string> {\n /** Accessible group name. */\n label: string;\n options: readonly SegmentOption<T>[];\n value: T;\n onChange: (value: T) => void;\n className?: string;\n}\n\n/**\n * Exclusive choice among few visible options. Native radios under the hood —\n * free keyboard model and semantics.\n *\n * ```tsx\n * <SegmentedControl\n * label=\"View\"\n * options={[\n * { value: \"list\", label: \"List\" },\n * { value: \"grid\", label: \"Grid\" },\n * ]}\n * value={view}\n * onChange={setView}\n * />\n * ```\n */\nexport function SegmentedControl<T extends string = string>({\n label,\n options,\n value,\n onChange,\n className,\n}: SegmentedControlProps<T>): ReactElement {\n const name = useId();\n return (\n <div role=\"radiogroup\" aria-label={label} className={cx(styles.group, className)}>\n {options.map((option) => (\n <label key={option.value} className={styles.segment}>\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={option.value === value}\n onChange={() => onChange(option.value)}\n className={styles.input}\n />\n <span className={styles.face}>{option.label}</span>\n </label>\n ))}\n </div>\n );\n}\n",".wrap {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n}\n\n.glass {\n position: absolute;\n left: var(--mds-space-3);\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n color: var(--mds-text-muted);\n pointer-events: none;\n}\n\n.input {\n width: 100%;\n height: var(--mds-control-h-md);\n padding: 0 var(--mds-space-9) 0 var(--mds-space-8);\n border: var(--mds-border-width) solid var(--mds-control-border);\n border-radius: var(--mds-radius-pill);\n background: var(--mds-surface-card);\n color: var(--mds-text-primary);\n font-family: var(--mds-font-body);\n font-size: var(--mds-text-base);\n transition: border-color var(--mds-transition-control);\n}\n\n.input::placeholder {\n color: var(--mds-text-muted);\n}\n\n/* Native clear crosses collide with ours. */\n.input::-webkit-search-cancel-button {\n display: none;\n}\n\n.clear {\n position: absolute;\n right: var(--mds-space-2);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: var(--mds-icon-lg);\n height: var(--mds-icon-lg);\n border: none;\n border-radius: var(--mds-radius-pill);\n background: transparent;\n color: var(--mds-text-secondary);\n cursor: pointer;\n}\n\n.clear:hover {\n background: var(--mds-surface-sunken);\n}\n\n.clearGlyph {\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n","import type { InputHTMLAttributes, ReactElement, Ref } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./SearchField.module.css\";\n\nexport interface SearchFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\" | \"size\" | \"value\" | \"onChange\"> {\n /** Accessible name. */\n label: string;\n value: string;\n /** Receives the new text — \"\" when cleared. */\n onChange: (value: string) => void;\n ref?: Ref<HTMLInputElement>;\n}\n\n/**\n * Controlled search input with a clear affordance once there is text.\n *\n * ```tsx\n * <SearchField label=\"Search sessions\" value={query} onChange={setQuery} />\n * ```\n */\nexport function SearchField({ label, value, onChange, className, ...rest }: SearchFieldProps): ReactElement {\n return (\n <span className={cx(styles.wrap, className)}>\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.glass}>\n <path\n d=\"M7 12a5 5 0 1 1 0-10 5 5 0 0 1 0 10Zm7 2-3.5-3.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n <input\n type=\"search\"\n aria-label={label}\n value={value}\n onChange={(event) => onChange(event.target.value)}\n className={styles.input}\n {...rest}\n />\n {value !== \"\" && (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n className={styles.clear}\n onClick={() => onChange(\"\")}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.clearGlyph}>\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n )}\n </span>\n );\n}\n",".group {\n list-style: none;\n margin: 0;\n padding: 0;\n background: var(--mds-surface-card);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n border-radius: var(--mds-radius-card);\n overflow: hidden;\n}\n\n.item + .item {\n border-top: var(--mds-border-width) solid var(--mds-border-subtle);\n}\n\n.row {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n width: 100%;\n min-height: var(--mds-tap-min);\n padding: var(--mds-space-3) var(--mds-pad-card);\n text-align: left;\n color: inherit;\n text-decoration: none;\n}\n\n/* Interactive rows reset button chrome and signal affordance. */\n.interactive {\n border: none;\n background: transparent;\n font: inherit;\n cursor: pointer;\n transition: background-color var(--mds-transition-control);\n}\n\n.interactive:hover {\n background: var(--mds-surface-sunken);\n}\n\n.leading,\n.trailing {\n display: inline-flex;\n flex: none;\n align-items: center;\n}\n\n.text {\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-hairline);\n min-width: 0;\n flex: 1;\n}\n\n.title {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.description {\n font: var(--mds-type-note);\n color: var(--mds-text-secondary);\n}\n","import type { HTMLAttributes, LiHTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./List.module.css\";\n\nexport interface ListGroupProps extends HTMLAttributes<HTMLUListElement> {\n children: ReactNode;\n}\n\n/**\n * Card-styled list container for ListItems.\n *\n * ```tsx\n * <ListGroup>\n * <ListItem\n * title=\"Profile\"\n * description=\"Name, avatar\"\n * leading={<Icon name=\"user\" />}\n * href=\"/profile\"\n * />\n * <ListItem title=\"Log out\" onClick={logout} />\n * </ListGroup>\n * ```\n */\nexport function ListGroup({ className, ...rest }: ListGroupProps): ReactElement {\n return <ul className={cx(styles.group, className)} {...rest} />;\n}\n\nexport interface ListItemProps extends Omit<LiHTMLAttributes<HTMLLIElement>, \"title\" | \"onClick\"> {\n title: string;\n description?: string;\n /** Slot before the text — Avatar, Icon, … */\n leading?: ReactNode;\n /** Slot after the text — Badge, chevron, … */\n trailing?: ReactNode;\n /** Makes the whole row a button. */\n onClick?: () => void;\n /** Makes the whole row a link. Wins over onClick. */\n href?: string;\n}\n\n/** One row. Static by default; interactive as one whole-row button/link. */\nexport function ListItem({\n title,\n description,\n leading,\n trailing,\n onClick,\n href,\n className,\n ...rest\n}: ListItemProps): ReactElement {\n const content = (\n <>\n {leading != null && <span className={styles.leading}>{leading}</span>}\n <span className={styles.text}>\n <span className={styles.title}>{title}</span>\n {description != null && <span className={styles.description}>{description}</span>}\n </span>\n {trailing != null && <span className={styles.trailing}>{trailing}</span>}\n </>\n );\n\n return (\n <li className={cx(styles.item, className)} {...rest}>\n {href !== undefined ? (\n <a className={cx(styles.row, styles.interactive)} href={href}>\n {content}\n </a>\n ) : onClick !== undefined ? (\n <button type=\"button\" className={cx(styles.row, styles.interactive)} onClick={onClick}>\n {content}\n </button>\n ) : (\n <span className={styles.row}>{content}</span>\n )}\n </li>\n );\n}\n",".root {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n gap: var(--mds-stack-item);\n padding: var(--mds-space-10) var(--mds-pad-card);\n}\n\n.icon {\n display: inline-flex;\n color: var(--mds-text-muted);\n}\n\n.action {\n margin-top: var(--mds-space-2);\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport { Heading } from \"../Heading/Heading\";\nimport { Text } from \"../Text/Text\";\nimport styles from \"./EmptyState.module.css\";\n\nexport interface EmptyStateProps {\n title: string;\n description?: string;\n /** Illustration or Icon slot. */\n icon?: ReactNode;\n /** Usually a Button. */\n action?: ReactNode;\n className?: string;\n}\n\n/**\n * Nothing-here view: explains the empty screen and offers the next step.\n *\n * ```tsx\n * <EmptyState\n * icon={<Icon name=\"inbox\" size=\"lg\" />}\n * title=\"No sessions yet\"\n * description=\"Create your first session to get started.\"\n * action={<Button onClick={create}>New session</Button>}\n * />\n * ```\n */\nexport function EmptyState({ title, description, icon, action, className }: EmptyStateProps): ReactElement {\n return (\n <div className={cx(styles.root, className)}>\n {icon != null && (\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n )}\n <Heading level={3}>{title}</Heading>\n {description !== undefined && <Text tone=\"secondary\">{description}</Text>}\n {action != null && <span className={styles.action}>{action}</span>}\n </div>\n );\n}\n",".list {\n display: flex;\n gap: var(--mds-space-1);\n border-bottom: var(--mds-border-width) solid var(--mds-border-subtle);\n}\n\n.tab {\n border: none;\n background: transparent;\n padding: var(--mds-space-2) var(--mds-space-3);\n margin-bottom: calc(-1 * var(--mds-border-width));\n border-bottom: calc(2 * var(--mds-border-width)) solid transparent;\n font: var(--mds-type-label);\n color: var(--mds-text-secondary);\n cursor: pointer;\n white-space: nowrap;\n transition: color var(--mds-transition-control);\n}\n\n.tab:hover {\n color: var(--mds-text-primary);\n}\n\n.selected {\n color: var(--mds-text-primary);\n border-bottom-color: var(--mds-accent);\n}\n\n.panel {\n padding-top: var(--mds-stack-item);\n}\n","import type { ButtonHTMLAttributes, HTMLAttributes, KeyboardEvent, ReactElement, ReactNode } from \"react\";\nimport { createContext, useContext, useId } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Tabs.module.css\";\n\ninterface TabsContextValue {\n value: string;\n onChange: (value: string) => void;\n baseId: string;\n}\n\nconst TabsContext = createContext<TabsContextValue | null>(null);\n\nfunction useTabs(component: string): TabsContextValue {\n const context = useContext(TabsContext);\n if (context === null) throw new Error(`${component} must sit inside <Tabs>`);\n return context;\n}\n\nexport interface TabsProps {\n value: string;\n onChange: (value: string) => void;\n children: ReactNode;\n}\n\n/**\n * Controlled tabs root. Compose with TabList, Tab, TabPanel.\n *\n * ```tsx\n * <Tabs value={tab} onChange={setTab}>\n * <TabList label=\"Session details\">\n * <Tab value=\"info\">Info</Tab>\n * <Tab value=\"notes\">Notes</Tab>\n * </TabList>\n * <TabPanel value=\"info\">…</TabPanel>\n * <TabPanel value=\"notes\">…</TabPanel>\n * </Tabs>\n * ```\n */\nexport function Tabs({ value, onChange, children }: TabsProps): ReactElement {\n const baseId = useId();\n return <TabsContext.Provider value={{ value, onChange, baseId }}>{children}</TabsContext.Provider>;\n}\n\nexport interface TabListProps extends HTMLAttributes<HTMLDivElement> {\n /** Accessible name for the tab set. */\n label: string;\n children: ReactNode;\n}\n\n/* Selection follows focus (WAI-APG \"automatic activation\") — panels here are\n local content, not expensive loads. */\nfunction onArrow(event: KeyboardEvent<HTMLDivElement>, onChange: (v: string) => void): void {\n const keys = [\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"];\n if (!keys.includes(event.key)) return;\n const tabs = [...event.currentTarget.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')];\n const current = tabs.findIndex((tab) => tab === document.activeElement);\n if (current === -1) return;\n event.preventDefault();\n const next =\n event.key === \"Home\"\n ? 0\n : event.key === \"End\"\n ? tabs.length - 1\n : (current + (event.key === \"ArrowRight\" ? 1 : -1) + tabs.length) % tabs.length;\n const tab = tabs[next];\n if (!tab) return;\n tab.focus();\n const value = tab.dataset.value;\n if (value !== undefined) onChange(value);\n}\n\nexport function TabList({ label, className, children, ...rest }: TabListProps): ReactElement {\n const { onChange } = useTabs(\"TabList\");\n return (\n <div\n role=\"tablist\"\n aria-label={label}\n className={cx(styles.list, className)}\n onKeyDown={(event) => onArrow(event, onChange)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n\nexport interface TabProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"type\"> {\n value: string;\n children: ReactNode;\n}\n\nexport function Tab({ value, className, children, ...rest }: TabProps): ReactElement {\n const tabs = useTabs(\"Tab\");\n const selected = tabs.value === value;\n return (\n <button\n type=\"button\"\n role=\"tab\"\n id={`${tabs.baseId}-tab-${value}`}\n aria-selected={selected}\n aria-controls={`${tabs.baseId}-panel-${value}`}\n tabIndex={selected ? 0 : -1}\n data-value={value}\n className={cx(styles.tab, selected && styles.selected, className)}\n onClick={() => tabs.onChange(value)}\n {...rest}\n >\n {children}\n </button>\n );\n}\n\nexport interface TabPanelProps extends HTMLAttributes<HTMLDivElement> {\n value: string;\n children: ReactNode;\n}\n\nexport function TabPanel({ value, className, children, ...rest }: TabPanelProps): ReactElement {\n const tabs = useTabs(\"TabPanel\");\n const selected = tabs.value === value;\n return (\n <div\n role=\"tabpanel\"\n id={`${tabs.baseId}-panel-${value}`}\n aria-labelledby={`${tabs.baseId}-tab-${value}`}\n hidden={!selected}\n className={cx(styles.panel, className)}\n {...rest}\n >\n {children}\n </div>\n );\n}\n",".viewport {\n position: fixed;\n bottom: var(--mds-space-4);\n left: 50%;\n transform: translateX(-50%);\n z-index: var(--mds-z-toast);\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-tight);\n width: min(var(--mds-modal-w), calc(100vw - 2 * var(--mds-space-4)));\n pointer-events: none;\n}\n\n.toast {\n display: flex;\n align-items: flex-start;\n gap: var(--mds-gap);\n padding: var(--mds-space-3) var(--mds-space-4);\n border-radius: var(--mds-radius-card);\n border-left: calc(3 * var(--mds-border-width)) solid var(--mds-border-strong);\n background: var(--mds-surface-raised);\n box-shadow: var(--mds-elevation-modal);\n pointer-events: auto;\n}\n\n.tone-success { border-left-color: var(--mds-status-success); }\n.tone-danger { border-left-color: var(--mds-status-danger); }\n\n.body {\n display: flex;\n flex-direction: column;\n gap: var(--mds-gap-hairline);\n flex: 1;\n min-width: 0;\n}\n\n.title {\n font: var(--mds-type-label);\n color: var(--mds-text-primary);\n}\n\n.description {\n font: var(--mds-type-note);\n color: var(--mds-text-secondary);\n}\n\n.close {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex: none;\n width: var(--mds-icon-lg);\n height: var(--mds-icon-lg);\n border: none;\n border-radius: var(--mds-radius-pill);\n background: transparent;\n color: var(--mds-text-secondary);\n cursor: pointer;\n}\n\n.close:hover {\n background: var(--mds-surface-sunken);\n}\n\n.closeGlyph {\n width: var(--mds-icon-sm);\n height: var(--mds-icon-sm);\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport { createContext, useCallback, useContext, useMemo, useRef, useState } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Toast.module.css\";\n\nexport type ToastTone = \"neutral\" | \"success\" | \"danger\";\n\nexport interface ToastOptions {\n title: string;\n description?: string | undefined;\n tone?: ToastTone | undefined;\n /** ms until auto-dismiss. 0 = stays until dismissed. Default 5000. */\n duration?: number | undefined;\n}\n\ninterface ToastEntry extends Required<Pick<ToastOptions, \"title\" | \"tone\">> {\n id: number;\n description: string | undefined;\n}\n\ninterface ToastContextValue {\n toast: (options: ToastOptions) => number;\n dismiss: (id: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport function useToast(): ToastContextValue {\n const context = useContext(ToastContext);\n if (context === null) throw new Error(\"useToast needs a <ToastProvider> above it\");\n return context;\n}\n\nexport interface ToastProviderProps {\n children: ReactNode;\n}\n\n/**\n * Mount once near the root. Renders the notification region itself.\n *\n * ```tsx\n * // App root\n * <ToastProvider>\n * <App />\n * </ToastProvider>\n *\n * // Anywhere below\n * const { toast } = useToast();\n * toast({ title: \"Saved\", tone: \"success\" });\n * ```\n */\nexport function ToastProvider({ children }: ToastProviderProps): ReactElement {\n const [toasts, setToasts] = useState<ToastEntry[]>([]);\n const nextId = useRef(1);\n\n const dismiss = useCallback((id: number) => {\n setToasts((current) => current.filter((entry) => entry.id !== id));\n }, []);\n\n const toast = useCallback(\n ({ title, description, tone = \"neutral\", duration = 5000 }: ToastOptions) => {\n const id = nextId.current++;\n setToasts((current) => [...current, { id, title, description, tone }]);\n if (duration > 0) setTimeout(() => dismiss(id), duration);\n return id;\n },\n [dismiss],\n );\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <div role=\"region\" aria-label=\"Notifications\" className={styles.viewport}>\n {toasts.map((entry) => (\n <div key={entry.id} role=\"status\" className={cx(styles.toast, styles[`tone-${entry.tone}`])}>\n <span className={styles.body}>\n <span className={styles.title}>{entry.title}</span>\n {entry.description !== undefined && (\n <span className={styles.description}>{entry.description}</span>\n )}\n </span>\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n className={styles.close}\n onClick={() => dismiss(entry.id)}\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" className={styles.closeGlyph}>\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n",".stack {\n display: flex;\n flex-direction: column;\n}\n\n.gap-hairline { gap: var(--mds-gap-hairline); }\n.gap-tight { gap: var(--mds-gap-tight); }\n.gap-base { gap: var(--mds-gap); }\n.gap-loose { gap: var(--mds-gap-loose); }\n.gap-section { gap: var(--mds-stack-section); }\n\n.align-start { align-items: flex-start; }\n.align-center { align-items: center; }\n.align-end { align-items: flex-end; }\n.align-stretch { align-items: stretch; }\n","import type { ElementType, HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Stack.module.css\";\n\nexport type StackGap = \"hairline\" | \"tight\" | \"base\" | \"loose\" | \"section\";\nexport type StackAlign = \"start\" | \"center\" | \"end\" | \"stretch\";\n\nexport interface StackProps extends HTMLAttributes<HTMLElement> {\n /** Space between children, on the gap scale. Default \"base\". */\n gap?: StackGap;\n /** Cross-axis alignment. Default \"stretch\". */\n align?: StackAlign;\n /** Element to render. Default div. */\n as?: ElementType;\n}\n\n/**\n * Vertical flow. The parent owns spacing between siblings via gap —\n * children carry no outer margins. Token-bounded on purpose: no arbitrary\n * lengths, no style prop.\n *\n * ```tsx\n * <Stack gap=\"base\">\n * <Heading level={2}>Profile</Heading>\n * <Text tone=\"secondary\">Public information</Text>\n * </Stack>\n * ```\n */\nexport function Stack({\n gap = \"base\",\n align = \"stretch\",\n as = \"div\",\n className,\n ...rest\n}: StackProps): ReactElement {\n return createElement(as, {\n className: cx(styles.stack, styles[`gap-${gap}`], styles[`align-${align}`], className),\n ...rest,\n });\n}\n",".inline {\n display: flex;\n flex-direction: row;\n}\n\n.gap-hairline { gap: var(--mds-gap-hairline); }\n.gap-tight { gap: var(--mds-gap-tight); }\n.gap-base { gap: var(--mds-gap); }\n.gap-loose { gap: var(--mds-gap-loose); }\n\n.align-start { align-items: flex-start; }\n.align-center { align-items: center; }\n.align-end { align-items: flex-end; }\n.align-baseline { align-items: baseline; }\n\n.justify-start { justify-content: flex-start; }\n.justify-center { justify-content: center; }\n.justify-end { justify-content: flex-end; }\n.justify-between { justify-content: space-between; }\n\n.wrap {\n flex-wrap: wrap;\n}\n","import type { ElementType, HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Inline.module.css\";\n\nexport type InlineGap = \"hairline\" | \"tight\" | \"base\" | \"loose\";\nexport type InlineAlign = \"start\" | \"center\" | \"end\" | \"baseline\";\nexport type InlineJustify = \"start\" | \"center\" | \"end\" | \"between\";\n\nexport interface InlineProps extends HTMLAttributes<HTMLElement> {\n /** Space between children, on the gap scale. Default \"base\". */\n gap?: InlineGap;\n /** Cross-axis alignment. Default \"center\". */\n align?: InlineAlign;\n /** Main-axis distribution. Default \"start\". */\n justify?: InlineJustify;\n /** Allow wrapping onto new lines. */\n wrap?: boolean;\n /** Element to render. Default div. */\n as?: ElementType;\n}\n\n/**\n * Horizontal flow — Stack's row twin. Same token-bounded contract.\n *\n * ```tsx\n * <Inline gap=\"tight\" align=\"center\" justify=\"between\">\n * <Text variant=\"label\">Total</Text>\n * <Text>42</Text>\n * </Inline>\n * ```\n */\nexport function Inline({\n gap = \"base\",\n align = \"center\",\n justify = \"start\",\n wrap = false,\n as = \"div\",\n className,\n ...rest\n}: InlineProps): ReactElement {\n return createElement(as, {\n className: cx(\n styles.inline,\n styles[`gap-${gap}`],\n styles[`align-${align}`],\n styles[`justify-${justify}`],\n wrap && styles.wrap,\n className,\n ),\n ...rest,\n });\n}\n",".container {\n width: 100%;\n margin-inline: auto;\n padding-inline: var(--mds-pad-page-x);\n}\n\n.width-content { max-width: var(--mds-content-max); }\n.width-wide { max-width: var(--mds-content-max-wide); }\n","import type { ElementType, HTMLAttributes, ReactElement } from \"react\";\nimport { createElement } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Container.module.css\";\n\nexport type ContainerWidth = \"content\" | \"wide\";\n\nexport interface ContainerProps extends HTMLAttributes<HTMLElement> {\n /** content = reading column, wide = desktop shell. Default \"content\". */\n width?: ContainerWidth;\n /** Element to render. Default div. */\n as?: ElementType;\n}\n\n/**\n * Centered max-width column with page-edge padding.\n *\n * ```tsx\n * <Container>\n * <Stack gap=\"section\">…</Stack>\n * </Container>\n * ```\n */\nexport function Container({\n width = \"content\",\n as = \"div\",\n className,\n ...rest\n}: ContainerProps): ReactElement {\n return createElement(as, {\n className: cx(styles.container, styles[`width-${width}`], className),\n ...rest,\n });\n}\n",".card {\n display: flex;\n flex-direction: column;\n background: var(--mds-surface-card);\n border: var(--mds-border-width) solid var(--mds-border-subtle);\n border-radius: var(--mds-radius-card);\n overflow: hidden;\n color: inherit;\n text-decoration: none;\n}\n\n.variant-raised {\n border-color: transparent;\n background: var(--mds-surface-raised);\n box-shadow: var(--mds-elevation-raised);\n}\n\n/* Whole-card button/link resets + affordance. */\n.interactive {\n padding: 0;\n margin: 0;\n font: inherit;\n text-align: left;\n cursor: pointer;\n transition: box-shadow var(--mds-transition-surface), background-color var(--mds-transition-surface);\n}\n\n.interactive:hover {\n box-shadow: var(--mds-elevation-hover);\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: var(--mds-pad-card) var(--mds-pad-card) 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.body {\n flex: 1;\n padding: var(--mds-pad-card);\n}\n\n.footer {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: 0 var(--mds-pad-card) var(--mds-pad-card);\n}\n","import type { HTMLAttributes, ReactElement, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./Card.module.css\";\n\nexport type CardVariant = \"card\" | \"raised\";\n\nexport interface CardProps extends Omit<HTMLAttributes<HTMLElement>, \"onClick\"> {\n children: ReactNode;\n /** card = flat on border, raised = elevated. Default \"card\". */\n variant?: CardVariant;\n /** Makes the whole card a button. */\n onClick?: () => void;\n /** Makes the whole card a link. Wins over onClick. */\n href?: string;\n}\n\n/**\n * Surface container. Compose with CardHeader/CardBody/CardFooter — the card\n * owns internal spacing, sections own their content.\n *\n * ```tsx\n * <Card>\n * <CardHeader><Heading level={3}>Next session</Heading></CardHeader>\n * <CardBody><Text>Tomorrow, 19:00</Text></CardBody>\n * <CardFooter><Button size=\"sm\">Join</Button></CardFooter>\n * </Card>\n *\n * <Card href=\"/items/42\" variant=\"flat\">…</Card>\n * ```\n */\nexport function Card({ children, variant = \"card\", onClick, href, className, ...rest }: CardProps): ReactElement {\n const cardClass = cx(styles.card, styles[`variant-${variant}`], className);\n\n if (href !== undefined) {\n return (\n <a className={cx(cardClass, styles.interactive)} href={href} {...rest}>\n {children}\n </a>\n );\n }\n if (onClick !== undefined) {\n return (\n <button type=\"button\" className={cx(cardClass, styles.interactive)} onClick={onClick} {...rest}>\n {children}\n </button>\n );\n }\n return (\n <div className={cardClass} {...rest}>\n {children}\n </div>\n );\n}\n\nexport type CardSectionProps = HTMLAttributes<HTMLDivElement>;\n\n/** Top slot — title row, media, tabs. */\nexport function CardHeader({ className, ...rest }: CardSectionProps): ReactElement {\n return <div className={cx(styles.header, className)} {...rest} />;\n}\n\n/** Main content slot. */\nexport function CardBody({ className, ...rest }: CardSectionProps): ReactElement {\n return <div className={cx(styles.body, className)} {...rest} />;\n}\n\n/** Bottom slot — actions, meta. */\nexport function CardFooter({ className, ...rest }: CardSectionProps): ReactElement {\n return <div className={cx(styles.footer, className)} {...rest} />;\n}\n",".panel {\n display: flex;\n flex-direction: column;\n width: 100%;\n max-width: var(--mds-modal-w);\n max-height: 85dvh;\n background: var(--mds-surface-raised);\n border-radius: var(--mds-radius-3);\n box-shadow: var(--mds-elevation-modal);\n opacity: 0;\n transform: scale(0.96);\n transition:\n opacity var(--mds-dur-base) var(--mds-ease-standard),\n transform var(--mds-dur-base) var(--mds-ease-standard);\n}\n\n.panel[data-open] {\n opacity: 1;\n transform: none;\n}\n\n.header {\n display: flex;\n align-items: center;\n gap: var(--mds-gap);\n padding: var(--mds-pad-card) var(--mds-pad-card) 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n}\n\n.body {\n flex: 1;\n overflow-y: auto;\n padding: var(--mds-pad-card);\n}\n\n.footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--mds-gap);\n padding: 0 var(--mds-pad-card) var(--mds-pad-card);\n}\n","import type { ReactNode } from \"react\";\nimport { Overlay } from \"../Overlay/Overlay\";\nimport styles from \"./Modal.module.css\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n /** Accessible name of the dialog. */\n label: string;\n /** Scrim click dismisses. Default true. */\n closeOnScrimClick?: boolean;\n children: ReactNode;\n}\n\n/**\n * Centered dialog. Escape, scrim click (`closeOnScrimClick`), and focus trap\n * are handled. Compose the sections:\n *\n * ```tsx\n * <Modal open={open} onClose={() => setOpen(false)} label=\"Edit session\">\n * <ModalHeader>Edit session</ModalHeader>\n * <ModalBody>…</ModalBody>\n * <ModalFooter><Button onClick={save}>Save</Button></ModalFooter>\n * </Modal>\n * ```\n */\nexport function Modal({ open, onClose, label, closeOnScrimClick = true, children }: ModalProps) {\n return (\n <Overlay\n open={open}\n onClose={onClose}\n label={label}\n variant=\"modal\"\n closeOnScrimClick={closeOnScrimClick}\n panelClassName={styles.panel}\n >\n {children}\n </Overlay>\n );\n}\n\nexport function ModalHeader({ children }: { children: ReactNode }) {\n return <div className={styles.header}>{children}</div>;\n}\n\nexport function ModalBody({ children }: { children: ReactNode }) {\n return <div className={styles.body}>{children}</div>;\n}\n\nexport function ModalFooter({ children }: { children: ReactNode }) {\n return <div className={styles.footer}>{children}</div>;\n}\n",".description {\n margin: 0;\n font: var(--mds-type-body);\n color: var(--mds-text-secondary);\n}\n","import { Button } from \"../Button/Button\";\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from \"../Modal/Modal\";\nimport styles from \"./ConfirmDialog.module.css\";\n\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: string;\n description?: string | undefined;\n confirmLabel: string;\n cancelLabel?: string | undefined;\n /** Style the confirm action as destructive. */\n danger?: boolean | undefined;\n}\n\n/**\n * Pre-composed Modal for the confirm/cancel pattern.\n *\n * ```tsx\n * <ConfirmDialog\n * open={open}\n * onClose={() => setOpen(false)}\n * onConfirm={deleteItem}\n * title=\"Delete item?\"\n * description=\"This cannot be undone.\"\n * confirmLabel=\"Delete\"\n * danger\n * />\n * ```\n */\nexport function ConfirmDialog({\n open,\n onClose,\n onConfirm,\n title,\n description,\n confirmLabel,\n cancelLabel = \"Cancel\",\n danger = false,\n}: ConfirmDialogProps) {\n return (\n <Modal open={open} onClose={onClose} label={title} closeOnScrimClick={false}>\n <ModalHeader>{title}</ModalHeader>\n <ModalBody>\n {description ? <p className={styles.description}>{description}</p> : null}\n </ModalBody>\n <ModalFooter>\n <Button variant=\"secondary\" onClick={onClose}>\n {cancelLabel}\n </Button>\n <Button variant={danger ? \"danger\" : \"primary\"} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </ModalFooter>\n </Modal>\n );\n}\n",".screen {\n display: flex;\n flex-direction: column;\n min-height: 100dvh;\n background: var(--mds-surface-page);\n}\n\n.content {\n flex: 1;\n overflow-y: auto;\n padding: var(--mds-pad-page-y) var(--mds-pad-page-x);\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./Screen.module.css\";\n\n/**\n * Page scaffold. Compose:\n *\n * ```tsx\n * <Screen>\n * <AppBar title=\"Sessions\" />\n * <ScreenContent>…</ScreenContent>\n * <TabBar label=\"Primary\">…</TabBar>\n * </Screen>\n * ```\n */\nexport function Screen({ children }: { children: ReactNode }) {\n return <div className={styles.screen}>{children}</div>;\n}\n\n/** The scrollable main region of a Screen. */\nexport function ScreenContent({ children }: { children: ReactNode }) {\n return <main className={styles.content}>{children}</main>;\n}\n",".bar {\n position: sticky;\n top: 0;\n z-index: var(--mds-z-header);\n display: flex;\n align-items: center;\n gap: var(--mds-gap-tight);\n height: var(--mds-header-h);\n padding-inline: var(--mds-pad-page-x);\n background: var(--mds-surface-page);\n border-bottom: var(--mds-border-width) solid var(--mds-border-subtle);\n}\n\n.title {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n margin: 0;\n font: var(--mds-type-subtitle);\n color: var(--mds-text-primary);\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n.slot {\n display: flex;\n align-items: center;\n gap: var(--mds-gap-hairline);\n}\n","import type { ReactNode } from \"react\";\nimport styles from \"./AppBar.module.css\";\n\nexport interface AppBarProps {\n title?: string | undefined;\n /** Left slot — typically a back icon-only Button. */\n leading?: ReactNode;\n /** Right slot — actions. */\n trailing?: ReactNode;\n}\n\n/**\n * Top app bar. Sticky, one per screen; the title is the page h1.\n *\n * ```tsx\n * <AppBar\n * title=\"Sessions\"\n * trailing={\n * <Button iconOnly aria-label=\"Settings\" variant=\"ghost\" onClick={openSettings}>\n * <Icon name=\"settings\" />\n * </Button>\n * }\n * />\n * ```\n */\nexport function AppBar({ title, leading, trailing }: AppBarProps) {\n return (\n <header className={styles.bar}>\n {leading ? <div className={styles.slot}>{leading}</div> : null}\n {title ? <h1 className={styles.title}>{title}</h1> : null}\n {trailing ? <div className={styles.slot}>{trailing}</div> : null}\n </header>\n );\n}\n",".bar {\n position: sticky;\n bottom: 0;\n z-index: var(--mds-z-tabbar);\n display: flex;\n align-items: stretch;\n height: var(--mds-tabbar-h);\n background: var(--mds-surface-page);\n border-top: var(--mds-border-width) solid var(--mds-border-subtle);\n padding-bottom: env(safe-area-inset-bottom);\n}\n\n.item {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--mds-gap-hairline);\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n cursor: pointer;\n font: var(--mds-type-meta);\n color: var(--mds-text-muted);\n text-decoration: none;\n transition: color var(--mds-transition-control);\n}\n\n.item:hover {\n color: var(--mds-text-secondary);\n}\n\n.active,\n.active:hover {\n color: var(--mds-text-accent);\n}\n\n.icon {\n display: inline-flex;\n}\n\n.label {\n line-height: 1;\n}\n","import type { MouseEventHandler, ReactNode } from \"react\";\nimport { cx } from \"../../internal/cx\";\nimport styles from \"./TabBar.module.css\";\n\nexport interface TabBarProps {\n /** Accessible name of the navigation landmark. */\n label: string;\n children: ReactNode;\n}\n\n/**\n * Bottom navigation. Items are links (or buttons for non-route actions);\n * they stay in the natural tab order — roving focus is for composite\n * widgets, not navigation landmarks.\n *\n * ```tsx\n * <TabBar label=\"Primary\">\n * <TabBarItem label=\"Home\" icon={<Icon name=\"home\" />} href=\"/\" active />\n * <TabBarItem label=\"Search\" icon={<Icon name=\"search\" />} href=\"/search\" />\n * </TabBar>\n * ```\n */\nexport function TabBar({ label, children }: TabBarProps) {\n return (\n <nav aria-label={label} className={styles.bar}>\n {children}\n </nav>\n );\n}\n\nexport interface TabBarItemProps {\n label: string;\n icon: ReactNode;\n href?: string | undefined;\n onClick?: MouseEventHandler | undefined;\n active?: boolean | undefined;\n}\n\nexport function TabBarItem({ label, icon, href, onClick, active = false }: TabBarItemProps) {\n const className = cx(styles.item, active && styles.active);\n const content = (\n <>\n <span className={styles.icon} aria-hidden=\"true\">\n {icon}\n </span>\n <span className={styles.label}>{label}</span>\n </>\n );\n if (href !== undefined) {\n return (\n <a href={href} className={className} aria-current={active ? \"page\" : undefined} onClick={onClick}>\n {content}\n </a>\n );\n }\n return (\n <button type=\"button\" className={className} aria-current={active ? \"page\" : undefined} onClick={onClick}>\n {content}\n </button>\n );\n}\n","import type { KeyboardEvent, RefObject } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface RovingGroupOptions {\n /** Selector for the focusable items inside the container. */\n selector: string;\n /** Arrow axis. Default \"horizontal\". */\n orientation?: \"horizontal\" | \"vertical\" | \"both\";\n}\n\n/**\n * Arrow-key focus movement for composite widgets (toolbars, menus, tab bars).\n * Wraps at the edges; Home/End jump. Returns a keydown handler for the\n * container.\n */\nexport function useRovingGroup(\n ref: RefObject<HTMLElement | null>,\n { selector, orientation = \"horizontal\" }: RovingGroupOptions,\n): (event: KeyboardEvent<HTMLElement>) => void {\n return useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n const horizontal = orientation !== \"vertical\";\n const vertical = orientation !== \"horizontal\";\n const forward = (horizontal && event.key === \"ArrowRight\") || (vertical && event.key === \"ArrowDown\");\n const backward = (horizontal && event.key === \"ArrowLeft\") || (vertical && event.key === \"ArrowUp\");\n const home = event.key === \"Home\";\n const end = event.key === \"End\";\n if (!forward && !backward && !home && !end) return;\n\n const container = ref.current;\n if (container === null) return;\n const items = [...container.querySelectorAll<HTMLElement>(selector)].filter(\n (item) => !item.hasAttribute(\"disabled\"),\n );\n const current = items.indexOf(document.activeElement as HTMLElement);\n if (items.length === 0 || current === -1) return;\n\n event.preventDefault();\n const next = home\n ? 0\n : end\n ? items.length - 1\n : (current + (forward ? 1 : -1) + items.length) % items.length;\n items[next]?.focus();\n },\n [ref, selector, orientation],\n );\n}\n"]}
|