@duro-app/ui 5.7.0 → 5.8.1
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/{Table-Dj7PXqO_.js → Table-CAjPFgTX.js} +397 -394
- package/dist/Table-CAjPFgTX.js.map +1 -0
- package/dist/{compiler-runtime-B2IcI8_O.js → compiler-runtime-BuugS4D0.js} +67 -59
- package/dist/{compiler-runtime-B2IcI8_O.js.map → compiler-runtime-BuugS4D0.js.map} +1 -1
- package/dist/components/AppShell/AppShell.d.ts +74 -0
- package/dist/components/AppShell/AppShell.d.ts.map +1 -0
- package/dist/components/AppShell/AppShell.meta.d.ts +3 -0
- package/dist/components/AppShell/AppShell.meta.d.ts.map +1 -0
- package/dist/components/AppShell/AppShell.stories.d.ts +192 -0
- package/dist/components/AppShell/AppShell.stories.d.ts.map +1 -0
- package/dist/components/AppShell/styles.css.d.ts +187 -0
- package/dist/components/AppShell/styles.css.d.ts.map +1 -0
- package/dist/components/Aside/Aside.d.ts +23 -0
- package/dist/components/Aside/Aside.d.ts.map +1 -0
- package/dist/components/Aside/Aside.meta.d.ts +3 -0
- package/dist/components/Aside/Aside.meta.d.ts.map +1 -0
- package/dist/components/Aside/Aside.stories.d.ts +45 -0
- package/dist/components/Aside/Aside.stories.d.ts.map +1 -0
- package/dist/components/Aside/styles.css.d.ts +44 -0
- package/dist/components/Aside/styles.css.d.ts.map +1 -0
- package/dist/components/Button/styles.css.d.ts +2 -0
- package/dist/components/Button/styles.css.d.ts.map +1 -1
- package/dist/components/ButtonGroup/ButtonGroup.stories.d.ts +3 -3
- package/dist/components/ButtonGroup/ButtonGroup.stories.d.ts.map +1 -1
- package/dist/components/CodeBlock/CodeBlock.d.ts +29 -0
- package/dist/components/CodeBlock/CodeBlock.d.ts.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.meta.d.ts +3 -0
- package/dist/components/CodeBlock/CodeBlock.meta.d.ts.map +1 -0
- package/dist/components/CodeBlock/CodeBlock.stories.d.ts +73 -0
- package/dist/components/CodeBlock/CodeBlock.stories.d.ts.map +1 -0
- package/dist/components/CodeBlock/styles.css.d.ts +41 -0
- package/dist/components/CodeBlock/styles.css.d.ts.map +1 -0
- package/dist/components/Grid/Grid.d.ts +13 -4
- package/dist/components/Grid/Grid.d.ts.map +1 -1
- package/dist/components/Grid/Grid.meta.d.ts.map +1 -1
- package/dist/components/Grid/Grid.stories.d.ts +28 -0
- package/dist/components/Grid/Grid.stories.d.ts.map +1 -1
- package/dist/components/Grid/styles.css.d.ts +3 -0
- package/dist/components/Grid/styles.css.d.ts.map +1 -1
- package/dist/components/Heading/Heading.d.ts +3 -1
- package/dist/components/Heading/Heading.d.ts.map +1 -1
- package/dist/components/Heading/Heading.stories.d.ts +9 -0
- package/dist/components/Heading/Heading.stories.d.ts.map +1 -0
- package/dist/components/LinkButton/LinkButton.stories.d.ts +7 -0
- package/dist/components/LinkButton/LinkButton.stories.d.ts.map +1 -1
- package/dist/components/LinkButton/styles.css.d.ts +2 -0
- package/dist/components/LinkButton/styles.css.d.ts.map +1 -1
- package/dist/components/LiveRegion/LiveRegion.d.ts +28 -0
- package/dist/components/LiveRegion/LiveRegion.d.ts.map +1 -0
- package/dist/components/LiveRegion/LiveRegion.meta.d.ts +3 -0
- package/dist/components/LiveRegion/LiveRegion.meta.d.ts.map +1 -0
- package/dist/components/LiveRegion/LiveRegion.stories.d.ts +66 -0
- package/dist/components/LiveRegion/LiveRegion.stories.d.ts.map +1 -0
- package/dist/components/Menu/Menu.stories.d.ts +7 -0
- package/dist/components/Menu/Menu.stories.d.ts.map +1 -1
- package/dist/components/Menu/styles.css.d.ts +2 -0
- package/dist/components/Menu/styles.css.d.ts.map +1 -1
- package/dist/components/PageNav/styles.css.d.ts +1 -1
- package/dist/components/Prose/Prose.d.ts +17 -0
- package/dist/components/Prose/Prose.d.ts.map +1 -0
- package/dist/components/Prose/Prose.meta.d.ts +3 -0
- package/dist/components/Prose/Prose.meta.d.ts.map +1 -0
- package/dist/components/Prose/Prose.stories.d.ts +63 -0
- package/dist/components/Prose/Prose.stories.d.ts.map +1 -0
- package/dist/components/SideNav/SideNav.d.ts +7 -1
- package/dist/components/SideNav/SideNav.d.ts.map +1 -1
- package/dist/components/SideNav/SideNav.stories.d.ts +3 -0
- package/dist/components/SideNav/SideNav.stories.d.ts.map +1 -1
- package/dist/components/Time/Time.d.ts +26 -0
- package/dist/components/Time/Time.d.ts.map +1 -0
- package/dist/components/Time/Time.meta.d.ts +3 -0
- package/dist/components/Time/Time.meta.d.ts.map +1 -0
- package/dist/components/Time/Time.stories.d.ts +77 -0
- package/dist/components/Time/Time.stories.d.ts.map +1 -0
- package/dist/components/Time/relative.d.ts +27 -0
- package/dist/components/Time/relative.d.ts.map +1 -0
- package/dist/form.js +1 -1
- package/dist/hooks/useContainerBelow.d.ts +18 -0
- package/dist/hooks/useContainerBelow.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4870 -4183
- package/dist/index.js.map +1 -1
- package/dist/table.js +2 -2
- package/package.json +2 -2
- package/src/components/AppShell/AppShell.meta.ts +62 -0
- package/src/components/AppShell/AppShell.stories.tsx +825 -0
- package/src/components/AppShell/AppShell.tsx +346 -0
- package/src/components/AppShell/styles.css.ts +219 -0
- package/src/components/Aside/Aside.meta.ts +33 -0
- package/src/components/Aside/Aside.stories.tsx +106 -0
- package/src/components/Aside/Aside.tsx +42 -0
- package/src/components/Aside/styles.css.ts +60 -0
- package/src/components/Button/styles.css.ts +7 -2
- package/src/components/ButtonGroup/ButtonGroup.stories.tsx +4 -5
- package/src/components/CodeBlock/CodeBlock.meta.ts +29 -0
- package/src/components/CodeBlock/CodeBlock.stories.tsx +192 -0
- package/src/components/CodeBlock/CodeBlock.tsx +99 -0
- package/src/components/CodeBlock/styles.css.ts +48 -0
- package/src/components/Grid/Grid.meta.ts +2 -1
- package/src/components/Grid/Grid.stories.tsx +202 -3
- package/src/components/Grid/Grid.tsx +35 -6
- package/src/components/Grid/styles.css.ts +11 -0
- package/src/components/Heading/Heading.stories.tsx +51 -0
- package/src/components/Heading/Heading.tsx +38 -7
- package/src/components/LinkButton/LinkButton.stories.tsx +41 -1
- package/src/components/LinkButton/styles.css.ts +6 -2
- package/src/components/LiveRegion/LiveRegion.meta.ts +29 -0
- package/src/components/LiveRegion/LiveRegion.stories.tsx +139 -0
- package/src/components/LiveRegion/LiveRegion.tsx +48 -0
- package/src/components/Menu/Menu.stories.tsx +62 -0
- package/src/components/Menu/styles.css.ts +6 -3
- package/src/components/Prose/Prose.meta.ts +32 -0
- package/src/components/Prose/Prose.stories.tsx +240 -0
- package/src/components/Prose/Prose.tsx +25 -0
- package/src/components/Prose/prose.css +179 -0
- package/src/components/SideNav/SideNav.stories.tsx +29 -0
- package/src/components/SideNav/SideNav.tsx +14 -2
- package/src/components/Time/Time.meta.ts +17 -0
- package/src/components/Time/Time.stories.tsx +173 -0
- package/src/components/Time/Time.tsx +33 -0
- package/src/components/Time/relative.ts +89 -0
- package/src/hooks/useContainerBelow.ts +39 -0
- package/src/index.ts +13 -1
- package/src/strict.css +4 -1
- package/dist/Table-Dj7PXqO_.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/components/ActionBar/ActionBarProvider.tsx","../../tokens/src/tokens/spacing.css.ts","../src/components/ActionBar/styles.css.ts","../src/components/ActionBar/ActionBar.tsx","../src/components/Icon/Icon.tsx","../src/components/Alert/styles.css.ts","../src/components/Alert/Alert.tsx","../src/platform.ts","../src/components/Badge/styles.css.ts","../src/components/Badge/Badge.tsx","../src/components/Breadcrumb/styles.css.ts","../src/shared/navigate.ts","../src/components/Breadcrumb/Breadcrumb.tsx","../src/shared/mergeRefs.ts","../src/components/Button/styles.css.ts","../src/components/Button/Button.tsx","../src/shared/useOrderedRegistry.ts","../src/components/ButtonGroup/styles.css.ts","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Callout/styles.css.ts","../src/components/Callout/Callout.tsx","../src/components/Card/styles.css.ts","../src/components/Card/Card.tsx","../src/components/Checkbox/styles.css.ts","../src/styles/visually-hidden.css.ts","../src/components/Checkbox/Checkbox.tsx","../src/hooks/useControllableValue.ts","../src/components/CheckboxGroup/styles.css.ts","../src/components/Field/FieldContext.ts","../src/components/CheckboxGroup/CheckboxGroup.tsx","../src/components/ColorInput/styles.css.ts","../src/components/ColorInput/ColorInput.tsx","../src/components/Dialog/styles.css.ts","../src/shared/ModalContext.ts","../src/components/Dialog/Dialog.tsx","../src/components/InputGroup/InputGroupContext.ts","../src/components/Input/styles.css.ts","../src/components/Input/Input.tsx","../src/components/Field/styles.css.ts","../src/components/Field/Field.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/DragDrop/styles.css.ts","../src/components/DragDrop/DragDrop.tsx","../src/components/DetailPanel/styles.css.ts","../src/components/DetailPanel/DetailPanel.tsx","../src/components/Drawer/styles.css.ts","../src/components/Drawer/useSwipeDismiss.ts","../src/components/Drawer/Drawer.tsx","../src/components/EmptyState/styles.css.ts","../src/components/EmptyState/EmptyState.tsx","../../tokens/src/tokens/type-presets.css.ts","../src/components/Heading/styles.css.ts","../src/components/Heading/Heading.tsx","../src/components/List/styles.css.ts","../src/components/List/List.tsx","../src/components/Fieldset/styles.css.ts","../src/components/Fieldset/Fieldset.tsx","../src/components/InputGroup/styles.css.ts","../src/components/InputGroup/InputGroup.tsx","../src/components/LinkButton/styles.css.ts","../src/components/LinkButton/LinkButton.tsx","../src/components/Meter/styles.css.ts","../src/components/Meter/Meter.tsx","../src/components/PageNav/styles.css.ts","../src/components/PageNav/PageNav.tsx","../src/components/Panel/styles.css.ts","../src/components/Panel/Panel.tsx","../src/components/RadioGroup/styles.css.ts","../src/components/RadioGroup/RadioGroup.tsx","../src/components/ScrollArea/styles.css.ts","../src/components/ScrollArea/ScrollAreaContext.ts","../src/components/ScrollArea/useScrollAreaRoot.ts","../src/components/ScrollArea/ScrollArea.tsx","../src/components/Combobox/styles.css.ts","../src/components/Combobox/ComboboxContext.ts","../src/components/Combobox/useComboboxRoot.ts","../src/components/Listbox/styles.css.ts","../src/components/Listbox/Listbox.tsx","../src/components/Combobox/Combobox.tsx","../src/components/VisuallyHidden/VisuallyHidden.tsx","../src/components/TextLink/styles.css.ts","../src/components/TextLink/TextLink.tsx","../src/components/Select/styles.css.ts","../src/components/Select/SelectContext.ts","../src/components/Select/useSelectRoot.ts","../src/components/Select/Select.tsx","../src/components/SideNav/styles.css.ts","../src/components/SideNav/SideNavContext.ts","../src/components/SideNav/SideNav.tsx","../src/components/Spinner/styles.css.ts","../src/components/Spinner/Spinner.tsx","../src/components/Toast/styles.css.ts","../src/components/Toast/ToastProvider.tsx","../src/components/StatusIcon/styles.css.ts","../src/components/StatusIcon/StatusIcon.tsx","../src/components/TagGroup/TagGroupContext.ts","../src/components/Tag/styles.css.ts","../src/components/Tag/Tag.tsx","../src/components/TagGroup/styles.css.ts","../src/components/TagGroup/TagGroup.tsx","../src/components/TableOfContents/styles.css.ts","../src/components/TableOfContents/TableOfContentsContext.ts","../src/components/TableOfContents/TableOfContents.tsx","../src/components/Tabs/styles.css.ts","../src/components/Tabs/TabsContext.ts","../src/components/Tabs/useTabsRoot.ts","../src/components/Tabs/Tabs.tsx","../src/components/Timeline/styles.css.ts","../src/components/Timeline/Timeline.tsx","../src/components/Tree/styles.css.ts","../src/components/Tree/TreeContext.ts","../src/components/Tree/Tree.tsx","../src/components/Textarea/styles.css.ts","../src/components/Textarea/Textarea.tsx","../src/components/ColorMode/styles.css.ts","../src/components/ColorMode/ColorMode.tsx","../src/components/Text/styles.css.ts","../src/components/Text/Text.tsx","../src/components/ToggleGroup/ToggleGroupContext.ts","../src/components/Toggle/styles.css.ts","../src/components/Toggle/Toggle.tsx","../src/components/ToggleGroup/useRovingFocus.ts","../src/components/ToggleGroup/styles.css.ts","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tooltip/styles.css.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Toolbar/styles.css.ts","../src/components/Toolbar/Toolbar.tsx","../src/components/Popover/styles.css.ts","../src/components/Popover/Popover.tsx","../src/components/Switch/styles.css.ts","../src/components/Switch/Switch.tsx","../src/components/Stack/styles.css.ts","../src/components/Stack/Stack.tsx","../src/components/Inline/styles.css.ts","../src/components/Inline/Inline.tsx","../src/components/Cluster/styles.css.ts","../src/components/Cluster/Cluster.tsx","../src/components/Grid/styles.css.ts","../src/components/Grid/columns.ts","../src/components/Grid/Grid.tsx","../src/components/PageShell/styles.css.ts","../src/components/PageShell/PageShell.tsx","../src/hooks/useContainerQuery.ts"],"sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\n\ninterface ActionBarEntry {\n id: string\n render: () => ReactNode\n}\n\ninterface ActionBarStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ActionBarEntry[]\n push: (id: string, render: () => ReactNode) => void\n update: (id: string, render: () => ReactNode) => void\n remove: (id: string) => void\n}\n\nfunction createActionBarStore(): ActionBarStore {\n let entries: ActionBarEntry[] = []\n const listeners = new Set<() => void>()\n\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n push: (id, render) => {\n entries = [...entries, {id, render}]\n notify()\n },\n update: (id, render) => {\n entries = entries.map((e) => (e.id === id ? {id, render} : e))\n notify()\n },\n remove: (id) => {\n entries = entries.filter((e) => e.id !== id)\n notify()\n },\n }\n}\n\nconst ActionBarContext = createContext<ActionBarStore | null>(null)\n\nexport function ActionBarProvider({children}: {children: ReactNode}) {\n const storeRef = useRef<ActionBarStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createActionBarStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const topEntry = entries.length > 0 ? entries[entries.length - 1] : null\n\n return (\n <ActionBarContext.Provider value={store}>\n {children}\n {topEntry?.render()}\n </ActionBarContext.Provider>\n )\n}\n\nexport function useActionBarStack() {\n const store = useContext(ActionBarContext)\n const id = useId()\n\n const register = useCallback(\n (render: () => ReactNode) => {\n if (!store) return\n const entries = store.getSnapshot()\n if (entries.some((e) => e.id === id)) {\n store.update(id, render)\n } else {\n store.push(id, render)\n }\n },\n [store, id],\n )\n\n const unregister = useCallback(() => {\n store?.remove(id)\n }, [store, id])\n\n const isTop = useMemo(() => {\n if (!store) return false\n const entries = store.getSnapshot()\n return entries.length > 0 && entries[entries.length - 1].id === id\n }, [store, id])\n\n return {id, register, unregister, managed: store !== null, isTop}\n}\n","import {css} from 'react-strict-dom'\n\nexport const spacing = css.defineVars({\n xs: '4px',\n sm: '8px',\n ms: '12px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n xxl: '48px',\n xxxl: '64px',\n})\n\n// Optical micro-steps below and between the spacing scale: a 1-6px nudge that\n// aligns a glyph or tightens a dense control. Not a layout choice, so not part\n// of SpacingToken (no `gap=\"px2\"`); prefer the scale.\nexport const microSpacing = css.defineVars({\n px1: '1px',\n px2: '2px',\n px3: '3px',\n px5: '5px',\n px6: '6px',\n})\n\nexport const radii = css.defineVars({\n xs: '4px',\n px6: '6px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n full: '9999px',\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n overlay: {\n position: 'fixed',\n bottom: spacing.lg,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.md,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n boxShadow: shadows.lg,\n zIndex: layers.floating,\n },\n // Centred on the window: the default, with nothing docked at its edge.\n centered: {\n left: '50%',\n transform: 'translateX(-50%)',\n maxWidth: `calc(100vw - ${spacing.xxl})`,\n },\n // Centred in the window minus chrome docked at the inline-end edge (a\n // DetailPanel). Both insets and auto margins centre a fixed box of\n // fit-content width in what is left, measured on the containing block\n // (the window without a classic scrollbar), not on 100vw.\n inset: (end: number) => ({\n insetInlineStart: 0,\n insetInlineEnd: end,\n marginInlineStart: 'auto',\n marginInlineEnd: 'auto',\n width: 'fit-content',\n maxWidth: `calc(100% - ${end}px - ${spacing.xxl})`,\n }),\n overlayOffset: (bottom: number) => ({\n bottom,\n }),\n overlayEmphasized: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n selectedCount: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n fontFamily: typography.fontFamily,\n color: colors.text,\n whiteSpace: 'nowrap',\n },\n selectedCountEmphasized: {\n color: colors.accentContrast,\n },\n actions: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.sm,\n },\n // Beside a docked panel the room is narrower: more actions than fit scroll\n // instead of spilling past the bar. A scroll box clips vertically too, so\n // the row gets room on every side for the buttons' focus rings, taken back\n // by its margin so the bar keeps its size.\n actionsScroll: {\n minWidth: 0,\n overflowX: 'auto',\n overflowY: 'hidden',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n marginTop: `calc(-1 * ${spacing.xs})`,\n marginBottom: `calc(-1 * ${spacing.xs})`,\n marginLeft: `calc(-1 * ${spacing.xs})`,\n marginRight: `calc(-1 * ${spacing.xs})`,\n },\n closeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButtonSm,\n height: sizes.iconButtonSm,\n padding: 0,\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderRadius: radii.sm,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n closeButtonEmphasized: {\n color: {\n default: colors.accentContrast,\n ':hover': colors.accentContrast,\n },\n opacity: {\n default: 0.7,\n ':hover': 1,\n },\n },\n separator: {\n width: sizes.divider,\n alignSelf: 'stretch',\n backgroundColor: colors.border,\n marginTop: spacing.xs,\n marginBottom: spacing.xs,\n },\n separatorEmphasized: {\n backgroundColor: colors.accentContrast,\n opacity: 0.3,\n },\n})\n","import {useEffect, useCallback, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {SPACING_PX, type SpacingToken} from '@duro-app/tokens/keys'\nimport {useActionBarStack} from './ActionBarProvider'\nimport {styles} from './styles.css'\n\nexport interface ActionBarProps {\n /** Number of selected items, or 'all'. Hidden when 0. */\n selectedItemCount: number | 'all'\n /** Label for the selection count. Receives the count string. */\n selectedLabel?: (count: string) => string\n /** Whether to use emphasized (accent) styling. */\n isEmphasized?: boolean\n /** Called when the clear/close button is pressed. */\n onClearSelection: () => void\n /** Whether the bar can be dismissed. When false, the close button is hidden. @default true */\n dismissible?: boolean\n /**\n * Distance between the bar and the bottom of the viewport, for hosts with\n * their own bottom chrome (zoom controls, players) the bar must clear.\n * A spacing token, or a raw px number when clearing chrome of arbitrary\n * height. Defaults to the spacing.lg token.\n */\n bottomOffset?: SpacingToken | number\n /**\n * Width in px of chrome docked at the window's inline-end edge (right in\n * left-to-right, left in right-to-left), such as an open DetailPanel: the\n * bar centres in what is left and keeps 24px clear of it. 0 or omitted\n * centres on the window.\n */\n insetInlineEnd?: number\n /** Action buttons to display. */\n children: ReactNode\n}\n\nfunction ActionBarContent({\n selectedItemCount,\n selectedLabel,\n isEmphasized = false,\n onClearSelection,\n dismissible = true,\n bottomOffset,\n insetInlineEnd = 0,\n children,\n}: ActionBarProps) {\n const countStr = selectedItemCount === 'all' ? 'All' : `${selectedItemCount}`\n const label = selectedLabel ? selectedLabel(countStr) : `${countStr} selected`\n\n return (\n <html.div\n role=\"toolbar\"\n aria-label={label}\n style={[\n styles.overlay,\n insetInlineEnd > 0 ? styles.inset(insetInlineEnd) : styles.centered,\n bottomOffset != null &&\n styles.overlayOffset(\n typeof bottomOffset === 'number' ? bottomOffset : SPACING_PX[bottomOffset],\n ),\n isEmphasized && styles.overlayEmphasized,\n ]}\n >\n <html.span style={[styles.selectedCount, isEmphasized && styles.selectedCountEmphasized]}>\n {label}\n </html.span>\n <html.div style={[styles.separator, isEmphasized && styles.separatorEmphasized]} />\n <html.div style={[styles.actions, insetInlineEnd > 0 && styles.actionsScroll]}>\n {children}\n </html.div>\n {dismissible && (\n <html.button\n type=\"button\"\n aria-label=\"Clear selection\"\n onClick={onClearSelection}\n style={[styles.closeButton, isEmphasized && styles.closeButtonEmphasized]}\n >\n <svg width={10} height={10} viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M1 1l8 8M9 1l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )}\n </html.div>\n )\n}\n\nfunction ActionBarInner(props: ActionBarProps) {\n const {selectedItemCount} = props\n const stack = useActionBarStack()\n const isActive = selectedItemCount !== 0\n\n const renderBar = useCallback(() => <ActionBarContent {...props} />, [props])\n\n useEffect(() => {\n if (!stack.managed) return\n if (isActive) {\n stack.register(renderBar)\n } else {\n stack.unregister()\n }\n return () => stack.unregister()\n }, [stack, isActive, renderBar])\n\n // If no provider, fall back to standalone rendering\n if (!stack.managed) {\n if (!isActive) return null\n return <ActionBarContent {...props} />\n }\n\n // Managed by provider — rendering happens there\n return null\n}\n\nexport const ActionBar = ActionBarInner\n","import type {ReactNode} from 'react'\nimport {ICON_SIZES, type IconSize} from '@duro-app/tokens/keys'\n\nexport type {IconSize}\n\nexport type IconName =\n | 'x-circle'\n | 'check-circle'\n | 'check-done'\n | 'clock'\n | 'forbidden'\n | 'info-circle'\n | 'alert-triangle'\n | 'shield'\n | 'lock'\n | 'key'\n // Navigation / wayfinding glyphs\n | 'map'\n | 'layers'\n | 'repeat'\n | 'database'\n | 'shield-check'\n | 'route'\n | 'git-branch'\n | 'menu'\n | 'pin'\n // Infrastructure / inventory glyphs\n | 'server'\n | 'hard-drive'\n | 'box'\n | 'image'\n | 'tag'\n | 'pie-chart'\n // People / access / admin glyphs\n | 'users'\n | 'user-plus'\n | 'mail'\n | 'file-text'\n | 'plug'\n // Input / action glyphs\n | 'search'\n | 'mic'\n // Color-mode glyphs\n | 'sun'\n | 'moon'\n | 'monitor'\n | 'contrast'\n // Filled variants (solid shape with cutout symbol)\n | 'info-circle-filled'\n | 'alert-triangle-filled'\n | 'check-circle-filled'\n | 'x-circle-filled'\n | 'shield-filled'\n | 'lock-filled'\n\n/** Stroke-based icons (Feather/Lucide style) */\nconst strokeIcons: Partial<Record<IconName, ReactNode>> = {\n 'x-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </>\n ),\n 'check-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"16 10 11 15 8 12\" />\n </>\n ),\n 'check-done': (\n <>\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </>\n ),\n forbidden: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\" />\n </>\n ),\n 'info-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </>\n ),\n 'alert-triangle': (\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </>\n ),\n shield: <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />,\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n key: (\n <>\n <path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.78 7.78 5.5 5.5 0 0 1 7.78-7.78zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n </>\n ),\n // ---- navigation / wayfinding ----\n map: (\n <>\n <polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\" />\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\" />\n </>\n ),\n layers: (\n <>\n <polygon points=\"12 2 2 7 12 12 22 7 12 2\" />\n <polyline points=\"2 17 12 22 22 17\" />\n <polyline points=\"2 12 12 17 22 12\" />\n </>\n ),\n // Two crossing arrows — exchange / interface flows.\n repeat: (\n <>\n <polyline points=\"17 1 21 5 17 9\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <polyline points=\"7 23 3 19 7 15\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </>\n ),\n database: (\n <>\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\" />\n <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\" />\n </>\n ),\n 'shield-check': (\n <>\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <polyline points=\"9 12 11 14 15 10\" />\n </>\n ),\n // Milestone path — roadmap / itinerary.\n route: (\n <>\n <circle cx=\"6\" cy=\"19\" r=\"3\" />\n <path d=\"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15\" />\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n </>\n ),\n 'git-branch': (\n <>\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </>\n ),\n menu: (\n <>\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </>\n ),\n // ---- infrastructure / inventory ----\n // Two stacked rack units — hosts, nodes, machines.\n server: (\n <>\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </>\n ),\n // Disk enclosure — volumes, persistent storage.\n 'hard-drive': (\n <>\n <line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\" />\n <path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />\n <line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\" />\n <line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\" />\n </>\n ),\n // Isometric crate — a deployable unit of work.\n box: (\n <>\n <path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\" />\n <polyline points=\"3.27 6.96 12 12.01 20.73 6.96\" />\n <line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\" />\n </>\n ),\n // Picture frame — container images, artefacts.\n image: (\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </>\n ),\n // Luggage tag — labels, annotations, metadata.\n tag: (\n <>\n <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\" />\n <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\n </>\n ),\n // Share of a whole — quotas, budgets, utilisation.\n 'pie-chart': (\n <>\n <path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\" />\n <path d=\"M22 12A10 10 0 0 0 12 2v10z\" />\n </>\n ),\n // ---- people / access / admin ----\n users: (\n <>\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n 'user-plus': (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"8.5\" cy=\"7\" r=\"4\" />\n <line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\" />\n <line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\" />\n </>\n ),\n mail: (\n <>\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" />\n <polyline points=\"22,6 12,13 2,6\" />\n </>\n ),\n 'file-text': (\n <>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </>\n ),\n plug: (\n <>\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2\" />\n <path d=\"M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\" />\n </>\n ),\n pin: (\n <>\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"22\" />\n <path d=\"M9 10.76V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v6.76a2 2 0 0 0 .55 1.38l1.68 1.78A1 1 0 0 1 16.5 16h-9a1 1 0 0 1-.73-1.68l1.68-1.78A2 2 0 0 0 9 10.76z\" />\n </>\n ),\n // ---- input / action ----\n // Magnifying glass — search fields, find actions.\n search: (\n <>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </>\n ),\n // Microphone — voice input, dictation.\n mic: (\n <>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </>\n ),\n // ---- color mode ----\n sun: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </>\n ),\n moon: <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />,\n monitor: (\n <>\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </>\n ),\n // Circle, half solid — high-contrast / mode indicator.\n contrast: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 0 20z\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n}\n\n/**\n * Filled icons — solid shape with evenodd cutout for the inner symbol.\n * The cutout reveals the background color, so they work on any theme.\n * Uses fill=\"currentColor\" only, no stroke.\n */\nconst filledIcons: Partial<Record<IconName, ReactNode>> = {\n // Filled circle with \"i\" cutout (dot + line)\n 'info-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-.75 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0zM11 11a1 1 0 1 1 2 0v5a1 1 0 1 1-2 0v-5z\"\n />\n ),\n // Filled triangle with \"!\" cutout\n 'alert-triangle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0zM11 10a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0v-3zm.25 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0z\"\n />\n ),\n // Filled circle with checkmark cutout\n 'check-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707a1 1 0 0 0-1.414-1.414L11 13.586l-2.293-2.293a1 1 0 0 0-1.414 1.414l3 3a1 1 0 0 0 1.414 0l5-5z\"\n />\n ),\n // Filled circle with X cutout\n 'x-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM9.707 8.293a1 1 0 0 0-1.414 1.414L10.586 12l-2.293 2.293a1 1 0 1 0 1.414 1.414L12 13.414l2.293 2.293a1 1 0 0 0 1.414-1.414L13.414 12l2.293-2.293a1 1 0 0 0-1.414-1.414L12 10.586 9.707 8.293z\"\n />\n ),\n // Filled shield with checkmark cutout\n 'shield-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 1L3 5v7c0 6.5 8.5 10.5 9 10.73.5-.23 9-4.23 9-10.73V5l-9-4zm3.707 8.707a1 1 0 0 0-1.414-1.414L11 11.586l-1.293-1.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4z\"\n />\n ),\n // Filled lock body with stroke shackle\n 'lock-filled': (\n <>\n <path\n d=\"M7 11V7a5 5 0 0 1 10 0v4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n </>\n ),\n}\n\ninterface IconProps {\n name: IconName\n /** Token from the icon size scale: sm 16, md 18, lg 24, xl 36, xxl 48. */\n size?: IconSize\n}\n\nexport function Icon({name, size: sizeToken = 'lg'}: IconProps) {\n const size = ICON_SIZES[sizeToken]\n const filled = filledIcons[name]\n if (filled) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width={size} height={size}>\n {filled}\n </svg>\n )\n }\n\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={size}\n height={size}\n >\n {strokeIcons[name]}\n </svg>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: microSpacing.px1,\n },\n content: {\n flex: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type AlertVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<AlertVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface AlertProps {\n variant?: AlertVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n children: ReactNode\n}\n\nfunction resolveIcon(icon: AlertProps['icon'], variant: AlertVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"md\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"md\" />\n return icon\n}\n\nexport function Alert({variant = 'info', icon, children}: AlertProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div role=\"alert\" style={[styles.base, styles[variant]]}>\n {resolvedIcon ? (\n <>\n <html.div style={styles.iconWrap}>{resolvedIcon}</html.div>\n <html.div style={styles.content}>{children}</html.div>\n </>\n ) : (\n children\n )}\n </html.div>\n )\n}\n","/**\n * Platform flag resolved by the bundler's platform extensions: web bundlers\n * (Vite/Rollup) read THIS file (`isNative = false`); Metro reads\n * `platform.native.ts` (`isNative = true`) on React Native / Expo.\n *\n * It lets shared components layer a native-only style override without\n * importing `react-native` on web (the DS web build has no react-native).\n * Typed `boolean` (not the `false` literal) so `isNative && styles.x` stays a\n * `false | Style` union in style arrays rather than narrowing to `false`.\n */\nexport const isNative: boolean = false\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n lineHeight: 1,\n borderRadius: radii.full,\n whiteSpace: 'nowrap',\n },\n sizeMd: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n sizeSm: {\n paddingTop: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n fontSize: '0.625rem',\n },\n default: {\n backgroundColor: colors.bgCardHover,\n color: colors.textMuted,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n // A category or intent with no status meaning (a purple).\n highlight: {\n backgroundColor: colors.highlightBg,\n color: colors.highlightText,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info' | 'highlight'\nexport type BadgeSize = 'sm' | 'md'\n\ninterface BadgeProps {\n variant?: BadgeVariant\n size?: BadgeSize\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nexport function Badge({variant = 'default', size = 'md', children}: BadgeProps) {\n return (\n <html.span style={[styles.base, isNative && styles.nativeFlex, sizeMap[size], styles[variant]]}>\n {children}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// The picked docs browser (docs/mockups/docs-nav/Reader.dc.html, `.crumbs`):\n// small muted text, accent links, a `›` between items, the current page plain.\nexport const styles = css.create({\n root: {\n minWidth: 0,\n },\n list: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: spacing.xs,\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n item: {\n display: 'inline-flex',\n minWidth: 0,\n },\n separator: {\n display: 'inline-flex',\n color: colors.textMuted,\n userSelect: 'none',\n },\n // On a touch screen (coarse pointer, as Toggle does) each link is a\n // touch target; a mouse keeps the artboard's text-height row.\n link: {\n display: 'inline-flex',\n alignItems: 'center',\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecorationLine: {\n default: 'none',\n ':hover': 'underline',\n },\n borderRadius: radii.xs,\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n // the artboard keeps the current page in the list's muted colour; it is\n // told apart by not being a link (and by aria-current for assistive tech)\n current: {\n color: 'inherit',\n },\n})\n","/* Router-agnostic links (docs/adr/0002-link-parts-navigate-through-onnavigate.md).\n *\n * Every link part renders a real `<a href>`, so the browser keeps what a link\n * does on its own: cmd/ctrl-click and middle-click open a tab, shift-click a\n * window, alt-click downloads, \"Copy link\" works. An app with a client router\n * passes `onNavigate`; the part calls it for a plain primary click only, and\n * the app then decides:\n *\n * onNavigate={(href, event) => {\n * event.preventDefault()\n * navigate(href)\n * }}\n *\n * The part never prevents the default itself: without `onNavigate`, or for a\n * click it does not hand over, the browser follows the link. */\n\n/** The part of a click event a link part reads and hands to `onNavigate`. */\nexport interface LinkClickEvent {\n readonly button: number\n readonly metaKey: boolean\n readonly ctrlKey: boolean\n readonly shiftKey: boolean\n readonly altKey: boolean\n readonly defaultPrevented: boolean\n preventDefault(): void\n}\n\n/**\n * Called for a plain primary click on a link part. Call\n * `event.preventDefault()`, then your router's navigate; leave the event alone\n * to let the browser follow the link.\n */\nexport type OnNavigate = (href: string, event: LinkClickEvent) => void\n\n/** A primary-button click with no modifier key, not already prevented. */\nexport function isPlainClick(event: LinkClickEvent): boolean {\n return (\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey &&\n !event.defaultPrevented\n )\n}\n\n/**\n * The `onClick` of a link part: hands a plain click on a link with no\n * `target` to `onNavigate`, and does nothing otherwise, so the browser default\n * runs. Undefined when there is no `onNavigate` (no handler at all).\n */\nexport function linkClickHandler(\n href: string,\n onNavigate: OnNavigate | undefined,\n target?: string | null,\n): ((event: LinkClickEvent) => void) | undefined {\n if (!onNavigate) return undefined\n return (event) => {\n if (target != null || !isPlainClick(event)) return\n onNavigate(href, event)\n }\n}\n","import {Children, createContext, Fragment, isValidElement, type ReactNode, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\n/* Breadcrumb — where the current page sits in the site's hierarchy: a\n * labelled `nav` holding an ordered list of links, the last one the current\n * page (`aria-current=\"page\"`, shown as text). The separators between items\n * are decorative (`aria-hidden`), so a screen reader hears the list alone. */\n\n// Items render list items: outside Root's list they would be invalid markup.\nconst BreadcrumbContext = createContext(false)\n\nfunction useBreadcrumb() {\n if (!useContext(BreadcrumbContext))\n throw new Error('Breadcrumb compound components must be used within Breadcrumb.Root')\n}\n\n// --- Root ---\n\ninterface RootProps {\n /** Names the landmark (\"Breadcrumb\"); required, from your text catalog. */\n 'aria-label': string\n /** `Breadcrumb.Item`s, outermost first. */\n children: ReactNode\n}\n\nfunction Root({'aria-label': ariaLabel, children}: RootProps) {\n const items = Children.toArray(children).filter(isValidElement)\n return (\n <BreadcrumbContext.Provider value={true}>\n <html.nav aria-label={ariaLabel} style={styles.root}>\n <html.ol style={styles.list}>\n {items.map((item, i) => (\n <Fragment key={item.key ?? i}>\n {i > 0 ? (\n <html.li aria-hidden style={styles.separator}>\n ›\n </html.li>\n ) : null}\n {item}\n </Fragment>\n ))}\n </html.ol>\n </html.nav>\n </BreadcrumbContext.Provider>\n )\n}\n\n// --- Item ---\n\n/**\n * A link to an ancestor page, or the current page. The two are exclusive: the\n * current page has no `href` (it is text) and a link is never `current`.\n */\ntype ItemProps = {children: ReactNode} & (\n | {\n /** Where the item links to. */\n href: string\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key). Call `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n current?: never\n }\n | {\n /** The page the user is on: rendered as text with `aria-current=\"page\"`. */\n current: true\n href?: never\n onNavigate?: never\n }\n)\n\nfunction Item({href, current, onNavigate, children}: ItemProps) {\n useBreadcrumb()\n return (\n <html.li style={styles.item}>\n {current ? (\n <html.span aria-current=\"page\" style={styles.current}>\n {children}\n </html.span>\n ) : (\n <html.a href={href} onClick={linkClickHandler(href, onNavigate)} style={styles.link}>\n {children}\n </html.a>\n )}\n </html.li>\n )\n}\n\nexport const Breadcrumb = {\n Root,\n Item,\n}\n","import type {Ref, RefCallback} from 'react'\n\n/** One callback ref that sets every ref given (object or callback). */\nexport function mergeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n return (value) => {\n for (const ref of refs) {\n if (typeof ref === 'function') ref(value)\n else if (ref) (ref as {current: T | null}).current = value\n }\n }\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color, opacity, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n // Tactile press feedback. The scale is suppressed under reduced motion (and\n // duration.fast collapses to 0ms there too), so it's inert for those users.\n transform: {\n default: 'scale(1)',\n ':active': {\n default: 'scale(0.97)',\n '@media (prefers-reduced-motion: reduce)': 'scale(1)',\n },\n },\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n // Every small control is at least controlSm tall, whatever it holds (5.6).\n minHeight: sizes.controlSm,\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n ':active': colors.accentHover,\n },\n borderColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: colors.border,\n color: colors.textMuted,\n },\n link: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecoration: {\n default: 'none',\n ':hover': 'underline',\n },\n paddingLeft: 0,\n paddingRight: 0,\n },\n inverseSecondary: {\n backgroundColor: {\n default: colors.inverseFill,\n ':hover': colors.inverseFillHover,\n },\n borderColor: {\n default: colors.inverseBorder,\n ':hover': colors.inverseBorderHover,\n },\n color: colors.accentContrast,\n },\n danger: {\n backgroundColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n ':active': colors.errorHover,\n },\n borderColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n },\n color: colors.errorContrast,\n },\n fullWidth: {\n width: '100%',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode, Ref} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {styles} from './styles.css'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'inverseSecondary' | 'link' | 'danger'\nexport type ButtonSize = ControlSize\n\ninterface ButtonProps {\n variant?: ButtonVariant\n size?: ButtonSize\n fullWidth?: boolean\n disabled?: boolean\n type?: 'button' | 'submit'\n onClick?: () => void\n /** Accessible name override — e.g. for buttons whose visible text isn't unique. */\n 'aria-label'?: string\n /** For a button that shows or hides another element (a disclosure, a panel). */\n 'aria-expanded'?: boolean\n /** Id of the element this button controls. */\n 'aria-controls'?: string\n /**\n * The underlying <button>, e.g. to anchor a Popover or return focus to it.\n * Web only: on native the ref is not attached.\n */\n ref?: Ref<HTMLButtonElement>\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Button({\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n disabled = false,\n type = 'button',\n onClick,\n 'aria-label': ariaLabel,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls,\n ref,\n children,\n}: ButtonProps) {\n const grouped = useGroupedControl<HTMLButtonElement>({disabled})\n return (\n <html.button\n ref={isNative ? undefined : mergeRefs(ref, grouped.ref)}\n tabIndex={grouped.tabIndex}\n onFocus={grouped.onFocus}\n type={type}\n disabled={disabled}\n onClick={onClick}\n aria-label={ariaLabel}\n aria-expanded={ariaExpanded}\n aria-controls={ariaControls}\n style={[\n styles.base,\n isNative && styles.nativeFlex,\n sizeMap[size],\n styles[variant],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n grouped.style,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {useCallback, useLayoutEffect, useRef, useState} from 'react'\n\n/** A registered control: its id, in DOM order, and whether it is disabled. */\nexport interface RegisteredControl {\n id: string\n disabled: boolean\n}\n\nfunction sameEntries(a: RegisteredControl[], b: RegisteredControl[]) {\n return (\n a.length === b.length && a.every((e, i) => e.id === b[i].id && e.disabled === b[i].disabled)\n )\n}\n\n/**\n * Controls register their element here and come back in DOM order (the way\n * useRovingFocus orders a wrapping ToggleGroup). A control's place is read\n * from where it sits in the document, not from its parent: a Select or Menu\n * trigger sits inside its own Root, so `:first-child` cannot tell.\n *\n * Registration happens in a layout effect, so server-rendered HTML (and the\n * first client render) sees an empty registry.\n *\n * Keyed children can move without remounting, so the order is also re-read\n * after every commit of the owner; state changes only when the order did.\n */\nexport function useOrderedRegistry() {\n const elements = useRef(new Map<string, {el: HTMLElement; disabled: boolean}>())\n const [order, setOrder] = useState<RegisteredControl[]>([])\n\n const sync = useCallback(() => {\n const next = [...elements.current.entries()]\n .sort(([, a], [, b]) =>\n a.el.compareDocumentPosition(b.el) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n )\n .map(([id, {disabled}]) => ({id, disabled}))\n setOrder((prev) => (sameEntries(prev, next) ? prev : next))\n }, [])\n\n const register = useCallback(\n (id: string, el: HTMLElement, disabled: boolean) => {\n elements.current.set(id, {el, disabled})\n sync()\n return () => {\n if (elements.current.get(id)?.el === el) elements.current.delete(id)\n sync()\n }\n },\n [sync],\n )\n\n useLayoutEffect(() => {\n sync()\n })\n\n return {elements, order, register}\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n },\n horizontal: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n vertical: {\n flexDirection: 'column',\n },\n alignStart: {justifyContent: 'flex-start'},\n alignCenter: {justifyContent: 'center'},\n alignEnd: {justifyContent: 'flex-end'},\n verticalAlignStart: {alignItems: 'flex-start'},\n verticalAlignCenter: {alignItems: 'center'},\n verticalAlignEnd: {alignItems: 'flex-end'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMd: {gap: spacing.md},\n // One joined control: no gap, one row, every control as tall as the row.\n attached: {\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n },\n attachedVertical: {\n alignItems: 'stretch',\n },\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n","import {type ReactNode, useCallback, useMemo} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {useOrderedRegistry} from '../../shared/useOrderedRegistry'\nimport {ButtonGroupContext, type ButtonGroupContextValue} from './ButtonGroupContext'\nimport {styles} from './styles.css'\n\nexport type ButtonGroupGap = Extract<SpacingToken, 'xs' | 'sm' | 'md'>\n\nexport interface ButtonGroupProps {\n children: ReactNode\n /** Layout direction. Default: 'horizontal' */\n orientation?: 'horizontal' | 'vertical'\n /** Alignment within container. Default: 'start' */\n align?: 'start' | 'end' | 'center'\n /** Disable all buttons in group */\n disabled?: boolean\n /** Gap between buttons. Default: 'sm' (ignored when `attached`) */\n gap?: ButtonGroupGap\n /**\n * One joined control: no gap, shared borders, square inner corners. Holds\n * Buttons, Toggles and the Select, Menu and Popover triggers, in any mix.\n */\n attached?: boolean\n /** Names the group for assistive tech (a toolbar segment: \"Text style\"). */\n 'aria-label'?: string\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n md: styles.gapMd,\n} as const satisfies Record<ButtonGroupGap, unknown>\n\nconst horizontalAlignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst verticalAlignMap = {\n start: styles.verticalAlignStart,\n center: styles.verticalAlignCenter,\n end: styles.verticalAlignEnd,\n} as const\n\nexport function ButtonGroup({\n children,\n orientation = 'horizontal',\n align = 'start',\n disabled = false,\n gap = 'sm',\n attached = false,\n 'aria-label': ariaLabel,\n}: ButtonGroupProps) {\n const isVertical = orientation === 'vertical'\n const alignStyle = isVertical ? verticalAlignMap[align] : horizontalAlignMap[align]\n const {order, register} = useOrderedRegistry()\n\n const positionOf = useCallback<ButtonGroupContextValue['positionOf']>(\n (id) => {\n const i = order.findIndex((entry) => entry.id === id)\n if (i < 0) return 'middle'\n if (order.length === 1) return 'only'\n if (i === 0) return 'first'\n return i === order.length - 1 ? 'last' : 'middle'\n },\n [order],\n )\n const ctx = useMemo<ButtonGroupContextValue>(\n () => ({orientation, register, positionOf}),\n [orientation, register, positionOf],\n )\n\n return (\n // A non-attached group still resets the context, so a plain group nested\n // in an attached one lays out on its own.\n <ButtonGroupContext.Provider value={attached ? ctx : null}>\n <html.div\n role=\"group\"\n aria-label={ariaLabel}\n style={[\n styles.base,\n isVertical ? styles.vertical : styles.horizontal,\n alignStyle,\n attached ? (isVertical ? styles.attachedVertical : styles.attached) : gapMap[gap],\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.div>\n </ButtonGroupContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n // Vertically centres the icon with the message — the right default for the\n // short, single/two-line messages callouts usually carry.\n alignCenter: {\n alignItems: 'center',\n },\n // Aligns the icon to the first line — for long, multi-paragraph messages.\n alignStart: {\n alignItems: 'flex-start',\n },\n icon: {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n content: {\n flexGrow: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type CalloutVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<CalloutVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface CalloutProps {\n variant?: CalloutVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n /**\n * Vertical alignment of the icon against the message. `center` (default)\n * suits short single/two-line messages; `start` aligns the icon to the first\n * line for long multi-paragraph content.\n */\n align?: 'center' | 'start'\n children: ReactNode\n}\n\nfunction resolveIcon(icon: CalloutProps['icon'], variant: CalloutVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"xl\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"xl\" />\n return icon\n}\n\nexport function Callout({variant = 'info', icon, align = 'center', children}: CalloutProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div\n role=\"note\"\n style={[\n styles.base,\n styles[variant],\n align === 'center' ? styles.alignCenter : styles.alignStart,\n ]}\n >\n {resolvedIcon && <html.span style={styles.icon}>{resolvedIcon}</html.span>}\n <html.div style={styles.content}>{children}</html.div>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n },\n // Variants\n elevated: {\n borderRadius: radii.lg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n },\n outlined: {\n borderRadius: radii.md,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n filled: {\n borderRadius: radii.md,\n },\n interactive: {\n borderRadius: radii.md,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n backgroundColor: {\n default: colors.bgCard,\n ':hover': colors.bgCardHover,\n },\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n // Lift on hover; suppressed under reduced motion so there's no positional\n // shift (the token duration also collapses to 0ms there).\n transform: {\n default: 'translateY(0)',\n ':hover': {\n default: 'translateY(-2px)',\n '@media (prefers-reduced-motion: reduce)': 'translateY(0)',\n },\n },\n },\n // Sizes (padding)\n sizeDefault: {\n padding: spacing.lg,\n },\n sizeCompact: {\n padding: spacing.md,\n },\n sizeFull: {\n padding: spacing.xl,\n },\n // Header\n header: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n marginBottom: spacing.md,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'interactive'\nexport type CardSize = 'default' | 'compact' | 'full'\n\ninterface CardProps {\n variant?: CardVariant\n size?: CardSize\n header?: string\n onClick?: () => void\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n compact: styles.sizeCompact,\n full: styles.sizeFull,\n} as const\n\nexport function Card({\n variant = 'outlined',\n size = 'default',\n header,\n onClick,\n children,\n}: CardProps) {\n return (\n <html.div onClick={onClick} style={[styles.base, styles[variant], sizeMap[size]]}>\n {header && <html.div style={styles.header}>{header}</html.div>}\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n box: {\n width: sizes.indicator,\n height: sizes.indicator,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.xs,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n boxUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n boxChecked: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n // Native-only checkmark: a small box showing just its right + bottom border,\n // rotated 45° into a tick. Pure CSS (RSD translates the transform string to\n // an RN transform), so no SVG / react-native-svg weight reaches web.\n checkmark: {\n width: sizes.checkMarkW,\n height: sizes.checkMarkH,\n borderRightWidth: borders.strong,\n borderRightStyle: 'solid',\n borderRightColor: colors.accentContrast,\n borderBottomWidth: borders.strong,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.accentContrast,\n transform: 'rotate(45deg)',\n marginTop: -2,\n },\n checkmarkVisible: {\n opacity: 1,\n },\n checkmarkHidden: {\n opacity: 0,\n },\n // Native label text — RN <Text> doesn't inherit color/size from the button\n // ancestor the way web inherits from <label>, so set it explicitly.\n labelText: {\n fontSize: typography.fontSizeSm,\n color: colors.text,\n },\n // Strip the default button chrome RSD gives <button> on native (border/bg/\n // padding mimic the browser default) so the row matches the web checkbox.\n nativeButton: {\n borderWidth: 0,\n backgroundColor: 'transparent',\n padding: 0,\n },\n // Layered on visuallyHidden.base: a native input is also made transparent.\n input: {\n opacity: 0,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` (on both .root and .box); web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {css} from 'react-strict-dom'\n\n// The visually-hidden technique: a 1×1 box clipped by overflow, still in the\n// accessibility tree and still focusable where the element is. The 1px is the\n// technique, not a design measure, so this module is the one file the\n// every-measure-is-a-token rule exempts (ADR-0027; `exemptFiles` in\n// eslint.config.js). Components layer their own extras on top (`opacity: 0`\n// for a native input, `clip` for a label).\nexport const visuallyHidden = css.create({\n base: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n },\n // For text (VisuallyHidden): clipped to nothing, kept on one line so a\n // screen reader reads it whole.\n text: {\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: 0,\n padding: 0,\n },\n})\n","import {type ReactNode, useState, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\ninterface CheckboxProps {\n name?: string\n value?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n /** Accessible label when no visible label (children) is provided. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n children?: ReactNode\n}\n\nexport function Checkbox({\n name,\n value,\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n 'aria-label': ariaLabel,\n onChange,\n children,\n}: CheckboxProps) {\n const isControlled = controlledChecked !== undefined\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n // Web: the real <input type=checkbox> drives toggling, a11y and form submit.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked)\n }\n onChange?.(e)\n },\n [isControlled, onChange],\n )\n\n // Native: RSD only makes <button> pressable and has no <input type=checkbox>,\n // so the whole row is a button and we synthesize the change payload that\n // consumers read (e.target.checked).\n const handlePress = useCallback(() => {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) {\n setInternalChecked(next)\n }\n onChange?.({\n target: {checked: next, name, value},\n } as unknown as React.ChangeEvent<HTMLInputElement>)\n }, [disabled, isChecked, isControlled, onChange, name, value])\n\n if (isNative) {\n return (\n <html.button\n type=\"button\"\n onClick={handlePress}\n disabled={disabled}\n role=\"checkbox\"\n aria-checked={isChecked}\n aria-label={!children ? ariaLabel : undefined}\n style={[\n styles.root,\n styles.nativeFlex,\n styles.nativeButton,\n disabled && styles.rootDisabled,\n ]}\n >\n <html.div\n style={[\n styles.box,\n styles.nativeFlex,\n isChecked ? styles.boxChecked : styles.boxUnchecked,\n ]}\n >\n {/* CSS-border checkmark (rotated right+bottom borders) — no SVG, no\n react-native-svg dep, so nothing is added to the web bundle. */}\n <html.div\n style={[styles.checkmark, isChecked ? styles.checkmarkVisible : styles.checkmarkHidden]}\n />\n </html.div>\n {children && <html.span style={styles.labelText}>{children}</html.span>}\n </html.button>\n )\n }\n\n return (\n <html.label style={[styles.root, disabled && styles.rootDisabled]}>\n <html.input\n type=\"checkbox\"\n name={name}\n value={value}\n checked={isControlled ? controlledChecked : undefined}\n defaultChecked={!isControlled ? defaultChecked : undefined}\n disabled={disabled}\n aria-label={!children ? ariaLabel : undefined}\n onChange={handleChange}\n style={[visuallyHidden.base, styles.input]}\n />\n <html.span\n style={[styles.box, isChecked ? styles.boxChecked : styles.boxUnchecked]}\n aria-hidden\n >\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n style={{opacity: isChecked ? 1 : 0}}\n >\n <polyline\n points=\"2.5 6 5 8.5 9.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import {useState, useCallback} from 'react'\n\nexport function useControllableValue<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void,\n) {\n const [internal, setInternal] = useState(defaultValue)\n const value = controlledValue !== undefined ? controlledValue : internal\n const setValue = useCallback(\n (v: T) => {\n if (controlledValue === undefined) setInternal(v)\n onChange?.(v)\n },\n [controlledValue, onChange],\n )\n return [value, setValue] as const\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n})\n","import {createContext, useContext} from 'react'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\n\ninterface FieldContextValue {\n controlId: string\n /** id of the Field.Label — what a GROUP control points `aria-labelledby` at. */\n labelId: string\n /** The control is a group (ToggleGroup, CheckboxGroup, RadioGroup, a set of\n * checkboxes): the label names the group instead of pointing `for` at one\n * input, which a group is not. */\n group?: boolean\n descriptionId: string\n errorId: string\n invalid: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n field?: {\n value: unknown\n onChange: (...event: unknown[]) => void\n onBlur: () => void\n ref: React.RefCallback<unknown>\n name: string\n }\n errorMessage?: string\n}\n\nexport type {FieldContextValue}\n\nexport const FieldContext = createContext<FieldContextValue | null>(null)\n\nexport function useFieldContext() {\n return useContext(FieldContext)\n}\n\ninterface GroupLabelling {\n 'aria-label'?: string\n 'aria-labelledby'?: string\n}\n\n/** The accessible-name wiring for a group control: its own `aria-label` /\n * `aria-labelledby` when given, else the enclosing Field's label and its\n * description / error. Outside a Field with neither, the group is unnamed —\n * pass one. */\nexport function useFieldGroupLabelling(own: GroupLabelling) {\n const ctx = useFieldContext()\n const describedBy = ctx ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() : ''\n return {\n 'aria-label': own['aria-label'],\n 'aria-labelledby': own['aria-labelledby'] ?? (own['aria-label'] ? undefined : ctx?.labelId),\n 'aria-describedby': describedBy || undefined,\n }\n}\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {Checkbox} from '../Checkbox/Checkbox'\nimport {styles} from './styles.css'\nimport {useFieldGroupLabelling} from '../Field/FieldContext'\n\n// --- Context ---\n\ninterface CheckboxGroupContextValue {\n value: string[]\n onToggle: (itemValue: string, checked: boolean) => void\n disabled: boolean\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null)\n\nfunction useCheckboxGroup() {\n const ctx = useContext(CheckboxGroupContext)\n if (!ctx) {\n throw new Error('CheckboxGroup.Item must be used within CheckboxGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (value: string[]) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n /** Accessible name when the group is not inside a Field.Root (inside one,\n * the Field.Label names it). */\n 'aria-label'?: string\n /** id of the element that names the group, when not inside a Field.Root. */\n 'aria-labelledby'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n ...labelling\n}: RootProps) {\n const a11y = useFieldGroupLabelling(labelling)\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onToggle = useCallback(\n (itemValue: string, checked: boolean) => {\n if (disabled) return\n const next = checked ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n setValue(next)\n },\n [disabled, value, setValue],\n )\n\n return (\n <CheckboxGroupContext.Provider value={{value, onToggle, disabled}}>\n <html.div\n role=\"group\"\n aria-orientation={orientation}\n {...a11y}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </CheckboxGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onToggle, disabled: groupDisabled} = useCheckboxGroup()\n const isChecked = groupValue.includes(value)\n const isDisabled = groupDisabled || itemDisabled\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onToggle(value, e.target.checked)\n },\n [value, onToggle],\n )\n\n return (\n <Checkbox value={value} checked={isChecked} disabled={isDisabled} onChange={handleChange}>\n {children}\n </Checkbox>\n )\n}\n\n// inside a Field.Root, the label names this group (see Field's `group`)\nRoot.isFieldGroup = true as const\n\nexport const CheckboxGroup = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n width: sizes.swatchW,\n height: sizes.swatchH,\n padding: microSpacing.px2,\n backgroundColor: colors.bg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: borders.focusOffsetSm,\n },\n invalid: {\n borderColor: colors.error,\n },\n disabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ninterface ColorInputProps {\n /** Hex color, controlled (e.g. \"#cfc8ba\"). */\n value?: string\n defaultValue?: string\n name?: string\n /** Explicit id — overrides the Field-context controlId when set. */\n id?: string\n disabled?: boolean\n required?: boolean\n /** Accessible name when there is no associated <Field.Label>. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLInputElement>\n}\n\n/**\n * A styled native `<input type=\"color\">` swatch. Mirrors <Input>'s native\n * surface (value/defaultValue/name/onChange/ref/disabled/required) and adopts\n * the parent <Field.Root> context (controlId for label association, value/\n * onChange when bound to a Form, invalid border, disabled) — so it drops into a\n * <Field> exactly like <Input>. The text <Input> can't render type=color, hence\n * a dedicated leaf.\n */\nexport function ColorInput({\n value,\n defaultValue,\n name,\n id,\n disabled,\n required,\n 'aria-label': ariaLabel,\n onChange,\n onBlur,\n ref,\n}: ColorInputProps) {\n const ctx = useFieldContext()\n const fieldCtx = ctx?.field\n\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n\n return (\n <html.input\n type=\"color\"\n id={id ?? ctx?.controlId}\n name={effectiveName}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n required={required}\n aria-label={ariaLabel}\n aria-invalid={ctx?.invalid || undefined}\n aria-describedby={\n ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() || undefined\n : undefined\n }\n onChange={effectiveOnChange as React.ComponentProps<typeof html.input>['onChange']}\n onBlur={effectiveOnBlur as React.ComponentProps<typeof html.input>['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[styles.base, ctx?.invalid && styles.invalid, effectiveDisabled && styles.disabled]}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: colors.scrim,\n zIndex: layers.overlay,\n // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (centering container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: layers.modal,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.lg,\n // Allow clicking backdrop through viewport when clicking outside popup\n pointerEvents: 'none',\n },\n\n // --- Popup ---\n popup: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n borderRadius: radii.lg,\n boxShadow: shadows.lg,\n width: '100%',\n maxHeight: '85vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n // Focused only as the fallback when it holds nothing focusable.\n outlineStyle: 'none',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n popupOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n to: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n popupClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n to: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationMinimal: {animationDuration: duration.minimal},\n closeDurationQuick: {animationDuration: duration.quick},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBrisk: {animationDuration: duration.brisk},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Sizes ---\n sm: {maxWidth: sizes.dialogSm},\n md: {maxWidth: sizes.dialogMd},\n lg: {maxWidth: sizes.dialogLg},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButton,\n height: sizes.iconButton,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper (for Trigger / Close children) ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n\n // --- Reduced motion ---\n reducedMotion: {\n animationDuration: duration.minimal,\n },\n})\n","import {createContext, useContext} from 'react'\n\n/**\n * True inside a Dialog or Drawer. A Popover reads it to pick its layer: inside\n * a modal it must clear that modal (`layers.popover`); outside one it stays at\n * `layers.floating`, so a modal opened later, even from inside the Popover,\n * covers it.\n *\n * holds-until: a Dialog opened from a Popover that itself sits inside a Dialog\n * still renders under that Popover (1000/1001 < 1040). It is fixed when a\n * nested Dialog lifts its layer above its opener, or when the parent Popover\n * closes on a nested modal opening; no consumer needs it yet.\n */\nexport const ModalContext = createContext(false)\n\n/**\n * True inside a Dialog or Drawer, false outside. A floating surface that is not\n * a Duro Popover picks its layer with it, the way a Popover does:\n * `useInModal() ? layers.popover : layers.floating`, and for one that must\n * cover another floating surface (a link editor over a format bar)\n * `useInModal() ? layers.popoverRaised : layers.floatingRaised`.\n */\nexport function useInModal(): boolean {\n return useContext(ModalContext)\n}\n","import {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {ModalContext} from '../../shared/ModalContext'\nimport {devWarnOnce} from '../../shared/devWarnOnce'\n\n// --- Types ---\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nexport type DialogSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n minimal: styles.closeDurationMinimal,\n quick: styles.closeDurationQuick,\n fast: styles.closeDurationFast,\n brisk: styles.closeDurationBrisk,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DialogContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n dismissable: boolean\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n descriptionId: string\n popupRef: RefObject<HTMLDivElement | null>\n /** Dialog.Close parts currently rendered (for the closeOnEscape dev warning). */\n registerClose: () => () => void\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null)\n\nfunction useDialog() {\n const ctx = useContext(DialogContext)\n if (!ctx) throw new Error('Dialog compound components must be used within Dialog.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when dialog open state changes */\n onOpenChange?: (open: boolean) => void\n /** Whether clicking the backdrop closes the dialog. Default: true */\n dismissable?: boolean\n /**\n * Whether Escape closes the dialog. Default: true, also when `dismissable`\n * is false. Turning it off leaves the keyboard no way out but a\n * Dialog.Close, so render one.\n */\n closeOnEscape?: boolean\n /** Element to focus on open. Default: the first focusable element, else the dialog itself. */\n initialFocus?: RefObject<HTMLElement | null>\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n dismissable = true,\n closeOnEscape = true,\n initialFocus,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const popupRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n // If controlled open goes false externally, trigger close animation\n useEffect(() => {\n if (isControlled && !controlledOpen && !closing) {\n // Already closed, nothing to animate\n }\n }, [isControlled, controlledOpen, closing])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key. A layer inside the dialog (a Menu, a Select) that\n // already handled it marks the event, and the dialog stays open.\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!closeOnEscape) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Escape' || e.defaultPrevented) return\n e.stopPropagation()\n requestClose()\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, closeOnEscape, requestClose])\n\n // Focus: into the dialog on open (initialFocus, else the first focusable\n // element, else the dialog itself), back to what had it on close. The\n // Portal is a descendant, so its popup is mounted when this effect runs.\n const closeCountRef = useRef(0)\n const registerClose = useCallback(() => {\n closeCountRef.current += 1\n return () => {\n closeCountRef.current -= 1\n }\n }, [])\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const wasOpenRef = useRef(false)\n useEffect(() => {\n if (isOpen && !wasOpenRef.current) {\n previousFocusRef.current = document.activeElement as HTMLElement | null\n const popup = popupRef.current\n if (popup) {\n const target = initialFocus?.current ?? popup.querySelector<HTMLElement>(FOCUSABLE) ?? popup\n target.focus({preventScroll: true})\n }\n if (!closeOnEscape && closeCountRef.current === 0) {\n devWarnOnce(\n 'Dialog',\n 'no-escape-no-close',\n 'Dialog.Root has closeOnEscape={false} and no Dialog.Close: a keyboard user cannot leave this dialog. Render a Dialog.Close, or keep Escape.',\n )\n }\n } else if (!isOpen && !closing && wasOpenRef.current) {\n const target = previousFocusRef.current\n previousFocusRef.current = null\n if (target?.isConnected) target.focus({preventScroll: true})\n }\n wasOpenRef.current = isOpen || closing\n }, [isOpen, closing, initialFocus, closeOnEscape])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DialogContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n dismissable,\n requestOpen,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n registerClose,\n }}\n >\n {children}\n </DialogContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {requestOpen} = useDialog()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal (renders backdrop + viewport + popup) ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DialogSize\n}\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n dismissable,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n } = useDialog()\n const mount = usePortalMount()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport (centering container, pointer-events: none) */}\n <html.div style={styles.viewport}>\n <html.div\n ref={popupRef}\n role=\"dialog\"\n aria-modal={true}\n tabIndex={-1}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.popup,\n styles[size],\n closing && styles.popupClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.popupOpen,\n ]}\n >\n <ModalContext.Provider value={true}>\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </ModalContext.Provider>\n </html.div>\n </html.div>\n </>\n )\n\n // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDialog()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDialog()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose, registerClose} = useDialog()\n useEffect(() => registerClose(), [registerClose])\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Dialog = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {createContext, useContext} from 'react'\n\ninterface InputGroupContextValue {\n inGroup: boolean\n}\n\nexport const InputGroupContext = createContext<InputGroupContextValue | null>(null)\n\nexport function useInputGroupContext() {\n return useContext(InputGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffsetSm,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n // Direction OutlineOnHover (docs/mockups/input-ghost/OutlineOnHover.dc.html):\n // reads as text at rest; hover draws the field's hairline border, focus\n // turns it accent and adds the ring. For inline edit with a visible label.\n ghost: {\n backgroundColor: 'transparent',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n // The text lines up with its label above.\n marginLeft: `calc(-1 * ${spacing.sm})`,\n borderColor: {\n default: 'transparent',\n ':hover': colors.border,\n ':focus': colors.accent,\n },\n },\n ghostError: {\n backgroundColor: colors.errorBg,\n borderColor: {\n default: colors.errorBorder,\n ':focus': colors.error,\n },\n },\n ghostDisabled: {\n color: colors.textMuted,\n cursor: 'not-allowed',\n borderColor: 'transparent',\n },\n inGroup: {\n borderWidth: 0,\n borderRadius: 0,\n outlineWidth: 0,\n },\n // orthogonal to variant (default/error) — composes on top so a mono field\n // still shows its error border. For slugs, identifiers, hashes.\n mono: {\n fontFamily: typography.fontFamilyMono,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {useInputGroupContext} from '../InputGroup/InputGroupContext'\nimport {styles} from './styles.css'\n\ntype StrictInputProps = React.ComponentProps<typeof html.input>\nexport type InputType = NonNullable<StrictInputProps['type']>\n\nexport type InputVariant = 'default' | 'error' | 'ghost'\n\ninterface InputProps {\n /**\n * `ghost` reads as text until hovered or focused — only for inline edit\n * where a visible label names the field (Field.Label). It shows the error\n * state when the Field is invalid.\n */\n variant?: InputVariant\n /** Orthogonal to variant — `mono` keeps the error border but uses the\n * monospace family (slugs, identifiers, hashes). */\n font?: 'mono'\n type?: InputType\n /** Explicit id — overrides the Field-context controlId when set (e.g. a\n * control used outside a Field that still needs a stable id). */\n id?: string\n name?: string\n placeholder?: string\n required?: boolean\n readOnly?: boolean\n minLength?: number\n maxLength?: number\n /** Numeric/range hints — forwarded to the native input (date/number/etc). */\n min?: string | number\n max?: string | number\n step?: string | number\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n /** id of a <datalist> for native typeahead. */\n list?: string\n pattern?: string\n autoComplete?:\n | 'on'\n | 'off'\n | 'email'\n | 'username'\n | 'current-password'\n | 'new-password'\n | 'name'\n | 'tel'\n | 'url'\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n /** Accessible name when there's no associated <Field.Label>. */\n 'aria-label'?: string\n /** Extra describedby ids (merged with the Field context's, if any). */\n 'aria-describedby'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void\n /** Keyboard handlers — e.g. Enter to commit, Escape to cancel, arrow-key\n * navigation of a list driven by this field. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void\n onKeyUp?: (e: React.KeyboardEvent<HTMLInputElement>) => void\n ref?: React.Ref<HTMLInputElement>\n}\n\nexport function Input({\n variant = 'default',\n font,\n type = 'text',\n id,\n name,\n placeholder,\n required,\n readOnly,\n minLength,\n maxLength,\n min,\n max,\n step,\n inputMode,\n list,\n pattern,\n autoComplete,\n value,\n defaultValue,\n disabled,\n autoFocus,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedby,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n ref,\n}: InputProps) {\n const ctx = useFieldContext()\n const groupCtx = useInputGroupContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const invalid = Boolean(ctx?.invalid) || variant === 'error'\n const ghost = variant === 'ghost'\n const effectiveVariant = ghost ? 'ghost' : ctx?.invalid ? 'error' : variant\n // Field context owns describedby (description + error); fall back to the\n // explicit prop only when standalone.\n const describedBy = ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim()\n : ariaDescribedby\n\n // react-strict-dom omits some web-only props from its types, but the\n // underlying DOM element supports them. Type-assert to pass them through.\n const extraProps: Record<string, unknown> = {}\n if (pattern !== undefined) extraProps.pattern = pattern\n if (autoFocus) extraProps.autoFocus = true\n if (readOnly) extraProps.readOnly = true\n if (maxLength !== undefined) extraProps.maxLength = maxLength\n if (min !== undefined) extraProps.min = min\n if (max !== undefined) extraProps.max = max\n if (step !== undefined) extraProps.step = step\n if (inputMode !== undefined) extraProps.inputMode = inputMode\n if (list !== undefined) extraProps.list = list\n if (ariaLabel !== undefined) extraProps['aria-label'] = ariaLabel\n\n return (\n <html.input\n id={id ?? ctx?.controlId}\n type={type}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n minLength={minLength}\n autoComplete={autoComplete}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={describedBy || undefined}\n aria-invalid={invalid || undefined}\n onChange={effectiveOnChange as StrictInputProps['onChange']}\n onBlur={effectiveOnBlur as StrictInputProps['onBlur']}\n onFocus={onFocus as StrictInputProps['onFocus']}\n onKeyDown={onKeyDown as StrictInputProps['onKeyDown']}\n onKeyUp={onKeyUp as StrictInputProps['onKeyUp']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[\n styles.base,\n styles[effectiveVariant],\n ghost && invalid && styles.ghostError,\n ghost && effectiveDisabled && styles.ghostDisabled,\n font === 'mono' && styles.mono,\n groupCtx?.inGroup && styles.inGroup,\n ]}\n {...extraProps}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n },\n rootSide: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.md,\n },\n label: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n labelSide: {\n minWidth: sizes.labelMinW,\n paddingTop: spacing.sm,\n flexShrink: 0,\n },\n description: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n error: {\n fontSize: typography.fontSizeXs,\n color: colors.errorText,\n },\n fieldContent: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n flex: 1,\n minWidth: 0,\n },\n necessityIcon: {\n color: colors.error,\n },\n necessityLabel: {\n color: colors.textMuted,\n fontWeight: typography.fontWeightNormal,\n fontSize: typography.fontSizeXs,\n },\n})\n","import {type ReactNode, Children, isValidElement, useId, useMemo} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useFormContext as useRHFFormContext, useController} from 'react-hook-form'\nimport {FieldContext, useFieldContext} from './FieldContext'\nimport {useFormContext} from '../Form/FormContext'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\nimport {styles} from './styles.css'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n /** The control is a group of controls rather than one input — the label\n * then names the group (`aria-labelledby`) instead of pointing `for` at an\n * input. Detected automatically when a direct child is a ToggleGroup,\n * CheckboxGroup.Root or RadioGroup.Root; set it for any other group. */\n group?: boolean\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}\n\n/** A group control marks itself so a Field can tell it holds a group. */\nexport type FieldGroupComponent = {isFieldGroup?: true}\n\nfunction holdsGroup(children: ReactNode): boolean {\n let found = false\n Children.forEach(children, (child) => {\n if (isValidElement(child) && (child.type as FieldGroupComponent).isFieldGroup) found = true\n })\n return found\n}\n\nfunction Root({name, group, ...props}: RootProps) {\n const formCtx = useFormContext()\n const isGroup = group ?? holdsGroup(props.children)\n if (name && formCtx) {\n return <ControlledRoot name={name} formCtx={formCtx} group={isGroup} {...props} />\n }\n return <StaticRoot group={isGroup} {...props} />\n}\n\n// Always calls useController — no conditional hooks\nfunction ControlledRoot({\n name,\n formCtx,\n group,\n invalid: invalidProp = false,\n required,\n disabled,\n labelPosition,\n children,\n}: {\n name: string\n formCtx: NonNullable<ReturnType<typeof useFormContext>>\n group: boolean\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const {control} = useRHFFormContext()\n const {field, fieldState} = useController({control, name})\n const invalid = invalidProp || !!fieldState.error\n\n const effectiveDisabled = disabled ?? formCtx.disabled\n const effectiveLabelPosition = labelPosition ?? formCtx.labelPosition\n const effectiveNecessityIndicator = formCtx.necessityIndicator\n\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n labelId: `${id}-label`,\n group,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled: effectiveDisabled,\n labelPosition: effectiveLabelPosition,\n necessityIndicator: effectiveNecessityIndicator,\n field: {\n value: field.value,\n onChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n name: field.name,\n },\n errorMessage: fieldState.error?.message,\n }),\n [\n id,\n group,\n invalid,\n required,\n effectiveDisabled,\n effectiveLabelPosition,\n effectiveNecessityIndicator,\n field.value,\n field.onChange,\n field.onBlur,\n field.ref,\n field.name,\n fieldState.error,\n ],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={effectiveLabelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// Current behavior, no RHF dependency\nfunction StaticRoot({\n group,\n invalid = false,\n required,\n disabled,\n labelPosition = 'top',\n children,\n}: {\n group: boolean\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n labelId: `${id}-label`,\n group,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled,\n labelPosition,\n }),\n [id, group, invalid, required, disabled, labelPosition],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={labelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// --- FieldLayout ---\n// When labelPosition is 'side', separates Label from other children\n// and wraps the non-label children in a content column.\nfunction FieldLayout({\n labelPosition,\n children,\n}: {\n labelPosition: LabelPosition\n children: ReactNode\n}) {\n if (labelPosition !== 'side') {\n return <html.div style={styles.root}>{children}</html.div>\n }\n\n let labelNode: ReactNode = null\n const rest: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === Label && !labelNode) {\n labelNode = child\n } else {\n rest.push(child)\n }\n })\n\n return (\n <html.div style={styles.rootSide}>\n {labelNode}\n <html.div style={styles.fieldContent}>{rest}</html.div>\n </html.div>\n )\n}\n\n// --- Label ---\ninterface LabelProps {\n children: ReactNode\n}\n\nfunction Label({children}: LabelProps) {\n const ctx = useFieldContext()\n const isSide = ctx?.labelPosition === 'side'\n const indicator = ctx?.necessityIndicator\n const content = (\n <>\n {children}\n {indicator === 'icon' && ctx?.required && (\n <html.span style={styles.necessityIcon} aria-hidden={true}>\n {' *'}\n </html.span>\n )}\n {indicator === 'label' && (\n <html.span style={styles.necessityLabel}>\n {ctx?.required ? ' (required)' : ' (optional)'}\n </html.span>\n )}\n </>\n )\n\n // A group is not a labelable element: `for` would point at nothing. The\n // group names itself from this id instead (aria-labelledby).\n if (ctx?.group) {\n return (\n <html.span id={ctx.labelId} style={[styles.label, isSide && styles.labelSide]}>\n {content}\n </html.span>\n )\n }\n return (\n <html.label\n id={ctx?.labelId}\n for={ctx?.controlId}\n style={[styles.label, isSide && styles.labelSide]}\n >\n {content}\n </html.label>\n )\n}\n\n// --- Description ---\ninterface DescriptionProps {\n children: ReactNode\n}\n\nfunction Description({children}: DescriptionProps) {\n const ctx = useFieldContext()\n return (\n <html.span id={ctx?.descriptionId} style={styles.description}>\n {children}\n </html.span>\n )\n}\n\n// --- Error ---\ninterface ErrorProps {\n children?: ReactNode\n}\n\nfunction Error({children}: ErrorProps) {\n const ctx = useFieldContext()\n const content = children ?? ctx?.errorMessage\n if (!ctx?.invalid && !content) return null\n\n return (\n <html.span id={ctx?.errorId} role=\"alert\" style={styles.error}>\n {content}\n </html.span>\n )\n}\n\nexport const Field = {\n Root,\n Label,\n Description,\n Error,\n}\n","import {type ReactNode, useState} from 'react'\nimport {Dialog, type DialogSize} from '../Dialog/Dialog'\nimport {Button} from '../Button/Button'\nimport {Input} from '../Input/Input'\nimport {Field} from '../Field/Field'\n\ninterface ConfirmDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: ReactNode\n /** Warning / cascade body. */\n children?: ReactNode\n /** When set, the confirm action stays DISABLED until the user types this\n * exact phrase (org name, slug…). The typed value is a client-side gate\n * only — it is never submitted. */\n confirmPhrase?: string\n /** Prompt shown above the phrase input. */\n promptLabel?: ReactNode\n cancelLabel?: ReactNode\n /**\n * App-owned confirm control. Receives whether the phrase gate is satisfied,\n * so the app can render its OWN <Button type=\"submit\"> INSIDE its form\n * (e.g. a react-router fetcher.Form with hidden intent fields) — the DS does\n * NOT own the submit, avoiding a fight with the app's form flow. Takes\n * precedence over onConfirm/confirmLabel.\n */\n confirmSlot?: (gate: {satisfied: boolean}) => ReactNode\n /** Simple case (no app form): the DS renders a danger Button calling this. */\n onConfirm?: () => void\n confirmLabel?: ReactNode\n size?: DialogSize\n}\n\n/**\n * Generic destructive-confirmation dialog: layout + an optional type-a-phrase\n * gate. The DS owns the shell and the gate; the APP owns the actual submit\n * (via `confirmSlot`) so it composes with form libraries instead of forcing a\n * callback. Domain warning text goes in `children`.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n children,\n confirmPhrase,\n promptLabel,\n cancelLabel = 'Cancel',\n confirmSlot,\n onConfirm,\n confirmLabel = 'Confirm',\n size = 'sm',\n}: ConfirmDialogProps) {\n const [typed, setTyped] = useState('')\n const satisfied = !confirmPhrase || typed.trim() === confirmPhrase\n\n const handleOpenChange = (next: boolean) => {\n if (!next) setTyped('') // reset the gate when the dialog closes\n onOpenChange(next)\n }\n\n return (\n <Dialog.Root open={open} onOpenChange={handleOpenChange}>\n <Dialog.Portal size={size}>\n <Dialog.Header>\n <Dialog.Title>{title}</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n {children}\n {confirmPhrase ? (\n <Field.Root>\n {promptLabel ? <Field.Label>{promptLabel}</Field.Label> : null}\n <Input\n font=\"mono\"\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoFocus\n aria-label=\"confirmation phrase\"\n />\n </Field.Root>\n ) : null}\n </Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"secondary\" onClick={() => handleOpenChange(false)}>\n {cancelLabel}\n </Button>\n {confirmSlot ? (\n confirmSlot({satisfied})\n ) : onConfirm ? (\n <Button variant=\"danger\" disabled={!satisfied} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n ) : null}\n </Dialog.Footer>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // The item is the drag handle: no browser panning starts on it, so a touch\n // hold becomes a drag instead of a scroll, and text inside never selects\n // mid-gesture.\n item: {\n touchAction: 'none',\n userSelect: 'none',\n cursor: 'grab',\n transitionProperty: 'opacity',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n itemDisabled: {\n cursor: 'default',\n },\n // The source stays in flow while its ghost travels, so nothing reflows.\n itemLifted: {\n opacity: 0.4,\n cursor: 'grabbing',\n },\n // The keyboard path: one focusable widget per item.\n handle: {\n borderRadius: radii.sm,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n },\n // Picked up by keyboard: the ring stays on even without :focus-visible.\n handlePicked: {\n outlineStyle: 'dashed',\n },\n zone: {\n borderRadius: radii.sm,\n transitionProperty: 'box-shadow, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n listVertical: {\n display: 'flex',\n flexDirection: 'column',\n },\n listHorizontal: {\n display: 'flex',\n flexDirection: 'row',\n },\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n fill: {\n boxSizing: 'border-box',\n width: '100%',\n height: '100%',\n },\n // Every zone shows it can receive while something is in the air; the one\n // under the pointer lights up. Drop-target rings, not focus: keyboard focus\n // stays on outlines, which survive forced-colors mode.\n // Forced-colors mode drops box-shadows and fills; the transparent outline\n // is what it paints instead (in a system colour), so the rings survive.\n zoneReady: {\n boxShadow: shadows.dropReady,\n outlineStyle: 'solid',\n outlineWidth: borders.hairline,\n outlineColor: 'transparent',\n outlineOffset: `calc(-1 * ${borders.hairline})`,\n },\n zoneOver: {\n boxShadow: shadows.dropOver,\n backgroundColor: colors.infoBg,\n outlineStyle: 'solid',\n outlineWidth: borders.strong,\n outlineColor: 'transparent',\n outlineOffset: `calc(-1 * ${borders.strong})`,\n },\n // Refused with a reason: the zone says no in the error tone, the ghost\n // carries the reason.\n zoneRefused: {\n backgroundColor: colors.errorBg,\n outlineStyle: 'dashed',\n outlineWidth: borders.strong,\n outlineColor: colors.errorBorder,\n outlineOffset: `calc(-1 * ${borders.strong})`,\n },\n placeholder: {\n flexShrink: 0,\n },\n ghost: {\n position: 'fixed',\n top: 0,\n left: 0,\n pointerEvents: 'none',\n // Portalled into the ThemeProvider mount, where it must clear a Dialog\n // or Drawer the drag happens in.\n zIndex: layers.popup,\n opacity: 0.9,\n cursor: 'grabbing',\n },\n // The lifted look: a slight tilt, dropped under reduced motion.\n ghostTilt: {\n transform: {\n default: 'rotate(2deg)',\n '@media (prefers-reduced-motion: reduce)': 'none',\n },\n },\n refusal: {\n marginTop: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n borderRadius: radii.xs,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.errorBorder,\n backgroundColor: colors.bgCard,\n color: colors.errorText,\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n boxShadow: shadows.md,\n width: 'max-content',\n maxWidth: '100%',\n },\n ghostSize: (width: number, height: number) => ({\n width,\n minHeight: height,\n }),\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {isNative} from '../../platform'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\n// ---------------------------------------------------------------------------\n// DragDrop — move items between zones, by pointer (mouse, pen and touch\n// through one pointer-event path) or by keyboard.\n//\n// Pointer: a press arms a drag, movement past a small threshold (or, on\n// touch, a short hold) starts it, and release resolves the zone under the\n// pointer. The innermost zone that accepts the item wins\n// (document.elementsFromPoint), so a zone nested in another (a card inside a\n// column) receives its own drops. The dragged item stays in the DOM (faded)\n// while a ghost follows the pointer. Item rects are measured once at pick-up\n// and shifted by how far their scrolling ancestors have scrolled since, so an\n// optional placeholder (renderPlaceholder) never feeds back into the index,\n// and a small hysteresis keeps the index from flickering at a midpoint.\n// Near the edge of a scrolling ancestor (or the window) the drag scrolls it.\n//\n// Keyboard: put a DragDrop.Handle in an Item. Handles are one roving tab\n// stop per zone; Up/Down and Left/Right move focus between them. Space picks\n// the item up, Up/Down move it within its zone, Left/Right move it across\n// zones (in `order`, else DOM order), Space or Enter drops, Escape (or Tab)\n// cancels, and focus returns to the item's handle either way.\n//\n// State lives in an external store read with useSyncExternalStore and\n// per-part selectors: a drag re-renders only the parts whose answer changed\n// (the two items around a moving placeholder, the zones on pick-up and drop),\n// and the ghost is moved by writing its transform, not by rendering.\n//\n// Every announcement (pick, move, drop, cancel, refuse) goes through the\n// Root's live region and the optional `announce` prop, so an app can supply\n// its own catalog strings. A zone can refuse with a reason\n// (`accepts` → `{ok: false, reason}`): the ghost shows it and it is announced.\n//\n// WCAG 2.5.7 still applies to pointer-only consumers: an Item without a\n// Handle has no keyboard path, so keep a button that does the same thing.\n//\n// Native: react-strict-dom does not route pointer capture on React Native,\n// so Item renders its children without drag behaviour there and the consumer's\n// non-drag path is the only path. Not exported from the native barrel.\n// ---------------------------------------------------------------------------\n\nexport interface DragDropItemData<T = unknown> {\n readonly id: string\n readonly zone: string\n readonly data: T\n}\n\nexport interface DragDropTarget {\n readonly zone: string\n /** Insertion index among the target zone's items, from the pointer's\n * position along the zone's axis. Excludes the dragged item itself. */\n readonly index: number\n}\n\nexport interface DragDropEvent<T = unknown> {\n readonly item: DragDropItemData<T>\n readonly target: DragDropTarget\n}\n\n/** What a zone's `accepts` answers: `true` takes the item, `false` lets it\n * pass silently (an outer zone may take it), and `{ok: false, reason}`\n * refuses it out loud — the reason is shown on the ghost and announced. */\nexport type DragDropVerdict = boolean | {readonly ok: false; readonly reason: string}\n\nexport interface DragDropRefusal {\n readonly zone: string\n readonly reason: string\n}\n\nexport interface DragDropOverEvent<T = unknown> {\n readonly item: DragDropItemData<T>\n /** Where the item would land now; null over nothing that accepts it. */\n readonly target: DragDropTarget | null\n /** The innermost zone that refused with a reason, when nothing accepted. */\n readonly refused: DragDropRefusal | null\n readonly keyboard: boolean\n}\n\nexport interface DragDropAnnouncement {\n readonly kind: 'pick' | 'move' | 'drop' | 'cancel' | 'refuse'\n /** The item's label. */\n readonly item: string\n /** The zone's label (pick, move, drop, refuse). */\n readonly zone?: string\n /** 1-based position in the zone, counting the item itself. */\n readonly position?: number\n /** How many items the zone holds with the item in it. */\n readonly count?: number\n /** The zone's refusal (refuse). */\n readonly reason?: string\n /** Whether the drag is a keyboard one. */\n readonly keyboard: boolean\n}\n\nexport interface DragDropPlaceholderInfo {\n readonly zone: string\n readonly index: number\n /** The zone's label, e.g. for \"→ In progress\". */\n readonly label: string\n}\n\nexport type DragDropRenderPlaceholder = (info: DragDropPlaceholderInfo) => ReactNode\n\ninterface ZoneRecord {\n el: HTMLElement | null\n orientation: 'horizontal' | 'vertical'\n label: string\n accepts?: (item: DragDropItemData) => DragDropVerdict\n order?: number\n renderPlaceholder?: DragDropRenderPlaceholder\n}\n\ninterface ItemRecord {\n el: HTMLElement | null\n zone: string\n label: string\n data: unknown\n preview: ReactNode\n disabled: boolean\n}\n\ninterface DragSession {\n readonly id: string\n readonly pointerId: number\n /** Event time of the press, for judging the touch hold by timestamps. */\n readonly downAt: number\n readonly startX: number\n readonly startY: number\n readonly offsetX: number\n readonly offsetY: number\n readonly width: number\n readonly height: number\n readonly source: HTMLElement\n active: boolean\n holdTimer: ReturnType<typeof setTimeout> | null\n}\n\n/** The drag as the parts see it. Replaced (never mutated) on every change, so\n * selectors can compare by reference. */\ninterface DragView {\n readonly id: string\n readonly keyboard: boolean\n readonly over: DragDropTarget | null\n readonly refused: DragDropRefusal | null\n /** Each zone's items in DOM order at pick-up, without the dragged one. */\n readonly order: ReadonlyMap<string, readonly string[]>\n}\n\ninterface GhostView {\n readonly preview: ReactNode\n readonly width: number\n readonly height: number\n}\n\ninterface Rect {\n readonly left: number\n readonly top: number\n readonly right: number\n readonly bottom: number\n}\n\ninterface Geometry {\n readonly rect: Rect\n readonly scrollers: readonly Element[]\n}\n\n/** The parts of a keydown the keyboard path reads. */\ninterface KeyLike {\n readonly key: string\n preventDefault(): void\n stopPropagation(): void\n}\n\ninterface LatestProps {\n onDrop: (event: DragDropEvent<unknown>) => void\n onDragOver?: (event: DragDropOverEvent<unknown>) => void\n announce?: (event: DragDropAnnouncement) => string\n renderPlaceholder?: DragDropRenderPlaceholder\n}\n\n/** How far the pointer moves before a press becomes a drag (mouse/pen), so a\n * click stays a click. */\nconst MOVE_THRESHOLD_PX = 6\n/** How long a touch holds still before it becomes a drag. Below this a touch\n * that moves is a scroll, and the browser gets it back via pointercancel. */\nconst TOUCH_HOLD_MS = 180\n/** How far past an item's midpoint the pointer must go before the insertion\n * index changes, so it does not flicker on the line. */\nconst HYSTERESIS_PX = 8\n/** Auto-scroll: the band along a scroller's edge that scrolls it, and the\n * largest step per frame (reached at the very edge). */\nconst EDGE_PX = 48\nconst MAX_STEP_PX = 16\n\nconst domOrder = (a: Element, b: Element) =>\n a === b ? 0 : a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n\nconst verdictOf = (v: DragDropVerdict | undefined): {ok: boolean; reason?: string} =>\n v === undefined || v === true\n ? {ok: true}\n : v === false\n ? {ok: false}\n : {ok: false, reason: v.reason}\n\nconst sameTarget = (a: DragDropTarget | null, b: DragDropTarget | null) =>\n a === b || (a !== null && b !== null && a.zone === b.zone && a.index === b.index)\n\nconst sameRefusal = (a: DragDropRefusal | null, b: DragDropRefusal | null) =>\n a === b || (a !== null && b !== null && a.zone === b.zone && a.reason === b.reason)\n\nfunction defaultAnnouncement(e: DragDropAnnouncement): string {\n const where = e.position !== undefined ? `${e.zone}, position ${e.position} of ${e.count}` : ''\n switch (e.kind) {\n case 'pick':\n return e.keyboard\n ? `Picked up ${e.item}. ${where}. Arrow keys move, Space drops, Escape cancels.`\n : `Picked up ${e.item}.`\n case 'move':\n return where\n case 'drop':\n return e.keyboard\n ? `Dropped ${e.item} in ${where}.`\n : `Dropped ${e.item} in ${e.zone ?? 'place'}.`\n case 'cancel':\n return `Cancelled moving ${e.item}.`\n case 'refuse':\n return `${e.zone}: ${e.reason}`\n }\n}\n\n// ---------------------------------------------------------------------------\n// Engine: the registry (stable), the drag store (subscribed to), and the\n// pointer/keyboard state machine. One per Root, created once.\n// ---------------------------------------------------------------------------\n\n/** setPointerCapture / releasePointerCapture throw these when there is no\n * active pointer to capture (a synthetic event, a pointer already gone) or\n * the capture is already released. Anything else is a real error. */\nconst isPointerCaptureMiss = (err: unknown): boolean =>\n err instanceof DOMException && (err.name === 'NotFoundError' || err.name === 'InvalidStateError')\n\nclass Engine {\n props: LatestProps = {onDrop: () => {}}\n readonly zones = new Map<string, ZoneRecord>()\n readonly items = new Map<string, ItemRecord>()\n readonly handles = new Map<string, HTMLElement>()\n\n drag: DragView | null = null\n ghost: GhostView | null = null\n ghostEl: HTMLElement | null = null\n refusalText: string | null = null\n announcement = ''\n focusRequest: string | null = null\n\n /** Roving tab stop per zone: the handle last focused there. */\n private readonly stops = new Map<string, string>()\n /** The first handle of each zone in DOM order, the stop until one is focused. */\n private firstStops = new Map<string, string>()\n private stopsDirty = false\n\n private session: DragSession | null = null\n private frame: number | null = null\n private pointer = {x: 0, y: 0}\n private geometry = new Map<string, Geometry>()\n private baseline = new Map<Element, {left: number; top: number}>()\n private scrollable = new Map<Element, boolean>()\n private readonly listeners = new Set<() => void>()\n\n // -- store ----------------------------------------------------------------\n\n subscribe = (listener: () => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n private emit() {\n for (const l of this.listeners) l()\n }\n\n tabStop(zone: string): string | undefined {\n const explicit = this.stops.get(zone)\n if (explicit && this.handles.has(explicit) && this.items.get(explicit)?.zone === zone) {\n return explicit\n }\n return this.firstStops.get(zone)\n }\n\n // -- registry -------------------------------------------------------------\n\n registerZone(id: string, record: ZoneRecord) {\n this.zones.set(id, record)\n return () => {\n if (this.zones.get(id) === record) this.zones.delete(id)\n }\n }\n\n registerItem(id: string, record: ItemRecord) {\n this.items.set(id, record)\n return () => {\n if (this.items.get(id) === record) this.items.delete(id)\n }\n }\n\n registerHandle(id: string, el: HTMLElement) {\n this.handles.set(id, el)\n this.recomputeStops()\n return () => {\n if (this.handles.get(id) === el) this.handles.delete(id)\n this.recomputeStops()\n }\n }\n\n /** Batched: a board mounting 300 handles recomputes once. */\n private recomputeStops() {\n if (this.stopsDirty) return\n this.stopsDirty = true\n queueMicrotask(() => {\n this.stopsDirty = false\n const next = new Map<string, string>()\n const firstEl = new Map<string, HTMLElement>()\n for (const [id, el] of this.handles) {\n const zone = this.items.get(id)?.zone\n if (zone === undefined) continue\n const cur = firstEl.get(zone)\n if (!cur || domOrder(el, cur) < 0) {\n firstEl.set(zone, el)\n next.set(zone, id)\n }\n }\n this.firstStops = next\n this.emit()\n })\n }\n\n private handlesIn(zone: string): string[] {\n const ids: string[] = []\n for (const [id] of this.handles) if (this.items.get(id)?.zone === zone) ids.push(id)\n return ids.sort((a, b) => domOrder(this.handles.get(a)!, this.handles.get(b)!))\n }\n\n /** Zones in keyboard order: by `order`, then DOM order. */\n private zoneSequence(): string[] {\n const list = [...this.zones].filter(([, z]) => z.el)\n list.sort(\n ([, a], [, b]) =>\n (a.order ?? Number.POSITIVE_INFINITY) - (b.order ?? Number.POSITIVE_INFINITY) ||\n domOrder(a.el!, b.el!),\n )\n return list.map(([id]) => id)\n }\n\n // -- announcements ----------------------------------------------------------\n\n private say(event: DragDropAnnouncement) {\n const announce = this.props.announce\n this.announcement = announce ? announce(event) : defaultAnnouncement(event)\n this.emit()\n }\n\n private labelOf(itemId: string) {\n return this.items.get(itemId)?.label ?? itemId\n }\n\n private zoneLabel(zone: string) {\n return this.zones.get(zone)?.label ?? zone\n }\n\n private placeAt(target: DragDropTarget) {\n const others = this.drag?.order.get(target.zone)?.length ?? 0\n return {zone: this.zoneLabel(target.zone), position: target.index + 1, count: others + 1}\n }\n\n private payload(itemId: string): DragDropItemData | null {\n const item = this.items.get(itemId)\n return item ? {id: itemId, zone: item.zone, data: item.data} : null\n }\n\n // -- measuring ------------------------------------------------------------\n\n private captureOrder(exclude: string): Map<string, string[]> {\n const byZone = new Map<string, string[]>()\n for (const [id, item] of this.items) {\n if (id === exclude || !item.el) continue\n const list = byZone.get(item.zone)\n if (list) list.push(id)\n else byZone.set(item.zone, [id])\n }\n for (const list of byZone.values()) {\n list.sort((a, b) => domOrder(this.items.get(a)!.el!, this.items.get(b)!.el!))\n }\n return byZone\n }\n\n private isScroller(el: Element): boolean {\n const known = this.scrollable.get(el)\n if (known !== undefined) return known\n const s = getComputedStyle(el)\n const scrolls = (o: string) => o === 'auto' || o === 'scroll' || o === 'overlay'\n const yes =\n (scrolls(s.overflowY) && el.scrollHeight > el.clientHeight) ||\n (scrolls(s.overflowX) && el.scrollWidth > el.clientWidth)\n this.scrollable.set(el, yes)\n return yes\n }\n\n /** Every item's rect, once, with the scrollers it moves with. Later reads\n * shift the rect by how far those have scrolled since, so a placeholder\n * inserted mid-drag never moves the geometry the index is read from. */\n private captureGeometry() {\n this.geometry = new Map()\n this.baseline = new Map()\n this.scrollable = new Map()\n const root = document.scrollingElement\n const chains = new Map<Element, Element[]>()\n const chain = (el: Element | null): Element[] => {\n if (!el || el === document.body || el === document.documentElement) return root ? [root] : []\n const known = chains.get(el)\n if (known) return known\n const up = chain(el.parentElement)\n const own = this.isScroller(el) ? [el, ...up] : up\n chains.set(el, own)\n return own\n }\n for (const [id, item] of this.items) {\n if (!item.el) continue\n const r = item.el.getBoundingClientRect()\n const scrollers = chain(item.el.parentElement)\n for (const s of scrollers) {\n if (!this.baseline.has(s)) this.baseline.set(s, {left: s.scrollLeft, top: s.scrollTop})\n }\n this.geometry.set(id, {\n rect: {left: r.left, top: r.top, right: r.right, bottom: r.bottom},\n scrollers,\n })\n }\n }\n\n private rectOf(id: string): Rect | null {\n const g = this.geometry.get(id)\n if (!g) return null\n let dx = 0\n let dy = 0\n for (const s of g.scrollers) {\n const b = this.baseline.get(s)\n if (!b) continue\n dx += s.scrollLeft - b.left\n dy += s.scrollTop - b.top\n }\n return {\n left: g.rect.left - dx,\n right: g.rect.right - dx,\n top: g.rect.top - dy,\n bottom: g.rect.bottom - dy,\n }\n }\n\n /** Where the dragged item would land at (x, y): the innermost zone that\n * accepts it, and the index from the pick-up geometry, with hysteresis\n * against the current index. */\n private locate(\n itemId: string,\n x: number,\n y: number,\n ): {target: DragDropTarget | null; refused: DragDropRefusal | null} {\n const payload = this.payload(itemId)\n const d = this.drag\n if (!payload || !d) return {target: null, refused: null}\n let refused: DragDropRefusal | null = null\n const seen = new Set<string>()\n const zoneByEl = new Map<Element, string>()\n for (const [id, z] of this.zones) if (z.el) zoneByEl.set(z.el, id)\n for (const el of document.elementsFromPoint(x, y)) {\n const zoneId = zoneByEl.get(el)\n if (zoneId === undefined || seen.has(zoneId)) continue\n seen.add(zoneId)\n const zone = this.zones.get(zoneId)!\n const verdict = verdictOf(zone.accepts?.(payload))\n if (!verdict.ok) {\n if (verdict.reason !== undefined && !refused)\n refused = {zone: zoneId, reason: verdict.reason}\n continue\n }\n const horizontal = zone.orientation === 'horizontal'\n const pos = horizontal ? x : y\n const prev = d.over && d.over.zone === zoneId ? d.over.index : null\n const others = d.order.get(zoneId) ?? []\n let index = 0\n others.forEach((otherId, k) => {\n const r = this.rectOf(otherId)\n if (!r) return\n const mid = horizontal ? (r.left + r.right) / 2 : (r.top + r.bottom) / 2\n const bias = prev === null ? 0 : k < prev ? -HYSTERESIS_PX : HYSTERESIS_PX\n if (pos > mid + bias) index += 1\n })\n return {target: {zone: zoneId, index}, refused: null}\n }\n return {target: null, refused}\n }\n\n /** Point the drag at a new target/refusal; tells listeners only on change. */\n private retarget(target: DragDropTarget | null, refused: DragDropRefusal | null) {\n const d = this.drag\n if (!d) return\n if (sameTarget(d.over, target) && sameRefusal(d.refused, refused)) return\n const wasRefused = d.refused\n this.drag = {...d, over: target, refused}\n this.refusalText = refused?.reason ?? null\n this.paintGhost()\n this.emit()\n const payload = this.payload(d.id)\n if (payload) this.props.onDragOver?.({item: payload, target, refused, keyboard: d.keyboard})\n if (refused && !sameRefusal(wasRefused, refused)) {\n this.say({\n kind: 'refuse',\n item: this.labelOf(d.id),\n zone: this.zoneLabel(refused.zone),\n reason: refused.reason,\n keyboard: d.keyboard,\n })\n }\n }\n\n // -- ghost ------------------------------------------------------------------\n\n /** The ghost moves by its transform, written here, so a frame of pointer\n * movement renders nothing. */\n paintGhost() {\n const el = this.ghostEl\n const s = this.session\n if (!el || !s) return\n el.style.transform = `translate3d(${this.pointer.x - s.offsetX}px, ${this.pointer.y - s.offsetY}px, 0)`\n }\n\n // -- auto-scroll --------------------------------------------------------------\n\n /** Scrolls the innermost scroller under the pointer whose edge band it is\n * in and that can still move that way. True when something scrolled. */\n private autoScroll(x: number, y: number): boolean {\n const root = document.scrollingElement\n const chain: Element[] = []\n let el: Element | null = document.elementsFromPoint(x, y)[0] ?? null\n while (el && el !== document.body && el !== document.documentElement) {\n if (this.isScroller(el)) chain.push(el)\n el = el.parentElement\n }\n if (root) chain.push(root)\n const step = (dist: number) =>\n dist < EDGE_PX ? Math.ceil(MAX_STEP_PX * (1 - Math.max(dist, 0) / EDGE_PX)) : 0\n for (const s of chain) {\n const r: Rect =\n s === root\n ? {left: 0, top: 0, right: window.innerWidth, bottom: window.innerHeight}\n : s.getBoundingClientRect()\n const up = step(y - r.top)\n const down = step(r.bottom - y)\n const left = step(x - r.left)\n const right = step(r.right - x)\n const dy = up ? -up : down\n const dx = left ? -left : right\n const canY =\n dy < 0 ? s.scrollTop > 0 : dy > 0 ? s.scrollTop + s.clientHeight < s.scrollHeight : false\n const canX =\n dx < 0 ? s.scrollLeft > 0 : dx > 0 ? s.scrollLeft + s.clientWidth < s.scrollWidth : false\n if (canY || canX) {\n if (canY) s.scrollTop += dy\n if (canX) s.scrollLeft += dx\n return true\n }\n }\n return false\n }\n\n // -- pointer --------------------------------------------------------------\n\n private scheduleFrame() {\n if (this.frame !== null) return\n this.frame = requestAnimationFrame(this.tick)\n }\n\n private tick = () => {\n this.frame = null\n const s = this.session\n if (!s || !s.active) return\n const {x, y} = this.pointer\n this.paintGhost()\n const scrolled = this.autoScroll(x, y)\n const {target, refused} = this.locate(s.id, x, y)\n this.retarget(target, refused)\n if (scrolled) this.scheduleFrame()\n }\n\n private onScroll = () => {\n if (this.session?.active) this.scheduleFrame()\n }\n\n private activate(s: DragSession, x: number, y: number) {\n s.active = true\n this.pointer = {x, y}\n const item = this.items.get(s.id)\n this.drag = {\n id: s.id,\n keyboard: false,\n over: null,\n refused: null,\n order: this.captureOrder(s.id),\n }\n this.captureGeometry()\n this.ghost = {preview: item?.preview ?? null, width: s.width, height: s.height}\n this.refusalText = null\n document.addEventListener('scroll', this.onScroll, {capture: true, passive: true})\n this.emit()\n this.say({kind: 'pick', item: this.labelOf(s.id), keyboard: false})\n const {target, refused} = this.locate(s.id, x, y)\n this.retarget(target, refused)\n }\n\n begin(id: string, e: React.PointerEvent) {\n if (this.session || this.drag || e.button !== 0) return\n if (this.items.get(id)?.disabled) return\n const source = e.currentTarget as HTMLElement\n const rect = source.getBoundingClientRect()\n const s: DragSession = {\n id,\n pointerId: e.pointerId,\n downAt: e.timeStamp,\n startX: e.clientX,\n startY: e.clientY,\n offsetX: e.clientX - rect.left,\n offsetY: e.clientY - rect.top,\n width: rect.width,\n height: rect.height,\n source,\n active: false,\n holdTimer: null,\n }\n this.session = s\n // Capture keeps the stream on the item if the pointer leaves the window;\n // the document listeners carry the drag either way, so a browser (or a\n // synthetic event) without an active pointer is not an error.\n try {\n source.setPointerCapture(e.pointerId)\n } catch (err) {\n if (!isPointerCaptureMiss(err)) throw err\n }\n if (e.pointerType === 'touch') {\n s.holdTimer = setTimeout(() => {\n s.holdTimer = null\n if (this.session === s && !s.active) this.activate(s, s.startX, s.startY)\n }, TOUCH_HOLD_MS)\n }\n }\n\n /** Ends a pointer drag. `commit` resolves the target from the release\n * point; otherwise the drag is cancelled. The consumer's onDrop runs here,\n * in the event handler, never inside a state updater. */\n private finishPointer(commit: {x: number; y: number} | null) {\n const s = this.session\n if (!s) return\n if (s.holdTimer) clearTimeout(s.holdTimer)\n if (this.frame !== null) cancelAnimationFrame(this.frame)\n this.frame = null\n this.session = null\n try {\n if (s.source.hasPointerCapture(s.pointerId)) s.source.releasePointerCapture(s.pointerId)\n } catch (err) {\n if (!isPointerCaptureMiss(err)) throw err\n }\n if (!s.active) return\n document.removeEventListener('scroll', this.onScroll, {capture: true})\n let target: DragDropTarget | null = null\n if (commit) {\n const found = this.locate(s.id, commit.x, commit.y)\n this.retarget(found.target, found.refused)\n target = this.drag?.over ?? null\n }\n const announcement = target ? this.placeAt(target) : null\n const payload = this.payload(s.id)\n this.drag = null\n this.ghost = null\n this.refusalText = null\n this.emit()\n if (target && payload && announcement) {\n this.props.onDrop({item: payload, target})\n this.say({kind: 'drop', item: this.labelOf(s.id), ...announcement, keyboard: false})\n } else {\n this.say({kind: 'cancel', item: this.labelOf(s.id), keyboard: false})\n }\n }\n\n // Move/up/cancel listen on the document: pointer capture keeps the events\n // flowing to the source element, but a single document listener survives\n // the item re-rendering under the pointer.\n attach() {\n const onMove = (e: PointerEvent) => {\n const s = this.session\n if (!s || e.pointerId !== s.pointerId) return\n if (!s.active) {\n const moved = Math.hypot(e.clientX - s.startX, e.clientY - s.startY)\n if (e.pointerType === 'touch') {\n // The hold is judged by event time, not by the timer having fired:\n // a busy main thread (seen on iOS Safari) can withhold the timer\n // AND every pointermove until the finger lifts, then deliver them\n // in one burst. Since touch-action:none keeps the browser from\n // panning on the item, a move stream that arrives at all is ours;\n // the hold only separates a drag from a quick flick.\n if (e.timeStamp - s.downAt >= TOUCH_HOLD_MS) {\n if (s.holdTimer) clearTimeout(s.holdTimer)\n s.holdTimer = null\n this.activate(s, s.startX, s.startY)\n } else {\n // Moved before the hold elapsed: a flick, not a drag.\n if (moved > MOVE_THRESHOLD_PX) this.finishPointer(null)\n return\n }\n } else {\n if (moved < MOVE_THRESHOLD_PX) return\n this.activate(s, e.clientX, e.clientY)\n }\n }\n this.pointer = {x: e.clientX, y: e.clientY}\n this.scheduleFrame()\n }\n const onUp = (e: PointerEvent) => {\n const s = this.session\n if (!s || e.pointerId !== s.pointerId) return\n // Resolve the target from the release point, not the last frame.\n this.pointer = {x: e.clientX, y: e.clientY}\n this.finishPointer(s.active ? {x: e.clientX, y: e.clientY} : null)\n }\n const onCancel = (e: PointerEvent) => {\n const s = this.session\n if (!s || e.pointerId !== s.pointerId) return\n this.finishPointer(null)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.session) this.finishPointer(null)\n }\n document.addEventListener('pointermove', onMove)\n document.addEventListener('pointerup', onUp)\n document.addEventListener('pointercancel', onCancel)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('pointermove', onMove)\n document.removeEventListener('pointerup', onUp)\n document.removeEventListener('pointercancel', onCancel)\n document.removeEventListener('keydown', onKey)\n document.removeEventListener('scroll', this.onScroll, {capture: true})\n if (this.frame !== null) cancelAnimationFrame(this.frame)\n }\n }\n\n // -- keyboard -------------------------------------------------------------\n\n focusHandle(id: string) {\n const zone = this.items.get(id)?.zone\n if (zone !== undefined && this.stops.get(zone) !== id) {\n this.stops.set(zone, id)\n this.emit()\n }\n }\n\n private pick(id: string) {\n const item = this.items.get(id)\n if (!item || item.disabled || !item.el) return\n const order = this.captureOrder(id)\n const index = (order.get(item.zone) ?? []).filter(\n (other) => domOrder(this.items.get(other)!.el!, item.el!) < 0,\n ).length\n this.drag = {id, keyboard: true, over: {zone: item.zone, index}, refused: null, order}\n this.emit()\n const target = this.drag.over!\n const payload = this.payload(id)\n if (payload) this.props.onDragOver?.({item: payload, target, refused: null, keyboard: true})\n this.say({kind: 'pick', item: item.label, ...this.placeAt(target), keyboard: true})\n }\n\n private moveWithin(delta: number) {\n const d = this.drag\n if (!d?.over) return\n const others = d.order.get(d.over.zone)?.length ?? 0\n const index = Math.min(Math.max(d.over.index + delta, 0), others)\n const target = {zone: d.over.zone, index}\n this.retarget(target, null)\n this.say({kind: 'move', item: this.labelOf(d.id), ...this.placeAt(target), keyboard: true})\n }\n\n private moveAcross(delta: number) {\n const d = this.drag\n const payload = d && this.payload(d.id)\n if (!d?.over || !payload) return\n const zones = this.zoneSequence()\n let refused: DragDropRefusal | null = null\n for (let j = zones.indexOf(d.over.zone) + delta; j >= 0 && j < zones.length; j += delta) {\n const zoneId = zones[j]\n const verdict = verdictOf(this.zones.get(zoneId)?.accepts?.(payload))\n if (!verdict.ok) {\n if (verdict.reason !== undefined && !refused)\n refused = {zone: zoneId, reason: verdict.reason}\n continue\n }\n const others = d.order.get(zoneId)?.length ?? 0\n const target = {zone: zoneId, index: Math.min(d.over.index, others)}\n this.retarget(target, null)\n this.say({kind: 'move', item: this.labelOf(d.id), ...this.placeAt(target), keyboard: true})\n return\n }\n if (refused) {\n // Nowhere to go that way; say why, and stay put.\n this.drag = {...d, refused}\n this.refusalText = refused.reason\n this.emit()\n this.say({\n kind: 'refuse',\n item: this.labelOf(d.id),\n zone: this.zoneLabel(refused.zone),\n reason: refused.reason,\n keyboard: true,\n })\n } else {\n this.say({kind: 'move', item: this.labelOf(d.id), ...this.placeAt(d.over), keyboard: true})\n }\n }\n\n private endKeyboard(commit: boolean) {\n const d = this.drag\n if (!d?.keyboard) return\n const target = commit ? d.over : null\n const announcement = target ? this.placeAt(target) : null\n const payload = this.payload(d.id)\n this.drag = null\n this.refusalText = null\n this.focusRequest = d.id\n if (target) this.stops.set(target.zone, d.id)\n this.emit()\n if (target && payload && announcement) {\n this.props.onDrop({item: payload, target})\n this.say({kind: 'drop', item: this.labelOf(d.id), ...announcement, keyboard: true})\n } else {\n this.say({kind: 'cancel', item: this.labelOf(d.id), keyboard: true})\n }\n }\n\n /** Blur while picked (Tab away, a click elsewhere) cancels. */\n blurHandle(id: string) {\n if (this.drag?.keyboard && this.drag.id === id) this.endKeyboard(false)\n }\n\n private moveFocus(id: string, key: string): boolean {\n const zone = this.items.get(id)?.zone\n if (zone === undefined) return false\n const inZone = this.handlesIn(zone)\n const i = inZone.indexOf(id)\n let next: string | undefined\n if (key === 'ArrowUp') next = inZone[i - 1]\n else if (key === 'ArrowDown') next = inZone[i + 1]\n else if (key === 'Home') next = inZone[0]\n else if (key === 'End') next = inZone[inZone.length - 1]\n else if (key === 'ArrowLeft' || key === 'ArrowRight') {\n const zones = this.zoneSequence().filter((z) => z === zone || this.handlesIn(z).length > 0)\n const other = zones[zones.indexOf(zone) + (key === 'ArrowRight' ? 1 : -1)]\n if (other !== undefined) {\n const there = this.handlesIn(other)\n next = there[Math.min(Math.max(i, 0), there.length - 1)]\n }\n } else return false\n if (next) this.handles.get(next)?.focus()\n return true\n }\n\n keyDown(id: string, e: KeyLike) {\n const d = this.drag\n if (d?.keyboard && d.id === id) {\n switch (e.key) {\n case 'ArrowUp':\n this.moveWithin(-1)\n break\n case 'ArrowDown':\n this.moveWithin(1)\n break\n case 'ArrowLeft':\n this.moveAcross(-1)\n break\n case 'ArrowRight':\n this.moveAcross(1)\n break\n case ' ':\n case 'Enter':\n this.endKeyboard(true)\n break\n case 'Escape':\n this.endKeyboard(false)\n break\n case 'Tab':\n this.endKeyboard(false)\n return\n default:\n return\n }\n e.preventDefault()\n e.stopPropagation()\n return\n }\n if (d || this.session) return\n if (e.key === ' ') {\n e.preventDefault()\n this.pick(id)\n return\n }\n if (this.moveFocus(id, e.key)) e.preventDefault()\n }\n}\n\n// ---------------------------------------------------------------------------\n// Contexts and selectors\n// ---------------------------------------------------------------------------\n\ninterface RootContextValue {\n readonly engine: Engine\n readonly instructionsId: string\n}\n\nconst RootContext = createContext<RootContextValue | null>(null)\n\nconst useRoot = (part: string): RootContextValue => {\n const ctx = useContext(RootContext)\n if (!ctx) throw new Error(`DragDrop.${part} must be used within DragDrop.Root`)\n return ctx\n}\n\nfunction useSelect<R>(engine: Engine | null | undefined, select: (e: Engine) => R, fallback: R): R {\n const get = () => (engine ? select(engine) : fallback)\n return useSyncExternalStore(engine ? engine.subscribe : noopSubscribe, get, get)\n}\nconst noopSubscribe = () => () => {}\n\ninterface ZoneContextValue {\n readonly id: string\n readonly list: boolean\n}\nconst ZoneContext = createContext<ZoneContextValue | null>(null)\n\ninterface ItemContextValue {\n readonly id: string\n readonly zone: string\n readonly label: string\n}\nconst ItemContext = createContext<ItemContextValue | null>(null)\n\n/** True inside the ghost: its copy of the preview may hold Zones, Items and\n * Handles, which must stay inert there — never registered, never focusable. */\nconst GhostContext = createContext(false)\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport interface DragDropRootProps<T = unknown> {\n /** Called when an item is released over a zone that accepts it (or dropped\n * with Space/Enter). Reordering inside the item's own zone arrives here\n * too, with the new index. */\n onDrop: (event: DragDropEvent<T>) => void\n /** Called whenever the target under the drag changes — a new zone or\n * index, nothing, or a refusal. */\n onDragOver?: (event: DragDropOverEvent<T>) => void\n /** Supplies every live-region string (pick, move, drop, cancel, refuse),\n * e.g. from the app's message catalog. Defaults to English. */\n announce?: (event: DragDropAnnouncement) => string\n /** What marks the insertion point in a zone while dragging; a Zone's own\n * renderPlaceholder wins. Without one, only the zone lights up. */\n renderPlaceholder?: DragDropRenderPlaceholder\n /** Read by screen readers on a focused Handle. */\n instructions?: string\n children: ReactNode\n}\n\nconst DEFAULT_INSTRUCTIONS = 'Press Space to pick up. Arrow keys move, Space drops, Escape cancels.'\n\nfunction Root<T = unknown>({\n onDrop,\n onDragOver,\n announce,\n renderPlaceholder,\n instructions = DEFAULT_INSTRUCTIONS,\n children,\n}: DragDropRootProps<T>) {\n const [engine] = useState(() => new Engine())\n const instructionsId = useId()\n\n useLayoutEffect(() => {\n engine.props = {\n onDrop: onDrop as LatestProps['onDrop'],\n onDragOver: onDragOver as LatestProps['onDragOver'],\n announce,\n renderPlaceholder,\n }\n })\n\n useEffect(() => engine.attach(), [engine])\n\n const value = useMemo<RootContextValue>(\n () => ({engine, instructionsId}),\n [engine, instructionsId],\n )\n\n return (\n <RootContext.Provider value={value}>\n {children}\n <Ghost engine={engine} />\n <LiveRegion engine={engine} />\n <Instructions engine={engine} id={instructionsId} text={instructions} />\n </RootContext.Provider>\n )\n}\n\nfunction LiveRegion({engine}: {engine: Engine}) {\n const text = useSelect(engine, (e) => e.announcement, '')\n return (\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={visuallyHidden.base}>\n {text}\n </html.div>\n )\n}\n\n/** The handles' description; rendered only while a Handle exists, so a\n * pointer-only board carries no stray text. */\nfunction Instructions({engine, id, text}: {engine: Engine; id: string; text: string}) {\n const any = useSelect(engine, (e) => e.handles.size > 0, false)\n if (!any) return null\n return (\n <html.div id={id} style={visuallyHidden.base}>\n {text}\n </html.div>\n )\n}\n\nfunction Ghost({engine}: {engine: Engine}) {\n const ghost = useSelect(engine, (e) => e.ghost, null)\n const refusal = useSelect(engine, (e) => (e.ghost ? e.refusalText : null), null)\n const ref = useRef<HTMLElement | null>(null)\n // The ghost renders in the ThemeProvider mount: inline, a Dialog's\n // transformed, overflow-clipped panel would clip and offset it.\n const mount = usePortalMount()\n\n useLayoutEffect(() => {\n engine.ghostEl = ref.current\n engine.paintGhost()\n return () => {\n engine.ghostEl = null\n }\n }, [engine, ghost])\n\n if (!ghost) return null\n const node = (\n <html.div\n ref={ref as never}\n aria-hidden\n style={[styles.ghost, styles.ghostSize(ghost.width, ghost.height)]}\n >\n <html.div style={styles.ghostTilt}>\n <GhostContext.Provider value>{ghost.preview}</GhostContext.Provider>\n </html.div>\n {refusal !== null && <html.div style={styles.refusal}>{refusal}</html.div>}\n </html.div>\n )\n return mount ? createPortal(node, mount) : node\n}\n\nfunction Placeholder({engine, zone, index}: {engine: Engine; zone: string; index: number}) {\n const record = engine.zones.get(zone)\n const render = record?.renderPlaceholder ?? engine.props.renderPlaceholder\n const ref = useRef<HTMLElement | null>(null)\n // A keyboard move keeps the insertion point in view.\n useEffect(() => {\n if (engine.drag?.keyboard) ref.current?.scrollIntoView?.({block: 'nearest', inline: 'nearest'})\n }, [engine, zone, index])\n if (!render) return null\n return (\n <html.div ref={ref as never} aria-hidden style={styles.placeholder}>\n {render({zone, index, label: record?.label ?? zone})}\n </html.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Zone\n// ---------------------------------------------------------------------------\n\nexport interface DragDropZoneProps<T = unknown> {\n id: string\n /** Read to screen readers when an item moves or drops here; the list's\n * accessible name with `list`. */\n label: string\n /** Which axis items flow along; decides how the insertion index is read\n * from the pointer. */\n orientation?: 'horizontal' | 'vertical'\n /** Take the item (`true`), let it pass to an outer zone (`false`), or\n * refuse it with a reason that is shown and announced\n * (`{ok: false, reason}`). Omitted: every item is taken. */\n accepts?: (item: DragDropItemData<T>) => DragDropVerdict\n /** Keyboard order across zones (Left/Right); zones without one follow, in\n * DOM order. */\n order?: number\n /** Marks the insertion point in this zone; overrides the Root's. */\n renderPlaceholder?: DragDropRenderPlaceholder\n /** Render the zone as a labelled list (`role=\"list\"`) laid out along\n * `orientation`, its Items as list items. Put the Items directly in it. */\n list?: boolean\n /** Gap between the Items of a `list` zone. */\n gap?: SpacingToken\n /** Stretch to fill the parent (a Timeline bar, a card) instead of sizing\n * to the content. */\n fill?: boolean\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nfunction Zone<T = unknown>({\n id,\n label,\n orientation = 'horizontal',\n accepts,\n order,\n renderPlaceholder,\n list = false,\n gap = 'sm',\n fill = false,\n children,\n}: DragDropZoneProps<T>) {\n const {engine} = useRoot('Zone')\n const inGhost = useContext(GhostContext)\n const ref = useRef<HTMLDivElement>(null)\n const [record] = useState<ZoneRecord>(() => ({el: null, orientation, label}))\n\n // The record is read at drag time, so the latest props land on it after\n // every render without re-registering.\n useEffect(() => {\n record.orientation = orientation\n record.label = label\n record.accepts = accepts as ZoneRecord['accepts']\n record.order = order\n record.renderPlaceholder = renderPlaceholder\n })\n\n useEffect(() => {\n if (isNative || inGhost) return\n record.el = ref.current\n return engine.registerZone(id, record)\n }, [engine, id, record, inGhost])\n\n const dragging = useSelect(engine, (e) => e.drag !== null, false)\n const over = useSelect(engine, (e) => e.drag?.over?.zone === id, false)\n const refused = useSelect(engine, (e) => e.drag?.refused?.zone === id, false)\n const placeholderAtEnd = useSelect(\n engine,\n (e) => {\n const d = e.drag\n if (!d?.over || d.over.zone !== id) return -1\n const n = d.order.get(id)?.length ?? 0\n return d.over.index >= n ? d.over.index : -1\n },\n -1,\n )\n const zoneContext = useMemo(() => ({id, list}), [id, list])\n\n return (\n <ZoneContext.Provider value={zoneContext}>\n <html.div\n ref={ref}\n role={list ? 'list' : undefined}\n aria-label={list ? label : undefined}\n style={[\n styles.zone,\n list && (orientation === 'vertical' ? styles.listVertical : styles.listHorizontal),\n list && gapMap[gap],\n fill && styles.fill,\n dragging && styles.zoneReady,\n over && styles.zoneOver,\n refused && styles.zoneRefused,\n ]}\n >\n {children}\n {placeholderAtEnd >= 0 && (\n <Placeholder engine={engine} zone={id} index={placeholderAtEnd} />\n )}\n </html.div>\n </ZoneContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Item\n// ---------------------------------------------------------------------------\n\nexport interface DragDropItemProps<T = unknown> {\n id: string\n /** The zone this item currently lives in. */\n zone: string\n /** Read to screen readers when picked up or dropped; a Handle's default\n * accessible name. */\n label: string\n /** Carried to onDrop untouched. */\n data?: T\n /** What follows the pointer; defaults to the children. */\n preview?: ReactNode\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item<T = unknown>({\n id,\n zone,\n label,\n data,\n preview,\n disabled = false,\n children,\n}: DragDropItemProps<T>) {\n const {engine} = useRoot('Item')\n const zoneCtx = useContext(ZoneContext)\n const inGhost = useContext(GhostContext)\n const ref = useRef<HTMLDivElement>(null)\n const [record] = useState<ItemRecord>(() => ({\n el: null,\n zone,\n label,\n data,\n preview: null,\n disabled,\n }))\n\n // Registration depends on the id only; what changes from render to render\n // (data, the preview, the children) is copied onto the record instead.\n useEffect(() => {\n record.zone = zone\n record.label = label\n record.data = data\n record.preview = preview ?? children\n record.disabled = disabled\n })\n\n useEffect(() => {\n if (isNative || inGhost) return\n record.el = ref.current\n return engine.registerItem(id, record)\n }, [engine, id, record, inGhost])\n\n // WebKit only honours the prefixed user-select, and a touch held on\n // selectable text becomes iOS's selection gesture (loupe and handles)\n // before our hold can turn it into a drag; the callout is the same race\n // for links and images. StyleX emits neither prefixed property and\n // react-strict-dom's types have no vendor keys, so they are set on the\n // element directly. Both inherit into the item's children.\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n const style = el.style as CSSStyleDeclaration & {webkitTouchCallout?: string}\n style.webkitUserSelect = 'none'\n style.webkitTouchCallout = 'none'\n }, [])\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n engine.begin(id, e)\n },\n [engine, disabled, id],\n )\n\n const lifted = useSelect(engine, (e) => e.drag?.id === id, false)\n const placeholderBefore = useSelect(\n engine,\n (e) => {\n const d = e.drag\n if (!d?.over || d.over.zone !== zone) return -1\n return d.order.get(zone)?.[d.over.index] === id ? d.over.index : -1\n },\n -1,\n )\n const itemContext = useMemo(() => ({id, zone, label}), [id, zone, label])\n\n if (isNative) return <>{children}</>\n\n return (\n <ItemContext.Provider value={itemContext}>\n {placeholderBefore >= 0 && (\n <Placeholder engine={engine} zone={zone} index={placeholderBefore} />\n )}\n <html.div\n ref={ref}\n role={zoneCtx?.list && zoneCtx.id === zone ? 'listitem' : undefined}\n onPointerDown={onPointerDown}\n style={[styles.item, disabled && styles.itemDisabled, lifted && styles.itemLifted]}\n >\n {children}\n </html.div>\n </ItemContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Handle\n// ---------------------------------------------------------------------------\n\nexport interface DragDropHandleProps {\n /** Defaults to the Item's label. */\n 'aria-label'?: string\n /** What the handle shows: a grip, or the item's whole face. Keep other\n * controls out of it — a handle is one widget. */\n children: ReactNode\n}\n\n/**\n * The keyboard path into an Item: one focusable widget (`role=\"button\"`) per\n * item, a roving tab stop per zone. Space picks the item up, the arrow keys\n * move it, Space or Enter drops it, Escape cancels.\n */\nfunction Handle({'aria-label': ariaLabel, children}: DragDropHandleProps) {\n const {engine, instructionsId} = useRoot('Handle')\n const item = useContext(ItemContext)\n const inGhost = useContext(GhostContext)\n if (!item && !inGhost) throw new Error('DragDrop.Handle must be used within DragDrop.Item')\n const ref = useRef<HTMLDivElement>(null)\n const id = item?.id ?? ''\n const zone = item?.zone ?? ''\n const label = item?.label ?? ''\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative || inGhost) return\n return engine.registerHandle(id, el)\n }, [engine, id, zone, inGhost])\n\n const tabStop = useSelect(engine, (e) => e.tabStop(zone) === id, false)\n const picked = useSelect(engine, (e) => e.drag?.keyboard === true && e.drag.id === id, false)\n const wantsFocus = useSelect(engine, (e) => e.focusRequest === id, false)\n\n useEffect(() => {\n if (!wantsFocus) return\n engine.focusRequest = null\n ref.current?.focus()\n }, [engine, wantsFocus])\n\n if (isNative || inGhost) return <>{children}</>\n\n return (\n <html.div\n ref={ref}\n role=\"button\"\n tabIndex={tabStop || picked ? 0 : -1}\n aria-label={ariaLabel ?? label}\n aria-describedby={instructionsId}\n onKeyDown={(e: unknown) => engine.keyDown(id, e as KeyLike)}\n onFocus={() => engine.focusHandle(id)}\n onBlur={() => engine.blurHandle(id)}\n style={[styles.handle, picked && styles.handlePicked]}\n >\n {children}\n </html.div>\n )\n}\n\n/** Current drag, for consumers that render their own placeholder or ghost. */\nexport function useDragDrop(): {\n readonly dragging: string | null\n readonly over: DragDropTarget | null\n readonly refused: DragDropRefusal | null\n readonly keyboard: boolean\n} {\n const engine = useContext(RootContext)?.engine\n const dragging = useSelect(engine, (e) => e.drag?.id ?? null, null)\n const over = useSelect(engine, (e) => e.drag?.over ?? null, null)\n const refused = useSelect(engine, (e) => e.drag?.refused ?? null, null)\n const keyboard = useSelect(engine, (e) => e.drag?.keyboard ?? false, false)\n return {dragging, over, refused, keyboard}\n}\n\nexport const DragDrop = {Root, Zone, Item, Handle}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\n// The \"Apple ease\" curves and the 280ms open live in the shared motion tokens\n// (easing.easeOut/easeIn, duration.slow). The close is duration.base, and the\n// closeAnimationDuration prop can override it via the closeDuration* styles.\n\nexport const styles = css.create({\n // --- Outer wrapper: animates width from 0 → target ---\n wrapper: {\n overflow: 'hidden',\n flexShrink: 0,\n position: 'relative',\n },\n\n // --- Wrapper open/close: SM (360px) ---\n wrapperOpenSm: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 360},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseSm: {\n animationName: css.keyframes({\n from: {width: 360},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Wrapper open/close: MD (480px) ---\n wrapperOpenMd: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 480},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseMd: {\n animationName: css.keyframes({\n from: {width: 480},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Content panel ---\n content: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n boxShadow: shadows.sm,\n position: 'relative',\n },\n\n // Content must maintain its target width even while wrapper is narrower\n contentSm: {width: sizes.panelSm},\n contentMd: {width: sizes.panelMd},\n\n // --- Content slide + fade animations ---\n slideIn: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n to: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOut: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n to: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationMinimal: {animationDuration: duration.minimal},\n closeDurationQuick: {animationDuration: duration.quick},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBrisk: {animationDuration: duration.brisk},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: 1.4,\n color: colors.text,\n margin: 0,\n flex: 1,\n minWidth: 0,\n },\n\n // --- Body ---\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButton,\n height: sizes.iconButton,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n minimal: styles.closeDurationMinimal,\n quick: styles.closeDurationQuick,\n fast: styles.closeDurationFast,\n brisk: styles.closeDurationBrisk,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\nexport type DetailPanelSize = 'sm' | 'md'\n\n// --- Context ---\n\ninterface DetailPanelContextValue {\n present: boolean\n closing: boolean\n closeDuration: DurationToken\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n labelId: string | undefined\n registerTitle: (id: string) => void\n unregisterTitle: () => void\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DetailPanelContext = createContext<DetailPanelContextValue | null>(null)\n\nfunction useDetailPanel() {\n const ctx = useContext(DetailPanelContext)\n if (!ctx) throw new Error('DetailPanel compound components must be used within DetailPanel.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Motion token for the close animation. Default: 'base' (200ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n closeAnimationDuration = 'base',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [present, setPresent] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<Element | null>(null)\n\n const titleId = useId()\n const [labelId, setLabelId] = useState<string | undefined>(undefined)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n // Sync presence with open state\n useEffect(() => {\n if (isOpen && !present) {\n setPresent(true)\n setClosing(false)\n } else if (!isOpen && present && !closing) {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n setPresent(false)\n closingTimerRef.current = null\n }, DURATION_MS[closeAnimationDuration])\n }\n }, [isOpen, present, closing, closeAnimationDuration])\n\n // Focus management: move focus on open, restore on close\n useEffect(() => {\n if (present && !closing) {\n previousFocusRef.current = document.activeElement\n panelRef.current?.focus()\n }\n }, [present]) // eslint-disable-line react-hooks/exhaustive-deps -- only on present change\n\n useEffect(() => {\n if (!present && previousFocusRef.current) {\n const el = previousFocusRef.current as HTMLElement\n if (typeof el.focus === 'function') {\n el.focus()\n }\n previousFocusRef.current = null\n }\n }, [present])\n\n // ESC handler\n useEffect(() => {\n if (!present || closing) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [present, closing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n setClosing(false)\n }\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n const registerTitle = useCallback((id: string) => {\n setLabelId(id)\n }, [])\n\n const unregisterTitle = useCallback(() => {\n setLabelId(undefined)\n }, [])\n\n return (\n <DetailPanelContext.Provider\n value={{\n present,\n closing,\n closeDuration: closeAnimationDuration,\n requestOpen,\n requestClose,\n titleId,\n labelId,\n registerTitle,\n unregisterTitle,\n panelRef,\n }}\n >\n {children}\n </DetailPanelContext.Provider>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n /** Width of the panel. Default: 'sm' (360px) */\n size?: DetailPanelSize\n /** Accessible name for the complementary landmark */\n label: string\n}\n\nconst wrapperOpenMap = {\n sm: styles.wrapperOpenSm,\n md: styles.wrapperOpenMd,\n} as const\n\nconst wrapperCloseMap = {\n sm: styles.wrapperCloseSm,\n md: styles.wrapperCloseMd,\n} as const\n\nfunction Content({children, size = 'sm', label}: ContentProps) {\n const {present, closing, closeDuration, labelId, panelRef} = useDetailPanel()\n\n if (!present) return null\n\n return (\n <html.div\n style={[\n styles.wrapper,\n closing ? wrapperCloseMap[size] : wrapperOpenMap[size],\n closing && closeDurationMap[closeDuration],\n ]}\n >\n <html.div\n ref={panelRef}\n role=\"complementary\"\n aria-label={!labelId ? label : undefined}\n aria-labelledby={labelId || undefined}\n tabIndex={-1}\n style={[\n styles.content,\n size === 'sm' ? styles.contentSm : styles.contentMd,\n closing ? styles.slideOut : styles.slideIn,\n closing && closeDurationMap[closeDuration],\n ]}\n >\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId, registerTitle, unregisterTitle} = useDetailPanel()\n\n useEffect(() => {\n registerTitle(titleId)\n return () => unregisterTitle()\n }, [titleId, registerTitle, unregisterTitle])\n\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDetailPanel()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const DetailPanel = {\n Root,\n Content,\n Header,\n Title,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: colors.scrim,\n zIndex: layers.overlay,\n // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (positioning container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: layers.modal,\n display: 'flex',\n pointerEvents: 'none',\n },\n\n // Right anchor (desktop default)\n viewportRight: {\n justifyContent: 'flex-end',\n alignItems: 'stretch',\n },\n // Left anchor\n viewportLeft: {\n justifyContent: 'flex-start',\n alignItems: 'stretch',\n },\n // Bottom anchor (mobile default)\n viewportBottom: {\n justifyContent: 'stretch',\n alignItems: 'flex-end',\n },\n\n // --- Panel ---\n panel: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n borderWidth: 0,\n touchAction: 'none',\n },\n\n // Panel sizing per anchor\n panelHorizontal: {\n width: '100%',\n height: '100%',\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n panelVertical: {\n width: '100%',\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n borderTopLeftRadius: radii.lg,\n borderTopRightRadius: radii.lg,\n maxHeight: '85vh',\n },\n panelLeftBorder: {\n borderLeftWidth: 0,\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n\n // --- Panel widths (horizontal anchors) ---\n sm: {maxWidth: sizes.panelSm},\n md: {maxWidth: sizes.panelMd},\n lg: {maxWidth: sizes.panelLg},\n\n // --- Slide animations: Right ---\n slideInRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Left ---\n slideInLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(-100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(-100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Bottom ---\n slideInBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(100%)'},\n to: {transform: 'translateY(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(0)'},\n to: {transform: 'translateY(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationMinimal: {animationDuration: duration.minimal},\n closeDurationQuick: {animationDuration: duration.quick},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBrisk: {animationDuration: duration.brisk},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButton,\n height: sizes.iconButton,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {useRef, useCallback, useEffect} from 'react'\nimport type {DrawerAnchor} from './Drawer'\n\n/** Threshold: fraction of panel size the user must drag to dismiss */\nconst DISMISS_THRESHOLD = 0.3\n\n/** Minimum velocity (px/ms) to dismiss even below threshold */\nconst VELOCITY_THRESHOLD = 0.5\n\n/** Duration for the dismiss slide-out animation (ms) */\nconst DISMISS_DURATION = 160\n\n/**\n * Max pixels the panel visually \"grows\" when dragged in the opposite direction.\n * iOS-style: panel stays anchored to its edge, doesn't translate.\n * Instead we show a subtle shadow/scale hint capped at this value.\n */\nconst OPPOSITE_MAX_OVERSCROLL = 12\n\ninterface UseSwipeDismissOptions {\n anchor: DrawerAnchor\n enabled: boolean\n onDismiss: () => void\n /**\n * The panel element itself, not a ref: a Drawer open from its first render\n * draws the panel inline, then remounts it into the portal once the mount\n * exists, and listeners must follow the element that is actually shown.\n */\n panel: HTMLDivElement | null\n}\n\ninterface SwipeState {\n startX: number\n startY: number\n currentX: number\n currentY: number\n startTime: number\n swiping: boolean\n panelSize: number\n /** Inner Duro scroll viewport the gesture started in; capture is deferred until the axis is decided */\n deferredScroll: HTMLElement | null\n pointerId: number\n}\n\n/**\n * Hook that adds swipe-to-dismiss gesture to a drawer panel.\n *\n * Dismiss direction: panel follows finger 1:1, backdrop fades.\n * Opposite direction: iOS-style — panel stays anchored, shows subtle\n * overscroll feedback (box-shadow intensifies), then snaps back.\n */\nexport function useSwipeDismiss({anchor, enabled, onDismiss, panel}: UseSwipeDismissOptions) {\n const stateRef = useRef<SwipeState>({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n startTime: 0,\n swiping: false,\n panelSize: 0,\n deferredScroll: null,\n pointerId: 0,\n })\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n /** Returns positive = dismiss direction, negative = opposite */\n const getMovement = useCallback(\n (state: SwipeState) => {\n if (isHorizontal) {\n const dx = state.currentX - state.startX\n return anchor === 'right' ? dx : -dx\n }\n return state.currentY - state.startY\n },\n [anchor, isHorizontal],\n )\n\n const applyTransform = useCallback(\n (movement: number, panelEl: HTMLDivElement) => {\n const size = Number(panelEl.dataset.panelSize) || 1\n\n if (movement >= 0) {\n // Dismiss direction — 1:1 tracking\n const progress = movement / size\n\n if (isHorizontal) {\n const sign = anchor === 'right' ? 1 : -1\n panelEl.style.transform = `translateX(${sign * movement}px)`\n } else {\n panelEl.style.transform = `translateY(${movement}px)`\n }\n\n // Fade backdrop proportionally\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = String(Math.max(0, 1 - progress))\n }\n } else {\n // Opposite direction — iOS behavior:\n // Panel stays anchored (no translate). Show subtle overscroll via box-shadow.\n // Diminishing resistance: asymptotically approaches OPPOSITE_MAX_OVERSCROLL.\n const absMovement = Math.abs(movement)\n const overscroll = (absMovement / (absMovement + size * 0.5)) * OPPOSITE_MAX_OVERSCROLL\n const shadowSpread = Math.round(overscroll)\n\n panelEl.style.transform = ''\n panelEl.style.boxShadow =\n shadowSpread > 0 ? `0 0 ${shadowSpread * 2}px ${shadowSpread}px rgba(0, 0, 0, 0.15)` : ''\n }\n },\n [anchor, isHorizontal],\n )\n\n /** Reset all inline styles (snap back) */\n const resetStyles = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transform = ''\n panelEl.style.boxShadow = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = ''\n }\n }, [])\n\n /** Animate to fully dismissed position, then call onDismiss */\n const animateDismiss = useCallback(\n (panelEl: HTMLDivElement) => {\n const dismissTransform = isHorizontal\n ? `translateX(${anchor === 'right' ? '100%' : '-100%'})`\n : 'translateY(100%)'\n\n panelEl.style.transition = `transform ${DISMISS_DURATION}ms ease-in`\n panelEl.style.transform = dismissTransform\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = `opacity ${DISMISS_DURATION}ms ease-in`\n backdrop.style.opacity = '0'\n }\n\n // When the slide-out transition finishes, just call onDismiss.\n // Do NOT reset inline styles before unmount — that causes a 1-frame flash\n // where the panel appears at its original position. React will unmount the\n // DOM node entirely, so the inline styles don't need cleanup.\n let dismissed = false\n const done = () => {\n if (dismissed) return\n dismissed = true\n onDismiss()\n }\n panelEl.addEventListener('transitionend', done, {once: true})\n setTimeout(done, DISMISS_DURATION + 50)\n },\n [anchor, isHorizontal, onDismiss],\n )\n\n /** Animate snap-back for dismiss-direction undershoot */\n const animateSnapBack = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transition = 'transform 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n panelEl.style.transform = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = 'opacity 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n backdrop.style.opacity = ''\n }\n\n const cleanup = () => {\n panelEl.style.transition = ''\n if (backdrop) backdrop.style.transition = ''\n }\n panelEl.addEventListener('transitionend', cleanup, {once: true})\n setTimeout(cleanup, 250)\n }, [])\n\n useEffect(() => {\n if (!enabled || !panel) return\n\n function handlePointerDown(e: PointerEvent) {\n if (e.button !== 0) return\n const target = e.target as HTMLElement\n const scrollEl = target.closest<HTMLElement>('[data-duro-scroll]')\n // Outside a ScrollArea a control keeps its press. Inside one the gesture\n // is decided on the first move even from a control: a list of toggles is\n // all buttons, and touch adjustment snaps a finger onto one. A tap\n // (under the 8px slop) still presses it; a drag never captures before\n // the decision, so the release lands on the panel, not the control.\n if (!scrollEl && target.closest('button, a, input, textarea, select, [role=\"button\"]')) {\n return\n }\n\n const rect = panel!.getBoundingClientRect()\n const state = stateRef.current\n state.startX = e.clientX\n state.startY = e.clientY\n state.currentX = e.clientX\n state.currentY = e.clientY\n state.startTime = Date.now()\n state.swiping = false\n state.panelSize = isHorizontal ? rect.width : rect.height\n\n state.pointerId = e.pointerId\n state.deferredScroll = scrollEl\n\n panel!.dataset.panelSize = String(state.panelSize)\n\n // Inside a Duro ScrollArea the scroll may own the gesture: wait for the first move.\n if (!state.deferredScroll) beginCapture(e.pointerId)\n }\n\n function beginCapture(pointerId: number) {\n panel!.setPointerCapture(pointerId)\n\n // Freeze CSS animation — we take over positioning.\n // Never restore it; the panel is already at its final resting position.\n panel!.style.animation = 'none'\n }\n\n /** True when the viewport can't scroll further against the dismiss direction */\n function isAtDismissEdge(el: HTMLElement) {\n if (!isHorizontal) return el.scrollTop <= 0\n if (anchor === 'right') return el.scrollLeft <= 0\n return el.scrollLeft + el.clientWidth >= el.scrollWidth - 1\n }\n\n function handlePointerMove(e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n state.currentX = e.clientX\n state.currentY = e.clientY\n\n const dx = Math.abs(state.currentX - state.startX)\n const dy = Math.abs(state.currentY - state.startY)\n\n if (!state.swiping) {\n const totalMovement = Math.sqrt(dx * dx + dy * dy)\n if (totalMovement < 8) return\n\n if (isHorizontal && dx > dy) {\n state.swiping = true\n } else if (!isHorizontal && dy > dx) {\n state.swiping = true\n } else {\n // Wrong axis — abort gesture\n state.startTime = 0\n state.deferredScroll = null\n return\n }\n\n const scrollEl = state.deferredScroll\n if (scrollEl) {\n state.deferredScroll = null\n if (getMovement(state) <= 0 || !isAtDismissEdge(scrollEl)) {\n // The scroll owns this gesture: no swiping, no capture, no preventDefault\n state.swiping = false\n state.startTime = 0\n return\n }\n beginCapture(state.pointerId)\n }\n }\n\n if (state.swiping) {\n e.preventDefault()\n const movement = getMovement(state)\n applyTransform(movement, panel!)\n }\n }\n\n function handlePointerUp(_e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n const movement = getMovement(state)\n const elapsed = Date.now() - state.startTime\n const velocity = movement / elapsed\n\n state.startTime = 0\n state.deferredScroll = null\n\n if (!state.swiping) {\n return\n }\n\n state.swiping = false\n\n if (movement <= 0) {\n // Was dragging in opposite direction — just reset (no translate was applied)\n resetStyles(panel!)\n return\n }\n\n const fraction = movement / state.panelSize\n const shouldDismiss = fraction > DISMISS_THRESHOLD || velocity > VELOCITY_THRESHOLD\n\n if (shouldDismiss) {\n animateDismiss(panel!)\n } else {\n animateSnapBack(panel!)\n }\n }\n\n function handlePointerCancel() {\n const state = stateRef.current\n state.startTime = 0\n state.swiping = false\n state.deferredScroll = null\n resetStyles(panel!)\n }\n\n panel.addEventListener('pointerdown', handlePointerDown)\n panel.addEventListener('pointermove', handlePointerMove)\n panel.addEventListener('pointerup', handlePointerUp)\n panel.addEventListener('pointercancel', handlePointerCancel)\n\n function handleTouchMove(e: TouchEvent) {\n if (stateRef.current.swiping) {\n e.preventDefault()\n }\n }\n panel.addEventListener('touchmove', handleTouchMove, {passive: false})\n\n return () => {\n panel.removeEventListener('pointerdown', handlePointerDown)\n panel.removeEventListener('pointermove', handlePointerMove)\n panel.removeEventListener('pointerup', handlePointerUp)\n panel.removeEventListener('pointercancel', handlePointerCancel)\n panel.removeEventListener('touchmove', handleTouchMove)\n }\n }, [\n enabled,\n panel,\n anchor,\n isHorizontal,\n getMovement,\n applyTransform,\n resetStyles,\n animateSnapBack,\n animateDismiss,\n ])\n}\n","import {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {ModalContext} from '../../shared/ModalContext'\nimport {useSwipeDismiss} from './useSwipeDismiss'\n\n// --- Types ---\n\nexport type DrawerAnchor = 'right' | 'left' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n minimal: styles.closeDurationMinimal,\n quick: styles.closeDurationQuick,\n fast: styles.closeDurationFast,\n brisk: styles.closeDurationBrisk,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DrawerContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n anchor: DrawerAnchor\n dismissable: boolean\n swipeDismiss: boolean\n requestOpen: () => void\n requestClose: () => void\n /** Close immediately without CSS animation (used by swipe dismiss which handles its own exit animation) */\n requestCloseImmediate: () => void\n titleId: string\n descriptionId: string\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null)\n\nfunction useDrawer() {\n const ctx = useContext(DrawerContext)\n if (!ctx) throw new Error('Drawer compound components must be used within Drawer.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when drawer open state changes */\n onOpenChange?: (open: boolean) => void\n /** Which edge the drawer slides from. Default: 'right' */\n anchor?: DrawerAnchor\n /** Whether clicking backdrop or pressing Escape closes the drawer. Default: true */\n dismissable?: boolean\n /** Whether swipe gesture dismisses the drawer. Default: true */\n swipeDismiss?: boolean\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n anchor = 'right',\n dismissable = true,\n swipeDismiss = true,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n const requestCloseImmediate = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!dismissable) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, dismissable, requestClose])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DrawerContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n anchor,\n dismissable,\n swipeDismiss,\n requestOpen,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n }}\n >\n {children}\n </DrawerContext.Provider>\n )\n}\n\n// --- Trigger ---\n\nfunction Trigger({children}: {children: ReactNode}) {\n const {requestOpen} = useDrawer()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DrawerSize\n}\n\n// Slide animation maps\nconst slideInMap = {\n right: styles.slideInRight,\n left: styles.slideInLeft,\n bottom: styles.slideInBottom,\n} as const\n\nconst slideOutMap = {\n right: styles.slideOutRight,\n left: styles.slideOutLeft,\n bottom: styles.slideOutBottom,\n} as const\n\nconst viewportAnchorMap = {\n right: styles.viewportRight,\n left: styles.viewportLeft,\n bottom: styles.viewportBottom,\n} as const\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n anchor,\n dismissable,\n swipeDismiss: swipeEnabled,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n } = useDrawer()\n const mount = usePortalMount()\n // The shown panel element, tracked as state so swipe listeners follow it\n // when the portal mount arrives and the panel is remounted into it.\n const [panel, setPanel] = useState<HTMLDivElement | null>(null)\n const attachPanel = useCallback(\n (el: HTMLDivElement | null) => {\n panelRef.current = el\n setPanel(el)\n },\n [panelRef],\n )\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n // Swipe-to-dismiss — uses immediate close since the hook handles its own exit animation\n useSwipeDismiss({\n anchor,\n enabled: swipeEnabled && open && !closing,\n onDismiss: requestCloseImmediate,\n panel,\n })\n\n if (!open) return null\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport */}\n <html.div style={[styles.viewport, viewportAnchorMap[anchor]]} data-drawer-viewport=\"\">\n <html.div\n ref={attachPanel}\n role=\"dialog\"\n aria-modal={true}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.panel,\n isHorizontal && styles.panelHorizontal,\n isHorizontal && styles[size],\n !isHorizontal && styles.panelVertical,\n anchor === 'left' && styles.panelLeftBorder,\n closing && slideOutMap[anchor],\n closing && closeDurationMap[closeDuration],\n !closing && slideInMap[anchor],\n ]}\n >\n <ModalContext.Provider value={true}>\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </ModalContext.Provider>\n </html.div>\n </html.div>\n </>\n )\n\n // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDrawer()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDrawer()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDrawer()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center',\n },\n message: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n lineHeight: typography.lineHeight,\n },\n action: {\n marginTop: spacing.sm,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\ninterface EmptyStateProps {\n message: string\n icon?: ReactNode\n action?: ReactNode\n}\n\nexport function EmptyState({message, icon, action}: EmptyStateProps) {\n return (\n <html.div style={styles.root}>\n {icon}\n <html.p style={styles.message}>{message}</html.p>\n {action && <html.div style={styles.action}>{action}</html.div>}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {typography, typeScale} from './typography.css'\n\nexport const typePresets = css.create({\n // Body\n bodySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize4,\n lineHeight: typeScale.lineHeight4,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize5,\n lineHeight: typeScale.lineHeight5,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n\n // UI\n caption: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingWide,\n },\n label: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n code: {\n fontFamily: typography.fontFamilyMono,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n overline: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase' as const,\n },\n\n // Heading\n headingSm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize6,\n lineHeight: typeScale.lineHeight6,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize7,\n lineHeight: typeScale.lineHeight7,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize8,\n lineHeight: typeScale.lineHeight8,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingXl: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize9,\n lineHeight: typeScale.lineHeight9,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n\n // Display (fluid)\n displaySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displaySm,\n lineHeight: 1.2,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayMd,\n lineHeight: 1.15,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayLg,\n lineHeight: 1.1,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type HeadingVariant =\n | 'displayLg'\n | 'displayMd'\n | 'displaySm'\n | 'headingXl'\n | 'headingLg'\n | 'headingMd'\n | 'headingSm'\n\ninterface HeadingProps {\n level: 1 | 2 | 3 | 4 | 5 | 6\n variant?: HeadingVariant\n color?: 'default' | 'muted' | 'accent'\n align?: 'start' | 'center' | 'end'\n children: ReactNode\n}\n\nconst defaultVariantMap: Record<number, HeadingVariant> = {\n 1: 'headingXl',\n 2: 'headingLg',\n 3: 'headingMd',\n 4: 'headingSm',\n 5: 'headingSm',\n 6: 'headingSm',\n}\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Heading({level, variant, color = 'default', align, children}: HeadingProps) {\n const resolvedVariant = variant ?? defaultVariantMap[level]\n const style = [typePresets[resolvedVariant], styles[color], align && alignMap[align]]\n\n if (level === 1) return <html.h1 style={style}>{children}</html.h1>\n if (level === 2) return <html.h2 style={style}>{children}</html.h2>\n if (level === 3) return <html.h3 style={style}>{children}</html.h3>\n if (level === 4) return <html.h4 style={style}>{children}</html.h4>\n if (level === 5) return <html.h5 style={style}>{children}</html.h5>\n return <html.h6 style={style}>{children}</html.h6>\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n // --- Root ---\n root: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n },\n\n // --- Item ---\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.quick,\n cursor: 'default',\n },\n itemSelected: {\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCardHover,\n },\n },\n itemDisabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n itemLast: {\n borderBottomWidth: 0,\n },\n\n // --- Item content area (text + description) ---\n content: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: microSpacing.px2,\n minWidth: 0,\n },\n\n // --- Primary text ---\n text: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Description text ---\n description: {\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Actions slot ---\n actions: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n flexShrink: 0,\n },\n\n // --- Empty state ---\n empty: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n color: colors.textMuted,\n fontSize: typography.fontSizeSm,\n },\n})\n","import {type ReactNode, createContext, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nexport type ListSelectionMode = 'none' | 'single' | 'multiple'\n\n// --- Context ---\n\ninterface ListContextValue {\n selectionMode: ListSelectionMode\n}\n\nconst ListContext = createContext<ListContextValue>({selectionMode: 'none'})\n\nfunction useList() {\n return useContext(ListContext)\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Selection mode: 'none' (default), 'single', or 'multiple' */\n selectionMode?: ListSelectionMode\n /** Accessible label for the list */\n 'aria-label'?: string\n}\n\nfunction Root({children, selectionMode = 'none', 'aria-label': ariaLabel}: RootProps) {\n return (\n <ListContext.Provider value={{selectionMode}}>\n <html.div role=\"list\" aria-label={ariaLabel} style={styles.root}>\n {children}\n </html.div>\n </ListContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n children: ReactNode\n /** Whether this item is selected */\n selected?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Click handler for the item */\n onClick?: () => void\n}\n\nfunction Item({children, selected, disabled, onClick}: ItemProps) {\n const {selectionMode} = useList()\n const isSelectable = selectionMode !== 'none'\n\n return (\n <html.div\n role=\"listitem\"\n aria-selected={isSelectable ? selected : undefined}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : onClick}\n style={[styles.item, selected && styles.itemSelected, disabled && styles.itemDisabled]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content: wraps primary text + description ---\n\nfunction Content({children}: {children: ReactNode}) {\n return <html.div style={styles.content}>{children}</html.div>\n}\n\n// --- Text: primary label ---\n\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.p style={styles.text}>{children}</html.p>\n}\n\n// --- Description: secondary text ---\n\nfunction Description({children}: {children: ReactNode}) {\n return <html.p style={styles.description}>{children}</html.p>\n}\n\n// --- Actions: slot for buttons, badges, etc. ---\n\nfunction Actions({children}: {children: ReactNode}) {\n return <html.div style={styles.actions}>{children}</html.div>\n}\n\n// --- Empty: placeholder when list has no items ---\n\nfunction Empty({children}: {children: ReactNode}) {\n return (\n <html.div role=\"listitem\" style={styles.empty}>\n {children}\n </html.div>\n )\n}\n\n// --- Export ---\n\nexport const List = {\n Root,\n Item,\n Content,\n Text: ItemText,\n Description,\n Actions,\n Empty,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n // Reset native fieldset chrome\n borderWidth: 0,\n margin: 0,\n padding: 0,\n minWidth: 0,\n },\n legend: {\n // Reset native legend quirks\n padding: 0,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n})\n","import {type ReactNode, Children, createContext, isValidElement, useContext, useId} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type FieldsetGap = Exclude<SpacingToken, 'xxl' | 'xxxl'>\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n} as const satisfies Record<FieldsetGap, unknown>\n\n// --- Root ---\ninterface RootProps {\n /** Disables all form controls within the fieldset */\n disabled?: boolean\n /** Gap between child elements */\n gap?: FieldsetGap\n children: ReactNode\n}\n\n// the Legend's id, so the group can name itself after it\nconst LegendIdContext = createContext<string | undefined>(undefined)\n\nfunction Root({disabled = false, gap = 'md', children}: RootProps) {\n const legendId = useId()\n let hasLegend = false\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === Legend) hasLegend = true\n })\n return (\n <LegendIdContext.Provider value={legendId}>\n <html.div\n role=\"group\"\n aria-labelledby={hasLegend ? legendId : undefined}\n aria-disabled={disabled || undefined}\n style={[styles.root, gapMap[gap], disabled && styles.disabled]}\n >\n {children}\n </html.div>\n </LegendIdContext.Provider>\n )\n}\n\n// --- Legend ---\ninterface LegendProps {\n children: ReactNode\n}\n\n/** Names the group: the Root points `aria-labelledby` at it. */\nfunction Legend({children}: LegendProps) {\n const id = useContext(LegendIdContext)\n return (\n <html.span id={id} style={styles.legend}>\n {children}\n </html.span>\n )\n}\n\nexport const Fieldset = {\n Root,\n Legend,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n wrapper: {\n display: 'flex',\n alignItems: 'stretch',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus-within': colors.accent,\n },\n borderRadius: radii.sm,\n overflow: 'hidden',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCardHover,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n userSelect: 'none',\n borderWidth: 0,\n },\n addonStart: {\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n addonEnd: {\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n addonClickable: {\n cursor: 'pointer',\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCard,\n ':active': colors.bg,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addonDisabled: {\n opacity: 0.4,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {useMemo} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {InputGroupContext} from './InputGroupContext'\nimport {styles} from './styles.css'\nimport {resolveLength, type Length} from '../../shared/length'\n\n// --- Root ---\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useMemo(() => ({inGroup: true}), [])\n\n return (\n <InputGroupContext.Provider value={ctx}>\n <html.div style={styles.wrapper}>{children}</html.div>\n </InputGroupContext.Provider>\n )\n}\n\n// --- Addon ---\nconst dynamicStyles = css.create({\n minWidth: (value: number | string) => ({minWidth: value}),\n})\n\ninterface AddonProps {\n position?: 'start' | 'end'\n onClick?: () => void\n disabled?: boolean\n /** Optional minimum width to prevent layout shift (e.g. Copy → Copied!): a\n * size token key or a relative length. */\n minWidth?: Length\n /**\n * Accessible name of a clickable addon (it renders a button). Required when\n * its content is an icon (copy, reveal): without it the button has no name.\n */\n 'aria-label'?: string\n children: ReactNode\n}\n\nfunction Addon({\n position = 'end',\n onClick,\n disabled,\n minWidth,\n 'aria-label': ariaLabel,\n children,\n}: AddonProps) {\n const positionStyle = position === 'start' ? styles.addonStart : styles.addonEnd\n const style = [\n styles.addon,\n isNative && styles.nativeFlex,\n positionStyle,\n onClick && !disabled && styles.addonClickable,\n disabled && styles.addonDisabled,\n minWidth != null && dynamicStyles.minWidth(resolveLength(minWidth)),\n ]\n\n if (onClick) {\n return (\n <html.button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n aria-label={ariaLabel}\n style={style}\n >\n {children}\n </html.button>\n )\n }\n\n return <html.span style={style}>{children}</html.span>\n}\n\nexport const InputGroup = {\n Root,\n Addon,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n cursor: 'pointer',\n textDecoration: 'none',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n\n // Matches Button: every small control is at least controlSm tall (5.6).\n minHeight: sizes.controlSm,\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n color: colors.textMuted,\n },\n fullWidth: {\n width: '100%',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\nexport type LinkButtonVariant = 'primary' | 'secondary'\nexport type LinkButtonSize = 'default' | 'small'\n\ninterface LinkButtonProps {\n href: string\n variant?: LinkButtonVariant\n size?: LinkButtonSize\n fullWidth?: boolean\n target?: '_blank' | '_self'\n rel?: string\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key, no `target`); the browser default runs for every other click. Call\n * `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function LinkButton({\n href,\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n target,\n rel,\n onNavigate,\n children,\n}: LinkButtonProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel}\n onClick={linkClickHandler(href, onNavigate, target)}\n style={[styles.base, sizeMap[size], styles[variant], fullWidth && styles.fullWidth]}\n >\n {children}\n </html.a>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n track: {\n position: 'relative',\n width: '100%',\n height: sizes.meterH,\n borderRadius: radii.full,\n backgroundColor: colors.border,\n overflow: 'hidden',\n },\n fill: {\n height: '100%',\n borderRadius: radii.full,\n transitionProperty: 'width',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.standard,\n },\n accent: {backgroundColor: colors.accent},\n success: {backgroundColor: colors.success},\n warning: {backgroundColor: colors.warning},\n error: {backgroundColor: colors.error},\n fillAt: (percent: number) => ({\n width: `${percent}%`,\n }),\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// ---------------------------------------------------------------------------\n// Meter — a scalar inside a known range (WIP 2 of 3, 40% of a milestone's\n// tasks done): role=\"meter\" with a value text, drawn as a thin bar of the\n// `meterH` token. Not a progress bar for a running task (use Spinner) and\n// not an input (no thumb).\n// ---------------------------------------------------------------------------\n\nexport type MeterTone = 'accent' | 'success' | 'warning' | 'error'\n\nexport interface MeterProps {\n value: number\n /** Defaults to 0. */\n min?: number\n /** Defaults to 1, so a fraction needs nothing else. */\n max?: number\n /** The accessible name, e.g. \"In progress WIP\". */\n label: string\n /** What screen readers read for the value, e.g. \"4 of 3, over the limit\".\n * Defaults to the percentage. */\n valueText?: string\n /** The fill's colour; defaults to accent. */\n tone?: MeterTone\n}\n\nconst toneStyle = {\n accent: styles.accent,\n success: styles.success,\n warning: styles.warning,\n error: styles.error,\n} as const\n\nexport function Meter({value, min = 0, max = 1, label, valueText, tone = 'accent'}: MeterProps) {\n const span = max - min\n const fraction = span > 0 ? (value - min) / span : 0\n const clamped = Math.min(Math.max(fraction, 0), 1)\n // aria-valuenow must sit inside the range; the true value (over the\n // limit, say) is what valueText is for.\n const now = Math.min(Math.max(value, min), max)\n return (\n <html.div\n role=\"meter\"\n aria-label={label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={now}\n aria-valuetext={valueText ?? `${Math.round(clamped * 100)}%`}\n style={styles.track}\n >\n <html.div style={[styles.fill, toneStyle[tone], styles.fillAt(clamped * 100)]} />\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {breakpoints} from '@duro-app/tokens/tokens/breakpoints.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// Below this container width the two cards stack (Mobile.dc.html); above it\n// they sit side by side, each in its own half (Reader.dc.html).\nconst STACK_BP = breakpoints.xs\nconst STACKED = `@container (max-width: ${STACK_BP})`\n\n// The picked docs browser (docs/mockups/docs-nav/Reader.dc.html and\n// Mobile.dc.html, `.pn .card`): two interactive cards, a small muted\n// direction label over the title, Next aligned right.\nexport const styles = css.create({\n // hosts the container query: a container cannot query itself\n root: {\n containerType: 'inline-size',\n minWidth: 0,\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: {\n default: 'minmax(0, 1fr) minmax(0, 1fr)',\n [STACKED]: 'minmax(0, 1fr)',\n },\n gap: spacing.md,\n },\n card: {\n display: 'flex',\n flexDirection: 'column',\n padding: spacing.md,\n fontFamily: typography.fontFamily,\n color: colors.text,\n textDecorationLine: 'none',\n backgroundColor: {\n default: colors.bgCard,\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n cursor: 'pointer',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n // each side keeps its slot: Next stays in the right half without a Prev\n prev: {\n gridColumn: {\n default: '1',\n [STACKED]: 'auto',\n },\n gridRow: {\n default: '1',\n [STACKED]: 'auto',\n },\n },\n next: {\n gridColumn: {\n default: '2',\n [STACKED]: 'auto',\n },\n gridRow: {\n default: '1',\n [STACKED]: 'auto',\n },\n textAlign: {\n default: 'right',\n [STACKED]: 'left',\n },\n },\n label: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n title: {\n fontSize: typography.fontSizeSm,\n overflowWrap: 'anywhere',\n },\n})\n","import {createContext, type ReactNode, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\n/* PageNav — the previous and next pages in reading order, at the foot of a\n * page: a labelled `nav` holding up to two link cards. Each card shows a small\n * direction label (\"Previous\", from your text catalog) over the page title.\n * Prev holds the left slot and Next the right one even when the other is\n * missing, so Next stays right-aligned on the last-but-one page too; on a\n * narrow container (below the `xs` breakpoint) the two stack.\n *\n * Not `Pagination` (numbered result pages, in `@duro-app/ui/table`). */\n\n// Prev and Next place themselves in Root's two-column grid.\nconst PageNavContext = createContext(false)\n\nfunction usePageNav() {\n if (!useContext(PageNavContext))\n throw new Error('PageNav compound components must be used within PageNav.Root')\n}\n\n// --- Root ---\n\ninterface RootProps {\n /** Names the landmark (\"Pages\"); required, from your text catalog. */\n 'aria-label': string\n /** A `PageNav.Prev` and/or a `PageNav.Next`. */\n children: ReactNode\n}\n\nfunction Root({'aria-label': ariaLabel, children}: RootProps) {\n return (\n <PageNavContext.Provider value={true}>\n <html.nav aria-label={ariaLabel} style={styles.root}>\n <html.div style={styles.grid}>{children}</html.div>\n </html.nav>\n </PageNavContext.Provider>\n )\n}\n\n// --- Prev / Next ---\n\ninterface LinkProps {\n href: string\n /** The page's title. */\n title: ReactNode\n /** The direction label above the title (\"Previous\", \"Next\"), from your text catalog. */\n label: ReactNode\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key). Call `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n}\n\nfunction Prev({href, title, label, onNavigate}: LinkProps) {\n usePageNav()\n return (\n <html.a\n href={href}\n onClick={linkClickHandler(href, onNavigate)}\n style={[styles.card, styles.prev]}\n >\n <html.span style={styles.label}>\n <html.span aria-hidden>←</html.span> {label}\n </html.span>\n <html.span style={styles.title}>{title}</html.span>\n </html.a>\n )\n}\n\nfunction Next({href, title, label, onNavigate}: LinkProps) {\n usePageNav()\n return (\n <html.a\n href={href}\n onClick={linkClickHandler(href, onNavigate)}\n style={[styles.card, styles.next]}\n >\n <html.span style={styles.label}>\n {label} <html.span aria-hidden>→</html.span>\n </html.span>\n <html.span style={styles.title}>{title}</html.span>\n </html.a>\n )\n}\n\nexport const PageNav = {\n Root,\n Prev,\n Next,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n },\n bordered: {\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Adds an outer border. Default: false */\n bordered?: boolean\n}\n\nfunction Root({children, bordered = false}: RootProps) {\n return <html.div style={[styles.root, bordered && styles.bordered]}>{children}</html.div>\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Export ---\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n item: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n itemDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n circle: {\n width: sizes.indicator,\n height: sizes.indicator,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.full,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n circleUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n circleChecked: {\n backgroundColor: colors.bg,\n borderColor: colors.accent,\n },\n dot: {\n width: sizes.indicatorDot,\n height: sizes.indicatorDot,\n borderRadius: radii.full,\n backgroundColor: colors.accent,\n },\n // Layered on visuallyHidden.base: a native input is also made transparent.\n input: {\n opacity: 0,\n },\n})\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\nimport {useFieldGroupLabelling} from '../Field/FieldContext'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\n// --- Context ---\n\ninterface RadioGroupContextValue {\n value: string\n onSelect: (value: string) => void\n disabled: boolean\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction useRadioGroup() {\n const ctx = useContext(RadioGroupContext)\n if (!ctx) {\n throw new Error('RadioGroup.Item must be used within RadioGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n /** Accessible name when the group is not inside a Field.Root (inside one,\n * the Field.Label names it). */\n 'aria-label'?: string\n /** id of the element that names the group, when not inside a Field.Root. */\n 'aria-labelledby'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n ...labelling\n}: RootProps) {\n const a11y = useFieldGroupLabelling(labelling)\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onSelect = useCallback(\n (itemValue: string) => {\n if (!disabled) {\n setValue(itemValue)\n }\n },\n [disabled, setValue],\n )\n\n return (\n <RadioGroupContext.Provider value={{value, onSelect, disabled}}>\n <html.div\n role=\"radiogroup\"\n aria-orientation={orientation}\n {...a11y}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </RadioGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onSelect, disabled: groupDisabled} = useRadioGroup()\n const isChecked = groupValue === value\n const isDisabled = groupDisabled || itemDisabled\n\n const handleClick = () => {\n if (!isDisabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.label style={[styles.item, isDisabled && styles.itemDisabled]} onClick={handleClick}>\n <html.input\n type=\"radio\"\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => onSelect(value)}\n style={[visuallyHidden.base, styles.input]}\n />\n <html.span\n style={[styles.circle, isChecked ? styles.circleChecked : styles.circleUnchecked]}\n aria-hidden\n >\n {isChecked && <html.span style={styles.dot} />}\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n\n// inside a Field.Root, the label names this group (see Field's `group`)\nRoot.isFieldGroup = true as const\n\nexport const RadioGroup = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n overflow: 'hidden',\n },\n viewport: {\n width: '100%',\n height: '100%',\n overflowX: 'auto',\n overflowY: 'auto',\n // Hide native scrollbar\n scrollbarWidth: 'none',\n },\n content: {\n minWidth: '100%',\n minHeight: '100%',\n },\n scrollbar: {\n position: 'absolute',\n zIndex: layers.raised,\n display: 'flex',\n touchAction: 'none',\n userSelect: 'none',\n transitionProperty: 'opacity',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.standard,\n },\n scrollbarVertical: {\n top: 0,\n right: 0,\n bottom: 0,\n width: sizes.scrollbar,\n flexDirection: 'column',\n paddingTop: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n paddingRight: microSpacing.px2,\n },\n scrollbarHorizontal: {\n left: 0,\n right: 0,\n bottom: 0,\n height: sizes.scrollbar,\n flexDirection: 'row',\n paddingLeft: microSpacing.px2,\n paddingRight: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n },\n scrollbarHidden: {\n opacity: 0,\n },\n scrollbarVisible: {\n opacity: 1,\n },\n thumb: {\n position: 'relative',\n flex: 1,\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.full,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n // Dynamic styles — simple identifier params only (StyleX constraint)\n viewportMaxHeight: (maxHeight: number | string) => ({\n maxHeight,\n }),\n thumbVertical: (height: string, transform: string) => ({\n height,\n transform,\n }),\n thumbHorizontal: (width: string, transform: string) => ({\n width,\n transform,\n }),\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ScrollAreaContextValue {\n viewportRef: React.RefObject<HTMLDivElement | null>\n contentRef: React.RefObject<HTMLDivElement | null>\n viewportId: string\n scrollTop: number\n scrollLeft: number\n scrollHeight: number\n scrollWidth: number\n clientHeight: number\n clientWidth: number\n scrolling: boolean\n}\n\nexport const ScrollAreaContext = createContext<ScrollAreaContextValue | null>(null)\n\nexport function useScrollArea() {\n const ctx = useContext(ScrollAreaContext)\n if (!ctx) throw new Error('ScrollArea compound components must be used within ScrollArea.Root')\n return ctx\n}\n","import {useState, useCallback, useRef, useEffect, useId} from 'react'\nimport type {ScrollAreaContextValue} from './ScrollAreaContext'\n\nexport function useScrollAreaRoot(): ScrollAreaContextValue {\n const viewportId = useId()\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const [scrollTop, setScrollTop] = useState(0)\n const [scrollLeft, setScrollLeft] = useState(0)\n const [scrollHeight, setScrollHeight] = useState(0)\n const [scrollWidth, setScrollWidth] = useState(0)\n const [clientHeight, setClientHeight] = useState(0)\n const [clientWidth, setClientWidth] = useState(0)\n const [scrolling, setScrolling] = useState(false)\n const scrollTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleScroll = useCallback(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n setScrollTop(vp.scrollTop)\n setScrollLeft(vp.scrollLeft)\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n setScrolling(true)\n\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current)\n scrollTimerRef.current = setTimeout(() => setScrolling(false), 1000)\n }, [])\n\n // Observe viewport size changes\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n const observer = new ResizeObserver(() => {\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n })\n observer.observe(vp)\n // Initial measurement\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n\n return () => observer.disconnect()\n }, [])\n\n // Attach scroll listener directly to ensure we capture it\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n vp.addEventListener('scroll', handleScroll, {passive: true})\n return () => vp.removeEventListener('scroll', handleScroll)\n }, [handleScroll])\n\n return {\n viewportRef,\n contentRef,\n viewportId,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n scrolling,\n }\n}\n","import {type ComponentProps, type ReactNode, useRef, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ScrollAreaContext, useScrollArea} from './ScrollAreaContext'\nimport {useScrollAreaRoot} from './useScrollAreaRoot'\nimport {resolveLength, type Length} from '../../shared/length'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useScrollAreaRoot()\n\n return (\n <ScrollAreaContext.Provider value={ctx}>\n <html.div style={styles.root}>{children}</html.div>\n </ScrollAreaContext.Provider>\n )\n}\n\n// --- Viewport ---\n\ninterface ViewportProps {\n children: ReactNode\n maxHeight?: Length\n /** Extra styles for the viewport (e.g. a pointer-aware max height). */\n style?: ComponentProps<typeof html.div>['style']\n /** A roving-focus group owns the keyboard: drop the viewport's own tab stop\n * and region role. */\n rovingOwner?: boolean\n}\n\nfunction Viewport({children, maxHeight, style, rovingOwner = false}: ViewportProps) {\n const {viewportRef, viewportId} = useScrollArea()\n\n return (\n <html.div\n ref={viewportRef}\n id={viewportId}\n data-duro-scroll=\"\"\n tabIndex={rovingOwner ? undefined : 0}\n role={rovingOwner ? undefined : 'region'}\n aria-label={rovingOwner ? undefined : 'Scrollable content'}\n style={[\n styles.viewport,\n maxHeight != null && styles.viewportMaxHeight(resolveLength(maxHeight)),\n style,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n}\n\nfunction Content({children}: ContentProps) {\n const {contentRef} = useScrollArea()\n return (\n <html.div ref={contentRef} style={styles.content}>\n {children}\n </html.div>\n )\n}\n\n// --- Scrollbar ---\n\ntype ScrollbarOrientation = 'vertical' | 'horizontal'\n\ninterface ScrollbarProps {\n orientation?: ScrollbarOrientation\n children: ReactNode\n}\n\nfunction Scrollbar({orientation = 'vertical', children}: ScrollbarProps) {\n const {\n viewportId,\n scrolling,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n } = useScrollArea()\n\n // Hide scrollbar when content fits\n const hasOverflow =\n orientation === 'vertical' ? scrollHeight > clientHeight : scrollWidth > clientWidth\n\n if (!hasOverflow) return null\n\n const isVertical = orientation === 'vertical'\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const valueNow = maxScroll > 0 ? Math.round((scrollOffset / maxScroll) * 100) : 0\n\n return (\n <html.div\n role=\"scrollbar\"\n aria-controls={viewportId}\n aria-orientation={orientation}\n aria-valuenow={valueNow}\n aria-valuemin={0}\n aria-valuemax={100}\n style={[\n styles.scrollbar,\n isVertical ? styles.scrollbarVertical : styles.scrollbarHorizontal,\n scrolling ? styles.scrollbarVisible : styles.scrollbarHidden,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Thumb ---\n\ninterface ThumbProps {\n orientation?: ScrollbarOrientation\n}\n\nfunction Thumb({orientation = 'vertical'}: ThumbProps) {\n const {viewportRef, scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth} =\n useScrollArea()\n const draggingRef = useRef(false)\n const startPosRef = useRef(0)\n const startScrollRef = useRef(0)\n\n const isVertical = orientation === 'vertical'\n\n const thumbSizePercent = isVertical\n ? Math.max((clientHeight / scrollHeight) * 100, 10)\n : Math.max((clientWidth / scrollWidth) * 100, 10)\n\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const trackSize = isVertical ? clientHeight : clientWidth\n const thumbPixelSize = (thumbSizePercent / 100) * trackSize\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const thumbOffset = maxScroll > 0 ? (scrollOffset / maxScroll) * (trackSize - thumbPixelSize) : 0\n\n const thumbStyle = isVertical\n ? styles.thumbVertical(`${thumbSizePercent}%`, `translateY(${thumbOffset}px)`)\n : styles.thumbHorizontal(`${thumbSizePercent}%`, `translateX(${thumbOffset}px)`)\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n draggingRef.current = true\n startPosRef.current = isVertical ? e.clientY : e.clientX\n startScrollRef.current = isVertical\n ? (viewportRef.current?.scrollTop ?? 0)\n : (viewportRef.current?.scrollLeft ?? 0)\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n },\n [isVertical, viewportRef],\n )\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!draggingRef.current) return\n const vp = viewportRef.current\n if (!vp) return\n\n const delta = (isVertical ? e.clientY : e.clientX) - startPosRef.current\n const scrollRatio = maxScroll / (trackSize - thumbPixelSize)\n const scrollDelta = delta * scrollRatio\n\n if (isVertical) {\n vp.scrollTop = startScrollRef.current + scrollDelta\n } else {\n vp.scrollLeft = startScrollRef.current + scrollDelta\n }\n },\n [isVertical, maxScroll, trackSize, thumbPixelSize, viewportRef],\n )\n\n const handlePointerUp = useCallback(() => {\n draggingRef.current = false\n }, [])\n\n return (\n <html.div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={[styles.thumb, thumbStyle]}\n />\n )\n}\n\nexport const ScrollArea = {\n Root,\n Viewport,\n Content,\n Scrollbar,\n Thumb,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n inputWrapper: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.xs,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n inputWrapperFocused: {\n borderColor: colors.accent,\n },\n input: {\n flex: 1,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: 'transparent',\n borderWidth: 0,\n outline: 'none',\n minWidth: 0,\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n backgroundColor: 'transparent',\n borderWidth: 0,\n color: colors.textMuted,\n cursor: 'pointer',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ComboboxContextValue {\n open: boolean\n openPopup: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n inputValue: string\n setInputValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n inputRef: React.RefObject<HTMLInputElement | null>\n rootRef: React.RefObject<HTMLDivElement | null>\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null)\n\nexport function useCombobox() {\n const ctx = useContext(ComboboxContext)\n if (!ctx) throw new Error('Combobox compound components must be used within Combobox.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ComboboxContextValue} from './ComboboxContext'\n\ninterface UseComboboxRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useComboboxRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n inputValue: controlledInputValue,\n onInputChange,\n initialLabels,\n}: UseComboboxRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n // Seed the visible text from the initially-selected value's label, so a\n // defaultValue/value shows its label on mount — and so the reconcile effect\n // below doesn't see \"value set but input empty\" and wipe the selection.\n const [internalInputValue, setInternalInputValue] = useState<string>(() => {\n const initial = controlledValue ?? defaultValue\n return initial ? (initialLabels?.[initial] ?? '') : ''\n })\n const inputValue = controlledInputValue !== undefined ? controlledInputValue : internalInputValue\n const setInputValue = useCallback(\n (v: string) => {\n if (controlledInputValue === undefined) setInternalInputValue(v)\n onInputChange?.(v)\n },\n [controlledInputValue, onInputChange],\n )\n\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n }, [])\n\n const openPopup = useCallback(() => {\n setOpen(true)\n // Highlight the selected item or first visible item\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n }, [value])\n\n const selectValue = useCallback(\n (itemValue: string) => {\n setValue(itemValue)\n // Set input to show the selected label\n const label = labels[itemValue] ?? itemValue\n setInputValue(label)\n close()\n inputRef.current?.focus()\n },\n [setValue, labels, setInputValue, close],\n )\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Get visible items (those matching the filter)\n const getVisibleOrder = useCallback(() => {\n const query = inputValue.toLowerCase()\n if (!query) return orderRef.current\n return orderRef.current.filter((id) => {\n const item = itemsRef.current.get(id)\n if (!item) return false\n const label = labels[item.value] ?? item.value\n return label.toLowerCase().includes(query)\n })\n }, [inputValue, labels])\n\n // Keyboard navigation\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const visibleOrder = getVisibleOrder()\n if (visibleOrder.length === 0 && e.key !== 'Escape' && e.key !== 'Tab') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (!open) {\n setOpen(true)\n return\n }\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : -1\n return visibleOrder[(idx + 1) % visibleOrder.length] ?? null\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : 0\n return visibleOrder[(idx - 1 + visibleOrder.length) % visibleOrder.length] ?? null\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(visibleOrder[0] ?? null)\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(visibleOrder[visibleOrder.length - 1] ?? null)\n break\n }\n case 'Enter': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = itemsRef.current.get(prev)\n if (item) selectValue(item.value)\n } else if (!inputValue.trim()) {\n // Empty input + Enter = clear selection (reset to \"All\")\n selectValue('')\n }\n return prev\n })\n break\n }\n case 'Escape': {\n e.preventDefault()\n close()\n inputRef.current?.focus()\n break\n }\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, selectValue, getVisibleOrder])\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (!highlightedId) return\n const item = itemsRef.current.get(highlightedId)\n item?.element.scrollIntoView({block: 'nearest'})\n }, [highlightedId])\n\n // Reconcile input text with the committed value once the popup closes.\n // Three cases when transitioning from open → closed:\n // - inputValue is empty: user cleared the field, treat that as\n // \"remove the selection\" so the consumer's onValueChange fires\n // with null and downstream UI (e.g. dependent fields) can reset.\n // - inputValue doesn't match the selected label: user typed something\n // but didn't pick anything; restore the label so the visible text\n // and the committed value stay consistent.\n // - inputValue equals the selected label: nothing to do.\n useEffect(() => {\n if (open) return\n // Treat an empty value (null OR '') as \"no selection\" — nothing to\n // reconcile. Without this, a controlled value=\"\" (e.g. a table column\n // filter) fires setValue(null) every render → inline onValueChange →\n // parent state change → re-render → infinite \"Maximum update depth\" loop.\n if (!value) return\n if (inputValue === '') {\n setValue(null)\n return\n }\n if (labels[value] && inputValue !== labels[value]) {\n setInputValue(labels[value])\n }\n }, [open, value, labels, inputValue, setInputValue, setValue])\n\n const ctx: ComboboxContextValue = useMemo(\n () => ({\n open,\n openPopup,\n close,\n value,\n setValue: selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n inputRef,\n rootRef,\n }),\n [\n open,\n openPopup,\n close,\n value,\n selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n popup: {\n // Fixed, with top/left (and width) applied inline from the anchor's rect,\n // so the list escapes any ancestor with overflow: hidden or a transform.\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n overflowY: 'auto',\n // Above Dialog/Drawer (1000/1001): they portal into the same mount.\n zIndex: layers.popup,\n // The portal mount is pointer-events: none; the list takes them back.\n pointerEvents: 'auto',\n },\n // A list that does not take the anchor's width (an editor typeahead).\n ownWidth: {\n minWidth: sizes.popupMinW,\n },\n maxHeightListMaxH: {\n maxHeight: sizes.listMaxH,\n },\n maxHeightListMaxHSm: {\n maxHeight: sizes.listMaxHSm,\n },\n position: (top: number, left: number) => ({\n top,\n left,\n }),\n width: (width: number) => ({\n width,\n }),\n option: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n optionSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n // The fill is the highlight; the transparent outline is what forced-colors\n // mode paints, where fills are dropped.\n optionHighlighted: {\n backgroundColor: colors.bgCardHover,\n outlineStyle: 'solid',\n outlineWidth: borders.focusRing,\n outlineColor: 'transparent',\n outlineOffset: `calc(-1 * ${borders.focusRing})`,\n },\n optionDisabled: {\n color: colors.textMuted,\n cursor: 'default',\n },\n empty: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.textMuted,\n },\n})\n","import {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {SPACING_PX} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {computePopoverPosition} from '../Popover/position'\nimport {usePopoverLayer} from '../Popover/PopoverLayerContext'\n\n/**\n * A headless-state popup list of options for an input that keeps focus: a\n * Combobox's text field, or a rich-text editor's typeahead (mentions, slash\n * commands). The anchor element owns focus and the keyboard; it moves the\n * highlight by setting `highlightedId`, and wires itself to the list with\n * `getAnchorProps()` (aria-controls / aria-expanded / aria-activedescendant).\n * A press on an option never takes focus from the anchor.\n */\n\nexport type ListboxMaxHeight = 'listMaxH' | 'listMaxHSm'\n\nconst maxHeightMap = {\n listMaxH: styles.maxHeightListMaxH,\n listMaxHSm: styles.maxHeightListMaxHSm,\n} as const\n\n/** Default option id: the listbox id plus the value, made safe for an id. */\nexport function defaultOptionId(listboxId: string, value: string): string {\n return `${listboxId}-option-${value.replace(/[^\\w-]/g, (ch) => `_${ch.charCodeAt(0).toString(16)}`)}`\n}\n\nexport interface ListboxAnchorProps {\n role?: 'combobox'\n 'aria-controls': string | undefined\n 'aria-expanded': boolean\n 'aria-activedescendant': string | undefined\n 'aria-autocomplete': 'list'\n 'aria-haspopup': 'listbox'\n}\n\n/**\n * ARIA for the element that keeps focus and drives the list. Spread it on an\n * input, or set each attribute on a contenteditable root.\n */\nexport function getAnchorProps({\n id,\n open,\n highlightedId,\n}: {\n id: string\n open: boolean\n highlightedId: string | null | undefined\n}): ListboxAnchorProps {\n return {\n 'aria-controls': open ? id : undefined,\n 'aria-expanded': open,\n 'aria-activedescendant': open && highlightedId ? highlightedId : undefined,\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n }\n}\n\ninterface ListboxContextValue {\n id: string\n highlightedId: string | null\n onHighlight?: (id: string | null) => void\n onSelect?: (value: string) => void\n getOptionId: (value: string) => string\n}\n\nconst ListboxContext = createContext<ListboxContextValue | null>(null)\n\nfunction useListbox(part: string) {\n const ctx = useContext(ListboxContext)\n if (!ctx) throw new Error(`Listbox.${part} must be used within Listbox.Root`)\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n /** DOM id of the list; pass the same to getAnchorProps. */\n id: string\n open: boolean\n /** The rect the list is placed against: the input, or the editor's caret. */\n anchor: () => DOMRect | null | undefined\n /** Give the list the anchor's width (a Combobox under its input). */\n matchAnchorWidth?: boolean\n /** Id of the highlighted option, controlled by the anchor's keyboard handling. */\n highlightedId: string | null\n /** Pointer hover asks to move the highlight. */\n onHighlight?: (id: string | null) => void\n /** A press on an option. */\n onSelect?: (value: string) => void\n /** Option value → DOM id. Default: defaultOptionId(id, value). */\n getOptionId?: (value: string) => string\n /** Accessible name of the list. */\n 'aria-label'?: string\n /** Size-token key capping the list's height; longer lists scroll. Default: listMaxH. */\n maxHeight?: ListboxMaxHeight\n children: ReactNode\n}\n\nfunction Root({\n id,\n open,\n anchor,\n matchAnchorWidth = false,\n highlightedId,\n onHighlight,\n onSelect,\n getOptionId,\n 'aria-label': ariaLabel,\n maxHeight = 'listMaxH',\n children,\n}: RootProps) {\n const mount = usePortalMount()\n const listRef = useRef<HTMLDivElement>(null)\n const [place, setPlace] = useState<{top: number; left: number; width: number} | null>(null)\n const anchorRef = useRef(anchor)\n anchorRef.current = anchor\n\n useLayoutEffect(() => {\n if (!open) {\n setPlace(null)\n return\n }\n const update = () => {\n const rect = anchorRef.current()\n if (!rect) return\n const list = listRef.current\n const next = computePopoverPosition({\n anchor: {top: rect.top, left: rect.left, width: rect.width, height: rect.height},\n popup: {\n width: matchAnchorWidth ? rect.width : (list?.offsetWidth ?? 0),\n height: list?.offsetHeight ?? 0,\n },\n viewport: {width: window.innerWidth, height: window.innerHeight},\n side: 'bottom',\n align: 'start',\n offset: SPACING_PX.xs,\n })\n setPlace((prev) =>\n prev && prev.top === next.top && prev.left === next.left && prev.width === rect.width\n ? prev\n : {top: next.top, left: next.left, width: rect.width},\n )\n }\n update()\n // A second pass once the list has its size, so the flip sees its height.\n const frame = requestAnimationFrame(update)\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n cancelAnimationFrame(frame)\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, matchAnchorWidth])\n\n // A press inside the list must not move focus off the anchor.\n useEffect(() => {\n const list = listRef.current\n if (!list || !open) return\n const keep = (e: MouseEvent) => e.preventDefault()\n list.addEventListener('mousedown', keep)\n return () => list.removeEventListener('mousedown', keep)\n }, [open, place])\n\n // Keep the highlighted option in view.\n useEffect(() => {\n if (!open || !highlightedId) return\n const list = listRef.current\n const option = list?.querySelector<HTMLElement>(`[id=\"${CSS.escape(highlightedId)}\"]`)\n option?.scrollIntoView?.({block: 'nearest'})\n }, [open, highlightedId])\n\n usePopoverLayer(listRef, {active: open && place !== null})\n\n const optionId = useCallback(\n (value: string) => (getOptionId ? getOptionId(value) : defaultOptionId(id, value)),\n [getOptionId, id],\n )\n\n if (!open || !place || typeof document === 'undefined') return null\n\n const node = (\n <ListboxContext.Provider\n value={{id, highlightedId, onHighlight, onSelect, getOptionId: optionId}}\n >\n <html.div\n ref={listRef}\n id={id}\n role=\"listbox\"\n aria-label={ariaLabel}\n style={[\n styles.popup,\n maxHeightMap[maxHeight],\n styles.position(place.top, place.left),\n matchAnchorWidth ? styles.width(place.width) : styles.ownWidth,\n ]}\n >\n {children}\n </html.div>\n </ListboxContext.Provider>\n )\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Option ---\n\ninterface OptionProps {\n value: string\n /** DOM id. Default: Root's getOptionId(value). */\n id?: string\n /** The committed choice (aria-selected). */\n selected?: boolean\n disabled?: boolean\n children: ReactNode\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Option({\n value,\n id: idProp,\n selected = false,\n disabled = false,\n children,\n ref,\n}: OptionProps) {\n const {highlightedId, onHighlight, onSelect, getOptionId} = useListbox('Option')\n const id = idProp ?? getOptionId(value)\n const highlighted = highlightedId === id\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : () => onSelect?.(value)}\n onPointerEnter={disabled ? undefined : () => onHighlight?.(id)}\n style={[\n styles.option,\n selected && styles.optionSelected,\n highlighted && styles.optionHighlighted,\n disabled && styles.optionDisabled,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Empty ---\n\n/** Shown in place of options when nothing matches. */\nfunction Empty({children}: {children: ReactNode}) {\n useListbox('Empty')\n return <html.div style={styles.empty}>{children}</html.div>\n}\n\nexport const Listbox = {\n Root,\n Option,\n Empty,\n getAnchorProps,\n}\n","import {type ReactNode, useCallback, useRef, useId, useEffect, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ComboboxContext, useCombobox} from './ComboboxContext'\nimport {useComboboxRoot} from './useComboboxRoot'\nimport {Listbox, getAnchorProps} from '../Listbox/Listbox'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({\n name,\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n children,\n}: RootProps) {\n const {ctx, rootRef} = useComboboxRoot({\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n })\n\n return (\n <ComboboxContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </ComboboxContext.Provider>\n )\n}\n\n// --- Input ---\nfunction Input({placeholder, children}: {placeholder?: string; children?: ReactNode}) {\n const {open, openPopup, close, inputValue, setInputValue, listboxId, highlightedId, inputRef} =\n useCombobox()\n const localRef = useRef<HTMLInputElement>(null)\n const [focused, setFocused] = useState(false)\n const anchor = getAnchorProps({id: listboxId, open, highlightedId})\n\n useEffect(() => {\n inputRef.current = localRef.current\n })\n\n return (\n <html.div style={[styles.inputWrapper, focused && styles.inputWrapperFocused]}>\n <html.input\n ref={localRef}\n type=\"text\"\n role={'combobox' as 'listbox'}\n value={inputValue}\n placeholder={placeholder}\n aria-expanded={anchor['aria-expanded']}\n aria-haspopup=\"listbox\"\n aria-controls={anchor['aria-controls']}\n aria-activedescendant={anchor['aria-activedescendant']}\n aria-autocomplete={'list' as 'none'}\n autoComplete=\"off\"\n style={styles.input}\n onFocus={() => {\n setFocused(true)\n openPopup()\n }}\n onBlur={() => {\n setFocused(false)\n // Delay close to allow item click to register\n setTimeout(close, 150)\n }}\n onChange={(e: any) => {\n setInputValue(e.target.value)\n if (!open) openPopup()\n }}\n />\n {children}\n </html.div>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({children}: {children?: ReactNode}) {\n const {open, openPopup, close, inputRef} = useCombobox()\n\n return (\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-label={open ? 'Close' : 'Open'}\n onClick={() => {\n if (open) {\n close()\n } else {\n openPopup()\n }\n inputRef.current?.focus()\n }}\n style={styles.trigger}\n >\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.button>\n )\n}\n\n// --- Popup ---\n// A Listbox placed under the input, as wide as the field: rendered into the\n// ThemeProvider portal mount so it escapes ancestor `overflow: hidden` /\n// `transform` containing blocks (notably Dialog and Drawer).\nfunction Popup({children}: {children: ReactNode}) {\n const {open, listboxId, rootRef, highlightedId, setHighlightedId, setValue} = useCombobox()\n const anchor = useCallback(() => rootRef.current?.getBoundingClientRect(), [rootRef])\n\n return (\n <Listbox.Root\n id={listboxId}\n open={open}\n anchor={anchor}\n matchAnchorWidth\n highlightedId={highlightedId}\n onHighlight={setHighlightedId}\n onSelect={setValue}\n maxHeight=\"listMaxHSm\"\n >\n {children}\n </Listbox.Root>\n )\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {value: selectedValue, inputValue, labels, registerLabel, registerItem} = useCombobox()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n\n // Filter: check if this item matches the input\n const label = labels[itemValue] ?? itemValue\n const query = inputValue.toLowerCase()\n const isVisible = !query || label.toLowerCase().includes(query)\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n if (!isVisible) return null\n\n return (\n <Listbox.Option ref={ref} id={id} value={itemValue} selected={isSelected}>\n {children}\n </Listbox.Option>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\n// --- Empty ---\nfunction Empty({children}: {children: ReactNode}) {\n const {open, inputValue, labels} = useCombobox()\n\n if (!open) return null\n\n // Check if any items are visible\n const query = inputValue.toLowerCase()\n const hasVisibleItems = query\n ? Object.values(labels).some((label) => label.toLowerCase().includes(query))\n : true\n\n if (hasVisibleItems) return null\n\n return <Listbox.Empty>{children}</Listbox.Empty>\n}\n\nexport const Combobox = {\n Root,\n Input,\n Trigger,\n Popup,\n Item,\n ItemText,\n Empty,\n}\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\ninterface VisuallyHiddenProps {\n children: ReactNode\n /** For aria-describedby / aria-labelledby to point at. */\n id?: string\n}\n\n/**\n * Text for assistive tech only: in the accessibility tree, not on screen. Use\n * it to give an icon-only control or a visual-only cue words — a status a\n * colour shows, \"(opens in a new tab)\" after a link.\n */\nexport function VisuallyHidden({children, id}: VisuallyHiddenProps) {\n return (\n <html.span id={id} style={[visuallyHidden.base, visuallyHidden.text]}>\n {children}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// Direction \"Underlined\" (docs/mockups/text-link/Underlined.dc.html): the\n// underline is always there, so colour is never the only cue (WCAG F73).\nexport const styles = css.create({\n base: {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n cursor: 'pointer',\n textDecorationLine: 'underline',\n textDecorationStyle: 'solid',\n borderRadius: radii.xs,\n transitionProperty: 'color, text-decoration-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n default: {\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecorationColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n },\n subtle: {\n color: {\n default: 'inherit',\n ':hover': colors.accent,\n },\n textDecorationColor: {\n default: colors.textMuted,\n ':hover': colors.accent,\n },\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\nexport type TextLinkVariant = 'default' | 'subtle'\n\ninterface TextLinkProps {\n href: string\n /** `_blank` opens a new tab; `rel` then defaults to `noopener noreferrer`. */\n target?: '_blank' | '_self'\n rel?: string\n /**\n * `default`: accent text with an accent underline. `subtle`: the\n * surrounding text colour with a muted underline, accent on hover. Both\n * stay underlined, so colour is never the only cue in running text.\n */\n variant?: TextLinkVariant\n /** Accessible name, when the visible text alone does not say where it goes. */\n 'aria-label'?: string\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key, no `target`); the browser default runs for every other click. Call\n * `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n children: ReactNode\n}\n\n/**\n * An inline hyperlink in running text or a standalone \"View all\" link. For a\n * link that looks like a button, use LinkButton.\n */\nexport function TextLink({\n href,\n target,\n rel,\n variant = 'default',\n 'aria-label': ariaLabel,\n onNavigate,\n children,\n}: TextLinkProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel ?? (target === '_blank' ? 'noopener noreferrer' : undefined)}\n aria-label={ariaLabel}\n onClick={linkClickHandler(href, onNavigate, target)}\n style={[styles.base, styles[variant]]}\n >\n {children}\n </html.a>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n trigger: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n // size=\"small\": Toggle sizeSmall's values, as longhands so they win over the\n // trigger's own longhands. Every small control is at least controlSm tall,\n // whatever it holds, and the touch target under a coarse pointer.\n triggerSmall: {\n gap: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n value: {\n color: colors.text,\n },\n placeholder: {\n color: colors.textMuted,\n },\n icon: {\n display: 'flex',\n alignItems: 'center',\n color: colors.textMuted,\n },\n backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n // Above Dialog/Drawer (1000/1001): they portal into the same mount, so a\n // popup opened from inside a dialog must out-rank the dialog itself.\n zIndex: layers.popupBackdrop,\n // The portal mount is pointer-events: none, so re-enable here to catch\n // outside clicks that close the popup.\n pointerEvents: 'auto',\n },\n popup: {\n // Position is `fixed` and top/left/minWidth are applied inline by Popup\n // (computed from the trigger's bounding rect) so the dropdown escapes any\n // ancestor with `overflow: hidden` / `transform` (notably inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n minWidth: sizes.labelMinW,\n maxHeight: sizes.listMaxH,\n overflowY: 'auto',\n zIndex: layers.popup,\n // Re-enable pointer events: the portal mount is pointer-events: none.\n pointerEvents: 'auto',\n },\n popupPosition: (top: number, left: number, minWidth: number) => ({\n top,\n left,\n minWidth,\n }),\n item: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n borderRadius: radii.sm,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n itemSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n itemHighlighted: {\n backgroundColor: colors.bgCardHover,\n },\n hidden: {\n display: 'none',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SelectContextValue {\n open: boolean\n toggle: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n triggerRef: React.RefObject<HTMLButtonElement | null>\n}\n\nexport const SelectContext = createContext<SelectContextValue | null>(null)\n\nexport function useSelect() {\n const ctx = useContext(SelectContext)\n if (!ctx) throw new Error('Select compound components must be used within Select.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {SelectContextValue} from './SelectContext'\n\ninterface UseSelectRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useSelectRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n initialLabels,\n}: UseSelectRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n triggerRef.current?.focus()\n }, [])\n\n const toggle = useCallback(() => {\n setOpen((prev) => {\n if (!prev) {\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n } else {\n setHighlightedId(null)\n }\n return !prev\n })\n }, [value])\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Closed: ArrowDown/ArrowUp on the trigger open the listbox (the APG\n // select-only combobox), on the selected option or the first. In a Toolbar\n // this is why a closed Select keeps those keys; Left/Right still move on.\n useEffect(() => {\n const root = rootRef.current\n if (!root || open) return\n function handleKeyDown(e: KeyboardEvent) {\n if (e.target !== triggerRef.current) return\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n if (e.altKey || e.ctrlKey || e.metaKey) return\n e.preventDefault()\n toggle()\n }\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, toggle])\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const items = itemsRef.current\n if (e.key === 'Escape') {\n e.preventDefault()\n close()\n return\n }\n if (order.length === 0 && e.key !== 'Tab') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : -1\n return order[(idx + 1) % order.length]\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : 0\n return order[(idx - 1 + order.length) % order.length]\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(order[0])\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(order[order.length - 1])\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = items.get(prev)\n if (item) {\n setValue(item.value)\n close()\n }\n }\n return prev\n })\n break\n }\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, setValue])\n\n const ctx: SelectContextValue = useMemo(\n () => ({\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n triggerRef,\n }),\n [\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {SelectContext, useSelect} from './SelectContext'\nimport {useSelectRoot} from './useSelectRoot'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {usePopoverLayer} from '../Popover/PopoverLayerContext'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({name, defaultValue, value, onValueChange, initialLabels, children}: RootProps) {\n const {ctx, rootRef} = useSelectRoot({defaultValue, value, onValueChange, initialLabels})\n\n return (\n <SelectContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </SelectContext.Provider>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({\n children,\n 'aria-label': ariaLabel,\n size = 'default',\n}: {\n children: ReactNode\n 'aria-label'?: string\n /** `small` matches a small Toggle or Button beside it. Default: `default`. */\n size?: ControlSize\n}) {\n const {open, toggle, listboxId, highlightedId, triggerRef} = useSelect()\n const localRef = useRef<HTMLButtonElement>(null)\n const grouped = useGroupedControl<HTMLButtonElement>()\n // Inside a <Field.Root>, adopt its controlId so <Field.Label for={controlId}>\n // labels the trigger (a labelable <button>) — no manual aria-label needed; and\n // surface the field's description/error + invalid state, mirroring <Input>.\n const fieldCtx = useFieldContext()\n const describedBy = fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n\n // Sync local ref to context triggerRef\n useEffect(() => {\n triggerRef.current = localRef.current\n })\n\n return (\n <html.button\n ref={mergeRefs(localRef, grouped.ref)}\n tabIndex={grouped.tabIndex}\n onFocus={grouped.onFocus}\n id={fieldCtx?.controlId}\n type=\"button\"\n role={'combobox' as 'listbox'}\n onClick={toggle}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\n aria-describedby={describedBy || undefined}\n aria-invalid={fieldCtx?.invalid || undefined}\n style={[styles.trigger, size === 'small' && styles.triggerSmall, grouped.style]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Value ---\nfunction Value({placeholder}: {placeholder?: string}) {\n const {value, labels} = useSelect()\n const display = value ? (labels[value] ?? value) : null\n\n return (\n <html.span style={display ? styles.value : styles.placeholder}>\n {display ?? placeholder}\n </html.span>\n )\n}\n\n// --- Icon ---\nfunction Icon({children}: {children?: ReactNode}) {\n return (\n <html.span style={styles.icon}>\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.span>\n )\n}\n\n// --- Popup ---\n// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates (measured off the trigger) so it escapes ancestor\n// `overflow: hidden` / `transform` containing blocks (notably Dialog/Drawer).\n// The listbox stays mounted while closed (display: none) so Items can register\n// their labels from DOM text before the popup is ever opened.\nfunction Popup({children}: {children: ReactNode}) {\n const {open, close, listboxId, triggerRef} = useSelect()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the trigger when the popup opens, and re-measure on scroll/resize so\n // the dropdown follows it. Capture-phase scroll catches scroll on any ancestor\n // (e.g. a Dialog body).\n useLayoutEffect(() => {\n if (!open) return\n const update = () => {\n const el = triggerRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // `xs` token = 4px gap below the trigger.\n setCoords({top: rect.bottom + 4, left: rect.left, width: rect.width})\n }\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, triggerRef])\n\n const listboxRef = useRef<HTMLDivElement>(null)\n const backdropRef = useRef<HTMLDivElement>(null)\n usePopoverLayer(listboxRef, {active: open})\n usePopoverLayer(backdropRef, {active: open})\n\n const node = (\n <>\n {open && <html.div ref={backdropRef} style={styles.backdrop} onClick={close} />}\n <html.div\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-hidden={!open}\n style={[\n styles.popup,\n (!open || !coords) && styles.hidden,\n coords && styles.popupPosition(coords.top, coords.left, coords.width),\n ]}\n >\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </html.div>\n </>\n )\n\n // SSR / pre-mount fallback: render inline (hidden under overflow parents but\n // won't crash). Once the mount exists, portal into it.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {\n value: selectedValue,\n setValue,\n close,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useSelect()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\n\n // Register label from DOM text content (works with both string and JSX children)\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n const handleClick = () => {\n setValue(itemValue)\n close()\n }\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={handleClick}\n onPointerEnter={() => setHighlightedId(id)}\n style={[\n styles.item,\n isSelected && styles.itemSelected,\n isHighlighted && styles.itemHighlighted,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\nexport const Select = {\n Root,\n Trigger,\n Value,\n Icon,\n Popup,\n Item,\n ItemText,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n },\n group: {\n display: 'flex',\n flexDirection: 'column',\n },\n groupTrigger: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n cursor: 'pointer',\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n groupTriggerActive: {\n color: colors.text,\n },\n chevron: {\n display: 'inline-flex',\n alignItems: 'center',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(90deg)',\n },\n // The `role=\"group\"` wrapper around a Section's / an expanded Group's items.\n // Purely structural: it exists to carry the accessible name, so it must not\n // change how the items stack.\n items: {\n display: 'flex',\n flexDirection: 'column',\n },\n // Static (non-collapsible) section — see SideNav.Section.\n section: {\n display: 'flex',\n flexDirection: 'column',\n },\n sectionLabel: {\n paddingTop: spacing.md,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.06em',\n color: colors.textMuted,\n },\n item: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: microSpacing.px6,\n paddingBottom: microSpacing.px6,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightNormal,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 0,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textAlign: 'left' as const,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n },\n itemActive: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n backgroundColor: colors.bgCardHover,\n },\n // Active indicator — a bar at the rail's left edge that grows in on select.\n marker: {\n position: 'absolute',\n left: 0,\n top: '50%',\n width: sizes.navMarkerW,\n height: 0,\n transform: 'translateY(-50%)',\n borderTopRightRadius: radii.full,\n borderBottomRightRadius: radii.full,\n backgroundColor: colors.accent,\n transitionProperty: 'height',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n markerActive: {\n height: sizes.navMarkerH,\n },\n itemIcon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: sizes.indicator,\n height: sizes.indicator,\n },\n itemLabel: {\n flexGrow: 1,\n minWidth: 0,\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SideNavContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n expandedGroups: Set<string>\n toggleGroup: (group: string) => void\n /** Idempotent expand (add-only) — used by auto-expand/defaultExpanded so a\n * group that qualifies twice (e.g. defaultExpanded AND holding the active\n * item) doesn't get toggled back closed. `toggleGroup` stays for user clicks. */\n expandGroup: (group: string) => void\n registerItem: (value: string) => () => void\n orderRef: React.RefObject<string[]>\n}\n\nexport const SideNavContext = createContext<SideNavContextValue | null>(null)\n\nexport function useSideNav() {\n const ctx = useContext(SideNavContext)\n if (!ctx) throw new Error('SideNav compound components must be used within SideNav.Root')\n return ctx\n}\n","import {type ReactNode, useState, useCallback, useRef, useEffect, useId} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {SideNavContext, useSideNav} from './SideNavContext'\n\n/**\n * SideNav has two ways to chunk a rail, and they are NOT interchangeable.\n *\n * `Section` — a labelled block that is always open. This is the DEFAULT for\n * primary navigation. A nav's job is to advertise where you can go; an\n * always-open list keeps the whole information architecture scannable and puts\n * every destination one click away. The uppercase label does the chunking work\n * on its own — you get the grouping benefit without hiding anything.\n *\n * `Group` — the same block behind a chevron (a disclosure). Collapsing costs\n * every destination inside it an extra click and hides it from scanning, so it\n * has to buy something back. It does when the region is:\n * • rare or advanced (\"Advanced\", \"Danger zone\", \"Legacy\") — disclose the\n * seldom-used, never the everyday;\n * • unbounded / data-driven (one entry per namespace, project, team) — you\n * cannot author-flatten a list whose length you don't control;\n * • one of many in a rail long enough (>~30 leaves) that a flat list stops\n * reading as an overview.\n * The healthy shape is a mix: flat Sections for the journey, one collapsed\n * Group at the bottom.\n *\n * Neither is a tree. Arbitrary-depth *data* browsing (a file tree, a\n * namespace → resource drill-down) needs `role=\"tree\"` with roving tabindex,\n * typeahead and aria-level — a different component, not a deeper SideNav.\n */\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nfunction Root({children, value: controlledValue, defaultValue, onValueChange}: RootProps) {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set())\n const orderRef = useRef<string[]>([])\n\n const toggleGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev)\n if (next.has(group)) {\n next.delete(group)\n } else {\n next.add(group)\n }\n return next\n })\n }, [])\n\n // Idempotent expand — never closes an already-open group. The mount effects\n // in Group (defaultExpanded + auto-expand-active) use this instead of\n // toggleGroup so a group that qualifies on both counts stays open rather than\n // being toggled open-then-closed.\n const expandGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n if (prev.has(group)) return prev\n const next = new Set(prev)\n next.add(group)\n return next\n })\n }, [])\n\n const registerItem = useCallback((value: string) => {\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return (\n <SideNavContext.Provider\n value={{\n activeValue,\n onSelect,\n expandedGroups,\n toggleGroup,\n expandGroup,\n registerItem,\n orderRef,\n }}\n >\n <html.nav role=\"navigation\" style={styles.root}>\n {children}\n </html.nav>\n </SideNavContext.Provider>\n )\n}\n\n// --- Group ---\n\ninterface GroupProps {\n children: ReactNode\n label: string\n groupKey?: string\n defaultExpanded?: boolean\n}\n\nfunction Group({children, label, groupKey, defaultExpanded}: GroupProps) {\n const key = groupKey ?? label\n const {expandedGroups, toggleGroup, expandGroup, activeValue} = useSideNav()\n const isExpanded = expandedGroups.has(key)\n const groupRef = useRef<HTMLDivElement>(null)\n const triggerId = useId()\n const panelId = useId()\n\n // Auto-expand if this group contains the active item. Uses expandGroup (not\n // toggleGroup) so it never races the defaultExpanded effect into a closed\n // state when the active item lives in a defaultExpanded group.\n useEffect(() => {\n if (!activeValue || expandedGroups.has(key)) return\n const el = groupRef.current\n if (!el) return\n const activeBtn = el.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n if (activeBtn) {\n expandGroup(key)\n }\n }, [activeValue, key, expandedGroups, expandGroup])\n\n // Expand on first render if defaultExpanded (idempotent add, not a toggle).\n useEffect(() => {\n if (defaultExpanded) {\n expandGroup(key)\n }\n // Only run on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const hasActiveChild = (() => {\n if (!activeValue || !groupRef.current) return false\n return !!groupRef.current.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n })()\n\n return (\n <html.div ref={groupRef} style={styles.group}>\n <html.button\n type=\"button\"\n id={triggerId}\n onClick={() => toggleGroup(key)}\n style={[styles.groupTrigger, hasActiveChild && styles.groupTriggerActive]}\n aria-expanded={isExpanded}\n aria-controls={isExpanded ? panelId : undefined}\n >\n <html.span style={[styles.chevron, isExpanded && styles.chevronOpen]}>\n <svg\n width={10}\n height={10}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </html.span>\n {label}\n </html.button>\n {isExpanded ? (\n <html.div id={panelId} role=\"group\" aria-labelledby={triggerId} style={styles.items}>\n {children}\n </html.div>\n ) : null}\n </html.div>\n )\n}\n\n// --- Section ---\n\ninterface SectionProps {\n children: ReactNode\n label: string\n}\n\n/**\n * A static, non-collapsible grouping: an always-visible uppercase header with\n * its items below. Unlike `Group` there is no chevron, toggle, or hidden state.\n *\n * Reach for this first — see the note at the top of this file for when a\n * collapsible `Group` is the better call. The label is exposed as the group's\n * accessible name, so a screen reader announces \"Networking, group\" on the way\n * into its items instead of dropping the user into an undifferentiated run of\n * thirty buttons.\n */\nfunction Section({children, label}: SectionProps) {\n const labelId = useId()\n return (\n <html.div style={styles.section}>\n <html.div id={labelId} style={styles.sectionLabel}>\n {label}\n </html.div>\n <html.div role=\"group\" aria-labelledby={labelId} style={styles.items}>\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n children: ReactNode\n /** Optional leading glyph (e.g. a design-system `<Icon />`). Inherits the\n * item's text color, so it turns accent when the item is active. */\n icon?: ReactNode\n}\n\nfunction Item({value, children, icon}: ItemProps) {\n const {activeValue, onSelect, registerItem} = useSideNav()\n const isActive = activeValue === value\n\n useEffect(() => {\n return registerItem(value)\n }, [value, registerItem])\n\n return (\n <html.button\n type=\"button\"\n data-nav-value={value}\n onClick={() => onSelect(value)}\n style={[styles.item, isActive && styles.itemActive]}\n aria-current={isActive ? 'page' : undefined}\n >\n <html.span aria-hidden style={[styles.marker, isActive && styles.markerActive]} />\n {icon ? (\n <html.span aria-hidden style={styles.itemIcon}>\n {icon}\n </html.span>\n ) : null}\n <html.span style={styles.itemLabel}>{children}</html.span>\n </html.button>\n )\n}\n\nexport const SideNav = {\n Root,\n Group,\n Section,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nconst spin = css.keyframes({\n '0%': {transform: 'rotate(0deg)'},\n '100%': {transform: 'rotate(360deg)'},\n})\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n spinner: {\n borderRadius: '50%',\n borderStyle: 'solid',\n borderColor: colors.border,\n borderTopColor: colors.accent,\n animationName: spin,\n animationDuration: '0.6s',\n animationTimingFunction: easing.linear,\n animationIterationCount: 'infinite',\n },\n sm: {\n width: sizes.spinnerSm,\n height: sizes.spinnerSm,\n borderWidth: borders.strong,\n },\n md: {\n width: sizes.spinnerMd,\n height: sizes.spinnerMd,\n borderWidth: borders.strong,\n },\n lg: {\n width: sizes.spinnerLg,\n height: sizes.spinnerLg,\n borderWidth: borders.accent,\n },\n // Layered on visuallyHidden.base.\n srOnly: {\n clip: 'rect(0, 0, 0, 0)',\n },\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\ninterface SpinnerProps {\n size?: SpinnerSize\n label?: string\n}\n\nconst sizeMap = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const\n\nexport function Spinner({size = 'md', label = 'Loading'}: SpinnerProps) {\n return (\n <html.div role=\"status\" style={styles.root}>\n <html.div style={[styles.spinner, sizeMap[size]]} aria-hidden />\n <html.span style={[visuallyHidden.base, styles.srOnly]}>{label}</html.span>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nconst enter = css.keyframes({\n from: {opacity: 0, transform: 'translateY(10px)'},\n to: {opacity: 1, transform: 'translateY(0)'},\n})\n\nexport const styles = css.create({\n // Fixed, viewport-anchored stack. Portaled into the ThemeProvider mount so it\n // layers above dialogs; the container itself is click-through, each toast\n // re-enables pointer events.\n region: {\n position: 'fixed',\n bottom: spacing.lg,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n pointerEvents: 'none',\n // Above modals and popups: a toast fired while a Dialog is open shows.\n zIndex: layers.toast,\n },\n toast: {\n pointerEvents: 'auto',\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: sizes.toastMaxW,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderLeftWidth: borders.accent,\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n color: colors.text,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n animationName: {\n default: enter,\n '@media (prefers-reduced-motion: reduce)': 'none',\n },\n animationDuration: duration.brisk,\n animationTimingFunction: easing.easeOut,\n },\n success: {borderLeftColor: colors.successBorder},\n error: {borderLeftColor: colors.errorBorder},\n info: {borderLeftColor: colors.infoBorder},\n warning: {borderLeftColor: colors.warningBorder},\n\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: microSpacing.px1,\n },\n iconSuccess: {color: colors.successText},\n iconError: {color: colors.errorText},\n iconInfo: {color: colors.infoText},\n iconWarning: {color: colors.warningText},\n\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: microSpacing.px2,\n },\n message: {\n color: colors.text,\n },\n action: {\n alignSelf: 'flex-start',\n marginTop: microSpacing.px2,\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: colors.accent,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n textDecorationLine: 'underline',\n cursor: 'pointer',\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n borderRadius: radii.sm,\n },\n closeBtn: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: microSpacing.px2,\n marginTop: -1,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: {default: colors.textMuted, ':hover': colors.text},\n cursor: 'pointer',\n borderRadius: radii.sm,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffsetSm,\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {Icon, type IconName} from '../Icon'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\nexport type ToastVariant = 'success' | 'error' | 'info' | 'warning'\n\nexport interface ToastAction {\n label: string\n onClick: () => void\n}\n\nexport interface ToastOptions {\n /** Visual + semantic tone. Errors announce assertively; errors and\n * warnings linger longer. */\n variant?: ToastVariant\n message: ReactNode\n /** Optional single action, e.g. Undo. Runs, then dismisses the toast. */\n action?: ToastAction\n /** Auto-dismiss delay in ms. `0` (or negative) keeps it until dismissed.\n * The countdown pauses while the toast is hovered or holds focus. */\n duration?: number\n}\n\nexport interface ToastContextValue {\n /** Show a toast; returns its id so it can be dismissed programmatically. */\n toast: (opts: ToastOptions) => string\n dismiss: (id: string) => void\n}\n\ninterface ToastEntry {\n id: string\n variant: ToastVariant\n message: ReactNode\n action?: ToastAction\n duration: number\n}\n\ninterface ToastStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ToastEntry[]\n add: (opts: ToastOptions) => string\n remove: (id: string) => void\n}\n\nconst DEFAULT_DURATION: Record<ToastVariant, number> = {\n success: 5000,\n info: 5000,\n error: 8000,\n warning: 8000,\n}\n\nfunction createToastStore(): ToastStore {\n let entries: ToastEntry[] = []\n let seq = 0\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n add: (opts) => {\n const variant = opts.variant ?? 'info'\n const id = `toast-${++seq}`\n const duration = opts.duration ?? DEFAULT_DURATION[variant]\n entries = [...entries, {id, variant, message: opts.message, action: opts.action, duration}]\n notify()\n return id\n },\n remove: (id) => {\n const next = entries.filter((e) => e.id !== id)\n if (next.length !== entries.length) {\n entries = next\n notify()\n }\n },\n }\n}\n\nconst variantIcon: Record<ToastVariant, IconName> = {\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n}\nconst variantIconStyle = {\n success: styles.iconSuccess,\n error: styles.iconError,\n info: styles.iconInfo,\n warning: styles.iconWarning,\n} as const\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within a <ToastProvider>')\n return ctx\n}\n\nfunction ToastItem({\n entry,\n onDismiss,\n dismissLabel,\n}: {\n entry: ToastEntry\n onDismiss: (id: string) => void\n dismissLabel: string\n}) {\n const {id, variant, message, action, duration} = entry\n const [hovered, setHovered] = useState(false)\n const [focused, setFocused] = useState(false)\n const paused = hovered || focused\n // What is left of the countdown; a pause keeps it, a resume restarts the\n // timer with what was left (WCAG 2.2.1: the reader controls the timing).\n const remaining = useRef(duration)\n\n useEffect(() => {\n if (duration <= 0 || paused) return\n const started = Date.now()\n const timer = setTimeout(() => onDismiss(id), Math.max(remaining.current, 0))\n return () => {\n clearTimeout(timer)\n remaining.current -= Date.now() - started\n }\n }, [id, duration, paused, onDismiss])\n\n return (\n <html.div\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n style={[styles.toast, styles[variant]]}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n onFocus={() => setFocused(true)}\n onBlur={(e: {currentTarget: HTMLElement; relatedTarget: EventTarget | null}) => {\n // Focus moving between the toast's own buttons keeps it paused.\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setFocused(false)\n }}\n >\n <html.div style={[styles.iconWrap, variantIconStyle[variant]]}>\n <Icon name={variantIcon[variant]} size=\"md\" />\n </html.div>\n <html.div style={styles.content}>\n <html.div style={styles.message}>{message}</html.div>\n {action ? (\n <html.button\n type=\"button\"\n style={styles.action}\n onClick={() => {\n action.onClick()\n onDismiss(id)\n }}\n >\n {action.label}\n </html.button>\n ) : null}\n </html.div>\n <html.button\n type=\"button\"\n aria-label={dismissLabel}\n style={styles.closeBtn}\n onClick={() => onDismiss(id)}\n >\n <Icon name=\"x-circle\" size=\"sm\" />\n </html.button>\n </html.div>\n )\n}\n\nexport interface ToastProviderProps {\n /** Accessible name of each toast's close button, e.g. from the app's\n * message catalog. */\n dismissLabel?: string\n children: ReactNode\n}\n\nexport function ToastProvider({dismissLabel = 'Dismiss', children}: ToastProviderProps) {\n const storeRef = useRef<ToastStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createToastStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const mount = usePortalMount()\n\n const value = useMemo<ToastContextValue>(\n () => ({\n toast: (opts) => store.add(opts),\n dismiss: (id) => store.remove(id),\n }),\n [store],\n )\n\n const dismiss = useCallback((id: string) => store.remove(id), [store])\n\n const region = (\n <html.div role=\"region\" aria-label=\"Notifications\" style={styles.region}>\n {entries.map((entry) => (\n <ToastItem key={entry.id} entry={entry} onDismiss={dismiss} dismissLabel={dismissLabel} />\n ))}\n </html.div>\n )\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {mount ? createPortal(region, mount) : region}\n </ToastContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: spacing.md,\n },\n error: {\n color: colors.error,\n },\n success: {\n color: colors.success,\n },\n warning: {\n color: colors.warning,\n },\n info: {\n color: colors.info,\n },\n muted: {\n color: colors.textMuted,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName, IconSize} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type StatusIconName = Extract<\n IconName,\n 'x-circle' | 'check-circle' | 'check-done' | 'clock' | 'forbidden'\n>\nexport type StatusIconVariant = 'error' | 'success' | 'warning' | 'info' | 'muted'\n\ninterface StatusIconProps {\n name: StatusIconName\n size?: IconSize\n variant?: StatusIconVariant\n}\n\nexport function StatusIcon({name, size = 'xxl', variant = 'muted'}: StatusIconProps) {\n return (\n <html.div style={[styles.root, styles[variant]]}>\n <Icon name={name} size={size} />\n </html.div>\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport interface TagGroupContextValue {\n values: string[]\n addTag: (value: string) => void\n removeTag: (value: string) => void\n editable: boolean\n setEditable: (v: boolean) => void\n disabled: boolean\n validate?: (value: string) => true | string\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n inputRef: React.RefObject<HTMLInputElement | null>\n gridId: string\n name?: string\n}\n\nexport const TagGroupContext = createContext<TagGroupContextValue | null>(null)\n\nexport function useTagGroup(): TagGroupContextValue | null {\n return useContext(TagGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightNormal,\n lineHeight: 1,\n borderRadius: radii.xs,\n whiteSpace: 'nowrap',\n minWidth: 0,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffsetSm,\n },\n },\n sizeMd: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontSize: typography.fontSizeSm,\n },\n sizeSm: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n // Opt-in wrapping for long identifier-style labels. Overrides the base\n // nowrap so the text breaks within its container (e.g. a table cell)\n // instead of overflowing into the next column. `anywhere` also lets the\n // tag shrink below its content's intrinsic width so a flex/grid parent can\n // actually give it a narrow track.\n wrap: {\n whiteSpace: 'normal',\n overflowWrap: 'anywhere',\n lineHeight: 1.35,\n textAlign: 'start',\n },\n // Reduce right padding when removable to keep visual balance with the button\n removableMd: {\n paddingRight: spacing.sm,\n },\n removableSm: {\n paddingRight: spacing.xs,\n },\n default: {\n backgroundColor: {\n default: colors.bg,\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n removeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n borderRadius: radii.full,\n opacity: {\n default: 0.6,\n ':hover': 1,\n },\n outlineWidth: 0,\n },\n removeButtonDisabled: {\n cursor: 'not-allowed',\n opacity: 0.4,\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useTagGroup} from '../TagGroup/TagGroupContext'\nimport {styles} from './styles.css'\n\nexport type TagVariant = 'default' | 'success' | 'warning' | 'error' | 'info'\nexport type TagSize = 'sm' | 'md'\n\ninterface TagProps {\n /** Value identifier — required when used inside TagGroup */\n value?: string\n variant?: TagVariant\n size?: TagSize\n /** Show remove button. Auto-derived from TagGroup context when inside one. */\n removable?: boolean\n /** Called when remove button is clicked. Auto-wired to TagGroup when inside one. */\n onRemove?: () => void\n disabled?: boolean\n /**\n * Allow the label to wrap / break instead of staying on one line. Tags are\n * `white-space: nowrap` by default (they read as pills); set this for long\n * identifier-style values (e.g. `lldap.group.member.remove`) sitting in a\n * constrained column, so they break within their cell instead of leaking\n * into the next one.\n */\n wrap?: boolean\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nconst removableSizeMap = {\n sm: styles.removableSm,\n md: styles.removableMd,\n} as const\n\nexport function Tag({\n value,\n variant = 'default',\n size = 'md',\n removable: removableProp,\n onRemove: onRemoveProp,\n disabled: disabledProp = false,\n wrap = false,\n children,\n}: TagProps) {\n const group = useTagGroup()\n const contentRef = useRef<HTMLElement>(null)\n\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const removable = removableProp ?? (isGrouped ? group.editable : false)\n\n const onRemove = useCallback(() => {\n if (disabled) return\n if (onRemoveProp) {\n onRemoveProp()\n } else if (isGrouped && value !== undefined) {\n group.removeTag(value)\n }\n }, [disabled, onRemoveProp, isGrouped, value, group])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return\n if ((e.key === 'Backspace' || e.key === 'Delete') && removable) {\n e.preventDefault()\n onRemove()\n }\n // Arrow key navigation delegated to TagGroup via context\n if (isGrouped && (e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n e.preventDefault()\n const idx = value !== undefined ? group.values.indexOf(value) : -1\n if (e.key === 'ArrowLeft' && idx > 0) {\n group.setFocusedIndex(idx - 1)\n } else if (e.key === 'ArrowRight') {\n if (idx < group.values.length - 1) {\n group.setFocusedIndex(idx + 1)\n } else {\n // Move focus to input\n group.inputRef.current?.focus()\n group.setFocusedIndex(-1)\n }\n }\n }\n },\n [disabled, removable, onRemove, isGrouped, value, group],\n )\n\n const removeLabel = contentRef.current?.textContent\n ? `Remove ${contentRef.current.textContent}`\n : 'Remove'\n\n const tagContent = (\n <>\n <html.span ref={contentRef} {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n {children}\n </html.span>\n {removable && (\n <html.span {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n <html.button\n type=\"button\"\n aria-label={removeLabel}\n disabled={disabled}\n onClick={(e) => {\n ;(e as any).stopPropagation?.()\n onRemove()\n }}\n tabIndex={-1}\n style={[styles.removeButton, disabled && styles.removeButtonDisabled]}\n >\n <svg\n width={size === 'sm' ? 10 : 12}\n height={size === 'sm' ? 10 : 12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M3 3l6 6M9 3l-6 6\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n </html.span>\n )}\n </>\n )\n\n return (\n <html.span\n {...(isGrouped ? {role: 'row' as any} : {})}\n tabIndex={isGrouped ? 0 : undefined}\n onKeyDown={isGrouped ? (handleKeyDown as any) : undefined}\n style={[\n styles.base,\n sizeMap[size],\n removable && removableSizeMap[size],\n styles[variant],\n disabled && styles.disabled,\n wrap && styles.wrap,\n ]}\n >\n {tagContent}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n containerError: {},\n containerDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // Static display (no Input) — no gap needed\n containerStatic: {\n gap: 0,\n },\n list: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: spacing.xs,\n alignItems: 'center',\n },\n input: {\n width: '100%',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus': colors.accent,\n },\n borderRadius: radii.sm,\n backgroundColor: colors.bg,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n minHeight: sizes.controlLg,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus': borders.focusOffsetSm,\n },\n boxSizing: 'border-box',\n },\n inputError: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n})\n","import {\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {TagGroupContext, type TagGroupContextValue} from './TagGroupContext'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\n// ---------------------------------------------------------------------------\n// Local context accessor (non-throwing, returns null)\n// ---------------------------------------------------------------------------\n\nfunction useTagGroupCtx() {\n return useContext(TagGroupContext)\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Root\n// ---------------------------------------------------------------------------\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (values: string[]) => void\n /** Validate a value before adding. Return `true` if valid, or an error string. */\n onValidate?: (value: string) => true | string\n disabled?: boolean\n /** Form field name — renders hidden inputs for each tag value */\n name?: string\n 'aria-label'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n onValidate,\n disabled: disabledProp = false,\n name,\n 'aria-label': ariaLabel,\n children,\n}: RootProps) {\n const gridId = useId()\n const fieldCtx = useFieldContext()\n const [values, setValues] = useControllableValue(controlledValue, defaultValue, onValueChange)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [editable, setEditable] = useState(false)\n const [announcement, setAnnouncement] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const disabled = disabledProp || (fieldCtx?.disabled ?? false)\n const isInvalid = fieldCtx?.invalid ?? false\n\n const addTag = useCallback(\n (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) return\n if (values.includes(trimmed)) return\n if (onValidate) {\n const result = onValidate(trimmed)\n if (result !== true) return\n }\n setValues([...values, trimmed])\n setAnnouncement(`Added ${trimmed}`)\n },\n [values, setValues, onValidate],\n )\n\n const removeTag = useCallback(\n (value: string) => {\n const idx = values.indexOf(value)\n if (idx === -1) return\n const next = values.filter((v) => v !== value)\n setValues(next)\n setAnnouncement(`Removed ${value}`)\n\n // Focus management: move to next tag, or previous, or input\n if (next.length === 0) {\n inputRef.current?.focus()\n setFocusedIndex(-1)\n } else if (idx >= next.length) {\n setFocusedIndex(next.length - 1)\n } else {\n setFocusedIndex(idx)\n }\n },\n [values, setValues],\n )\n\n // Focus the tag at focusedIndex when it changes\n useEffect(() => {\n if (focusedIndex >= 0 && focusedIndex < values.length) {\n const container = document.getElementById(gridId)\n if (!container) return\n const rows = container.querySelectorAll('[role=\"row\"]')\n const target = rows[focusedIndex] as HTMLElement | undefined\n target?.focus()\n }\n }, [focusedIndex, gridId, values.length])\n\n const ctx = useMemo<TagGroupContextValue>(\n () => ({\n values,\n addTag,\n removeTag,\n editable,\n setEditable,\n disabled,\n validate: onValidate,\n focusedIndex,\n setFocusedIndex,\n inputRef,\n gridId,\n name,\n }),\n [values, addTag, removeTag, editable, disabled, onValidate, focusedIndex, gridId, name],\n )\n\n return (\n <TagGroupContext.Provider value={ctx}>\n <html.div style={styles.root} aria-label={ariaLabel}>\n <html.div\n style={[\n styles.container,\n !editable && styles.containerStatic,\n isInvalid && styles.containerError,\n disabled && styles.containerDisabled,\n ]}\n aria-describedby={\n fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n }\n aria-invalid={isInvalid || undefined}\n >\n {children}\n </html.div>\n\n {/* Hidden inputs for form submission */}\n {name && values.map((v) => <html.input key={v} type=\"hidden\" name={name} value={v} />)}\n\n {/* Live region for screen reader announcements */}\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={visuallyHidden.base}>\n {announcement}\n </html.div>\n </html.div>\n </TagGroupContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.List\n// ---------------------------------------------------------------------------\n\ninterface ListProps {\n children: ReactNode\n 'aria-label'?: string\n}\n\nfunction List({children, 'aria-label': ariaLabel}: ListProps) {\n const ctx = useTagGroupCtx()\n\n return (\n <html.div role={'grid' as any} aria-label={ariaLabel} id={ctx?.gridId} style={styles.list}>\n {children}\n </html.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Input\n// ---------------------------------------------------------------------------\n\ninterface InputProps {\n placeholder?: string\n}\n\nfunction Input({placeholder}: InputProps) {\n const ctx = useTagGroupCtx()\n const [inputValue, setInputValue] = useState('')\n const localRef = useRef<HTMLInputElement>(null)\n\n // Sync local ref with context inputRef\n useEffect(() => {\n if (ctx?.inputRef) {\n ;(ctx.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = localRef.current\n }\n })\n\n // Register as editable on mount\n useEffect(() => {\n ctx?.setEditable(true)\n return () => ctx?.setEditable(false)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const commitValueRef = useRef<(raw: string) => boolean>(() => false)\n commitValueRef.current = (raw: string) => {\n const trimmed = raw.trim()\n if (!trimmed || !ctx) return false\n ctx.addTag(trimmed)\n setInputValue('')\n return true\n }\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const el = localRef.current\n if (!el) return\n\n function handleKeyDown(e: KeyboardEvent) {\n if (!ctx) return\n const target = e.target as HTMLInputElement\n\n if (e.key === 'Enter' || e.key === ',' || e.key === ';') {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Tab' && target.value.trim()) {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Backspace' && !target.value && ctx.values.length > 0) {\n e.preventDefault()\n ctx.removeTag(ctx.values[ctx.values.length - 1])\n return\n }\n\n if (e.key === 'ArrowLeft' && (target.selectionStart ?? 0) === 0 && ctx.values.length > 0) {\n e.preventDefault()\n ctx.setFocusedIndex(ctx.values.length - 1)\n return\n }\n\n if (e.key === 'Escape') {\n setInputValue('')\n }\n }\n\n function handlePaste(e: ClipboardEvent) {\n if (!ctx) return\n const text = e.clipboardData?.getData('text') ?? ''\n const items = text\n .split(/[\\n,;]+/)\n .map((s) => s.trim())\n .filter(Boolean)\n if (items.length > 1) {\n e.preventDefault()\n for (const item of items) {\n ctx.addTag(item)\n }\n }\n }\n\n function handleFocus() {\n ctx?.setFocusedIndex(-1)\n }\n\n el.addEventListener('keydown', handleKeyDown)\n el.addEventListener('paste', handlePaste)\n el.addEventListener('focus', handleFocus)\n return () => {\n el.removeEventListener('keydown', handleKeyDown)\n el.removeEventListener('paste', handlePaste)\n el.removeEventListener('focus', handleFocus)\n }\n }, [ctx])\n\n return (\n <html.input\n ref={localRef as React.Ref<HTMLInputElement>}\n type=\"text\"\n value={inputValue}\n onChange={(e: any) => setInputValue(e.target.value)}\n placeholder={placeholder}\n disabled={ctx?.disabled}\n style={styles.input}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Namespace export\n// ---------------------------------------------------------------------------\n\nexport const TagGroup = {\n Root,\n List,\n Input,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typeScale, typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// The picked docs browser: the list is Reader.dc.html's `.toc` / `.tocitem`\n// (a hairline rail, the active item marked by the nav marker bar), the menu is\n// Mobile.dc.html's `.mtoc` (docs/mockups/docs-nav/).\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n fontFamily: typography.fontFamily,\n },\n caption: {\n marginBottom: spacing.sm,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase',\n color: colors.textMuted,\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n // the menu's list opens below its button, as a panel\n listMenu: {\n gap: 0,\n marginTop: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n backgroundColor: colors.bgCard,\n },\n item: {\n display: 'flex',\n flexDirection: 'column',\n },\n // On a touch screen (coarse pointer, as Toggle does) each item is a touch\n // target; a mouse keeps the artboard's compact rail.\n link: {\n display: {default: 'block', '@media (pointer: coarse)': 'flex'},\n alignItems: {default: null, '@media (pointer: coarse)': 'center'},\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n paddingTop: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightNormal,\n textDecorationLine: 'none',\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n cursor: 'pointer',\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // a touch target per item when the menu is the narrow-screen form\n linkMenu: {\n display: 'flex',\n alignItems: 'center',\n minHeight: sizes.touchTarget,\n },\n level3: {\n paddingLeft: `calc(${spacing.ms} + ${spacing.md})`,\n },\n // not colour alone: the marker bar and a heavier weight\n linkActive: {\n color: colors.text,\n fontWeight: typography.fontWeightMedium,\n boxShadow: `inset ${sizes.navMarkerW} 0 0 ${colors.accent}`,\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.sm,\n width: '100%',\n minHeight: sizes.touchTarget,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n textAlign: 'left',\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // the keyboard ring, inset so a neighbour or the panel edge never clips it\n focusable: {\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': `calc(-1 * ${borders.focusOffset})`,\n },\n },\n chevron: {\n color: colors.textMuted,\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(180deg)',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport type TableOfContentsVariant = 'list' | 'menu'\n\nexport interface TableOfContentsContextValue {\n /** the id of the section being read (an Item is active when its href is `#<value>`) */\n value: string | null\n variant: TableOfContentsVariant\n /** closes the menu variant's disclosure (no-op for the list) */\n close: () => void\n}\n\nexport const TableOfContentsContext = createContext<TableOfContentsContextValue | null>(null)\n\nexport function useTableOfContents() {\n const ctx = useContext(TableOfContentsContext)\n if (!ctx)\n throw new Error('TableOfContents compound components must be used within TableOfContents.Root')\n return ctx\n}\n","import {type ReactNode, useCallback, useId, useMemo, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {isPlainClick, type LinkClickEvent, type OnNavigate} from '../../shared/navigate'\nimport {\n TableOfContentsContext,\n useTableOfContents,\n type TableOfContentsVariant,\n} from './TableOfContentsContext'\n\n/* TableOfContents — the \"On this page\" list of a long page's sections: a\n * labelled `nav` of in-page links. The section being read is `value`; its item\n * carries `aria-current=\"location\"` and a marker bar plus a heavier weight, so\n * colour is never the only cue. Which section is being read is the app's to\n * work out (an IntersectionObserver over the headings): the component does no\n * scroll-spy.\n *\n * `variant=\"menu\"` is the narrow-screen form: a disclosure button (with\n * `aria-expanded`) that shows the same list below it, and closes again when an\n * item is followed or on Escape. */\n\n// --- Root ---\n\n/**\n * The disclosure state (`open`, `defaultOpen`, `onOpenChange`) exists only on\n * the menu: the list variant has no button, so it takes none of them.\n */\ntype RootProps = {\n /** Names the landmark (\"On this page\"); required, from your text catalog. */\n 'aria-label': string\n /** The id of the section being read; the Item whose href is `#<value>` is active. */\n value?: string | null\n /**\n * Visible title: the caption above the list, or the menu button's text.\n * The menu button falls back to `aria-label`; the list shows none without it.\n */\n label?: ReactNode\n children: ReactNode\n} & (\n | {\n /** `list` (default) for a sidebar; `menu` for a narrow screen, behind a disclosure button (only `menu` takes open / defaultOpen / onOpenChange). */\n variant?: 'list'\n open?: never\n defaultOpen?: never\n onOpenChange?: never\n }\n | {\n /** `list` (default) for a sidebar; `menu` for a narrow screen, behind a disclosure button (only `menu` takes open / defaultOpen / onOpenChange). */\n variant: 'menu'\n /** Whether the list is shown (controlled). */\n open?: boolean\n /** Whether the list starts shown (uncontrolled; default false). */\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n }\n)\n\nfunction Root({\n 'aria-label': ariaLabel,\n value = null,\n variant = 'list',\n label,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n children,\n}: RootProps) {\n const [open, setOpen] = useControllableValue(openProp, defaultOpen, onOpenChange)\n const listId = useId()\n const triggerRef = useRef<HTMLButtonElement>(null)\n const isMenu = variant === 'menu'\n\n const close = useCallback(() => {\n if (isMenu && open) setOpen(false)\n }, [isMenu, open, setOpen])\n\n const ctx = useMemo(() => ({value, variant, close}), [value, variant, close])\n\n const list = (\n <html.ul id={isMenu ? listId : undefined} style={[styles.list, isMenu && styles.listMenu]}>\n {children}\n </html.ul>\n )\n\n return (\n <TableOfContentsContext.Provider value={ctx}>\n <html.nav\n aria-label={ariaLabel}\n onKeyDown={(e: {key: string}) => {\n if (isMenu && open && e.key === 'Escape') {\n setOpen(false)\n triggerRef.current?.focus()\n }\n }}\n style={styles.root}\n >\n {isMenu ? (\n <>\n <html.button\n ref={triggerRef}\n type=\"button\"\n aria-expanded={open}\n aria-controls={open ? listId : undefined}\n onClick={() => setOpen(!open)}\n style={[styles.trigger, styles.focusable]}\n >\n <html.span>{label ?? ariaLabel}</html.span>\n <html.span aria-hidden style={[styles.chevron, open && styles.chevronOpen]}>\n ▾\n </html.span>\n </html.button>\n {open ? list : null}\n </>\n ) : (\n <>\n {label != null ? <html.div style={styles.caption}>{label}</html.div> : null}\n {list}\n </>\n )}\n </html.nav>\n </TableOfContentsContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n /** The section's anchor, `#<heading id>`. */\n href: string\n /** The heading's level: 2, or 3 (indented under the 2 before it). */\n level?: 2 | 3\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key). Call `event.preventDefault()`, then scroll or navigate yourself.\n */\n onNavigate?: OnNavigate\n children: ReactNode\n}\n\nfunction Item({href, level = 2, onNavigate, children}: ItemProps) {\n const {value, variant, close} = useTableOfContents()\n const active = value != null && href === `#${value}`\n return (\n <html.li style={styles.item}>\n <html.a\n href={href}\n aria-current={active ? 'location' : undefined}\n onClick={(e: LinkClickEvent) => {\n if (!isPlainClick(e)) return\n onNavigate?.(href, e)\n close()\n }}\n style={[\n styles.link,\n styles.focusable,\n variant === 'menu' && styles.linkMenu,\n level === 3 && styles.level3,\n active && styles.linkActive,\n ]}\n >\n {children}\n </html.a>\n </html.li>\n )\n}\n\nexport const TableOfContents = {\n Root,\n Item,\n}\n\nexport type {TableOfContentsVariant}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n rootVertical: {\n flexDirection: 'row',\n },\n list: {\n display: 'flex',\n flexDirection: 'row',\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n gap: spacing.xs,\n // Positioning context for the sliding indicator.\n position: 'relative',\n },\n listVertical: {\n flexDirection: 'column',\n borderBottomWidth: 0,\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n gap: 0,\n },\n tab: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderBottomWidth: borders.strong,\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n cursor: 'pointer',\n transitionProperty: 'color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': `calc(-1 * ${borders.focusOffset})`,\n },\n },\n tabVertical: {\n justifyContent: 'flex-start',\n borderBottomWidth: 0,\n borderRightWidth: borders.strong,\n borderRightStyle: 'solid',\n borderRightColor: 'transparent',\n },\n tabActiveHorizontal: {\n color: colors.text,\n borderBottomColor: colors.accent,\n },\n tabActiveVertical: {\n color: colors.text,\n borderRightColor: colors.accent,\n },\n // Applied to the active tab once JS drives the sliding indicator: drop the\n // per-tab accent border so the single sliding bar is the only underline\n // (avoids a double line and an instant-pop that would undercut the slide).\n tabIndicatorActive: {\n borderBottomColor: 'transparent',\n borderRightColor: 'transparent',\n },\n // --- Sliding active indicator (positioned by measuring the active tab) ---\n indicator: {\n position: 'absolute',\n backgroundColor: colors.accent,\n pointerEvents: 'none',\n transitionProperty: 'transform, width, height',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.easeOut,\n },\n indicatorHorizontal: {\n bottom: -1,\n left: 0,\n height: sizes.tabIndicator,\n },\n indicatorVertical: {\n right: -1,\n top: 0,\n width: sizes.tabIndicator,\n },\n // Dynamic transform/size from the measured active tab (StyleX dynamic style:\n // simple identifier params only).\n indicatorOffsetH: (offset: number, size: number) => ({\n transform: `translateX(${offset}px)`,\n width: size,\n }),\n indicatorOffsetV: (offset: number, size: number) => ({\n transform: `translateY(${offset}px)`,\n height: size,\n }),\n tabDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n color: colors.textMuted,\n },\n panel: {\n paddingTop: spacing.md,\n },\n panelVertical: {\n paddingTop: 0,\n paddingLeft: spacing.md,\n },\n})\n","import {createContext, useContext} from 'react'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface TabsContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n orientation: Orientation\n registerTab: (value: string, disabled: boolean) => () => void\n tabsRef: React.RefObject<Map<string, boolean>>\n orderRef: React.RefObject<string[]>\n // True once the List has measured the active tab and is driving a sliding\n // indicator. Tabs suppress their own accent border while it's true so the\n // single sliding bar is the only underline; it stays false without JS\n // (SSR / no-hydration), where the per-tab border is the graceful fallback.\n indicatorActive: boolean\n setIndicatorActive: (active: boolean) => void\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport function useTabs() {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error('Tabs compound components must be used within Tabs.Root')\n return ctx\n}\n","import {useCallback, useRef, useState} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {Orientation, TabsContextValue} from './TabsContext'\n\ninterface UseTabsRootOptions {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: Orientation\n}\n\nexport function useTabsRoot({\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: UseTabsRootOptions): TabsContextValue {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const tabsRef = useRef(new Map<string, boolean>())\n const orderRef = useRef<string[]>([])\n const [indicatorActive, setIndicatorActive] = useState(false)\n\n const registerTab = useCallback((value: string, disabled: boolean) => {\n tabsRef.current.set(value, disabled)\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n tabsRef.current.delete(value)\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return {\n activeValue,\n onSelect,\n orientation,\n registerTab,\n tabsRef,\n orderRef,\n indicatorActive,\n setIndicatorActive,\n }\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {TabsContext, useTabs} from './TabsContext'\nimport {useTabsRoot} from './useTabsRoot'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n}\n\nfunction Root({\n children,\n value,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: RootProps) {\n const ctx = useTabsRoot({value, defaultValue, onValueChange, orientation})\n\n return (\n <TabsContext.Provider value={ctx}>\n <html.div style={[styles.root, orientation === 'vertical' && styles.rootVertical]}>\n {children}\n </html.div>\n </TabsContext.Provider>\n )\n}\n\n// --- List ---\n\ninterface ListProps {\n children: ReactNode\n}\n\nfunction List({children}: ListProps) {\n const {orientation, activeValue, onSelect, tabsRef, orderRef, setIndicatorActive} = useTabs()\n const listRef = useRef<HTMLDivElement>(null)\n const [indicator, setIndicator] = useState<{offset: number; size: number} | null>(null)\n\n // Measure the active tab and drive the sliding indicator. useLayoutEffect so\n // the first position is set before paint (the indicator element mounts already\n // in place — no slide-in from zero; only later tab changes animate). Observes\n // the active tab (its own size, e.g. a changing \"(3)\" count) and the list\n // (container resize / reflow). A non-active sibling resizing while you're on\n // another tab is the one case not caught; it self-corrects on the next\n // selection or resize.\n useLayoutEffect(() => {\n const list = listRef.current\n if (!list || !activeValue) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const el = list.querySelector<HTMLElement>(`[data-tab-value=\"${CSS.escape(activeValue)}\"]`)\n if (!el) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const measure = () => {\n setIndicator(\n orientation === 'horizontal'\n ? {offset: el.offsetLeft, size: el.offsetWidth}\n : {offset: el.offsetTop, size: el.offsetHeight},\n )\n setIndicatorActive(true)\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n ro.observe(list)\n return () => ro.disconnect()\n }, [activeValue, orientation, setIndicatorActive])\n\n useEffect(() => {\n const el = listRef.current\n if (!el) return\n const listEl = el\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const tabs = tabsRef.current\n if (order.length === 0) return\n\n const prevKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'\n const nextKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown'\n\n let targetValue: string | null = null\n\n switch (e.key) {\n case nextKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : -1\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx + i) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case prevKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : 0\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx - i + order.length) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'Home': {\n e.preventDefault()\n for (const val of order) {\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'End': {\n e.preventDefault()\n for (let i = order.length - 1; i >= 0; i--) {\n if (!tabs.get(order[i])) {\n targetValue = order[i]\n break\n }\n }\n break\n }\n }\n\n if (targetValue) {\n onSelect(targetValue)\n // Focus the newly activated tab button\n const tabEl = listEl.querySelector(\n `[data-tab-value=\"${targetValue}\"]`,\n ) as HTMLElement | null\n tabEl?.focus()\n }\n }\n\n el.addEventListener('keydown', handleKeyDown)\n return () => el.removeEventListener('keydown', handleKeyDown)\n }, [orientation, activeValue, onSelect, tabsRef, orderRef])\n\n return (\n <html.div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n style={[styles.list, orientation === 'vertical' && styles.listVertical]}\n >\n {children}\n {indicator && (\n <html.div\n aria-hidden\n style={[\n styles.indicator,\n orientation === 'horizontal' ? styles.indicatorHorizontal : styles.indicatorVertical,\n orientation === 'horizontal'\n ? styles.indicatorOffsetH(indicator.offset, indicator.size)\n : styles.indicatorOffsetV(indicator.offset, indicator.size),\n ]}\n />\n )}\n </html.div>\n )\n}\n\n// --- Tab ---\n\ninterface TabProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Tab({value, disabled = false, children}: TabProps) {\n const {activeValue, onSelect, orientation, registerTab, indicatorActive} = useTabs()\n const isActive = activeValue === value\n const tabId = useId()\n const panelId = `${tabId}-panel`\n\n useEffect(() => {\n return registerTab(value, disabled)\n }, [value, disabled, registerTab])\n\n const handleClick = () => {\n if (!disabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.button\n type=\"button\"\n role=\"tab\"\n id={tabId}\n aria-selected={isActive}\n aria-controls={panelId}\n aria-disabled={disabled || undefined}\n data-tab-value={value}\n tabIndex={isActive ? 0 : -1}\n onClick={handleClick}\n style={[\n styles.tab,\n orientation === 'vertical' && styles.tabVertical,\n isActive &&\n (orientation === 'vertical' ? styles.tabActiveVertical : styles.tabActiveHorizontal),\n isActive && indicatorActive && styles.tabIndicatorActive,\n disabled && styles.tabDisabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Panel ---\n\ninterface PanelProps {\n value: string\n children: ReactNode\n}\n\nfunction Panel({value, children}: PanelProps) {\n const {activeValue, orientation} = useTabs()\n\n if (activeValue !== value) return null\n\n return (\n <html.div\n role=\"tabpanel\"\n style={[styles.panel, orientation === 'vertical' && styles.panelVertical]}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tabs = {\n Root,\n List,\n Tab,\n Panel,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n // Two columns — row labels, date track — with the axis as the first row.\n root: {\n display: 'grid',\n gridTemplateColumns: `${sizes.timelineLabelW} 1fr`,\n rowGap: spacing.xs,\n color: colors.text,\n },\n heading: {\n display: 'flex',\n alignItems: 'flex-end',\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n axis: {\n position: 'relative',\n height: sizes.chip,\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n whiteSpace: 'nowrap',\n },\n tick: {\n position: 'absolute',\n top: 0,\n paddingLeft: spacing.xs,\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n todayLabel: {\n position: 'absolute',\n bottom: 0,\n transform: 'translateX(-50%)',\n color: colors.errorText,\n fontWeight: typography.fontWeightMedium,\n },\n left: (percent: number) => ({left: `${percent}%`}),\n width: (percent: number) => ({width: `${percent}%`}),\n label: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n minWidth: 0,\n paddingRight: spacing.sm,\n },\n labelText: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n labelDescription: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n whiteSpace: 'nowrap',\n },\n track: {\n position: 'relative',\n height: sizes.controlMd,\n },\n today: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n borderLeftWidth: borders.strong,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.error,\n pointerEvents: 'none',\n zIndex: 2,\n },\n bar: {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n boxSizing: 'border-box',\n height: sizes.controlSm,\n },\n face: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n boxSizing: 'border-box',\n width: '100%',\n height: '100%',\n padding: 0,\n overflow: 'hidden',\n borderRadius: radii.xs,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {default: colors.border, ':hover': colors.accent},\n backgroundColor: colors.bg,\n color: colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n transitionProperty: 'box-shadow, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n },\n faceSelected: {\n borderColor: colors.accent,\n boxShadow: `0 0 0 ${microSpacing.px1} ${colors.accent}`,\n },\n barPlanned: {\n borderStyle: 'dashed',\n },\n barDone: {\n backgroundColor: colors.successBg,\n },\n fill: {\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n backgroundColor: colors.infoBg,\n borderRightWidth: borders.strong,\n borderRightStyle: 'solid',\n borderRightColor: colors.accent,\n },\n fillDone: {\n backgroundColor: colors.successBg,\n borderRightColor: colors.success,\n },\n barText: {\n position: 'relative',\n paddingLeft: spacing.sm,\n fontSize: typography.fontSizeXs,\n fontVariantNumeric: 'tabular-nums',\n whiteSpace: 'nowrap',\n },\n // The edges: keyboard sliders, drawn only while focused.\n edge: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: spacing.sm,\n borderRadius: radii.xs,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n backgroundColor: {default: 'transparent', ':focus-visible': colors.accent},\n zIndex: 3,\n },\n edgeStart: {\n left: `calc(-1 * ${spacing.xs})`,\n },\n edgeEnd: {\n right: `calc(-1 * ${spacing.xs})`,\n },\n})\n","import {createContext, useContext, useMemo, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DragDrop, type DragDropItemData, type DragDropVerdict} from '../DragDrop/DragDrop'\nimport {styles} from './styles.css'\n\n// ---------------------------------------------------------------------------\n// Timeline — rows of date bars against a date axis: milestones, releases,\n// sprints. Dates are calendar days ('YYYY-MM-DD', read as UTC) so a bar\n// never shifts with the viewer's time zone.\n//\n// A bar is a toggle button (select it) with a progress fill, and can be a\n// DragDrop.Zone target (`dropZone`) inside a DragDrop.Root. Its two edges are\n// sliders whose value text is a date: Left/Right move a day, PageUp/PageDown\n// a week, Home/End to the limit. They are keyboard-only — there is no\n// pointer drag of an edge.\n// ---------------------------------------------------------------------------\n\n/** A calendar day, 'YYYY-MM-DD'. */\nexport type TimelineDate = string\n\nconst DAY_MS = 86_400_000\n\nconst dayOf = (date: TimelineDate): number => Math.floor(Date.parse(`${date}T00:00:00Z`) / DAY_MS)\nconst dateOf = (day: number): TimelineDate => new Date(day * DAY_MS).toISOString().slice(0, 10)\n\ninterface TimelineContextValue {\n readonly first: number\n readonly days: number\n readonly today: number | null\n readonly todayLabel: string\n readonly formatDate: (date: TimelineDate) => string\n}\n\nconst TimelineContext = createContext<TimelineContextValue | null>(null)\n\nconst useTimeline = (part: string) => {\n const ctx = useContext(TimelineContext)\n if (!ctx) throw new Error(`Timeline.${part} must be used within Timeline.Root`)\n return ctx\n}\n\n/** Percent of the axis from its first day to `day`. */\nconst at = (ctx: TimelineContextValue, day: number) => ((day - ctx.first) / ctx.days) * 100\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport interface TimelineRootProps {\n /** First day on the axis. */\n start: TimelineDate\n /** Last day on the axis (included). */\n end: TimelineDate\n /** Draws the today marker when inside the range. */\n today?: TimelineDate\n /** The timeline's accessible name. */\n 'aria-label': string\n /** Text above the row labels, e.g. \"Milestones\". */\n heading?: ReactNode\n /** The today marker's text. */\n todayLabel?: string\n /** BCP 47 locale for the default date format. */\n locale?: string\n /** Formats a day for the axis and the edge sliders' value text. */\n formatDate?: (date: TimelineDate) => string\n children: ReactNode\n}\n\nfunction Root({\n start,\n end,\n today,\n 'aria-label': ariaLabel,\n heading,\n todayLabel = 'Today',\n locale,\n formatDate,\n children,\n}: TimelineRootProps) {\n const ctx = useMemo<TimelineContextValue>(() => {\n const first = dayOf(start)\n const days = Math.max(dayOf(end) - first + 1, 1)\n const t = today === undefined ? null : dayOf(today)\n return {\n first,\n days,\n today: t !== null && t >= first && t < first + days ? t : null,\n todayLabel,\n formatDate:\n formatDate ??\n ((date) =>\n new Date(`${date}T00:00:00Z`).toLocaleDateString(locale, {\n day: 'numeric',\n month: 'short',\n timeZone: 'UTC',\n })),\n }\n }, [start, end, today, todayLabel, locale, formatDate])\n\n // Daily ticks for up to three weeks, weekly beyond.\n const step = ctx.days > 21 ? 7 : 1\n const ticks: number[] = []\n for (let d = ctx.first; d < ctx.first + ctx.days; d += step) ticks.push(d)\n\n return (\n <TimelineContext.Provider value={ctx}>\n <html.div role=\"group\" aria-label={ariaLabel} style={styles.root}>\n <html.div style={styles.heading}>{heading}</html.div>\n <html.div aria-hidden style={styles.axis}>\n {ticks.map((d) => (\n <html.span key={d} style={[styles.tick, styles.left(at(ctx, d))]}>\n {ctx.formatDate(dateOf(d))}\n </html.span>\n ))}\n {ctx.today !== null && (\n <html.span style={[styles.todayLabel, styles.left(at(ctx, ctx.today + 0.5))]}>\n {todayLabel}\n </html.span>\n )}\n </html.div>\n {children}\n </html.div>\n </TimelineContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Row\n// ---------------------------------------------------------------------------\n\nexport interface TimelineRowProps {\n /** The row's name, shown in the label column. */\n label: string\n /** A second line under the label, e.g. \"4 of 7 done\". */\n description?: ReactNode\n children?: ReactNode\n}\n\nfunction Row({label, description, children}: TimelineRowProps) {\n const ctx = useTimeline('Row')\n return (\n <>\n <html.div style={styles.label}>\n <html.span style={styles.labelText}>{label}</html.span>\n {description !== undefined && (\n <html.span style={styles.labelDescription}>{description}</html.span>\n )}\n </html.div>\n <html.div role=\"group\" aria-label={label} style={styles.track}>\n {ctx.today !== null && (\n <html.div aria-hidden style={[styles.today, styles.left(at(ctx, ctx.today + 0.5))]} />\n )}\n {children}\n </html.div>\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Bar\n// ---------------------------------------------------------------------------\n\nexport interface TimelineBarDropZone<T = unknown> {\n /** The DragDrop zone id; drops arrive in the Root's onDrop with it. */\n id: string\n /** Read to screen readers when an item moves or drops here. */\n label: string\n accepts?: (item: DragDropItemData<T>) => DragDropVerdict\n}\n\nexport interface TimelineBarProps<T = unknown> {\n start: TimelineDate\n end: TimelineDate\n /** The bar's accessible name. */\n label: string\n /** Done fraction, 0–1, drawn as a fill from the start edge. */\n progress?: number\n /** `planned` draws a dashed outline; `done` the success tone. */\n tone?: 'default' | 'planned' | 'done'\n /** Makes the bar a toggle button (aria-pressed). */\n selected?: boolean\n onSelect?: () => void\n /** Adds the start-edge slider. */\n onStartChange?: (date: TimelineDate) => void\n /** Adds the end-edge slider. */\n onEndChange?: (date: TimelineDate) => void\n /** Names of the edge sliders; default \"<label>, start\" / \"<label>, end\". */\n startLabel?: string\n endLabel?: string\n /** Makes the bar a DragDrop.Zone (needs a DragDrop.Root above). */\n dropZone?: TimelineBarDropZone<T>\n /** Text inside the bar, e.g. \"4/7\". */\n children?: ReactNode\n}\n\nconst toneStyle = {\n default: null,\n planned: styles.barPlanned,\n done: styles.barDone,\n} as const\n\nfunction Bar<T = unknown>({\n start,\n end,\n label,\n progress,\n tone = 'default',\n selected,\n onSelect,\n onStartChange,\n onEndChange,\n startLabel,\n endLabel,\n dropZone,\n children,\n}: TimelineBarProps<T>) {\n const ctx = useTimeline('Bar')\n const s = dayOf(start)\n const e = dayOf(end)\n const left = at(ctx, s)\n const width = ((e - s + 1) / ctx.days) * 100\n const last = ctx.first + ctx.days - 1\n\n const face = (\n <>\n <html.button\n type=\"button\"\n aria-label={label}\n aria-pressed={selected}\n onClick={onSelect}\n style={[styles.face, toneStyle[tone], selected === true && styles.faceSelected]}\n >\n {progress !== undefined && progress > 0 && (\n <html.span\n aria-hidden\n style={[\n styles.fill,\n tone === 'done' && styles.fillDone,\n styles.width(Math.min(Math.max(progress, 0), 1) * 100),\n ]}\n />\n )}\n {children !== undefined && <html.span style={styles.barText}>{children}</html.span>}\n </html.button>\n {onStartChange && (\n <EdgeSlider\n edge=\"start\"\n label={startLabel ?? `${label}, start`}\n day={s}\n min={ctx.first}\n max={e}\n onChange={onStartChange}\n />\n )}\n {onEndChange && (\n <EdgeSlider\n edge=\"end\"\n label={endLabel ?? `${label}, end`}\n day={e}\n min={s}\n max={last}\n onChange={onEndChange}\n />\n )}\n </>\n )\n\n return (\n <html.div style={[styles.bar, styles.left(left), styles.width(width)]}>\n {dropZone ? (\n <DragDrop.Zone<T> id={dropZone.id} label={dropZone.label} accepts={dropZone.accepts} fill>\n {face}\n </DragDrop.Zone>\n ) : (\n face\n )}\n </html.div>\n )\n}\n\nfunction EdgeSlider({\n edge,\n label,\n day,\n min,\n max,\n onChange,\n}: {\n edge: 'start' | 'end'\n label: string\n day: number\n min: number\n max: number\n onChange: (date: TimelineDate) => void\n}) {\n const ctx = useTimeline('Bar')\n const onKeyDown = (event: unknown) => {\n const e = event as {key: string; preventDefault(): void}\n const by: Record<string, number> = {\n ArrowLeft: -1,\n ArrowDown: -1,\n ArrowRight: 1,\n ArrowUp: 1,\n PageDown: -7,\n PageUp: 7,\n }\n let next: number\n if (e.key in by) next = day + by[e.key]\n else if (e.key === 'Home') next = min\n else if (e.key === 'End') next = max\n else return\n e.preventDefault()\n next = Math.min(Math.max(next, min), max)\n if (next !== day) onChange(dateOf(next))\n }\n return (\n <html.div\n role=\"slider\"\n tabIndex={0}\n aria-label={label}\n aria-orientation=\"horizontal\"\n aria-valuemin={min - ctx.first}\n aria-valuemax={max - ctx.first}\n aria-valuenow={day - ctx.first}\n aria-valuetext={ctx.formatDate(dateOf(day))}\n onKeyDown={onKeyDown}\n style={[styles.edge, edge === 'start' ? styles.edgeStart : styles.edgeEnd]}\n />\n )\n}\n\nexport const Timeline = {Root, Row, Bar}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n },\n // The `role=\"group\"` holding a branch's children: purely structural.\n group: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n },\n // The treeitem carries focus; its row draws the ring (the item also wraps\n // its children, so a ring on it would circle the whole branch).\n item: {\n display: 'flex',\n flexDirection: 'column',\n outlineWidth: 0,\n outlineStyle: 'none',\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: microSpacing.px5,\n paddingBottom: microSpacing.px5,\n paddingRight: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n borderRadius: radii.sm,\n cursor: 'pointer',\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // the row of an item with href: a real link that looks like the others\n rowLink: {\n textDecorationLine: 'none',\n outlineWidth: 0,\n outlineStyle: 'none',\n },\n // one indent step per level below the top\n indent: (level: number) => ({\n paddingLeft: `calc(${spacing.sm} + ${Math.max(0, level - 1)} * ${spacing.lg})`,\n }),\n rowFocused: {\n outlineWidth: borders.focusRing,\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: `calc(-1 * ${borders.focusOffset})`,\n },\n rowSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n backgroundColor: colors.bgCardHover,\n },\n chevron: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.glyphMd,\n flexShrink: 0,\n color: colors.textMuted,\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(90deg)',\n },\n // a leaf keeps the chevron's width (labels align) but shows nothing\n chevronLeaf: {\n visibility: 'hidden',\n },\n label: {\n flexGrow: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n meta: {\n flexShrink: 0,\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface TreeContextValue {\n /** the selected item's value (single selection), or null */\n selectedValue: string | null\n onSelect: (value: string) => void\n isExpanded: (value: string) => boolean\n toggle: (value: string) => void\n setExpanded: (value: string, expanded: boolean) => void\n /** the item holding the tree's single tab stop (roving tabindex) */\n focusValue: string | null\n setFocusValue: (value: string) => void\n /** the focus holder is focused from the keyboard (draws its ring) */\n keyboardFocus: boolean\n}\n\nexport const TreeContext = createContext<TreeContextValue | null>(null)\n\nexport function useTree() {\n const ctx = useContext(TreeContext)\n if (!ctx) throw new Error('Tree compound components must be used within Tree.Root')\n return ctx\n}\n\n/** The nesting depth of the items rendered here (1 = top level). */\nexport const TreeLevelContext = createContext(1)\n","import {\n Children,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {TreeContext, TreeLevelContext, useTree} from './TreeContext'\nimport {isPlainClick, type LinkClickEvent, type OnNavigate} from '../../shared/navigate'\n\n/* Tree — a hierarchy of items (the WAI-ARIA tree pattern): single selection,\n * expandable branches, one tab stop (roving tabindex), and the keyboard of a\n * file explorer — ↑/↓ move between visible items, → opens a branch then goes\n * to its first child, ← closes it then goes to the parent, Home/End, Enter\n * or Space select, and typing jumps to the next item whose label starts with\n * the typed letters.\n *\n * An item with `href` renders its row as a real link (cmd-click opens a tab,\n * \"Copy link\" works) that stays out of the tab order: the treeitem keeps the\n * single tab stop and the keyboard above, and Enter or Space on it follows\n * the link, through `onNavigate` when given. */\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** accessible name of the tree (or give `aria-labelledby`) */\n 'aria-label'?: string\n 'aria-labelledby'?: string\n /** the selected item (controlled) */\n value?: string | null\n defaultValue?: string | null\n onValueChange?: (value: string) => void\n /** the open branches (controlled) */\n expanded?: ReadonlyArray<string>\n defaultExpanded?: ReadonlyArray<string>\n onExpandedChange?: (expanded: string[]) => void\n}\n\nconst TYPEAHEAD_RESET_MS = 500\n\nfunction Root({\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n value,\n defaultValue = null,\n onValueChange,\n expanded,\n defaultExpanded = [],\n onExpandedChange,\n}: RootProps) {\n const [selectedInner, setSelectedInner] = useState<string | null>(defaultValue)\n const selectedValue = value !== undefined ? value : selectedInner\n const [expandedInner, setExpandedInner] = useState<ReadonlyArray<string>>(defaultExpanded)\n const open = expanded ?? expandedInner\n const [focusValue, setFocusValue] = useState<string | null>(selectedValue)\n // the ring shows on the focused ROW (the item wraps its children, so a\n // ring on it would circle the whole branch), only for keyboard focus —\n // the tree's own :focus-visible\n const [keyboardFocus, setKeyboardFocus] = useState(false)\n const rootRef = useRef<HTMLUListElement>(null)\n\n const onSelect = useCallback(\n (v: string) => {\n if (value === undefined) setSelectedInner(v)\n onValueChange?.(v)\n },\n [value, onValueChange],\n )\n const setExpanded = useCallback(\n (v: string, isOpen: boolean) => {\n const next = isOpen ? [...new Set([...open, v])] : open.filter((x) => x !== v)\n if (next.length === open.length && next.every((x, i) => x === open[i])) return\n if (expanded === undefined) setExpandedInner(next)\n onExpandedChange?.(next)\n },\n [open, expanded, onExpandedChange],\n )\n const isExpanded = useCallback((v: string) => open.includes(v), [open])\n const toggle = useCallback((v: string) => setExpanded(v, !open.includes(v)), [open, setExpanded])\n\n // Exactly one item is tabbable: the focus holder, else the selection, else\n // the first item — re-checked when an item appears, closes or goes away.\n useLayoutEffect(() => {\n const root = rootRef.current\n if (!root) return\n const tabbable = root.querySelector('[role=\"treeitem\"][tabindex=\"0\"]')\n if (tabbable) return\n const first = root.querySelector<HTMLElement>('[role=\"treeitem\"]')\n const next = first?.dataset.treeValue ?? null\n if (next !== focusValue) setFocusValue(next)\n }, [focusValue, open, children])\n\n // Keyboard: DOM order over the rendered items IS the visible order (a\n // closed branch renders no children), so navigation reads it directly.\n const typeahead = useRef({text: '', at: 0})\n useEffect(() => {\n const root = rootRef.current\n if (!root) return\n const rootEl = root\n const items = () => Array.from(rootEl.querySelectorAll<HTMLElement>('[role=\"treeitem\"]'))\n const focusItem = (el: HTMLElement | null | undefined) => {\n if (!el) return\n el.focus()\n }\n function onKeyDown(e: KeyboardEvent) {\n const current = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]')\n if (!current || !rootEl.contains(current)) return\n const list = items()\n const i = list.indexOf(current)\n const val = current.dataset.treeValue ?? ''\n const isOpen = current.getAttribute('aria-expanded')\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n focusItem(list[i + 1])\n return\n case 'ArrowUp':\n e.preventDefault()\n focusItem(list[i - 1])\n return\n case 'ArrowRight':\n e.preventDefault()\n if (isOpen === 'false') setExpanded(val, true)\n else if (isOpen === 'true') focusItem(list[i + 1])\n return\n case 'ArrowLeft': {\n e.preventDefault()\n if (isOpen === 'true') {\n setExpanded(val, false)\n return\n }\n const parent = current.parentElement?.closest<HTMLElement>('[role=\"treeitem\"]')\n if (parent && rootEl.contains(parent)) focusItem(parent)\n return\n }\n case 'Home':\n e.preventDefault()\n focusItem(list[0])\n return\n case 'End':\n e.preventDefault()\n focusItem(list[list.length - 1])\n return\n case 'Enter':\n case ' ': {\n e.preventDefault()\n // an item with href: follow its link (the click selects it and\n // runs onNavigate, or the browser navigates)\n const link = current.querySelector<HTMLElement>(':scope > [data-tree-link]')\n if (link) link.click()\n else onSelect(val)\n return\n }\n }\n // typeahead: a printable character, no modifier\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n const now = Date.now()\n const t = typeahead.current\n t.text = now - t.at > TYPEAHEAD_RESET_MS ? e.key : t.text + e.key\n t.at = now\n // the same letter typed again cycles through the items it starts;\n // a real prefix (\"fi\") narrows, and may match the current item\n const typed = t.text.toLocaleLowerCase()\n const repeat = [...typed].every((c) => c === typed[0])\n const needle = repeat ? typed[0] : typed\n const start = repeat ? i + 1 : i\n for (let k = 0; k < list.length; k++) {\n const el = list[(start + k) % list.length]\n if ((el.dataset.treeText ?? '').toLocaleLowerCase().startsWith(needle)) {\n focusItem(el)\n break\n }\n }\n }\n }\n // the roving tab stop follows focus, however it moved (keys or pointer)\n function onFocusIn(e: FocusEvent) {\n const item = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]')\n const v = item?.dataset.treeValue\n if (v) setFocusValue(v)\n setKeyboardFocus(item?.matches(':focus-visible') ?? false)\n }\n function onFocusOut(e: FocusEvent) {\n if (!rootEl.contains(e.relatedTarget as Node | null)) setKeyboardFocus(false)\n }\n const onPointerDown = () => setKeyboardFocus(false)\n const onKey = () => setKeyboardFocus(true)\n root.addEventListener('keydown', onKeyDown)\n root.addEventListener('keydown', onKey)\n root.addEventListener('focusin', onFocusIn)\n root.addEventListener('focusout', onFocusOut)\n root.addEventListener('pointerdown', onPointerDown)\n return () => {\n root.removeEventListener('keydown', onKeyDown)\n root.removeEventListener('keydown', onKey)\n root.removeEventListener('focusin', onFocusIn)\n root.removeEventListener('focusout', onFocusOut)\n root.removeEventListener('pointerdown', onPointerDown)\n }\n }, [onSelect, setExpanded])\n\n return (\n <TreeContext.Provider\n value={{\n selectedValue,\n onSelect,\n isExpanded,\n toggle,\n setExpanded,\n focusValue,\n setFocusValue,\n keyboardFocus,\n }}\n >\n <TreeLevelContext.Provider value={1}>\n <html.ul\n ref={rootRef}\n role=\"tree\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n style={styles.root}\n >\n {children}\n </html.ul>\n </TreeLevelContext.Provider>\n </TreeContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n /** unique within the tree */\n value: string\n /** what the row shows */\n label: ReactNode\n /** plain text for typeahead when `label` isn't a string */\n textValue?: string\n /** nested items: the branch's children (none = a leaf) */\n children?: ReactNode\n /** trailing content on the row (a count, a status) */\n meta?: ReactNode\n /**\n * Makes the row a link to this URL. A plain click (or Enter / Space)\n * selects the item and calls `onNavigate`; a modified click keeps the\n * browser default (new tab, new window) and does not select.\n */\n href?: string\n /**\n * Client-side navigation for `href`: called for a plain primary click. Call\n * `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n}\n\nfunction Item({value, label, textValue, children, meta, href, onNavigate}: ItemProps) {\n const {selectedValue, onSelect, isExpanded, toggle, focusValue, keyboardFocus} = useTree()\n const level = useContext(TreeLevelContext)\n const hasChildren = Children.count(children) > 0\n const open = hasChildren && isExpanded(value)\n const selected = selectedValue === value\n const text = textValue ?? (typeof label === 'string' ? label : '')\n // named by its own label only: a branch's content includes its children,\n // and a name computed from content would read the whole subtree\n const labelId = useId()\n const rowStyles = [\n styles.indent(level),\n selected && styles.rowSelected,\n keyboardFocus && focusValue === value && styles.rowFocused,\n ]\n const rowContent = (\n <>\n <html.span\n aria-hidden\n onClick={(e: {stopPropagation: () => void; preventDefault: () => void}) => {\n if (!hasChildren) return\n // the chevron only toggles: it never selects, nor follows a link\n e.stopPropagation()\n e.preventDefault()\n toggle(value)\n }}\n style={[styles.chevron, open && styles.chevronOpen, !hasChildren && styles.chevronLeaf]}\n >\n ▸\n </html.span>\n <html.span id={labelId} style={styles.label}>\n {label}\n </html.span>\n {meta != null ? <html.span style={styles.meta}>{meta}</html.span> : null}\n </>\n )\n\n return (\n <html.li\n role=\"treeitem\"\n aria-labelledby={labelId}\n aria-level={level}\n aria-expanded={hasChildren ? open : undefined}\n aria-selected={selected}\n tabIndex={focusValue === value ? 0 : -1}\n data-tree-value={value}\n data-tree-text={text}\n style={styles.item}\n >\n {href !== undefined ? (\n <html.a\n href={href}\n tabIndex={-1}\n data-tree-link=\"\"\n onClick={(e: LinkClickEvent) => {\n if (!isPlainClick(e)) return\n onSelect(value)\n onNavigate?.(href, e)\n }}\n style={[styles.row, styles.rowLink, ...rowStyles]}\n >\n {rowContent}\n </html.a>\n ) : (\n <html.div onClick={() => onSelect(value)} style={[styles.row, ...rowStyles]}>\n {rowContent}\n </html.div>\n )}\n {open ? (\n <TreeLevelContext.Provider value={level + 1}>\n <html.ul role=\"group\" style={styles.group}>\n {children}\n </html.ul>\n </TreeLevelContext.Provider>\n ) : null}\n </html.li>\n )\n}\n\nexport const Tree = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n resize: 'vertical' as const,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffsetSm,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ntype StrictTextareaProps = React.ComponentProps<typeof html.textarea>\n\nexport type TextareaVariant = 'default' | 'error'\n\ninterface TextareaProps {\n variant?: TextareaVariant\n name?: string\n placeholder?: string\n required?: boolean\n rows?: number\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onBlur?: () => void\n onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void\n /** Keyboard handlers — e.g. Enter to commit, Escape to cancel, arrow-key\n * navigation of a list driven by this field. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onKeyUp?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n ref?: React.Ref<HTMLTextAreaElement>\n}\n\nexport function Textarea({\n variant = 'default',\n name,\n placeholder,\n required,\n rows = 3,\n value,\n defaultValue,\n disabled,\n autoFocus,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n ref,\n}: TextareaProps) {\n const ctx = useFieldContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const effectiveVariant = ctx?.invalid ? 'error' : variant\n\n const extraProps: Record<string, unknown> = {}\n if (autoFocus) extraProps.autoFocus = true\n\n return (\n <html.textarea\n id={ctx?.controlId}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n rows={rows}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={\n ctx ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() : undefined\n }\n aria-invalid={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictTextareaProps['onChange']}\n onBlur={effectiveOnBlur as StrictTextareaProps['onBlur']}\n onFocus={onFocus as StrictTextareaProps['onFocus']}\n onKeyDown={onKeyDown as StrictTextareaProps['onKeyDown']}\n onKeyUp={onKeyUp as StrictTextareaProps['onKeyUp']}\n ref={effectiveRef as React.Ref<HTMLTextAreaElement>}\n style={[styles.base, styles[effectiveVariant]]}\n {...extraProps}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': borders.focusRing},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n },\n})\n","import {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {Icon, type IconName, type IconSize} from '../Icon/Icon'\nimport {ThemeProvider, type ThemeName} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\n/**\n * The user's *preference*. `'system'` follows the OS `prefers-color-scheme`;\n * the others pin a concrete {@link ThemeName}. Resolves to a ThemeName via\n * {@link useColorMode}().theme.\n */\nexport type ColorModePreference = 'system' | ThemeName\n\nconst PREFERENCES: readonly ColorModePreference[] = ['system', 'light', 'dark', 'high-contrast']\n\nconst ICON: Record<ColorModePreference, IconName> = {\n system: 'monitor',\n light: 'sun',\n dark: 'moon',\n 'high-contrast': 'contrast',\n}\n\nconst LABEL: Record<ColorModePreference, string> = {\n system: 'system',\n light: 'light',\n dark: 'dark',\n 'high-contrast': 'high contrast',\n}\n\ninterface ColorModeContextValue {\n /** The user's chosen preference. */\n preference: ColorModePreference\n /** The concrete theme the preference resolves to (system → OS scheme). */\n theme: ThemeName\n /** Set the preference explicitly. */\n setPreference: (preference: ColorModePreference) => void\n /** Advance to the next preference in {@link modes} (wraps). */\n cycle: () => void\n /** The cycle order used by `cycle()` and the toggle. */\n modes: readonly ColorModePreference[]\n}\n\nconst ColorModeContext = createContext<ColorModeContextValue | null>(null)\n\n/**\n * Read the active color mode. Throws if used outside a {@link ColorModeProvider}.\n */\nexport function useColorMode(): ColorModeContextValue {\n const ctx = useContext(ColorModeContext)\n if (!ctx) {\n throw new Error('useColorMode must be used within a <ColorModeProvider>')\n }\n return ctx\n}\n\nconst canUseDom =\n !isNative && typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n\nfunction isPreference(value: unknown): value is ColorModePreference {\n return typeof value === 'string' && (PREFERENCES as readonly string[]).includes(value)\n}\n\nfunction readStored(key: string | null): ColorModePreference | null {\n if (!key || isNative || typeof window === 'undefined') return null\n try {\n const raw = window.localStorage.getItem(key)\n return isPreference(raw) ? raw : null\n } catch {\n // Private mode / blocked storage — degrade to no persistence.\n return null\n }\n}\n\nfunction writeStored(key: string | null, value: ColorModePreference): void {\n if (!key || isNative || typeof window === 'undefined') return\n try {\n window.localStorage.setItem(key, value)\n } catch {\n /* ignore */\n }\n}\n\ninterface ColorModeProviderProps {\n children: ReactNode\n /** Initial preference (uncontrolled). Default `'system'`. For SSR with no\n * hydration flash, pass the value you persisted server-side (e.g. a cookie). */\n defaultPreference?: ColorModePreference\n /** Controlled preference — when set, the provider does not own the state. */\n preference?: ColorModePreference\n /** Fired whenever the preference changes (controlled or not). */\n onPreferenceChange?: (preference: ColorModePreference) => void\n /** Cycle order for `cycle()` / `<ColorModeToggle>`. Default `['light', 'dark']`. */\n modes?: readonly ColorModePreference[]\n /** localStorage key for persistence; `null` disables it. Default `'duro-color-mode'`. */\n storageKey?: string | null\n /** Wrap children in the DS `ThemeProvider` with the resolved theme. Default `true`.\n * Set `false` to drive your own ThemeProvider from `useColorMode().theme`. */\n applyTheme?: boolean\n}\n\n/**\n * Owns color-mode state, resolves `'system'` against the OS scheme, persists the\n * choice, and (by default) applies the resolved theme via `ThemeProvider`.\n * Pair with {@link ColorModeToggle} or read state via {@link useColorMode}.\n */\nexport function ColorModeProvider({\n children,\n defaultPreference = 'system',\n preference: controlled,\n onPreferenceChange,\n modes = ['light', 'dark'],\n storageKey = 'duro-color-mode',\n applyTheme = true,\n}: ColorModeProviderProps) {\n const [internal, setInternal] = useState<ColorModePreference>(controlled ?? defaultPreference)\n const preference = controlled ?? internal\n\n // Hydrate from storage AFTER mount (not in the initializer) so the first\n // client render matches the server and React doesn't warn about a mismatch.\n useEffect(() => {\n if (controlled !== undefined) return\n const stored = readStored(storageKey)\n if (stored) setInternal(stored)\n // Only on mount / when the key changes.\n }, [controlled, storageKey])\n\n const setPreference = useCallback(\n (next: ColorModePreference) => {\n if (controlled === undefined) setInternal(next)\n writeStored(storageKey, next)\n onPreferenceChange?.(next)\n },\n [controlled, storageKey, onPreferenceChange],\n )\n\n // Track the OS scheme so `'system'` stays live. The initial value MUST be the\n // SSR-stable default ('dark', what the server renders without a DOM) so the\n // first client render matches the server — reading matchMedia in the\n // initializer would diverge (server 'dark' vs client's real scheme) and trip\n // a hydration mismatch. The effect reconciles to the real scheme after mount.\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('dark')\n useEffect(() => {\n if (!canUseDom) return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const onChange = () => setSystemTheme(mq.matches ? 'dark' : 'light')\n onChange()\n mq.addEventListener('change', onChange)\n return () => mq.removeEventListener('change', onChange)\n }, [])\n\n const theme: ThemeName = preference === 'system' ? systemTheme : preference\n\n const cycle = useCallback(() => {\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0]\n if (next) setPreference(next)\n }, [modes, preference, setPreference])\n\n const value = useMemo<ColorModeContextValue>(\n () => ({preference, theme, setPreference, cycle, modes}),\n [preference, theme, setPreference, cycle, modes],\n )\n\n return (\n <ColorModeContext.Provider value={value}>\n {applyTheme ? <ThemeProvider theme={theme}>{children}</ThemeProvider> : children}\n </ColorModeContext.Provider>\n )\n}\n\ninterface ColorModeToggleProps {\n /** Icon size token. Default `'md'` (18px). */\n size?: IconSize\n /** Override the announced label (otherwise auto-generated from current/next). */\n 'aria-label'?: string\n}\n\n/**\n * A compact icon button that cycles the color-mode preference through the\n * provider's `modes`. The glyph reflects the current preference\n * (sun/moon/monitor/contrast). Must be inside a {@link ColorModeProvider}.\n */\nexport function ColorModeToggle({size = 'md', 'aria-label': ariaLabel}: ColorModeToggleProps) {\n const {preference, cycle, modes} = useColorMode()\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0] ?? preference\n const label = ariaLabel ?? `Color mode: ${LABEL[preference]}. Switch to ${LABEL[next]}.`\n\n return (\n <html.button type=\"button\" aria-label={label} onClick={cycle} style={styles.button}>\n <Icon name={ICON[preference]} size={size} />\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n error: {\n color: colors.errorText,\n },\n success: {\n color: colors.successText,\n },\n warning: {\n color: colors.warningText,\n },\n\n // Weight overrides\n weightNormal: {\n fontWeight: typography.fontWeightNormal,\n },\n weightMedium: {\n fontWeight: typography.fontWeightMedium,\n },\n weightSemibold: {\n fontWeight: typography.fontWeightSemibold,\n },\n weightBold: {\n fontWeight: typography.fontWeightBold,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n\n // Truncate. minWidth: 0 lets a truncating Text actually shrink inside a\n // flex/grid container — without it, the default `min-width: auto` would\n // keep the element at its content width, so text-overflow: ellipsis would\n // never trigger and the text would just overflow the parent instead.\n truncate: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type TextVariant = 'bodySm' | 'bodyMd' | 'bodyLg' | 'caption' | 'label' | 'code' | 'overline'\nexport type TextColor = 'default' | 'muted' | 'accent' | 'error' | 'success' | 'warning'\n\ninterface TextProps {\n variant?: TextVariant\n color?: TextColor\n weight?: 'normal' | 'medium' | 'semibold' | 'bold'\n align?: 'start' | 'center' | 'end'\n truncate?: boolean\n as?: 'span' | 'p' | 'div'\n children: ReactNode\n}\n\nconst weightMap = {\n normal: styles.weightNormal,\n medium: styles.weightMedium,\n semibold: styles.weightSemibold,\n bold: styles.weightBold,\n} as const\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Text({\n variant = 'bodyMd',\n color = 'default',\n weight,\n align,\n truncate,\n as = 'span',\n children,\n}: TextProps) {\n const style = [\n typePresets[variant],\n styles[color],\n weight && weightMap[weight],\n align && alignMap[align],\n truncate && styles.truncate,\n ]\n\n if (as === 'p') return <html.p style={style}>{children}</html.p>\n if (as === 'div') return <html.div style={style}>{children}</html.div>\n return <html.span style={style}>{children}</html.span>\n}\n","import {createContext, useContext} from 'react'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface ToggleGroupContextValue {\n value: string[]\n toggle: (itemValue: string) => void\n disabled: boolean\n orientation: Orientation\n size: ToggleSize\n /** Items wrap onto rows with their own borders (and roving focus). */\n wrap: boolean\n /** The item holding the group's single tab stop (wrap only). */\n tabStopValue: string | null\n register: (itemValue: string, el: HTMLElement) => () => void\n onItemFocus: (itemValue: string) => void\n}\n\nexport const ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null)\n\nexport function useToggleGroup() {\n return useContext(ToggleGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n cursor: 'pointer',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n transitionProperty: 'background-color, border-color, color, opacity',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': borders.focusRing},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n minWidth: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n },\n sizeDefault: {\n padding: `${spacing.sm} ${spacing.md}`,\n fontSize: typography.fontSizeSm,\n borderRadius: radii.sm,\n gap: spacing.sm,\n },\n sizeSmall: {\n padding: `${spacing.xs} ${spacing.sm}`,\n fontSize: typography.fontSizeXs,\n borderRadius: radii.sm,\n gap: spacing.xs,\n // Every small control is at least controlSm tall, whatever it holds (5.6).\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n // wrapped toggles: a fixed block size per size, the touch target under a\n // coarse pointer. ToggleGroup's maxRows arithmetic reads the same tokens.\n wrappedDefault: {\n boxSizing: 'border-box',\n height: {default: sizes.controlMd, '@media (pointer: coarse)': sizes.touchTarget},\n },\n wrappedSmall: {\n boxSizing: 'border-box',\n height: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n unpressed: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n color: colors.textMuted,\n },\n pressed: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n borderColor: colors.accent,\n color: colors.accentContrast,\n },\n grouped: {\n borderWidth: 0,\n borderRadius: 0,\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n // Override any borderColor set by pressed state — dividers always use border token\n borderColor: colors.border,\n },\n // Pressed, in an attached group: the accent edge is drawn inset, inside the\n // border a neighbour's negative margin overlaps, so it shows on all four\n // sides without a z-index (which stays for focus).\n attachedPressed: {\n boxShadow: `inset 0 0 0 ${borders.hairline} ${colors.accent}`,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n})\n","import {type ReactNode, useCallback, useLayoutEffect, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useToggleGroup} from '../ToggleGroup/ToggleGroupContext'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\nimport {styles} from './styles.css'\n\nexport type ToggleSize = ControlSize\n\ninterface ToggleProps {\n /** Controlled pressed state (standalone usage). */\n pressed?: boolean\n /** Initial pressed state (uncontrolled, standalone usage). */\n defaultPressed?: boolean\n /** Callback fired when the pressed state changes (standalone usage). */\n onPressedChange?: (pressed: boolean) => void\n /** Unique value when used inside a ToggleGroup. */\n value?: string\n /** Prevents user interaction. */\n disabled?: boolean\n /** Size variant (overridden by ToggleGroup when grouped). */\n size?: ToggleSize\n 'aria-label'?: string\n children: ReactNode\n}\n\nconst wrappedSizeMap = {\n default: styles.wrappedDefault,\n small: styles.wrappedSmall,\n} as const\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Toggle({\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n value,\n disabled: disabledProp = false,\n size: sizeProp = 'default',\n 'aria-label': ariaLabel,\n children,\n}: ToggleProps) {\n const group = useToggleGroup()\n\n // When inside a ToggleGroup, derive pressed state from group context\n const groupPressed = group && value !== undefined ? group.value.includes(value) : undefined\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const size = group?.size ?? sizeProp\n\n const wrap = group?.wrap ?? false\n const ref = useRef<HTMLButtonElement>(null)\n const register = group?.register\n useLayoutEffect(() => {\n if (!wrap || !register || value === undefined || !ref.current) return\n return register(value, ref.current)\n }, [wrap, register, value])\n\n const [standalonePressed, setStandalonePressed] = useControllableValue(\n controlledPressed,\n defaultPressed,\n onPressedChange,\n )\n\n const pressed = groupPressed ?? standalonePressed\n const grouped = useGroupedControl<HTMLButtonElement>({disabled})\n // In a Toolbar the toolbar owns the roving tabindex, not a wrapping group.\n const roving = wrap && value !== undefined && !grouped.onFocus\n\n const handleClick = useCallback(() => {\n if (disabled) return\n if (isGrouped && value !== undefined) {\n group.toggle(value)\n } else {\n setStandalonePressed(!pressed)\n }\n }, [disabled, isGrouped, value, group, pressed, setStandalonePressed])\n\n return (\n <html.button\n ref={mergeRefs(ref, grouped.ref)}\n type=\"button\"\n tabIndex={\n grouped.onFocus\n ? grouped.tabIndex\n : roving\n ? group?.tabStopValue === value\n ? 0\n : -1\n : undefined\n }\n onFocus={grouped.onFocus ?? (roving ? () => group?.onItemFocus(value) : undefined)}\n aria-pressed={pressed}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={handleClick}\n data-pressed={pressed ? '' : undefined}\n style={[\n styles.base,\n sizeMap[size],\n pressed ? styles.pressed : styles.unpressed,\n wrap && wrappedSizeMap[size],\n // In an attached ButtonGroup the group joins the borders instead.\n isGrouped && !wrap && !grouped.attached && styles.grouped,\n disabled && styles.disabled,\n grouped.style,\n grouped.attached && pressed && styles.attachedPressed,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject} from 'react'\n\nconst ROW_TOLERANCE = 2\n\nfunction sameOrder(a: string[], b: string[]) {\n return a.length === b.length && a.every((v, i) => v === b[i])\n}\n\n/**\n * Roving focus for a wrapping ToggleGroup (WAI-ARIA toolbar pattern): one tab\n * stop — the focused item, else the first pressed one, else the first — with\n * arrow keys in reading order, Up/Down by visual row, Home/End.\n */\nexport function useRovingFocus({\n enabled,\n pressed,\n rootRef,\n}: {\n enabled: boolean\n pressed: string[]\n rootRef: RefObject<HTMLElement | null>\n}) {\n const items = useRef(new Map<string, HTMLElement>())\n const [order, setOrder] = useState<string[]>([])\n const [focusedValue, setFocusedValue] = useState<string | null>(null)\n\n const sync = useCallback(() => {\n const entries = [...items.current.entries()].sort(([, a], [, b]) =>\n a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n )\n const next = entries.map(([v]) => v)\n setOrder((prev) => (sameOrder(prev, next) ? prev : next))\n }, [])\n\n const register = useCallback(\n (value: string, el: HTMLElement) => {\n items.current.set(value, el)\n sync()\n return () => {\n if (items.current.get(value) === el) items.current.delete(value)\n sync()\n }\n },\n [sync],\n )\n\n // a focus holder that unmounted no longer holds the tab stop\n useLayoutEffect(() => {\n if (focusedValue !== null && !order.includes(focusedValue)) setFocusedValue(null)\n }, [order, focusedValue])\n\n const tabStopValue = !enabled\n ? null\n : focusedValue !== null && order.includes(focusedValue)\n ? focusedValue\n : (pressed.find((v) => order.includes(v)) ?? order[0] ?? null)\n\n // native listener: RSD's onKeyDown event is a reduced shape (as in Tree)\n useEffect(() => {\n const root = rootRef.current\n if (!enabled || !root) return\n function onKeyDown(e: KeyboardEvent) {\n if (e.altKey || e.ctrlKey || e.metaKey) return\n const els = order\n .map((v) => items.current.get(v))\n .filter((el): el is HTMLElement => !!el && !(el as HTMLButtonElement).disabled)\n const i = els.indexOf(e.target as HTMLElement)\n if (i < 0) return\n let target: HTMLElement | undefined\n switch (e.key) {\n case 'ArrowRight':\n target = els[Math.min(i + 1, els.length - 1)]\n break\n case 'ArrowLeft':\n target = els[Math.max(i - 1, 0)]\n break\n case 'Home':\n target = els[0]\n break\n case 'End':\n target = els[els.length - 1]\n break\n case 'ArrowDown':\n case 'ArrowUp': {\n const down = e.key === 'ArrowDown'\n const cur = els[i].getBoundingClientRect()\n const cx = cur.left + cur.width / 2\n const rects = els.map((el) => el.getBoundingClientRect())\n // rows, by distinct top, in the direction of travel\n const tops = [...new Set(rects.map((r) => Math.round(r.top)))].sort((a, b) => a - b)\n const rowIdx = tops.findIndex((t) => Math.abs(t - cur.top) <= ROW_TOLERANCE)\n const nextTop = tops[rowIdx + (down ? 1 : -1)]\n if (nextTop === undefined) break\n let best = Infinity\n rects.forEach((r, k) => {\n if (Math.abs(r.top - nextTop) > ROW_TOLERANCE) return\n const d = Math.abs(r.left + r.width / 2 - cx)\n if (d < best) {\n best = d\n target = els[k]\n }\n })\n break\n }\n default:\n return\n }\n e.preventDefault()\n target?.focus()\n }\n root.addEventListener('keydown', onKeyDown)\n return () => root.removeEventListener('keydown', onKeyDown)\n }, [enabled, order, rootRef])\n\n return {\n tabStopValue,\n register,\n onItemFocus: setFocusedValue,\n items,\n }\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n overflow: 'hidden',\n },\n wrap: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: spacing.xs,\n borderWidth: 0,\n borderRadius: 0,\n overflow: 'visible',\n },\n // the scroll content: room for focus rings to draw\n scrollContent: {\n position: 'relative',\n padding: spacing.xs,\n },\n // shows rows + 0.5 rows so the cut-off row hints at more; shorter content\n // sizes itself (max, not fixed). Row heights match the wrapped Toggles.\n maxRowsSmall: (rows: number) => ({\n maxHeight: {\n default: `calc((${rows} + 0.5) * ${sizes.controlSm} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n '@media (pointer: coarse)': `calc((${rows} + 0.5) * ${sizes.touchTarget} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n },\n }),\n maxRowsDefault: (rows: number) => ({\n maxHeight: {\n default: `calc((${rows} + 0.5) * ${sizes.controlMd} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n '@media (pointer: coarse)': `calc((${rows} + 0.5) * ${sizes.touchTarget} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n },\n }),\n vertical: {\n flexDirection: 'column',\n },\n // In an attached ButtonGroup: no frame of its own; its toggles join the\n // group's border like any other control.\n inAttachedGroup: {\n borderWidth: 0,\n borderRadius: 0,\n overflow: 'visible',\n },\n})\n","import {type ReactNode, useCallback, useLayoutEffect, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport {ToggleGroupContext, type Orientation} from './ToggleGroupContext'\nimport {useFieldGroupLabelling} from '../Field/FieldContext'\nimport {ScrollArea} from '../ScrollArea/ScrollArea'\nimport {useRovingFocus} from './useRovingFocus'\nimport {useToolbar} from '../Toolbar/ToolbarContext'\nimport {useButtonGroup} from '../ButtonGroup/ButtonGroupContext'\nimport {styles} from './styles.css'\n\ninterface ToggleGroupProps {\n /** Controlled value — array of pressed item values. */\n value?: string[]\n /** Initial value (uncontrolled). */\n defaultValue?: string[]\n /** Callback fired when the set of pressed values changes. */\n onValueChange?: (value: string[]) => void\n /** When false, at most one item can be pressed at a time. */\n multiple?: boolean\n /** Prevents interaction with all items. */\n disabled?: boolean\n /** Layout direction. */\n orientation?: Orientation\n /** Size applied to all child toggles. */\n size?: ToggleSize\n /** Items wrap onto rows, each with its own border (default false). Enables\n * roving focus: one tab stop, arrow keys move between items. */\n wrap?: boolean\n // holds-until: the registry generator (packages/cli/scripts) reads a\n // discriminated union. `{wrap?: false; maxRows?: never} | {wrap: true;\n // maxRows?: number}` is the right type, but today it drops both props from\n // the registry the CLI and MCP serve.\n /** Caps a wrapping group at this many rows (plus half a row, hinting more)\n * and scrolls the rest. Only with `wrap`; ignored without it. */\n maxRows?: number\n /** Accessible name when the group is not inside a Field.Root (inside one,\n * the Field.Label names it). */\n 'aria-label'?: string\n /** id of the element that names the group, when not inside a Field.Root. */\n 'aria-labelledby'?: string\n children: ReactNode\n}\n\nexport function ToggleGroup({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n multiple = false,\n disabled = false,\n orientation = 'horizontal',\n size = 'default',\n wrap = false,\n maxRows,\n children,\n ...labelling\n}: ToggleGroupProps) {\n const a11y = useFieldGroupLabelling(labelling)\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const toggle = useCallback(\n (itemValue: string) => {\n const nextPressed = !value.includes(itemValue)\n let next: string[]\n if (multiple) {\n next = nextPressed ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n } else {\n next = nextPressed ? [itemValue] : []\n }\n setValue(next)\n },\n [value, multiple, setValue],\n )\n\n const rootRef = useRef<HTMLDivElement>(null)\n // Inside a Toolbar, the toolbar's roving focus covers these toggles: one\n // handler, never two. Inside an attached ButtonGroup, the group draws the\n // borders and corners.\n const inToolbar = useToolbar() !== null\n const inAttachedGroup = useButtonGroup() !== null\n const roving = useRovingFocus({enabled: wrap && !inToolbar, pressed: value, rootRef})\n const scrolls = wrap && maxRows !== undefined\n const pressedValue = value[0]\n\n // bring the pressed toggle into view by moving the viewport itself, never\n // scrollIntoView, which would scroll the page too\n const {items} = roving\n useLayoutEffect(() => {\n if (!scrolls || pressedValue === undefined) return\n const viewport = rootRef.current?.closest<HTMLElement>('[data-duro-scroll]')\n if (!viewport) return\n // Measured against the viewport's own box, not offsetTop: a positioned\n // ancestor (a Drawer panel) would otherwise be the reference.\n const centre = () => {\n const el = items.current.get(pressedValue)\n if (!el || viewport.clientHeight === 0) return false\n const top =\n el.getBoundingClientRect().top - viewport.getBoundingClientRect().top + viewport.scrollTop\n const centered = top - (viewport.clientHeight - el.offsetHeight) / 2\n const max = viewport.scrollHeight - viewport.clientHeight\n viewport.scrollTop = Math.min(Math.max(centered, 0), Math.max(max, 0))\n return true\n }\n if (centre()) return\n // Not laid out yet (a container still opening): centre once it has a size.\n const observer = new ResizeObserver(() => {\n if (centre()) observer.disconnect()\n })\n observer.observe(viewport)\n return () => observer.disconnect()\n }, [scrolls, pressedValue, items])\n\n const group = (\n <html.div\n ref={rootRef}\n role={inToolbar ? 'group' : 'toolbar'}\n aria-orientation={inToolbar ? undefined : orientation}\n {...a11y}\n style={[\n styles.root,\n orientation === 'vertical' && styles.vertical,\n wrap && styles.wrap,\n inAttachedGroup && styles.inAttachedGroup,\n ]}\n >\n {children}\n </html.div>\n )\n\n return (\n <ToggleGroupContext.Provider\n value={{\n value,\n toggle,\n disabled,\n orientation,\n size,\n wrap,\n tabStopValue: roving.tabStopValue,\n register: roving.register,\n onItemFocus: roving.onItemFocus,\n }}\n >\n {scrolls ? (\n <ScrollArea.Root>\n <ScrollArea.Viewport\n rovingOwner\n style={size === 'small' ? styles.maxRowsSmall(maxRows) : styles.maxRowsDefault(maxRows)}\n >\n <ScrollArea.Content>\n <html.div style={styles.scrollContent}>{group}</html.div>\n </ScrollArea.Content>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n ) : (\n group\n )}\n </ToggleGroupContext.Provider>\n )\n}\n\n// inside a Field.Root, the label names this group (see Field's `group`)\nToggleGroup.isFieldGroup = true as const\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n popup: {\n position: 'absolute',\n zIndex: layers.floating,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n },\n top: {\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: spacing.xs,\n },\n bottom: {\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginTop: spacing.xs,\n },\n left: {\n right: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginRight: spacing.xs,\n },\n right: {\n left: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginLeft: spacing.xs,\n },\n})\n","import {\n type ReactNode,\n createContext,\n useContext,\n useState,\n useRef,\n useCallback,\n useId,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ntype Placement = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipContextValue {\n open: boolean\n show: () => void\n hide: () => void\n tooltipId: string\n placement: Placement\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null)\n\nfunction useTooltip() {\n const ctx = useContext(TooltipContext)\n if (!ctx) throw new Error('Tooltip compound components must be used within Tooltip.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n content: ReactNode\n placement?: Placement\n delay?: number\n}\n\nfunction Root({children, content, placement = 'top', delay = 300}: RootProps) {\n const [open, setOpen] = useState(false)\n const tooltipId = useId()\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const hide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = null\n setOpen(false)\n }, [])\n\n return (\n <TooltipContext.Provider value={{open, show, hide, tooltipId, placement}}>\n <html.div style={styles.root}>\n {children}\n {open && (\n <html.div id={tooltipId} role=\"tooltip\" style={[styles.popup, styles[placement]]}>\n {content}\n </html.div>\n )}\n </html.div>\n </TooltipContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {open, show, hide, tooltipId} = useTooltip()\n\n return (\n <html.div\n onPointerEnter={show}\n onPointerLeave={hide}\n onFocus={show}\n onBlur={hide}\n aria-describedby={open ? tooltipId : undefined}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tooltip = {\n Root,\n Trigger,\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: spacing.sm,\n },\n vertical: {\n flexDirection: 'column',\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n },\n})\n","import {type ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {Orientation} from '../../shared/types'\nimport {useOrderedRegistry} from '../../shared/useOrderedRegistry'\nimport {ToolbarContext, type ToolbarContextValue} from './ToolbarContext'\nimport {styles} from './styles.css'\n\nexport interface ToolbarProps {\n /** Names the toolbar (\"Formatting\"). Required: a toolbar is a landmark-like widget. */\n 'aria-label': string\n /**\n * Arrow keys follow the orientation: Left/Right (default) or Up/Down. A\n * vertical toolbar cannot hold a Select, whose closed trigger opens on\n * ArrowDown/ArrowUp. A Menu can: its closed trigger handles no arrow key,\n * so Up/Down move past it and Enter or Space opens it.\n */\n orientation?: Orientation\n children: ReactNode\n}\n\n/**\n * A row of controls with one tab stop (the WAI-ARIA toolbar pattern). Every\n * Button, Toggle and Select/Menu/Popover trigger inside it, through any\n * ButtonGroup, joins one roving tabindex: Tab enters at the last focused\n * control, Left/Right (Up/Down when vertical) move, Home/End jump to the ends.\n */\nexport function Toolbar({\n 'aria-label': ariaLabel,\n orientation = 'horizontal',\n children,\n}: ToolbarProps) {\n const rootRef = useRef<HTMLDivElement>(null)\n const {elements, order, register} = useOrderedRegistry()\n const [focusedId, setFocusedId] = useState<string | null>(null)\n\n const enabled = order.filter((entry) => !entry.disabled)\n const tabStop =\n focusedId !== null && enabled.some((entry) => entry.id === focusedId)\n ? focusedId\n : (enabled[0]?.id ?? null)\n\n const tabIndexOf = useCallback<ToolbarContextValue['tabIndexOf']>(\n (id) => {\n if (!order.some((entry) => entry.id === id)) return undefined\n return id === tabStop ? 0 : -1\n },\n [order, tabStop],\n )\n\n // One listener on the document, in the bubble phase, so it runs after the\n // controls' own handlers (React dispatches from the app root, below the\n // document). It acts only on a key aimed at one of this toolbar's own\n // registered controls, so keys typed in a portalled popup (a Popover's\n // input) never move toolbar focus. A control whose popup is open\n // (aria-expanded=\"true\") keeps its keys, and so does one that already\n // handled the key (defaultPrevented).\n useEffect(() => {\n const doc = rootRef.current?.ownerDocument\n if (!doc) return\n const [prev, next] =\n orientation === 'vertical' ? ['ArrowUp', 'ArrowDown'] : ['ArrowLeft', 'ArrowRight']\n function onKeyDown(e: KeyboardEvent) {\n if (e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey) return\n const els = order\n .filter((entry) => !entry.disabled)\n .map((entry) => elements.current.get(entry.id)?.el)\n .filter((el): el is HTMLElement => el !== undefined)\n const target = e.target as HTMLElement\n const i = els.indexOf(target)\n if (i < 0 || target.getAttribute('aria-expanded') === 'true') return\n let to: HTMLElement | undefined\n switch (e.key) {\n case next:\n to = els[Math.min(i + 1, els.length - 1)]\n break\n case prev:\n to = els[Math.max(i - 1, 0)]\n break\n case 'Home':\n to = els[0]\n break\n case 'End':\n to = els[els.length - 1]\n break\n default:\n return\n }\n e.preventDefault()\n to?.focus()\n }\n doc.addEventListener('keydown', onKeyDown)\n return () => doc.removeEventListener('keydown', onKeyDown)\n }, [order, orientation, elements])\n\n const ctx = useMemo<ToolbarContextValue>(\n () => ({register, tabIndexOf, onItemFocus: setFocusedId}),\n [register, tabIndexOf],\n )\n\n return (\n <ToolbarContext.Provider value={ctx}>\n <html.div\n ref={rootRef}\n role=\"toolbar\"\n aria-label={ariaLabel}\n aria-orientation={orientation}\n style={[styles.root, orientation === 'vertical' && styles.vertical]}\n >\n {children}\n </html.div>\n </ToolbarContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n trigger: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n },\n // size=\"small\": Toggle sizeSmall's values, as longhands so they win over the\n // trigger's own longhands. Every small control is at least controlSm tall,\n // whatever it holds, and the touch target under a coarse pointer.\n triggerSmall: {\n gap: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n // Inside a Dialog or Drawer: above that modal (same portal mount), below a\n // Select or Menu opened from inside the Popover.\n popupInModal: {\n zIndex: layers.popover,\n },\n // `raised`: over another floating surface, outside a modal (still under a\n // Dialog or Drawer opened later) and inside one (still under its popups).\n popupRaised: {\n zIndex: layers.floatingRaised,\n },\n popupInModalRaised: {\n zIndex: layers.popoverRaised,\n },\n popup: {\n position: 'fixed',\n top: 0,\n left: 0,\n boxSizing: 'border-box',\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n padding: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n // Outside a modal: floating chrome, so a Dialog or Drawer opened later\n // (even from inside this Popover) covers it.\n zIndex: layers.floating,\n // The portal layer is pointer-events: none so clicks fall through it;\n // the popup takes them back.\n pointerEvents: 'auto',\n },\n close: {\n display: 'inline-flex',\n alignItems: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 0,\n borderRadius: radii.sm,\n cursor: 'pointer',\n },\n // Dynamic position — applied at runtime from the measured anchor.\n popupPosition: (top: number, left: number) => ({\n top,\n left,\n }),\n})\n","import {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\nimport {computePopoverPosition, type PopoverAlign, type PopoverSide} from './position'\nimport {isOutsidePress} from './outside'\nimport {PopoverLayerContext, type PopoverLayerContextValue} from './PopoverLayerContext'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\nimport {useInModal} from '../../shared/ModalContext'\n\n// --- Context ---\n\ntype IgnoreEntry = Element | null | (() => Element | null)\n\ninterface PopoverContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n popoverId: string\n side: PopoverSide\n align: PopoverAlign\n anchor?: () => DOMRect\n triggerRef: React.RefObject<HTMLButtonElement | null>\n popupRef: React.RefObject<HTMLDivElement | null>\n repositionRef: React.RefObject<(() => void) | null>\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null)\n\nfunction usePopover(part: string) {\n const ctx = useContext(PopoverContext)\n if (!ctx) throw new Error(`Popover.${part} must be used within Popover.Root`)\n return ctx\n}\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nconst OFFSET = 4 // `xs` token\n\n// --- Root ---\n\nexport interface PopoverHandle {\n /** Re-measure the anchor and re-place the popup. */\n reposition: () => void\n}\n\ninterface RootProps {\n children: ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n side?: PopoverSide\n align?: PopoverAlign\n /** Virtual anchor: a viewport rect. Replaces the Trigger as the anchor. */\n anchor?: () => DOMRect\n /** Elements (or getters) whose pointerdown does not count as an outside press. */\n ignore?: ReadonlyArray<IgnoreEntry>\n ref?: Ref<PopoverHandle>\n}\n\nfunction Root({\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'bottom',\n align = 'start',\n anchor,\n ignore,\n ref,\n}: RootProps) {\n const [inner, setInner] = useState(defaultOpen)\n const controlled = openProp !== undefined\n const open = controlled ? openProp : inner\n const popoverId = useId()\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const popupRef = useRef<HTMLDivElement | null>(null)\n const repositionRef = useRef<(() => void) | null>(null)\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const ignoreRef = useRef(ignore)\n ignoreRef.current = ignore\n const openRef = useRef(open)\n openRef.current = open\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!controlled) setInner(next)\n if (next !== openRef.current) onOpenChange?.(next)\n },\n [controlled, onOpenChange],\n )\n\n useImperativeHandle(ref, () => ({reposition: () => repositionRef.current?.()}), [])\n\n // Focus: into the popup on open, back to the trigger (or the previously\n // focused element when there is no trigger) on close.\n const wasOpenRef = useRef(false)\n useEffect(() => {\n if (open && !wasOpenRef.current) {\n previousFocusRef.current = document.activeElement as HTMLElement | null\n const popup = popupRef.current\n if (popup) {\n const first = popup.querySelector<HTMLElement>(FOCUSABLE)\n ;(first ?? popup).focus({preventScroll: true})\n }\n } else if (!open && wasOpenRef.current) {\n const target = triggerRef.current ?? previousFocusRef.current\n target?.focus?.()\n previousFocusRef.current = null\n }\n wasOpenRef.current = open\n }, [open])\n\n // Esc and outside press.\n useEffect(() => {\n if (!open) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Escape' || e.defaultPrevented) return\n e.preventDefault()\n setOpen(false)\n }\n\n function onPointerDown(e: PointerEvent) {\n const ignored = (ignoreRef.current ?? []).map((entry) =>\n typeof entry === 'function' ? entry() : entry,\n )\n const inside = [popupRef.current, triggerRef.current, ...ignored, ...layersRef.current]\n if (isOutsidePress(e.target as Node | null, inside)) setOpen(false)\n }\n\n document.addEventListener('keydown', onKeyDown)\n document.addEventListener('pointerdown', onPointerDown, true)\n return () => {\n document.removeEventListener('keydown', onKeyDown)\n document.removeEventListener('pointerdown', onPointerDown, true)\n }\n }, [open, setOpen])\n\n const layersRef = useRef(new Set<Element>())\n // A nested Popover's layers are inside its parent too.\n const parentLayer = useContext(PopoverLayerContext)\n const layerCtx = useMemo<PopoverLayerContextValue>(\n () => ({\n register: (el) => {\n layersRef.current.add(el)\n const unregisterParent = parentLayer?.register(el)\n return () => {\n layersRef.current.delete(el)\n unregisterParent?.()\n }\n },\n // Inside a raised Popup, this Popover is raised too.\n raised: parentLayer?.raised,\n }),\n [parentLayer],\n )\n useLayoutEffect(() => {\n const popup = popupRef.current\n if (!open || !popup) return\n return parentLayer?.register(popup)\n }, [open, parentLayer])\n\n const ctx: PopoverContextValue = {\n open,\n setOpen,\n popoverId,\n side,\n align,\n anchor,\n triggerRef,\n popupRef,\n repositionRef,\n }\n\n return (\n <PopoverContext.Provider value={ctx}>\n <PopoverLayerContext.Provider value={layerCtx}>{children}</PopoverLayerContext.Provider>\n </PopoverContext.Provider>\n )\n}\n\n// --- Trigger ---\n// Trigger IS the button (like Menu.Trigger): give it a label, not a Button.\n\ninterface TriggerProps {\n children: ReactNode\n /** Accessible name: required when the label is an icon only. */\n 'aria-label'?: string\n /** `small` matches a small Toggle or Button beside it. Default: `default`. */\n size?: ControlSize\n /** The trigger <button>, e.g. to measure it or return focus to it. */\n ref?: Ref<HTMLButtonElement>\n}\n\nfunction Trigger({children, 'aria-label': ariaLabel, size = 'default', ref}: TriggerProps) {\n const {open, setOpen, popoverId, triggerRef} = usePopover('Trigger')\n const grouped = useGroupedControl<HTMLButtonElement>()\n\n return (\n <html.button\n ref={mergeRefs(triggerRef, grouped.ref, ref)}\n tabIndex={grouped.tabIndex}\n onFocus={grouped.onFocus}\n type=\"button\"\n onClick={() => setOpen(!open)}\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={open ? popoverId : undefined}\n style={[styles.trigger, size === 'small' && styles.triggerSmall, grouped.style]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Popup ---\n\ninterface PopupProps {\n children: ReactNode\n /** Accessible name for the dialog. */\n label: string\n /**\n * Draw over another floating surface: `layers.floatingRaised` outside a\n * modal, `layers.popoverRaised` inside a Dialog or Drawer, instead of\n * `floating` / `popover`. For one floating thing that must cover a sibling\n * one (a link editor over a format bar), never for covering a modal: a\n * Dialog opened later still covers it. A Popover nested inside a raised one\n * is raised too. Default: inherited, else `false`.\n */\n raised?: boolean\n}\n\nfunction Popup({children, label, raised}: PopupProps) {\n const {open, popoverId, side, align, anchor, triggerRef, popupRef, repositionRef} =\n usePopover('Popup')\n const [coords, setCoords] = useState({top: 0, left: 0})\n // Inside ThemeProvider's portal layer, like Select/Dialog/Drawer: theme\n // tokens cascade into the popup and it stacks above dialogs.\n const mount = usePortalMount()\n const inModal = useInModal()\n const layer = useContext(PopoverLayerContext)\n const isRaised = raised ?? layer?.raised ?? false\n // Re-provided around the children: the Root can't see this prop, and a\n // Popover nested in here reads it to stay above this one.\n const raisedLayer = useMemo<PopoverLayerContextValue | null>(\n () => (layer ? {...layer, raised: isRaised} : null),\n [layer, isRaised],\n )\n\n // Measure before paint on open; re-measure on scroll/resize (capture phase\n // catches any scrolling ancestor) and when Root.reposition() is called.\n useLayoutEffect(() => {\n if (!open) {\n repositionRef.current = null\n return\n }\n const update = () => {\n const popup = popupRef.current\n if (!popup) return\n const rect = anchor ? anchor() : triggerRef.current?.getBoundingClientRect()\n if (!rect) return\n const next = computePopoverPosition({\n anchor: {top: rect.top, left: rect.left, width: rect.width, height: rect.height},\n popup: {width: popup.offsetWidth, height: popup.offsetHeight},\n viewport: {width: window.innerWidth, height: window.innerHeight},\n side,\n align,\n offset: OFFSET,\n })\n setCoords((prev) =>\n prev.top === next.top && prev.left === next.left ? prev : {top: next.top, left: next.left},\n )\n }\n repositionRef.current = update\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n repositionRef.current = null\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, side, align, anchor, triggerRef, popupRef, repositionRef])\n\n if (!open || typeof document === 'undefined') return null\n\n return createPortal(\n <html.div\n ref={popupRef}\n id={popoverId}\n role=\"dialog\"\n aria-label={label}\n tabIndex={-1}\n style={[\n styles.popup,\n inModal && styles.popupInModal,\n isRaised && (inModal ? styles.popupInModalRaised : styles.popupRaised),\n styles.popupPosition(coords.top, coords.left),\n ]}\n >\n <PopoverLayerContext.Provider value={raisedLayer}>\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </PopoverLayerContext.Provider>\n </html.div>,\n mount ?? document.body,\n )\n}\n\n// --- Close ---\n\nfunction Close({children}: {children: ReactNode}) {\n const {setOpen} = usePopover('Close')\n\n return (\n <html.button type=\"button\" onClick={() => setOpen(false)} style={styles.close}>\n {children}\n </html.button>\n )\n}\n\nexport const Popover = {\n Root,\n Trigger,\n Popup,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n track: {\n position: 'relative',\n width: sizes.switchTrackW,\n height: sizes.switchTrackH,\n borderRadius: radii.full,\n borderWidth: 0,\n padding: 0,\n cursor: 'inherit',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': borders.focusRing},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n flexShrink: 0,\n },\n trackUnchecked: {\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n trackChecked: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n },\n thumb: {\n position: 'absolute',\n top: microSpacing.px2,\n left: microSpacing.px2,\n width: sizes.switchThumb,\n height: sizes.switchThumb,\n borderRadius: radii.full,\n backgroundColor: colors.fixedLight,\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n thumbChecked: {\n // Travel: the track less the thumb and both insets.\n transform: `translateX(calc(${sizes.switchTrackW} - ${sizes.switchThumb} - 2 * ${microSpacing.px2}))`,\n },\n // Layered on visuallyHidden.base: a native input is also made transparent.\n input: {\n opacity: 0,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\ninterface SwitchProps {\n /** Controlled checked state. */\n checked?: boolean\n /** Initial checked state (uncontrolled). */\n defaultChecked?: boolean\n /** Callback fired when the checked state changes. */\n onCheckedChange?: (checked: boolean) => void\n /** Prevents user interaction. */\n disabled?: boolean\n /** Form field name for the hidden input. */\n name?: string\n /** Value submitted when checked. */\n value?: string\n /** Label content rendered beside the switch. */\n children?: ReactNode\n}\n\nexport function Switch({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n name,\n value,\n children,\n}: SwitchProps) {\n const [checked, setChecked] = useControllableValue(\n controlledChecked,\n defaultChecked,\n onCheckedChange,\n )\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleClick = useCallback(() => {\n if (disabled) return\n setChecked(!checked)\n // Keep hidden input in sync for form submission\n if (inputRef.current) {\n inputRef.current.checked = !checked\n }\n }, [disabled, checked, setChecked])\n\n return (\n <html.label\n style={[styles.root, isNative && styles.nativeFlex, disabled && styles.rootDisabled]}\n >\n {!isNative && (\n // Web: hidden real checkbox carries a11y + form submission. RSD has no\n // <input type=checkbox> on native, so it's omitted there and the\n // button below carries the switch role instead.\n <html.input\n ref={inputRef}\n type=\"checkbox\"\n role=\"switch\"\n name={name}\n value={value}\n checked={controlledChecked !== undefined ? controlledChecked : undefined}\n defaultChecked={controlledChecked === undefined ? defaultChecked : undefined}\n disabled={disabled}\n aria-checked={checked}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n onCheckedChange?.(e.target.checked)\n }}\n style={[visuallyHidden.base, styles.input]}\n />\n )}\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-hidden={isNative ? undefined : true}\n role={isNative ? 'switch' : undefined}\n aria-checked={isNative ? checked : undefined}\n disabled={disabled}\n onClick={handleClick}\n style={[styles.track, checked ? styles.trackChecked : styles.trackUnchecked]}\n >\n <html.span style={[styles.thumb, checked && styles.thumbChecked]} />\n </html.button>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'column',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignStretch: {alignItems: 'stretch'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type SpacingKey = SpacingToken\n\ninterface StackProps {\n gap?: SpacingKey\n align?: 'start' | 'center' | 'end' | 'stretch'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n stretch: styles.alignStretch,\n} as const\n\nexport function Stack({gap = 'md', align = 'stretch', children}: StackProps) {\n return <html.div style={[styles.base, gapMap[gap], alignMap[align]]}>{children}</html.div>\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignBaseline: {alignItems: 'baseline'},\n alignStretch: {alignItems: 'stretch'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface InlineProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end' | 'baseline' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n baseline: styles.alignBaseline,\n stretch: styles.alignStretch,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Inline({gap = 'sm', align = 'center', justify = 'start', children}: InlineProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface ClusterProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Cluster({gap = 'sm', align = 'start', justify = 'start', children}: ClusterProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {breakpoints} from '@duro-app/tokens/tokens/breakpoints.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\n// Where a split collapses to one column — measured on the split's OWN\n// container, not the viewport. A split nested in another split (a list/detail\n// board inside a nav/content shell) has far less room than the window: at a\n// 768px viewport the shell leaves ~408px for its content column, and a\n// viewport-keyed inner split would still open there and squeeze its detail\n// pane to ~150px. Container queries collapse each split on what it actually\n// has. defineConsts strings, inlined into the @container text at build time.\nconst SPLIT_WIDE_BP = breakpoints.md // 280px rail + real content\nconst SPLIT_BP = breakpoints.sm // 240px list + ≥ 384px detail\n\nexport const styles = css.create({\n base: {\n display: 'grid',\n },\n col1: {gridTemplateColumns: '1fr'},\n col2: {gridTemplateColumns: 'repeat(2, 1fr)'},\n col3: {gridTemplateColumns: 'repeat(3, 1fr)'},\n col4: {gridTemplateColumns: 'repeat(4, 1fr)'},\n col5: {gridTemplateColumns: 'repeat(5, 1fr)'},\n col6: {gridTemplateColumns: 'repeat(6, 1fr)'},\n autoFit: (minWidth: string | number) => ({\n gridTemplateColumns: `repeat(auto-fill, minmax(${minWidth}, 1fr))`,\n }),\n // Hosts the @container query for a named layout. A container cannot query\n // itself, so the grid sits inside this wrapper (the Table.rootContainer\n // pattern). Only `layout` grids get it: counted and weighted grids keep\n // their DOM exactly as before.\n splitContainer: {\n containerType: 'inline-size',\n },\n // Asymmetric list/detail splits: a bounded first column, the rest for the\n // detail; one column when the container is narrower than the breakpoint.\n // Static entries rather than a parameter because the pair (widths +\n // collapse point) is the design decision — a screen picks a split, it does\n // not tune one.\n split: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_BP})`]: `minmax(${sizes.gridColSm}, 1fr) minmax(0, 2fr)`,\n },\n },\n splitWide: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_WIDE_BP})`]: `minmax(${sizes.gridColMd}, 1fr) minmax(0, 3fr)`,\n },\n },\n // Weighted columns: `[1, 2]` → `1fr 2fr` (see columns.ts).\n template: (tracks: string) => ({\n gridTemplateColumns: tracks,\n }),\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n\n // --- native only (see NativeGrid in Grid.tsx) -----------------------------\n // React Native honours `display: 'flex'` only, and RSD gives it web flex\n // semantics, so the row direction is explicit.\n nativeRow: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n // A definite width so percentage bases resolve in Yoga's measure pass;\n // against an auto width the line breaks come out wrong and the container\n // under-reports its height (verified on the iOS simulator).\n width: '100%',\n },\n // border-box is explicit: react-strict-dom mirrors the web default\n // (content-box) on native, which adds the gap padding on top of the basis\n // and overflows the row so every cell wraps.\n nativeCell: (basis: string) => ({\n flexBasis: basis,\n flexShrink: 0,\n boxSizing: 'border-box',\n }),\n // Auto-fit approximation: start at the minimum width, grow to fill. flexGrow\n // is fine here: this style is native-only, so RSD-web's forced flex-grow: 0\n // never applies.\n nativeMinCell: (minWidth: string | number) => ({\n flexBasis: minWidth,\n flexGrow: 1,\n boxSizing: 'border-box',\n }),\n cellGapLeftXs: {paddingLeft: spacing.xs},\n cellGapLeftSm: {paddingLeft: spacing.sm},\n cellGapLeftMs: {paddingLeft: spacing.ms},\n cellGapLeftMd: {paddingLeft: spacing.md},\n cellGapLeftLg: {paddingLeft: spacing.lg},\n cellGapLeftXl: {paddingLeft: spacing.xl},\n cellGapLeftXxl: {paddingLeft: spacing.xxl},\n cellGapLeftXxxl: {paddingLeft: spacing.xxxl},\n cellGapTopXs: {paddingTop: spacing.xs},\n cellGapTopSm: {paddingTop: spacing.sm},\n cellGapTopMs: {paddingTop: spacing.ms},\n cellGapTopMd: {paddingTop: spacing.md},\n cellGapTopLg: {paddingTop: spacing.lg},\n cellGapTopXl: {paddingTop: spacing.xl},\n cellGapTopXxl: {paddingTop: spacing.xxl},\n cellGapTopXxxl: {paddingTop: spacing.xxxl},\n})\n","// Pure column arithmetic behind Grid. No react-strict-dom, no platform: this\n// is what the unit project tests, and what both the web and native renderers\n// derive their styles from.\n\nexport type GridColumnCount = 1 | 2 | 3 | 4 | 5 | 6\n\n/**\n * Column spec: a count (equal columns) or a list of weights (`[1, 2]` is a\n * one-third / two-thirds split). Weights are the portable form of\n * `grid-template-columns: 1fr 2fr` — the only shape both runtimes can\n * honour, since React Native has no grid.\n */\nexport type GridColumns = GridColumnCount | readonly number[]\n\n/** Normalise a column spec to weights; `undefined` when no spec was given\n * (the caller then falls back to auto-fit or a single column). An invalid\n * weight list (empty, non-finite or non-positive entries) is a programming\n * error, reported in development and treated as one column. */\nexport function columnWeights(columns: GridColumns | undefined): readonly number[] | undefined {\n if (columns === undefined) return undefined\n if (typeof columns === 'number') return Array.from({length: columns}, () => 1)\n const valid = columns.length > 0 && columns.every((w) => Number.isFinite(w) && w > 0)\n if (!valid) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Grid: \\`columns\\` must be a non-empty list of positive numbers, got ${JSON.stringify(columns)}. Falling back to one column.`,\n )\n }\n return [1]\n }\n return columns\n}\n\n/** Web track list: `[1, 2]` → `\"1fr 2fr\"`. */\nexport function gridTemplate(weights: readonly number[]): string {\n return weights.map((w) => `${w}fr`).join(' ')\n}\n\n/** Native cell basis for the child at `index`: its column's share of the row\n * as a percentage string Yoga accepts (`\"33.3333%\"`). Children flow into\n * columns in order and wrap, exactly like grid auto-placement. */\nexport function cellBasis(weights: readonly number[], index: number): string {\n const total = weights.reduce((sum, w) => sum + w, 0)\n const share = (weights[index % weights.length] / total) * 100\n // Four decimals keeps a row summing to 100% within Yoga's tolerance while\n // never exceeding it (which would wrap the last cell).\n return `${Math.floor(share * 10000) / 10000}%`\n}\n\n/** Where the child at `index` sits in an `columnCount`-wide flow: whether it\n * opens a row (no gap to its left) and whether it is on the first row (no\n * gap above). Drives the native gap-as-padding scheme. */\nexport function cellPosition(\n index: number,\n columnCount: number,\n): {opensRow: boolean; firstRow: boolean} {\n return {opensRow: index % columnCount === 0, firstRow: index < columnCount}\n}\n","import {Children, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {isNative} from '../../platform'\nimport {cellBasis, cellPosition, columnWeights, gridTemplate, type GridColumns} from './columns'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {resolveLength, resolveTrack, type GridTrack, type Length} from '../../shared/length'\n\nexport type GridLayout = 'split' | 'split-wide'\n\ninterface GridProps {\n gap?: SpacingToken\n /** A column count (equal columns) or weights: `[1, 2]` gives a one-third /\n * two-thirds split. Weights are the portable form of a track list — a CSS\n * template string would be silently ignored on native. */\n columns?: GridColumns\n /** Responsive auto-fit: as many columns of at least this width as fit — a\n * size token key (`\"gridColMd\"`) or a relative length. Wins over `columns`\n * when both are set. On native this approximates to cells of that minimum\n * width that grow and wrap. */\n minColumnWidth?: Length\n /**\n * A named responsive layout. `split` is list/detail (1:2, list ≥ 240px),\n * `split-wide` is nav/content (1:3, nav ≥ 280px). Each collapses to one\n * column on the width of its OWN container — `split` below `sm` (640px),\n * `split-wide` below `md` (768px) — so a split nested inside another\n * split, or beside an open DetailPanel, collapses when it runs out of room\n * rather than when the window does. Wins over `columns` / `minColumnWidth`.\n */\n layout?: GridLayout\n /**\n * An explicit track list, for columns that are not all fractions: a size\n * token for a fixed track (`['1fr', 'asideW']`), or `minmax()` /\n * `fit-content()` of tokens and fractions (`'minmax(gridColXs, 1fr)'`).\n * A px is a type error. Web only — on native it falls back to equal\n * columns, one per track. Wins over `columns` / `minColumnWidth`; `layout`\n * wins over it.\n */\n tracks?: readonly GridTrack[]\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\n// Fixed counts keep their static classes so existing web consumers emit the\n// exact CSS they did before; only weight lists go through the dynamic style.\nconst columnsMap = {\n 1: styles.col1,\n 2: styles.col2,\n 3: styles.col3,\n 4: styles.col4,\n 5: styles.col5,\n 6: styles.col6,\n} as const\n\nconst layoutMap = {\n split: styles.split,\n 'split-wide': styles.splitWide,\n} as const satisfies Record<GridLayout, unknown>\n\n// On native the named layouts are their weights; there is no media query to\n// collapse them, so a split stays a split on a phone (see NativeGrid).\nconst layoutWeights = {\n split: [1, 2],\n 'split-wide': [1, 3],\n} as const satisfies Record<GridLayout, readonly number[]>\n\nconst cellGapLeftMap = {\n xs: styles.cellGapLeftXs,\n sm: styles.cellGapLeftSm,\n ms: styles.cellGapLeftMs,\n md: styles.cellGapLeftMd,\n lg: styles.cellGapLeftLg,\n xl: styles.cellGapLeftXl,\n xxl: styles.cellGapLeftXxl,\n xxxl: styles.cellGapLeftXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst cellGapTopMap = {\n xs: styles.cellGapTopXs,\n sm: styles.cellGapTopSm,\n ms: styles.cellGapTopMs,\n md: styles.cellGapTopMd,\n lg: styles.cellGapTopLg,\n xl: styles.cellGapTopXl,\n xxl: styles.cellGapTopXxl,\n xxxl: styles.cellGapTopXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nexport function Grid({gap = 'md', columns, minColumnWidth, layout, tracks, children}: GridProps) {\n const hasTracks = tracks !== undefined && tracks.length > 0\n if (isNative) {\n return (\n <NativeGrid\n gap={gap}\n columns={layout ? layoutWeights[layout] : hasTracks ? tracks.map(() => 1) : columns}\n minColumnWidth={layout || hasTracks ? undefined : minColumnWidth}\n >\n {children}\n </NativeGrid>\n )\n }\n\n const columnStyle = layout\n ? layoutMap[layout]\n : hasTracks\n ? styles.template(tracks.map((track) => String(resolveTrack(track))).join(' '))\n : minColumnWidth\n ? styles.autoFit(resolveLength(minColumnWidth))\n : typeof columns === 'number'\n ? columnsMap[columns]\n : columns\n ? styles.template(gridTemplate(columnWeights(columns) ?? [1]))\n : undefined\n\n const grid = <html.div style={[styles.base, gapMap[gap], columnStyle]}>{children}</html.div>\n // A named layout answers its container query from a wrapper: an element\n // cannot query its own size.\n return layout ? <html.div style={styles.splitContainer}>{grid}</html.div> : grid\n}\n\n/**\n * React Native has no grid, so the native Grid is a wrapping flex row with\n * each child in a cell:\n *\n * - Weighted / counted columns: the cell's `flexBasis` is its column's share\n * of the row. Percentages plus a real `gap` would overflow and wrap early,\n * so the gap is padding on the cell instead — left on every cell that does\n * not open a row, top on every row after the first. RN is border-box, so\n * the bases still sum to exactly 100%, and the gap stays a token.\n * - `minColumnWidth`: cells start at that width and grow, and the row uses a\n * real `gap`, since here wrapping is width-driven and row membership is\n * not known from the index.\n *\n * Only this branch wraps children; on web grid children stay direct, so\n * existing DOM trees are untouched.\n */\nfunction NativeGrid({gap = 'md', columns, minColumnWidth, children}: GridProps) {\n const items = Children.toArray(children)\n if (minColumnWidth) {\n return (\n <html.div style={[styles.nativeRow, gapMap[gap]]}>\n {items.map((child, index) => (\n <html.div key={index} style={styles.nativeMinCell(resolveLength(minColumnWidth))}>\n {child}\n </html.div>\n ))}\n </html.div>\n )\n }\n const weights = columnWeights(columns) ?? [1]\n return (\n <html.div style={styles.nativeRow}>\n {items.map((child, index) => {\n const {opensRow, firstRow} = cellPosition(index, weights.length)\n return (\n <html.div\n key={index}\n style={[\n styles.nativeCell(cellBasis(weights, index)),\n !opensRow && cellGapLeftMap[gap],\n !firstRow && cellGapTopMap[gap],\n ]}\n >\n {child}\n </html.div>\n )\n })}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {layoutSpacing} from '@duro-app/tokens/tokens/layout-spacing.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n root: {\n width: '100%',\n },\n container: {\n width: '100%',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n // Max-width presets\n maxSm: {maxWidth: sizes.pageSm},\n maxMd: {maxWidth: sizes.pageMd},\n maxLg: {maxWidth: sizes.pageLg},\n // Horizontal padding\n padSm: {paddingLeft: layoutSpacing.containerSm, paddingRight: layoutSpacing.containerSm},\n padMd: {paddingLeft: layoutSpacing.containerMd, paddingRight: layoutSpacing.containerMd},\n padLg: {paddingLeft: layoutSpacing.containerLg, paddingRight: layoutSpacing.containerLg},\n // Vertical spacing\n headerPadding: {paddingTop: spacing.lg},\n mainPadding: {paddingTop: spacing.xl, paddingBottom: spacing.xl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type PageShellMaxWidth = 'sm' | 'md' | 'lg' | 'full'\nexport type PageShellPadding = 'sm' | 'md' | 'lg'\n\ninterface PageShellProps {\n /** Max-width preset: sm (600), md (800), lg (1200), full (none). Default: 'lg' */\n maxWidth?: PageShellMaxWidth\n /** Horizontal padding preset. Default: 'md' (24px) */\n padding?: PageShellPadding\n /** Header element rendered above the main content with same constraints */\n header?: ReactNode\n children: ReactNode\n}\n\nconst maxWidthMap = {\n sm: styles.maxSm,\n md: styles.maxMd,\n lg: styles.maxLg,\n full: null,\n} as const\n\nconst paddingMap = {\n sm: styles.padSm,\n md: styles.padMd,\n lg: styles.padLg,\n} as const\n\nexport function PageShell({maxWidth = 'lg', padding = 'md', header, children}: PageShellProps) {\n const mw = maxWidthMap[maxWidth]\n const pad = paddingMap[padding]\n\n return (\n <html.div style={styles.root}>\n {header != null && (\n <html.header style={[styles.container, styles.maxLg, pad, styles.headerPadding]}>\n {header}\n </html.header>\n )}\n <html.main style={[styles.container, mw, pad, styles.mainPadding]}>{children}</html.main>\n </html.div>\n )\n}\n","import {useRef, useState, useEffect} from 'react'\nimport {breakpointsPx, type Breakpoint} from '@duro-app/tokens/tokens/breakpoints.css'\n\nexport type ContainerSize = 'compact' | 'default' | 'spacious'\n\ninterface UseContainerQueryOptions {\n compactBelow?: Breakpoint | number\n spaciousAbove?: Breakpoint | number\n}\n\nfunction toPx(value: Breakpoint | number): number {\n return typeof value === 'number' ? value : breakpointsPx[value]\n}\n\nexport function useContainerQuery<T extends HTMLElement = HTMLElement>(\n options: UseContainerQueryOptions = {},\n): {\n ref: React.RefObject<T | null>\n size: ContainerSize\n} {\n const {compactBelow: compactOpt = 'xs', spaciousAbove: spaciousOpt = 'md'} = options\n const compactBelow = toPx(compactOpt)\n const spaciousAbove = toPx(spaciousOpt)\n const ref = useRef<T | null>(null)\n const [size, setSize] = useState<ContainerSize>('default')\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n let rafId: number | null = null\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId)\n\n rafId = requestAnimationFrame(() => {\n const entry = entries[0]\n if (!entry) return\n\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n\n if (width < compactBelow) {\n setSize('compact')\n } else if (width >= spaciousAbove) {\n setSize('spacious')\n } else {\n setSize('default')\n }\n })\n })\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n if (rafId !== null) cancelAnimationFrame(rafId)\n }\n }, [compactBelow, spaciousAbove])\n\n return {ref, size}\n}\n"],"names":["createActionBarStore","entries","listeners","Set","notify","forEach","l","subscribe","cb","add","delete","getSnapshot","push","id","render","update","map","e","remove","filter","ActionBarContext","createContext","ActionBarProvider","children","storeRef","useRef","current","store","useSyncExternalStore","topEntry","length","jsxs","useActionBarStack","$","_c","useContext","useId","t0","some","register","t1","unregister","t2","bb0","t3","entries_0","isTop","t4","managed","spacing","xs","sm","lg","xxl","_temp","styles","overlay","$$css","centered","inset","end","val","undefined","overlayOffset","bottom","overlayEmphasized","selectedCount","selectedCountEmphasized","actions","actionsScroll","closeButton","closeButtonEmphasized","separator","separatorEmphasized","ActionBarContent","selectedItemCount","selectedLabel","isEmphasized","onClearSelection","dismissible","bottomOffset","insetInlineEnd","countStr","label","t5","t6","SPACING_PX","t7","t8","t9","t10","t11","jsx","_rsdMerge","_rsdDefaultStyles","span","t12","t13","div","t14","t15","t16","t17","button","t18","ActionBarInner","props","stack","isActive","renderBar","useEffect","ActionBar","strokeIcons","Fragment","clock","forbidden","shield","lock","key","layers","repeat","database","route","menu","server","box","image","tag","users","mail","plug","pin","search","mic","sun","moon","monitor","contrast","filledIcons","Icon","name","size","ICON_SIZES","filled","base","iconWrap","content","error","success","warning","info","defaultIcons","resolveIcon","icon","variant","Alert","resolvedIcon","isNative","sizeMd","sizeSm","default","highlight","nativeFlex","sizeMap","md","Badge","root","list","item","link","isPlainClick","event","metaKey","ctrlKey","shiftKey","altKey","defaultPrevented","linkClickHandler","href","onNavigate","target","BreadcrumbContext","useBreadcrumb","Error","Root","ariaLabel","T0","T1","T2","items","Children","toArray","isValidElement","Provider","html","nav","ol","i","li","Item","a","Breadcrumb","mergeRefs","refs","value","ref","sizeDefault","sizeSmall","primary","secondary","inverseSecondary","danger","fullWidth","disabled","small","Button","type","onClick","ariaExpanded","ariaControls","grouped","useGroupedControl","tabIndex","onFocus","style","sameEntries","b","every","useOrderedRegistry","Symbol","for","Map","elements","order","setOrder","useState","next","sort","_temp2","prev","sync","id_0","el","disabled_0","set","get","useLayoutEffect","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","horizontal","vertical","alignStart","alignCenter","alignEnd","verticalAlignStart","verticalAlignCenter","verticalAlignEnd","gapXs","gapSm","gapMd","attached","attachedVertical","gapMap","horizontalAlignMap","start","center","verticalAlignMap","ButtonGroup","orientation","align","gap","isVertical","alignStyle","findIndex","entry","positionOf","ButtonGroupContext","Callout","elevated","outlined","interactive","sizeCompact","sizeFull","header","compact","full","Card","rootDisabled","boxUnchecked","boxChecked","input","visuallyHidden","text","Checkbox","checked","controlledChecked","defaultChecked","onChange","isControlled","internalChecked","setInternalChecked","isChecked","handleChange","opacity","t19","t20","useControllableValue","controlledValue","defaultValue","internal","setInternal","v","setValue","rootHorizontal","FieldContext","useFieldContext","useFieldGroupLabelling","own","ctx","descriptionId","invalid","errorId","trim","describedBy","labelId","CheckboxGroupContext","useCheckboxGroup","labelling","onValueChange","a11y","itemValue","onToggle","itemDisabled","groupValue","groupDisabled","includes","isDisabled","isFieldGroup","CheckboxGroup","ColorInput","required","onBlur","fieldCtx","field","effectiveName","effectiveValue","String","effectiveOnChange","effectiveOnBlur","effectiveRef","effectiveDisabled","controlId","backdrop","backdropOpen","backdropClosing","viewport","popup","popupOpen","popupClosing","closeDurationInstant","closeDurationMinimal","closeDurationQuick","closeDurationFast","closeDurationBrisk","closeDurationBase","closeDurationSlow","title","description","body","footer","inlineWrapper","reducedMotion","ModalContext","useInModal","FOCUSABLE","closeDurationMap","instant","minimal","quick","fast","brisk","slow","DialogContext","useDialog","open","controlledOpen","defaultOpen","onOpenChange","dismissable","closeOnEscape","initialFocus","closeAnimationDuration","internalOpen","setInternalOpen","closing","setClosing","closingTimerRef","popupRef","isOpen","titleId","clearTimeout","requestOpen","setTimeout","DURATION_MS","requestClose","onKeyDown","stopPropagation","document","addEventListener","removeEventListener","closeCountRef","registerClose","previousFocusRef","wasOpenRef","activeElement","querySelector","focus","preventScroll","devWarnOnce","target_0","isConnected","overflow","closeDuration","Trigger","Portal","mount","usePortalMount","handleBackdropClick","ControlContextBoundary","node","createPortal","Header","Title","h2","Description","p","Body","Footer","Close","Dialog","InputGroupContext","useInputGroupContext","ghost","ghostError","ghostDisabled","inGroup","mono","Input","font","placeholder","readOnly","minLength","maxLength","min","max","step","inputMode","pattern","autoComplete","autoFocus","ariaDescribedby","onKeyUp","groupCtx","Boolean","effectiveVariant","extraProps","rootSide","labelSide","fieldContent","necessityIcon","necessityLabel","holdsGroup","found","child","group","formCtx","useFormContext","isGroup","ControlledRoot","StaticRoot","labelPosition","invalidProp","control","useRHFFormContext","fieldState","useController","effectiveLabelPosition","effectiveNecessityIndicator","necessityIndicator","message","errorMessage","FieldLayout","labelNode","rest","Label","isSide","indicator","Field","ConfirmDialog","confirmPhrase","promptLabel","cancelLabel","confirmSlot","onConfirm","confirmLabel","typed","setTyped","satisfied","handleOpenChange","itemLifted","handle","handlePicked","zone","listVertical","listHorizontal","gapMs","gapLg","gapXl","gapXxl","gapXxxl","fill","zoneReady","zoneOver","zoneRefused","ghostTilt","refusal","ghostSize","width","height","MOVE_THRESHOLD_PX","TOUCH_HOLD_MS","HYSTERESIS_PX","EDGE_PX","MAX_STEP_PX","domOrder","verdictOf","ok","reason","sameTarget","index","sameRefusal","defaultAnnouncement","where","position","count","kind","keyboard","isPointerCaptureMiss","err","DOMException","Engine","onDrop","zones","handles","drag","ghostEl","refusalText","announcement","focusRequest","stops","firstStops","stopsDirty","session","frame","pointer","x","y","geometry","baseline","scrollable","listener","tick","s","active","paintGhost","scrolled","autoScroll","refused","locate","retarget","scheduleFrame","onScroll","emit","tabStop","explicit","has","registerZone","record","registerItem","registerHandle","recomputeStops","queueMicrotask","firstEl","cur","handlesIn","ids","zoneSequence","z","Number","POSITIVE_INFINITY","say","announce","labelOf","itemId","zoneLabel","placeAt","others","payload","data","captureOrder","exclude","byZone","values","isScroller","known","getComputedStyle","scrolls","o","yes","overflowY","scrollHeight","clientHeight","overflowX","scrollWidth","clientWidth","captureGeometry","scrollingElement","chains","chain","documentElement","up","parentElement","r","getBoundingClientRect","scrollers","left","scrollLeft","top","scrollTop","rect","right","rectOf","g","dx","dy","d","seen","zoneByEl","elementsFromPoint","zoneId","verdict","accepts","pos","over","otherId","k","mid","bias","wasRefused","onDragOver","transform","offsetX","offsetY","dist","Math","ceil","window","innerWidth","innerHeight","down","canY","canX","requestAnimationFrame","activate","preview","capture","passive","begin","source","currentTarget","pointerId","downAt","timeStamp","startX","clientX","startY","clientY","holdTimer","setPointerCapture","pointerType","finishPointer","commit","cancelAnimationFrame","hasPointerCapture","releasePointerCapture","attach","onMove","moved","hypot","onUp","onCancel","onKey","focusHandle","pick","other","moveWithin","delta","moveAcross","j","indexOf","endKeyboard","blurHandle","moveFocus","inZone","there","keyDown","preventDefault","RootContext","useRoot","part","useSelect","engine","select","fallback","noopSubscribe","ZoneContext","ItemContext","GhostContext","DEFAULT_INSTRUCTIONS","renderPlaceholder","instructions","instructionsId","useMemo","Ghost","LiveRegion","Instructions","Placeholder","scrollIntoView","block","inline","ms","xl","xxxl","Zone","inGhost","dragging","placeholderAtEnd","n","zoneContext","zoneCtx","webkitUserSelect","webkitTouchCallout","onPointerDown","useCallback","lifted","placeholderBefore","itemContext","Handle","picked","wantsFocus","useDragDrop","_temp3","_temp4","_temp5","_temp6","e_2","e_1","e_0","DragDrop","wrapper","wrapperOpenSm","wrapperCloseSm","wrapperOpenMd","wrapperCloseMd","contentSm","contentMd","slideIn","slideOut","bodyPadded","DetailPanelContext","useDetailPanel","present","setPresent","panelRef","setLabelId","registerTitle","unregisterTitle","wrapperOpenMap","wrapperCloseMap","Content","padded","DetailPanel","viewportRight","viewportLeft","viewportBottom","panel","panelHorizontal","panelVertical","panelLeftBorder","slideInRight","slideOutRight","slideInLeft","slideOutLeft","slideInBottom","slideOutBottom","DISMISS_THRESHOLD","VELOCITY_THRESHOLD","DISMISS_DURATION","OPPOSITE_MAX_OVERSCROLL","useSwipeDismiss","anchor","enabled","onDismiss","currentX","currentY","startTime","swiping","panelSize","deferredScroll","stateRef","isHorizontal","state","getMovement","movement","panelEl","dataset","progress","sign","closest","previousElementSibling","absMovement","abs","overscroll","shadowSpread","round","boxShadow","applyTransform","resetStyles","panelEl_1","dismissTransform","transition","backdrop_1","dismissed","done","once","animateDismiss","animateSnapBack","handlePointerDown","scrollEl","state_0","Date","now","beginCapture","animation","isAtDismissEdge","handlePointerMove","state_1","dx_0","sqrt","scrollEl_0","movement_0","handlePointerUp","_e","state_2","movement_1","elapsed","velocity","handlePointerCancel","state_3","handleTouchMove","panelEl_2","backdrop_2","cleanup","panelEl_0","backdrop_0","DrawerContext","useDrawer","swipeDismiss","requestCloseImmediate","slideInMap","slideOutMap","viewportAnchorMap","swipeEnabled","setPanel","attachPanel","t21","t22","t23","t24","t25","Drawer","action","EmptyState","typePresets","bodySm","bodyMd","bodyLg","caption","code","overline","headingSm","headingMd","headingLg","headingXl","displaySm","displayMd","displayLg","muted","accent","defaultVariantMap","alignMap","Heading","level","color","resolvedVariant","h1","h3","h4","h5","h6","itemSelected","empty","ListContext","selectionMode","useList","selected","ItemText","Actions","Empty","List","Text","legend","LegendIdContext","legendId","hasLegend","Legend","Fieldset","addon","addonStart","addonEnd","addonClickable","addonDisabled","dynamicStyles","minWidth","Addon","positionStyle","resolveLength","InputGroup","LinkButton","rel","track","fillAt","percent","toneStyle","Meter","valueText","tone","fraction","clamped","grid","card","PageNavContext","usePageNav","Prev","Next","PageNav","bordered","Panel","circle","circleUnchecked","circleChecked","dot","RadioGroupContext","useRadioGroup","onSelect","handleClick","RadioGroup","scrollbar","scrollbarVertical","scrollbarHorizontal","scrollbarHidden","scrollbarVisible","thumb","viewportMaxHeight","maxHeight","thumbVertical","thumbHorizontal","ScrollAreaContext","useScrollArea","useScrollAreaRoot","viewportId","viewportRef","contentRef","setScrollTop","setScrollLeft","setScrollHeight","setScrollWidth","setClientHeight","setClientWidth","scrolling","setScrolling","scrollTimerRef","vp","handleScroll","vp_0","observer","ResizeObserver","observe","disconnect","vp_1","Viewport","rovingOwner","Scrollbar","maxScroll","scrollOffset","valueNow","Thumb","draggingRef","startPosRef","startScrollRef","thumbSizePercent","trackSize","thumbPixelSize","thumbOffset","thumbStyle","scrollRatio","scrollDelta","ScrollArea","inputWrapper","inputWrapperFocused","trigger","ComboboxContext","useCombobox","useComboboxRoot","inputValue","controlledInputValue","onInputChange","initialLabels","initial","internalInputValue","setInternalInputValue","setInputValue","setOpen","labels","setLabels","highlightedId","setHighlightedId","listboxId","rootRef","inputRef","itemsRef","orderRef","close","openPopup","selectValue","v_0","label_0","registerLabel","itemValue_0","element","keys","elA","elB","query","toLowerCase","id_1","item_0","getVisibleOrder","handleKeyDown","visibleOrder","bb137","prev_2","idx_0","idx","prev_1","prev_0","item_1","ownWidth","maxHeightListMaxH","maxHeightListMaxHSm","option","optionSelected","optionHighlighted","optionDisabled","maxHeightMap","listMaxH","listMaxHSm","defaultOptionId","replace","ch","charCodeAt","toString","getAnchorProps","ListboxContext","useListbox","matchAnchorWidth","onHighlight","getOptionId","listRef","place","setPlace","anchorRef","computePopoverPosition","offsetWidth","offsetHeight","side","offset","keep","CSS","escape","usePopoverLayer","optionId","Option","idProp","highlighted","Listbox","localRef","focused","setFocused","Popup","selectedValue","isSelected","isVisible","textContent","el_0","Object","Combobox","VisuallyHidden","subtle","TextLink","triggerSmall","popupPosition","itemHighlighted","hidden","SelectContext","useSelectRoot","triggerRef","toggle","root_0","handleKeyDown_0","order_0","items_0","bb126","prev_3","Value","display","coords","setCoords","listboxRef","backdropRef","isHighlighted","Select","groupTrigger","groupTriggerActive","chevron","chevronOpen","section","sectionLabel","itemActive","marker","markerActive","itemIcon","itemLabel","SideNavContext","useSideNav","activeValue","expandedGroups","setExpandedGroups","toggleGroup","group_0","next_0","expandGroup","Group","groupKey","defaultExpanded","isExpanded","groupRef","triggerId","panelId","hasActiveChild","Section","SideNav","spinner","srOnly","Spinner","region","toast","iconSuccess","iconError","iconInfo","iconWarning","closeBtn","DEFAULT_DURATION","createToastStore","seq","opts","duration","variantIcon","variantIconStyle","ToastContext","useToast","ToastItem","dismissLabel","hovered","setHovered","paused","remaining","started","timer","contains","relatedTarget","ToastProvider","dismiss","StatusIcon","TagGroupContext","useTagGroup","wrap","removableMd","removableSm","removeButton","removeButtonDisabled","removableSizeMap","Tag","removable","removableProp","onRemove","onRemoveProp","disabledProp","isGrouped","editable","removeTag","setFocusedIndex","removeLabel","tagContent","role","container","containerError","containerDisabled","containerStatic","useTagGroupCtx","onValidate","gridId","setValues","focusedIndex","setEditable","setAnnouncement","isInvalid","trimmed","addTag","value_0","getElementById","querySelectorAll","validate","commitValueRef","raw","selectionStart","handlePaste","clipboardData","getData","split","handleFocus","TagGroup","listMenu","linkMenu","level3","linkActive","focusable","TableOfContentsContext","useTableOfContents","openProp","listId","isMenu","ul","TableOfContents","rootVertical","tab","tabVertical","tabActiveHorizontal","tabActiveVertical","tabIndicatorActive","indicatorHorizontal","indicatorVertical","indicatorOffsetH","indicatorOffsetV","tabDisabled","TabsContext","useTabs","useTabsRoot","tabsRef","indicatorActive","setIndicatorActive","registerTab","setIndicator","measure","offsetLeft","offsetTop","ro","listEl","tabs","prevKey","nextKey","targetValue","bb36","currentIdx_0","i_1","currentIdx","val_1","i_0","val_0","Tab","tabId","Tabs","heading","axis","todayLabel","labelText","labelDescription","today","bar","face","faceSelected","barPlanned","barDone","fillDone","barText","edge","edgeStart","edgeEnd","DAY_MS","dayOf","date","floor","parse","dateOf","day","toISOString","slice","TimelineContext","useTimeline","at","first","days","locale","formatDate","t","toLocaleDateString","month","timeZone","ticks","d_0","Row","planned","Bar","onStartChange","onEndChange","startLabel","endLabel","dropZone","last","EdgeSlider","by","ArrowLeft","ArrowDown","ArrowRight","ArrowUp","PageDown","PageUp","Timeline","row","rowLink","indent","rowFocused","rowSelected","chevronLeaf","meta","TreeContext","useTree","TreeLevelContext","TYPEAHEAD_RESET_MS","ariaLabelledBy","expanded","onExpandedChange","selectedInner","setSelectedInner","expandedInner","setExpandedInner","focusValue","setFocusValue","keyboardFocus","setKeyboardFocus","x_0","setExpanded","v_1","v_2","treeValue","typeahead","rootEl","Array","from","focusItem","isOpen_0","getAttribute","parent","click","toLocaleLowerCase","c","needle","treeText","startsWith","onFocusIn","v_3","matches","onFocusOut","textValue","hasChildren","rowStyles","rowContent","Tree","Textarea","rows","textarea","PREFERENCES","ICON","system","light","dark","LABEL","ColorModeContext","useColorMode","canUseDom","matchMedia","isPreference","readStored","localStorage","getItem","writeStored","setItem","ColorModeProvider","defaultPreference","preference","controlled","onPreferenceChange","modes","storageKey","applyTheme","stored","setPreference","systemTheme","setSystemTheme","mq","theme","cycle","ThemeProvider","ColorModeToggle","weightNormal","weightMedium","weightSemibold","weightBold","truncate","weightMap","normal","medium","semibold","bold","weight","as","ToggleGroupContext","useToggleGroup","wrappedDefault","wrappedSmall","unpressed","pressed","attachedPressed","wrappedSizeMap","Toggle","controlledPressed","defaultPressed","onPressedChange","sizeProp","groupPressed","standalonePressed","setStandalonePressed","roving","tabStopValue","onItemFocus","ROW_TOLERANCE","sameOrder","useRovingFocus","focusedValue","setFocusedValue","find","els","bb81","cx","rects","tops","rowIdx","nextTop","best","Infinity","r_0","a_0","b_0","el_1","scrollContent","maxRowsSmall","sizes","controlSm","touchTarget","maxRowsDefault","controlMd","inAttachedGroup","ToggleGroup","maxRows","multiple","nextPressed","inToolbar","useToolbar","useButtonGroup","pressedValue","centre","TooltipContext","useTooltip","placement","delay","tooltipId","timerRef","show","hide","Tooltip","Toolbar","focusedId","setFocusedId","entry_0","entry_1","tabIndexOf","doc","ownerDocument","entry_3","to","ToolbarContext","entry_2","popupInModal","popupRaised","popupInModalRaised","PopoverContext","usePopover","OFFSET","ignore","inner","setInner","popoverId","repositionRef","ignoreRef","openRef","useImperativeHandle","reposition","ignored","inside","layersRef","isOutsidePress","parentLayer","PopoverLayerContext","layerCtx","unregisterParent","raised","inModal","layer","isRaised","raisedLayer","Popover","trackUnchecked","trackChecked","thumbChecked","Switch","onCheckedChange","setChecked","alignStretch","stretch","Stack","alignBaseline","justifyStart","justifyCenter","justifyEnd","justifyBetween","justifyMap","between","Inline","justify","Cluster","col1","col2","col3","col4","col5","col6","autoFit","splitContainer","splitWide","template","tracks","nativeRow","nativeCell","basis","nativeMinCell","cellGapLeftXs","cellGapLeftSm","cellGapLeftMs","cellGapLeftMd","cellGapLeftLg","cellGapLeftXl","cellGapLeftXxl","cellGapLeftXxxl","cellGapTopXs","cellGapTopSm","cellGapTopMs","cellGapTopMd","cellGapTopLg","cellGapTopXl","cellGapTopXxl","cellGapTopXxxl","columnWeights","columns","w","isFinite","process","env","NODE_ENV","console","JSON","stringify","gridTemplate","weights","join","columnsMap","layoutMap","Grid","minColumnWidth","layout","hasTracks","columnStyle","resolveTrack","maxSm","maxMd","maxLg","padSm","padMd","padLg","headerPadding","mainPadding","maxWidthMap","paddingMap","PageShell","maxWidth","padding","mw","pad","main","toPx","breakpointsPx","useContainerQuery","options","compactBelow","spaciousAbove","compactOpt","spaciousOpt","setSize","rafId","contentBoxSize","inlineSize","contentRect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/components/ActionBar/ActionBarProvider.tsx","../../tokens/src/tokens/spacing.css.ts","../src/components/ActionBar/styles.css.ts","../src/components/ActionBar/ActionBar.tsx","../src/components/Icon/Icon.tsx","../src/components/Alert/styles.css.ts","../src/components/Alert/Alert.tsx","../src/platform.ts","../src/shared/mergeRefs.ts","../src/components/Button/styles.css.ts","../src/components/Button/Button.tsx","../src/components/Drawer/styles.css.ts","../src/shared/ModalContext.ts","../src/components/Drawer/useSwipeDismiss.ts","../src/components/Drawer/Drawer.tsx","../src/components/TextLink/styles.css.ts","../src/shared/navigate.ts","../src/components/TextLink/TextLink.tsx","../src/hooks/useContainerBelow.ts","../src/components/AppShell/styles.css.ts","../src/components/AppShell/AppShell.tsx","../src/components/Aside/styles.css.ts","../src/components/Aside/Aside.tsx","../src/components/Badge/styles.css.ts","../src/components/Badge/Badge.tsx","../src/components/Breadcrumb/styles.css.ts","../src/components/Breadcrumb/Breadcrumb.tsx","../src/shared/useOrderedRegistry.ts","../src/components/ButtonGroup/styles.css.ts","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Callout/styles.css.ts","../src/components/Callout/Callout.tsx","../src/components/Card/styles.css.ts","../src/components/Card/Card.tsx","../src/components/Checkbox/styles.css.ts","../src/styles/visually-hidden.css.ts","../src/components/Checkbox/Checkbox.tsx","../src/components/LiveRegion/LiveRegion.tsx","../../tokens/src/tokens/type-presets.css.ts","../src/components/CodeBlock/styles.css.ts","../src/components/CodeBlock/CodeBlock.tsx","../src/hooks/useControllableValue.ts","../src/components/CheckboxGroup/styles.css.ts","../src/components/Field/FieldContext.ts","../src/components/CheckboxGroup/CheckboxGroup.tsx","../src/components/ColorInput/styles.css.ts","../src/components/ColorInput/ColorInput.tsx","../src/components/Dialog/styles.css.ts","../src/components/Dialog/Dialog.tsx","../src/components/InputGroup/InputGroupContext.ts","../src/components/Input/styles.css.ts","../src/components/Input/Input.tsx","../src/components/Field/styles.css.ts","../src/components/Field/Field.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/DragDrop/styles.css.ts","../src/components/DragDrop/DragDrop.tsx","../src/components/DetailPanel/styles.css.ts","../src/components/DetailPanel/DetailPanel.tsx","../src/components/EmptyState/styles.css.ts","../src/components/EmptyState/EmptyState.tsx","../src/components/Heading/styles.css.ts","../src/components/Heading/Heading.tsx","../src/components/List/styles.css.ts","../src/components/List/List.tsx","../src/components/Fieldset/styles.css.ts","../src/components/Fieldset/Fieldset.tsx","../src/components/InputGroup/styles.css.ts","../src/components/InputGroup/InputGroup.tsx","../src/components/LinkButton/styles.css.ts","../src/components/LinkButton/LinkButton.tsx","../src/components/Meter/styles.css.ts","../src/components/Meter/Meter.tsx","../src/components/PageNav/styles.css.ts","../src/components/PageNav/PageNav.tsx","../src/components/Panel/styles.css.ts","../src/components/Panel/Panel.tsx","../src/components/Prose/Prose.tsx","../src/components/RadioGroup/styles.css.ts","../src/components/RadioGroup/RadioGroup.tsx","../src/components/ScrollArea/styles.css.ts","../src/components/ScrollArea/ScrollAreaContext.ts","../src/components/ScrollArea/useScrollAreaRoot.ts","../src/components/ScrollArea/ScrollArea.tsx","../src/components/Combobox/styles.css.ts","../src/components/Combobox/ComboboxContext.ts","../src/components/Combobox/useComboboxRoot.ts","../src/components/Listbox/styles.css.ts","../src/components/Listbox/Listbox.tsx","../src/components/Combobox/Combobox.tsx","../src/components/VisuallyHidden/VisuallyHidden.tsx","../src/components/Select/styles.css.ts","../src/components/Select/SelectContext.ts","../src/components/Select/useSelectRoot.ts","../src/components/Select/Select.tsx","../src/components/SideNav/styles.css.ts","../src/components/SideNav/SideNavContext.ts","../src/components/SideNav/SideNav.tsx","../src/components/Spinner/styles.css.ts","../src/components/Spinner/Spinner.tsx","../src/components/Toast/styles.css.ts","../src/components/Toast/ToastProvider.tsx","../src/components/StatusIcon/styles.css.ts","../src/components/StatusIcon/StatusIcon.tsx","../src/components/TagGroup/TagGroupContext.ts","../src/components/Tag/styles.css.ts","../src/components/Tag/Tag.tsx","../src/components/TagGroup/styles.css.ts","../src/components/TagGroup/TagGroup.tsx","../src/components/TableOfContents/styles.css.ts","../src/components/TableOfContents/TableOfContentsContext.ts","../src/components/TableOfContents/TableOfContents.tsx","../src/components/Tabs/styles.css.ts","../src/components/Tabs/TabsContext.ts","../src/components/Tabs/useTabsRoot.ts","../src/components/Tabs/Tabs.tsx","../src/components/Timeline/styles.css.ts","../src/components/Timeline/Timeline.tsx","../src/components/Tree/styles.css.ts","../src/components/Tree/TreeContext.ts","../src/components/Tree/Tree.tsx","../src/components/Textarea/styles.css.ts","../src/components/Textarea/Textarea.tsx","../src/components/ColorMode/styles.css.ts","../src/components/ColorMode/ColorMode.tsx","../src/components/Text/styles.css.ts","../src/components/Text/Text.tsx","../src/components/Time/Time.tsx","../src/components/Time/relative.ts","../src/components/ToggleGroup/ToggleGroupContext.ts","../src/components/Toggle/styles.css.ts","../src/components/Toggle/Toggle.tsx","../src/components/ToggleGroup/useRovingFocus.ts","../src/components/ToggleGroup/styles.css.ts","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tooltip/styles.css.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Toolbar/styles.css.ts","../src/components/Toolbar/Toolbar.tsx","../src/components/Popover/styles.css.ts","../src/components/Popover/Popover.tsx","../src/components/Switch/styles.css.ts","../src/components/Switch/Switch.tsx","../src/components/Stack/styles.css.ts","../src/components/Stack/Stack.tsx","../src/components/Inline/styles.css.ts","../src/components/Inline/Inline.tsx","../src/components/Cluster/styles.css.ts","../src/components/Cluster/Cluster.tsx","../src/components/Grid/styles.css.ts","../src/components/Grid/columns.ts","../src/components/Grid/Grid.tsx","../src/components/PageShell/styles.css.ts","../src/components/PageShell/PageShell.tsx","../src/hooks/useContainerQuery.ts"],"sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\n\ninterface ActionBarEntry {\n id: string\n render: () => ReactNode\n}\n\ninterface ActionBarStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ActionBarEntry[]\n push: (id: string, render: () => ReactNode) => void\n update: (id: string, render: () => ReactNode) => void\n remove: (id: string) => void\n}\n\nfunction createActionBarStore(): ActionBarStore {\n let entries: ActionBarEntry[] = []\n const listeners = new Set<() => void>()\n\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n push: (id, render) => {\n entries = [...entries, {id, render}]\n notify()\n },\n update: (id, render) => {\n entries = entries.map((e) => (e.id === id ? {id, render} : e))\n notify()\n },\n remove: (id) => {\n entries = entries.filter((e) => e.id !== id)\n notify()\n },\n }\n}\n\nconst ActionBarContext = createContext<ActionBarStore | null>(null)\n\nexport function ActionBarProvider({children}: {children: ReactNode}) {\n const storeRef = useRef<ActionBarStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createActionBarStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const topEntry = entries.length > 0 ? entries[entries.length - 1] : null\n\n return (\n <ActionBarContext.Provider value={store}>\n {children}\n {topEntry?.render()}\n </ActionBarContext.Provider>\n )\n}\n\nexport function useActionBarStack() {\n const store = useContext(ActionBarContext)\n const id = useId()\n\n const register = useCallback(\n (render: () => ReactNode) => {\n if (!store) return\n const entries = store.getSnapshot()\n if (entries.some((e) => e.id === id)) {\n store.update(id, render)\n } else {\n store.push(id, render)\n }\n },\n [store, id],\n )\n\n const unregister = useCallback(() => {\n store?.remove(id)\n }, [store, id])\n\n const isTop = useMemo(() => {\n if (!store) return false\n const entries = store.getSnapshot()\n return entries.length > 0 && entries[entries.length - 1].id === id\n }, [store, id])\n\n return {id, register, unregister, managed: store !== null, isTop}\n}\n","import {css} from 'react-strict-dom'\n\nexport const spacing = css.defineVars({\n xs: '4px',\n sm: '8px',\n ms: '12px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n xxl: '48px',\n xxxl: '64px',\n})\n\n// Optical micro-steps below and between the spacing scale: a 1-6px nudge that\n// aligns a glyph or tightens a dense control. Not a layout choice, so not part\n// of SpacingToken (no `gap=\"px2\"`); prefer the scale.\nexport const microSpacing = css.defineVars({\n px1: '1px',\n px2: '2px',\n px3: '3px',\n px5: '5px',\n px6: '6px',\n})\n\nexport const radii = css.defineVars({\n xs: '4px',\n px6: '6px',\n sm: '8px',\n md: '12px',\n lg: '16px',\n full: '9999px',\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n overlay: {\n position: 'fixed',\n bottom: spacing.lg,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.md,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n boxShadow: shadows.lg,\n zIndex: layers.floating,\n },\n // Centred on the window: the default, with nothing docked at its edge.\n centered: {\n left: '50%',\n transform: 'translateX(-50%)',\n maxWidth: `calc(100vw - ${spacing.xxl})`,\n },\n // Centred in the window minus chrome docked at the inline-end edge (a\n // DetailPanel). Both insets and auto margins centre a fixed box of\n // fit-content width in what is left, measured on the containing block\n // (the window without a classic scrollbar), not on 100vw.\n inset: (end: number) => ({\n insetInlineStart: 0,\n insetInlineEnd: end,\n marginInlineStart: 'auto',\n marginInlineEnd: 'auto',\n width: 'fit-content',\n maxWidth: `calc(100% - ${end}px - ${spacing.xxl})`,\n }),\n overlayOffset: (bottom: number) => ({\n bottom,\n }),\n overlayEmphasized: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n selectedCount: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n fontFamily: typography.fontFamily,\n color: colors.text,\n whiteSpace: 'nowrap',\n },\n selectedCountEmphasized: {\n color: colors.accentContrast,\n },\n actions: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.sm,\n },\n // Beside a docked panel the room is narrower: more actions than fit scroll\n // instead of spilling past the bar. A scroll box clips vertically too, so\n // the row gets room on every side for the buttons' focus rings, taken back\n // by its margin so the bar keeps its size.\n actionsScroll: {\n minWidth: 0,\n overflowX: 'auto',\n overflowY: 'hidden',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n marginTop: `calc(-1 * ${spacing.xs})`,\n marginBottom: `calc(-1 * ${spacing.xs})`,\n marginLeft: `calc(-1 * ${spacing.xs})`,\n marginRight: `calc(-1 * ${spacing.xs})`,\n },\n closeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButtonSm,\n height: sizes.iconButtonSm,\n padding: 0,\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderRadius: radii.sm,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n closeButtonEmphasized: {\n color: {\n default: colors.accentContrast,\n ':hover': colors.accentContrast,\n },\n opacity: {\n default: 0.7,\n ':hover': 1,\n },\n },\n separator: {\n width: sizes.divider,\n alignSelf: 'stretch',\n backgroundColor: colors.border,\n marginTop: spacing.xs,\n marginBottom: spacing.xs,\n },\n separatorEmphasized: {\n backgroundColor: colors.accentContrast,\n opacity: 0.3,\n },\n})\n","import {useEffect, useCallback, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {SPACING_PX, type SpacingToken} from '@duro-app/tokens/keys'\nimport {useActionBarStack} from './ActionBarProvider'\nimport {styles} from './styles.css'\n\nexport interface ActionBarProps {\n /** Number of selected items, or 'all'. Hidden when 0. */\n selectedItemCount: number | 'all'\n /** Label for the selection count. Receives the count string. */\n selectedLabel?: (count: string) => string\n /** Whether to use emphasized (accent) styling. */\n isEmphasized?: boolean\n /** Called when the clear/close button is pressed. */\n onClearSelection: () => void\n /** Whether the bar can be dismissed. When false, the close button is hidden. @default true */\n dismissible?: boolean\n /**\n * Distance between the bar and the bottom of the viewport, for hosts with\n * their own bottom chrome (zoom controls, players) the bar must clear.\n * A spacing token, or a raw px number when clearing chrome of arbitrary\n * height. Defaults to the spacing.lg token.\n */\n bottomOffset?: SpacingToken | number\n /**\n * Width in px of chrome docked at the window's inline-end edge (right in\n * left-to-right, left in right-to-left), such as an open DetailPanel: the\n * bar centres in what is left and keeps 24px clear of it. 0 or omitted\n * centres on the window.\n */\n insetInlineEnd?: number\n /** Action buttons to display. */\n children: ReactNode\n}\n\nfunction ActionBarContent({\n selectedItemCount,\n selectedLabel,\n isEmphasized = false,\n onClearSelection,\n dismissible = true,\n bottomOffset,\n insetInlineEnd = 0,\n children,\n}: ActionBarProps) {\n const countStr = selectedItemCount === 'all' ? 'All' : `${selectedItemCount}`\n const label = selectedLabel ? selectedLabel(countStr) : `${countStr} selected`\n\n return (\n <html.div\n role=\"toolbar\"\n aria-label={label}\n style={[\n styles.overlay,\n insetInlineEnd > 0 ? styles.inset(insetInlineEnd) : styles.centered,\n bottomOffset != null &&\n styles.overlayOffset(\n typeof bottomOffset === 'number' ? bottomOffset : SPACING_PX[bottomOffset],\n ),\n isEmphasized && styles.overlayEmphasized,\n ]}\n >\n <html.span style={[styles.selectedCount, isEmphasized && styles.selectedCountEmphasized]}>\n {label}\n </html.span>\n <html.div style={[styles.separator, isEmphasized && styles.separatorEmphasized]} />\n <html.div style={[styles.actions, insetInlineEnd > 0 && styles.actionsScroll]}>\n {children}\n </html.div>\n {dismissible && (\n <html.button\n type=\"button\"\n aria-label=\"Clear selection\"\n onClick={onClearSelection}\n style={[styles.closeButton, isEmphasized && styles.closeButtonEmphasized]}\n >\n <svg width={10} height={10} viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M1 1l8 8M9 1l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )}\n </html.div>\n )\n}\n\nfunction ActionBarInner(props: ActionBarProps) {\n const {selectedItemCount} = props\n const stack = useActionBarStack()\n const isActive = selectedItemCount !== 0\n\n const renderBar = useCallback(() => <ActionBarContent {...props} />, [props])\n\n useEffect(() => {\n if (!stack.managed) return\n if (isActive) {\n stack.register(renderBar)\n } else {\n stack.unregister()\n }\n return () => stack.unregister()\n }, [stack, isActive, renderBar])\n\n // If no provider, fall back to standalone rendering\n if (!stack.managed) {\n if (!isActive) return null\n return <ActionBarContent {...props} />\n }\n\n // Managed by provider — rendering happens there\n return null\n}\n\nexport const ActionBar = ActionBarInner\n","import type {ReactNode} from 'react'\nimport {ICON_SIZES, type IconSize} from '@duro-app/tokens/keys'\n\nexport type {IconSize}\n\nexport type IconName =\n | 'x-circle'\n | 'check-circle'\n | 'check-done'\n | 'clock'\n | 'forbidden'\n | 'info-circle'\n | 'alert-triangle'\n | 'shield'\n | 'lock'\n | 'key'\n // Navigation / wayfinding glyphs\n | 'map'\n | 'layers'\n | 'repeat'\n | 'database'\n | 'shield-check'\n | 'route'\n | 'git-branch'\n | 'menu'\n | 'pin'\n // Infrastructure / inventory glyphs\n | 'server'\n | 'hard-drive'\n | 'box'\n | 'image'\n | 'tag'\n | 'pie-chart'\n // People / access / admin glyphs\n | 'users'\n | 'user-plus'\n | 'mail'\n | 'file-text'\n | 'plug'\n // Input / action glyphs\n | 'search'\n | 'mic'\n // Color-mode glyphs\n | 'sun'\n | 'moon'\n | 'monitor'\n | 'contrast'\n // Filled variants (solid shape with cutout symbol)\n | 'info-circle-filled'\n | 'alert-triangle-filled'\n | 'check-circle-filled'\n | 'x-circle-filled'\n | 'shield-filled'\n | 'lock-filled'\n\n/** Stroke-based icons (Feather/Lucide style) */\nconst strokeIcons: Partial<Record<IconName, ReactNode>> = {\n 'x-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </>\n ),\n 'check-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"16 10 11 15 8 12\" />\n </>\n ),\n 'check-done': (\n <>\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </>\n ),\n forbidden: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\" />\n </>\n ),\n 'info-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </>\n ),\n 'alert-triangle': (\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </>\n ),\n shield: <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />,\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n key: (\n <>\n <path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.78 7.78 5.5 5.5 0 0 1 7.78-7.78zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n </>\n ),\n // ---- navigation / wayfinding ----\n map: (\n <>\n <polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\" />\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\" />\n </>\n ),\n layers: (\n <>\n <polygon points=\"12 2 2 7 12 12 22 7 12 2\" />\n <polyline points=\"2 17 12 22 22 17\" />\n <polyline points=\"2 12 12 17 22 12\" />\n </>\n ),\n // Two crossing arrows — exchange / interface flows.\n repeat: (\n <>\n <polyline points=\"17 1 21 5 17 9\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <polyline points=\"7 23 3 19 7 15\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </>\n ),\n database: (\n <>\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\" />\n <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\" />\n </>\n ),\n 'shield-check': (\n <>\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <polyline points=\"9 12 11 14 15 10\" />\n </>\n ),\n // Milestone path — roadmap / itinerary.\n route: (\n <>\n <circle cx=\"6\" cy=\"19\" r=\"3\" />\n <path d=\"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15\" />\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n </>\n ),\n 'git-branch': (\n <>\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </>\n ),\n menu: (\n <>\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </>\n ),\n // ---- infrastructure / inventory ----\n // Two stacked rack units — hosts, nodes, machines.\n server: (\n <>\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </>\n ),\n // Disk enclosure — volumes, persistent storage.\n 'hard-drive': (\n <>\n <line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\" />\n <path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />\n <line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\" />\n <line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\" />\n </>\n ),\n // Isometric crate — a deployable unit of work.\n box: (\n <>\n <path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\" />\n <polyline points=\"3.27 6.96 12 12.01 20.73 6.96\" />\n <line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\" />\n </>\n ),\n // Picture frame — container images, artefacts.\n image: (\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </>\n ),\n // Luggage tag — labels, annotations, metadata.\n tag: (\n <>\n <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\" />\n <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\n </>\n ),\n // Share of a whole — quotas, budgets, utilisation.\n 'pie-chart': (\n <>\n <path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\" />\n <path d=\"M22 12A10 10 0 0 0 12 2v10z\" />\n </>\n ),\n // ---- people / access / admin ----\n users: (\n <>\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n 'user-plus': (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"8.5\" cy=\"7\" r=\"4\" />\n <line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\" />\n <line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\" />\n </>\n ),\n mail: (\n <>\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" />\n <polyline points=\"22,6 12,13 2,6\" />\n </>\n ),\n 'file-text': (\n <>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </>\n ),\n plug: (\n <>\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2\" />\n <path d=\"M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\" />\n </>\n ),\n pin: (\n <>\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"22\" />\n <path d=\"M9 10.76V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v6.76a2 2 0 0 0 .55 1.38l1.68 1.78A1 1 0 0 1 16.5 16h-9a1 1 0 0 1-.73-1.68l1.68-1.78A2 2 0 0 0 9 10.76z\" />\n </>\n ),\n // ---- input / action ----\n // Magnifying glass — search fields, find actions.\n search: (\n <>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </>\n ),\n // Microphone — voice input, dictation.\n mic: (\n <>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </>\n ),\n // ---- color mode ----\n sun: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </>\n ),\n moon: <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />,\n monitor: (\n <>\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </>\n ),\n // Circle, half solid — high-contrast / mode indicator.\n contrast: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 0 20z\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n}\n\n/**\n * Filled icons — solid shape with evenodd cutout for the inner symbol.\n * The cutout reveals the background color, so they work on any theme.\n * Uses fill=\"currentColor\" only, no stroke.\n */\nconst filledIcons: Partial<Record<IconName, ReactNode>> = {\n // Filled circle with \"i\" cutout (dot + line)\n 'info-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-.75 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0zM11 11a1 1 0 1 1 2 0v5a1 1 0 1 1-2 0v-5z\"\n />\n ),\n // Filled triangle with \"!\" cutout\n 'alert-triangle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0zM11 10a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0v-3zm.25 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0z\"\n />\n ),\n // Filled circle with checkmark cutout\n 'check-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707a1 1 0 0 0-1.414-1.414L11 13.586l-2.293-2.293a1 1 0 0 0-1.414 1.414l3 3a1 1 0 0 0 1.414 0l5-5z\"\n />\n ),\n // Filled circle with X cutout\n 'x-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM9.707 8.293a1 1 0 0 0-1.414 1.414L10.586 12l-2.293 2.293a1 1 0 1 0 1.414 1.414L12 13.414l2.293 2.293a1 1 0 0 0 1.414-1.414L13.414 12l2.293-2.293a1 1 0 0 0-1.414-1.414L12 10.586 9.707 8.293z\"\n />\n ),\n // Filled shield with checkmark cutout\n 'shield-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 1L3 5v7c0 6.5 8.5 10.5 9 10.73.5-.23 9-4.23 9-10.73V5l-9-4zm3.707 8.707a1 1 0 0 0-1.414-1.414L11 11.586l-1.293-1.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4z\"\n />\n ),\n // Filled lock body with stroke shackle\n 'lock-filled': (\n <>\n <path\n d=\"M7 11V7a5 5 0 0 1 10 0v4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n </>\n ),\n}\n\ninterface IconProps {\n name: IconName\n /** Token from the icon size scale: sm 16, md 18, lg 24, xl 36, xxl 48. */\n size?: IconSize\n}\n\nexport function Icon({name, size: sizeToken = 'lg'}: IconProps) {\n const size = ICON_SIZES[sizeToken]\n const filled = filledIcons[name]\n if (filled) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width={size} height={size}>\n {filled}\n </svg>\n )\n }\n\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={size}\n height={size}\n >\n {strokeIcons[name]}\n </svg>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: microSpacing.px1,\n },\n content: {\n flex: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type AlertVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<AlertVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface AlertProps {\n variant?: AlertVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n children: ReactNode\n}\n\nfunction resolveIcon(icon: AlertProps['icon'], variant: AlertVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"md\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"md\" />\n return icon\n}\n\nexport function Alert({variant = 'info', icon, children}: AlertProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div role=\"alert\" style={[styles.base, styles[variant]]}>\n {resolvedIcon ? (\n <>\n <html.div style={styles.iconWrap}>{resolvedIcon}</html.div>\n <html.div style={styles.content}>{children}</html.div>\n </>\n ) : (\n children\n )}\n </html.div>\n )\n}\n","/**\n * Platform flag resolved by the bundler's platform extensions: web bundlers\n * (Vite/Rollup) read THIS file (`isNative = false`); Metro reads\n * `platform.native.ts` (`isNative = true`) on React Native / Expo.\n *\n * It lets shared components layer a native-only style override without\n * importing `react-native` on web (the DS web build has no react-native).\n * Typed `boolean` (not the `false` literal) so `isNative && styles.x` stays a\n * `false | Style` union in style arrays rather than narrowing to `false`.\n */\nexport const isNative: boolean = false\n","import type {Ref, RefCallback} from 'react'\n\n/** One callback ref that sets every ref given (object or callback). */\nexport function mergeRefs<T>(...refs: Array<Ref<T> | undefined>): RefCallback<T> {\n return (value) => {\n for (const ref of refs) {\n if (typeof ref === 'function') ref(value)\n else if (ref) (ref as {current: T | null}).current = value\n }\n }\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color, opacity, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n // A touch screen gets the 44px target, as Toggle and the triggers do; a\n // mouse keeps the compact control (5.6, the person's decision).\n minWidth: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n // Tactile press feedback. The scale is suppressed under reduced motion (and\n // duration.fast collapses to 0ms there too), so it's inert for those users.\n transform: {\n default: 'scale(1)',\n ':active': {\n default: 'scale(0.97)',\n '@media (prefers-reduced-motion: reduce)': 'scale(1)',\n },\n },\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n // Every small control is at least controlSm tall, whatever it holds (5.6),\n // and the touch target under a coarse pointer.\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n ':active': colors.accentHover,\n },\n borderColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: colors.border,\n color: colors.textMuted,\n },\n link: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecoration: {\n default: 'none',\n ':hover': 'underline',\n },\n paddingLeft: 0,\n paddingRight: 0,\n },\n inverseSecondary: {\n backgroundColor: {\n default: colors.inverseFill,\n ':hover': colors.inverseFillHover,\n },\n borderColor: {\n default: colors.inverseBorder,\n ':hover': colors.inverseBorderHover,\n },\n color: colors.accentContrast,\n },\n danger: {\n backgroundColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n ':active': colors.errorHover,\n },\n borderColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n },\n color: colors.errorContrast,\n },\n fullWidth: {\n width: '100%',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode, Ref} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {styles} from './styles.css'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'inverseSecondary' | 'link' | 'danger'\nexport type ButtonSize = ControlSize\n\ninterface ButtonProps {\n variant?: ButtonVariant\n size?: ButtonSize\n fullWidth?: boolean\n disabled?: boolean\n type?: 'button' | 'submit'\n onClick?: () => void\n /** Accessible name override — e.g. for buttons whose visible text isn't unique. */\n 'aria-label'?: string\n /** For a button that shows or hides another element (a disclosure, a panel). */\n 'aria-expanded'?: boolean\n /** Id of the element this button controls. */\n 'aria-controls'?: string\n /**\n * The underlying <button>, e.g. to anchor a Popover or return focus to it.\n * Web only: on native the ref is not attached.\n */\n ref?: Ref<HTMLButtonElement>\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Button({\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n disabled = false,\n type = 'button',\n onClick,\n 'aria-label': ariaLabel,\n 'aria-expanded': ariaExpanded,\n 'aria-controls': ariaControls,\n ref,\n children,\n}: ButtonProps) {\n const grouped = useGroupedControl<HTMLButtonElement>({disabled})\n return (\n <html.button\n ref={isNative ? undefined : mergeRefs(ref, grouped.ref)}\n tabIndex={grouped.tabIndex}\n onFocus={grouped.onFocus}\n type={type}\n disabled={disabled}\n onClick={onClick}\n aria-label={ariaLabel}\n aria-expanded={ariaExpanded}\n aria-controls={ariaControls}\n style={[\n styles.base,\n isNative && styles.nativeFlex,\n sizeMap[size],\n styles[variant],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n grouped.style,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: colors.scrim,\n zIndex: layers.overlay,\n // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (positioning container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: layers.modal,\n display: 'flex',\n pointerEvents: 'none',\n },\n\n // Right anchor (desktop default)\n viewportRight: {\n justifyContent: 'flex-end',\n alignItems: 'stretch',\n },\n // Left anchor\n viewportLeft: {\n justifyContent: 'flex-start',\n alignItems: 'stretch',\n },\n // Bottom anchor (mobile default)\n viewportBottom: {\n justifyContent: 'stretch',\n alignItems: 'flex-end',\n },\n\n // --- Panel ---\n panel: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n borderWidth: 0,\n touchAction: 'none',\n },\n\n // Panel sizing per anchor\n panelHorizontal: {\n width: '100%',\n height: '100%',\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n panelVertical: {\n width: '100%',\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n borderTopLeftRadius: radii.lg,\n borderTopRightRadius: radii.lg,\n maxHeight: '85vh',\n },\n panelLeftBorder: {\n borderLeftWidth: 0,\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n\n // --- Panel widths (horizontal anchors) ---\n sm: {maxWidth: sizes.panelSm},\n md: {maxWidth: sizes.panelMd},\n lg: {maxWidth: sizes.panelLg},\n\n // --- Slide animations: Right ---\n slideInRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Left ---\n slideInLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(-100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(-100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Bottom ---\n slideInBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(100%)'},\n to: {transform: 'translateY(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(0)'},\n to: {transform: 'translateY(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationMinimal: {animationDuration: duration.minimal},\n closeDurationQuick: {animationDuration: duration.quick},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBrisk: {animationDuration: duration.brisk},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButton,\n height: sizes.iconButton,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {createContext, useContext} from 'react'\n\n/**\n * True inside a Dialog or Drawer. A Popover reads it to pick its layer: inside\n * a modal it must clear that modal (`layers.popover`); outside one it stays at\n * `layers.floating`, so a modal opened later, even from inside the Popover,\n * covers it.\n *\n * holds-until: a Dialog opened from a Popover that itself sits inside a Dialog\n * still renders under that Popover (1000/1001 < 1040). It is fixed when a\n * nested Dialog lifts its layer above its opener, or when the parent Popover\n * closes on a nested modal opening; no consumer needs it yet.\n */\nexport const ModalContext = createContext(false)\n\n/**\n * True inside a Dialog or Drawer, false outside. A floating surface that is not\n * a Duro Popover picks its layer with it, the way a Popover does:\n * `useInModal() ? layers.popover : layers.floating`, and for one that must\n * cover another floating surface (a link editor over a format bar)\n * `useInModal() ? layers.popoverRaised : layers.floatingRaised`.\n */\nexport function useInModal(): boolean {\n return useContext(ModalContext)\n}\n","import {useRef, useCallback, useEffect} from 'react'\nimport type {DrawerAnchor} from './Drawer'\n\n/** Threshold: fraction of panel size the user must drag to dismiss */\nconst DISMISS_THRESHOLD = 0.3\n\n/** Minimum velocity (px/ms) to dismiss even below threshold */\nconst VELOCITY_THRESHOLD = 0.5\n\n/** Duration for the dismiss slide-out animation (ms) */\nconst DISMISS_DURATION = 160\n\n/**\n * Max pixels the panel visually \"grows\" when dragged in the opposite direction.\n * iOS-style: panel stays anchored to its edge, doesn't translate.\n * Instead we show a subtle shadow/scale hint capped at this value.\n */\nconst OPPOSITE_MAX_OVERSCROLL = 12\n\ninterface UseSwipeDismissOptions {\n anchor: DrawerAnchor\n enabled: boolean\n onDismiss: () => void\n /**\n * The panel element itself, not a ref: a Drawer open from its first render\n * draws the panel inline, then remounts it into the portal once the mount\n * exists, and listeners must follow the element that is actually shown.\n */\n panel: HTMLDivElement | null\n}\n\ninterface SwipeState {\n startX: number\n startY: number\n currentX: number\n currentY: number\n startTime: number\n swiping: boolean\n panelSize: number\n /** Inner Duro scroll viewport the gesture started in; capture is deferred until the axis is decided */\n deferredScroll: HTMLElement | null\n pointerId: number\n}\n\n/**\n * Hook that adds swipe-to-dismiss gesture to a drawer panel.\n *\n * Dismiss direction: panel follows finger 1:1, backdrop fades.\n * Opposite direction: iOS-style — panel stays anchored, shows subtle\n * overscroll feedback (box-shadow intensifies), then snaps back.\n */\nexport function useSwipeDismiss({anchor, enabled, onDismiss, panel}: UseSwipeDismissOptions) {\n const stateRef = useRef<SwipeState>({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n startTime: 0,\n swiping: false,\n panelSize: 0,\n deferredScroll: null,\n pointerId: 0,\n })\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n /** Returns positive = dismiss direction, negative = opposite */\n const getMovement = useCallback(\n (state: SwipeState) => {\n if (isHorizontal) {\n const dx = state.currentX - state.startX\n return anchor === 'right' ? dx : -dx\n }\n return state.currentY - state.startY\n },\n [anchor, isHorizontal],\n )\n\n const applyTransform = useCallback(\n (movement: number, panelEl: HTMLDivElement) => {\n const size = Number(panelEl.dataset.panelSize) || 1\n\n if (movement >= 0) {\n // Dismiss direction — 1:1 tracking\n const progress = movement / size\n\n if (isHorizontal) {\n const sign = anchor === 'right' ? 1 : -1\n panelEl.style.transform = `translateX(${sign * movement}px)`\n } else {\n panelEl.style.transform = `translateY(${movement}px)`\n }\n\n // Fade backdrop proportionally\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = String(Math.max(0, 1 - progress))\n }\n } else {\n // Opposite direction — iOS behavior:\n // Panel stays anchored (no translate). Show subtle overscroll via box-shadow.\n // Diminishing resistance: asymptotically approaches OPPOSITE_MAX_OVERSCROLL.\n const absMovement = Math.abs(movement)\n const overscroll = (absMovement / (absMovement + size * 0.5)) * OPPOSITE_MAX_OVERSCROLL\n const shadowSpread = Math.round(overscroll)\n\n panelEl.style.transform = ''\n panelEl.style.boxShadow =\n shadowSpread > 0 ? `0 0 ${shadowSpread * 2}px ${shadowSpread}px rgba(0, 0, 0, 0.15)` : ''\n }\n },\n [anchor, isHorizontal],\n )\n\n /** Reset all inline styles (snap back) */\n const resetStyles = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transform = ''\n panelEl.style.boxShadow = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = ''\n }\n }, [])\n\n /** Animate to fully dismissed position, then call onDismiss */\n const animateDismiss = useCallback(\n (panelEl: HTMLDivElement) => {\n const dismissTransform = isHorizontal\n ? `translateX(${anchor === 'right' ? '100%' : '-100%'})`\n : 'translateY(100%)'\n\n panelEl.style.transition = `transform ${DISMISS_DURATION}ms ease-in`\n panelEl.style.transform = dismissTransform\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = `opacity ${DISMISS_DURATION}ms ease-in`\n backdrop.style.opacity = '0'\n }\n\n // When the slide-out transition finishes, just call onDismiss.\n // Do NOT reset inline styles before unmount — that causes a 1-frame flash\n // where the panel appears at its original position. React will unmount the\n // DOM node entirely, so the inline styles don't need cleanup.\n let dismissed = false\n const done = () => {\n if (dismissed) return\n dismissed = true\n onDismiss()\n }\n panelEl.addEventListener('transitionend', done, {once: true})\n setTimeout(done, DISMISS_DURATION + 50)\n },\n [anchor, isHorizontal, onDismiss],\n )\n\n /** Animate snap-back for dismiss-direction undershoot */\n const animateSnapBack = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transition = 'transform 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n panelEl.style.transform = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = 'opacity 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n backdrop.style.opacity = ''\n }\n\n const cleanup = () => {\n panelEl.style.transition = ''\n if (backdrop) backdrop.style.transition = ''\n }\n panelEl.addEventListener('transitionend', cleanup, {once: true})\n setTimeout(cleanup, 250)\n }, [])\n\n useEffect(() => {\n if (!enabled || !panel) return\n\n function handlePointerDown(e: PointerEvent) {\n if (e.button !== 0) return\n const target = e.target as HTMLElement\n const scrollEl = target.closest<HTMLElement>('[data-duro-scroll]')\n // Outside a ScrollArea a control keeps its press. Inside one the gesture\n // is decided on the first move even from a control: a list of toggles is\n // all buttons, and touch adjustment snaps a finger onto one. A tap\n // (under the 8px slop) still presses it; a drag never captures before\n // the decision, so the release lands on the panel, not the control.\n if (!scrollEl && target.closest('button, a, input, textarea, select, [role=\"button\"]')) {\n return\n }\n\n const rect = panel!.getBoundingClientRect()\n const state = stateRef.current\n state.startX = e.clientX\n state.startY = e.clientY\n state.currentX = e.clientX\n state.currentY = e.clientY\n state.startTime = Date.now()\n state.swiping = false\n state.panelSize = isHorizontal ? rect.width : rect.height\n\n state.pointerId = e.pointerId\n state.deferredScroll = scrollEl\n\n panel!.dataset.panelSize = String(state.panelSize)\n\n // Inside a Duro ScrollArea the scroll may own the gesture: wait for the first move.\n if (!state.deferredScroll) beginCapture(e.pointerId)\n }\n\n function beginCapture(pointerId: number) {\n panel!.setPointerCapture(pointerId)\n\n // Freeze CSS animation — we take over positioning.\n // Never restore it; the panel is already at its final resting position.\n panel!.style.animation = 'none'\n }\n\n /** True when the viewport can't scroll further against the dismiss direction */\n function isAtDismissEdge(el: HTMLElement) {\n if (!isHorizontal) return el.scrollTop <= 0\n if (anchor === 'right') return el.scrollLeft <= 0\n return el.scrollLeft + el.clientWidth >= el.scrollWidth - 1\n }\n\n function handlePointerMove(e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n state.currentX = e.clientX\n state.currentY = e.clientY\n\n const dx = Math.abs(state.currentX - state.startX)\n const dy = Math.abs(state.currentY - state.startY)\n\n if (!state.swiping) {\n const totalMovement = Math.sqrt(dx * dx + dy * dy)\n if (totalMovement < 8) return\n\n if (isHorizontal && dx > dy) {\n state.swiping = true\n } else if (!isHorizontal && dy > dx) {\n state.swiping = true\n } else {\n // Wrong axis — abort gesture\n state.startTime = 0\n state.deferredScroll = null\n return\n }\n\n const scrollEl = state.deferredScroll\n if (scrollEl) {\n state.deferredScroll = null\n if (getMovement(state) <= 0 || !isAtDismissEdge(scrollEl)) {\n // The scroll owns this gesture: no swiping, no capture, no preventDefault\n state.swiping = false\n state.startTime = 0\n return\n }\n beginCapture(state.pointerId)\n }\n }\n\n if (state.swiping) {\n e.preventDefault()\n const movement = getMovement(state)\n applyTransform(movement, panel!)\n }\n }\n\n function handlePointerUp(_e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n const movement = getMovement(state)\n const elapsed = Date.now() - state.startTime\n const velocity = movement / elapsed\n\n state.startTime = 0\n state.deferredScroll = null\n\n if (!state.swiping) {\n return\n }\n\n state.swiping = false\n\n if (movement <= 0) {\n // Was dragging in opposite direction — just reset (no translate was applied)\n resetStyles(panel!)\n return\n }\n\n const fraction = movement / state.panelSize\n const shouldDismiss = fraction > DISMISS_THRESHOLD || velocity > VELOCITY_THRESHOLD\n\n if (shouldDismiss) {\n animateDismiss(panel!)\n } else {\n animateSnapBack(panel!)\n }\n }\n\n function handlePointerCancel() {\n const state = stateRef.current\n state.startTime = 0\n state.swiping = false\n state.deferredScroll = null\n resetStyles(panel!)\n }\n\n panel.addEventListener('pointerdown', handlePointerDown)\n panel.addEventListener('pointermove', handlePointerMove)\n panel.addEventListener('pointerup', handlePointerUp)\n panel.addEventListener('pointercancel', handlePointerCancel)\n\n function handleTouchMove(e: TouchEvent) {\n if (stateRef.current.swiping) {\n e.preventDefault()\n }\n }\n panel.addEventListener('touchmove', handleTouchMove, {passive: false})\n\n return () => {\n panel.removeEventListener('pointerdown', handlePointerDown)\n panel.removeEventListener('pointermove', handlePointerMove)\n panel.removeEventListener('pointerup', handlePointerUp)\n panel.removeEventListener('pointercancel', handlePointerCancel)\n panel.removeEventListener('touchmove', handleTouchMove)\n }\n }, [\n enabled,\n panel,\n anchor,\n isHorizontal,\n getMovement,\n applyTransform,\n resetStyles,\n animateSnapBack,\n animateDismiss,\n ])\n}\n","import {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {ModalContext} from '../../shared/ModalContext'\nimport {useSwipeDismiss} from './useSwipeDismiss'\n\n// --- Types ---\n\nexport type DrawerAnchor = 'right' | 'left' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n minimal: styles.closeDurationMinimal,\n quick: styles.closeDurationQuick,\n fast: styles.closeDurationFast,\n brisk: styles.closeDurationBrisk,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DrawerContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n anchor: DrawerAnchor\n dismissable: boolean\n swipeDismiss: boolean\n requestOpen: () => void\n requestClose: () => void\n /** Close immediately without CSS animation (used by swipe dismiss which handles its own exit animation) */\n requestCloseImmediate: () => void\n titleId: string\n descriptionId: string\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null)\n\nfunction useDrawer() {\n const ctx = useContext(DrawerContext)\n if (!ctx) throw new Error('Drawer compound components must be used within Drawer.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when drawer open state changes */\n onOpenChange?: (open: boolean) => void\n /** Which edge the drawer slides from. Default: 'right' */\n anchor?: DrawerAnchor\n /** Whether clicking backdrop or pressing Escape closes the drawer. Default: true */\n dismissable?: boolean\n /** Whether swipe gesture dismisses the drawer. Default: true */\n swipeDismiss?: boolean\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n anchor = 'right',\n dismissable = true,\n swipeDismiss = true,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n const requestCloseImmediate = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!dismissable) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, dismissable, requestClose])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DrawerContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n anchor,\n dismissable,\n swipeDismiss,\n requestOpen,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n }}\n >\n {children}\n </DrawerContext.Provider>\n )\n}\n\n// --- Trigger ---\n\nfunction Trigger({children}: {children: ReactNode}) {\n const {requestOpen} = useDrawer()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DrawerSize\n}\n\n// Slide animation maps\nconst slideInMap = {\n right: styles.slideInRight,\n left: styles.slideInLeft,\n bottom: styles.slideInBottom,\n} as const\n\nconst slideOutMap = {\n right: styles.slideOutRight,\n left: styles.slideOutLeft,\n bottom: styles.slideOutBottom,\n} as const\n\nconst viewportAnchorMap = {\n right: styles.viewportRight,\n left: styles.viewportLeft,\n bottom: styles.viewportBottom,\n} as const\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n anchor,\n dismissable,\n swipeDismiss: swipeEnabled,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n } = useDrawer()\n const mount = usePortalMount()\n // The shown panel element, tracked as state so swipe listeners follow it\n // when the portal mount arrives and the panel is remounted into it.\n const [panel, setPanel] = useState<HTMLDivElement | null>(null)\n const attachPanel = useCallback(\n (el: HTMLDivElement | null) => {\n panelRef.current = el\n setPanel(el)\n },\n [panelRef],\n )\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n // Swipe-to-dismiss — uses immediate close since the hook handles its own exit animation\n useSwipeDismiss({\n anchor,\n enabled: swipeEnabled && open && !closing,\n onDismiss: requestCloseImmediate,\n panel,\n })\n\n if (!open) return null\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport */}\n <html.div style={[styles.viewport, viewportAnchorMap[anchor]]} data-drawer-viewport=\"\">\n <html.div\n ref={attachPanel}\n role=\"dialog\"\n aria-modal={true}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.panel,\n isHorizontal && styles.panelHorizontal,\n isHorizontal && styles[size],\n !isHorizontal && styles.panelVertical,\n anchor === 'left' && styles.panelLeftBorder,\n closing && slideOutMap[anchor],\n closing && closeDurationMap[closeDuration],\n !closing && slideInMap[anchor],\n ]}\n >\n <ModalContext.Provider value={true}>\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </ModalContext.Provider>\n </html.div>\n </html.div>\n </>\n )\n\n // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDrawer()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDrawer()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDrawer()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// Direction \"Underlined\" (docs/mockups/text-link/Underlined.dc.html): the\n// underline is always there, so colour is never the only cue (WCAG F73).\nexport const styles = css.create({\n base: {\n fontFamily: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n cursor: 'pointer',\n textDecorationLine: 'underline',\n textDecorationStyle: 'solid',\n borderRadius: radii.xs,\n transitionProperty: 'color, text-decoration-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n default: {\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecorationColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n },\n subtle: {\n color: {\n default: 'inherit',\n ':hover': colors.accent,\n },\n textDecorationColor: {\n default: colors.textMuted,\n ':hover': colors.accent,\n },\n },\n})\n","/* Router-agnostic links (docs/adr/0002-link-parts-navigate-through-onnavigate.md).\n *\n * Every link part renders a real `<a href>`, so the browser keeps what a link\n * does on its own: cmd/ctrl-click and middle-click open a tab, shift-click a\n * window, alt-click downloads, \"Copy link\" works. An app with a client router\n * passes `onNavigate`; the part calls it for a plain primary click only, and\n * the app then decides:\n *\n * onNavigate={(href, event) => {\n * event.preventDefault()\n * navigate(href)\n * }}\n *\n * The part never prevents the default itself: without `onNavigate`, or for a\n * click it does not hand over, the browser follows the link. */\n\n/** The part of a click event a link part reads and hands to `onNavigate`. */\nexport interface LinkClickEvent {\n readonly button: number\n readonly metaKey: boolean\n readonly ctrlKey: boolean\n readonly shiftKey: boolean\n readonly altKey: boolean\n readonly defaultPrevented: boolean\n preventDefault(): void\n}\n\n/**\n * Called for a plain primary click on a link part. Call\n * `event.preventDefault()`, then your router's navigate; leave the event alone\n * to let the browser follow the link.\n */\nexport type OnNavigate = (href: string, event: LinkClickEvent) => void\n\n/** A primary-button click with no modifier key, not already prevented. */\nexport function isPlainClick(event: LinkClickEvent): boolean {\n return (\n event.button === 0 &&\n !event.metaKey &&\n !event.ctrlKey &&\n !event.shiftKey &&\n !event.altKey &&\n !event.defaultPrevented\n )\n}\n\n/**\n * The `onClick` of a link part: hands a plain click on a link with no\n * `target` to `onNavigate`, and does nothing otherwise, so the browser default\n * runs. Undefined when there is no `onNavigate` (no handler at all).\n */\nexport function linkClickHandler(\n href: string,\n onNavigate: OnNavigate | undefined,\n target?: string | null,\n): ((event: LinkClickEvent) => void) | undefined {\n if (!onNavigate) return undefined\n return (event) => {\n if (target != null || !isPlainClick(event)) return\n onNavigate(href, event)\n }\n}\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\nexport type TextLinkVariant = 'default' | 'subtle'\n\ninterface TextLinkProps {\n href: string\n /** `_blank` opens a new tab; `rel` then defaults to `noopener noreferrer`. */\n target?: '_blank' | '_self'\n rel?: string\n /**\n * `default`: accent text with an accent underline. `subtle`: the\n * surrounding text colour with a muted underline, accent on hover. Both\n * stay underlined, so colour is never the only cue in running text.\n */\n variant?: TextLinkVariant\n /** Accessible name, when the visible text alone does not say where it goes. */\n 'aria-label'?: string\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key, no `target`); the browser default runs for every other click. Call\n * `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n children: ReactNode\n}\n\n/**\n * An inline hyperlink in running text or a standalone \"View all\" link. For a\n * link that looks like a button, use LinkButton.\n */\nexport function TextLink({\n href,\n target,\n rel,\n variant = 'default',\n 'aria-label': ariaLabel,\n onNavigate,\n children,\n}: TextLinkProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel ?? (target === '_blank' ? 'noopener noreferrer' : undefined)}\n aria-label={ariaLabel}\n onClick={linkClickHandler(href, onNavigate, target)}\n style={[styles.base, styles[variant]]}\n >\n {children}\n </html.a>\n )\n}\n","import {useEffect, useState, type RefObject} from 'react'\nimport {breakpointsPx, type Breakpoint} from '@duro-app/tokens/tokens/breakpoints.css'\n\n/**\n * Whether the element behind `ref` is narrower than a Duro breakpoint — its\n * own width, as a container query sees it, not the window's. For the choices\n * CSS cannot make (a table of contents as a list or a menu, a row of buttons\n * or an overflow `Menu`).\n *\n * `false` on the server and until the first measurement, so the server and\n * the first client render agree on the wide layout; a ResizeObserver then\n * follows the element. A width of 0 (the element is not laid out, e.g.\n * `display: none`) keeps the last answer.\n *\n * Narrower than means `width < breakpoint`: at exactly 768px an element is not\n * below `md`, the same line `Grid`'s named layouts collapse on.\n */\nexport function useContainerBelow(\n ref: RefObject<HTMLElement | null>,\n breakpoint: Breakpoint,\n): boolean {\n const [below, setBelow] = useState(false)\n const limit = breakpointsPx[breakpoint]\n\n useEffect(() => {\n const element = ref.current\n if (!element || typeof ResizeObserver === 'undefined') return\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (!entry) return\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n if (width > 0) setBelow(width < limit)\n })\n observer.observe(element)\n return () => observer.disconnect()\n }, [ref, limit])\n\n return below\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\nimport {breakpoints} from '@duro-app/tokens/tokens/breakpoints.css'\n\n// At and above the collapse point (measured on the shell's own width, not\n// the window) the rail sits beside the page and the Header is a row that\n// scrolls with it; below it the rail gives way to one sticky bar — the Menu\n// button, the brand and the Header's content — and its Drawer. CSS makes the\n// switch, so the server's HTML is the same at every width and the first\n// paint is already right.\n//\n// `collapseBelow` picks one of three static sets (sm, md, lg): StyleX needs\n// every query written out, so each breakpoint-dependent style comes three\n// times, identical but for the query.\nconst WIDE_SM = `@container (min-width: ${breakpoints.sm})`\nconst WIDE_MD = `@container (min-width: ${breakpoints.md})`\nconst WIDE_LG = `@container (min-width: ${breakpoints.lg})`\n\n// The custom property an Aside inside the shell adds to its sticky `top`\n// (Aside/styles.css.ts spells the same name). It is set on the grid, inside\n// the query container (a container query cannot style the container itself)\n// and an ancestor of Main. Above the collapse point it is `initial` (unset),\n// so the Aside's fallback 0px applies: StyleX would write a `0px` as a\n// unitless 0, which makes the Aside's calc() invalid.\n// '--duro-app-shell-bar'\n\nconst RAIL_COLUMNS = `${sizes.sidebarW} minmax(0, 1fr)`\nconst NARROW_AREAS = '\"bar\" \"main\"'\nconst WIDE_AREAS = '\"rail bar\" \"rail main\"'\n\nexport const styles = css.create({\n // Hosts the container query: a container cannot query itself.\n container: {\n containerType: 'inline-size',\n position: 'relative',\n minWidth: 0,\n },\n // The page canvas of the app, in the theme.\n grid: {\n display: 'grid',\n minHeight: '100dvh',\n color: colors.text,\n backgroundColor: colors.bg,\n gridTemplateRows: 'auto 1fr',\n },\n gridSm: {\n gridTemplateColumns: {default: 'minmax(0, 1fr)', [WIDE_SM]: RAIL_COLUMNS},\n gridTemplateAreas: {default: NARROW_AREAS, [WIDE_SM]: WIDE_AREAS},\n '--duro-app-shell-bar': {default: sizes.appBarH, [WIDE_SM]: 'initial'},\n },\n gridMd: {\n gridTemplateColumns: {default: 'minmax(0, 1fr)', [WIDE_MD]: RAIL_COLUMNS},\n gridTemplateAreas: {default: NARROW_AREAS, [WIDE_MD]: WIDE_AREAS},\n '--duro-app-shell-bar': {default: sizes.appBarH, [WIDE_MD]: 'initial'},\n },\n gridLg: {\n gridTemplateColumns: {default: 'minmax(0, 1fr)', [WIDE_LG]: RAIL_COLUMNS},\n gridTemplateAreas: {default: NARROW_AREAS, [WIDE_LG]: WIDE_AREAS},\n '--duro-app-shell-bar': {default: sizes.appBarH, [WIDE_LG]: 'initial'},\n },\n\n // Holds the skip link, the first tab stop: off screen until the link\n // has focus.\n skip: {\n position: 'absolute',\n top: spacing.sm,\n left: spacing.sm,\n zIndex: layers.floatingRaised,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n borderRadius: radii.sm,\n backgroundColor: colors.bgCard,\n transform: {default: 'translateY(-200%)', ':focus-within': 'none'},\n opacity: {default: 0, ':focus-within': 1},\n },\n\n // The rail scrolls on its own beside the page: the brand at the top, the\n // navigation in between, the footer at its foot.\n rail: {\n gridArea: 'rail',\n alignSelf: 'start',\n position: 'sticky',\n top: 0,\n height: '100dvh',\n flexDirection: 'column',\n minWidth: 0,\n backgroundColor: colors.bgCard,\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n railSm: {display: {default: 'none', [WIDE_SM]: 'flex'}},\n railMd: {display: {default: 'none', [WIDE_MD]: 'flex'}},\n railLg: {display: {default: 'none', [WIDE_LG]: 'flex'}},\n railBrand: {\n flexShrink: 0,\n paddingTop: spacing.md,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n railBody: {\n flexGrow: 1,\n minHeight: 0,\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n },\n railFooter: {\n flexShrink: 0,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n drawerFooter: {\n marginTop: spacing.md,\n paddingTop: spacing.md,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // The bar: the banner. Below the collapse point it is sticky and exactly\n // appBarH tall, so the page never moves under it and an Aside can stick\n // right below it; above, it is the Header's row and scrolls with the page.\n bar: {\n gridArea: 'bar',\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n minWidth: 0,\n backgroundColor: colors.bgCard,\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n barSm: {\n position: {default: 'sticky', [WIDE_SM]: 'static'},\n top: 0,\n zIndex: {default: layers.floating, [WIDE_SM]: 'auto'},\n height: {default: sizes.appBarH, [WIDE_SM]: 'auto'},\n paddingTop: {default: spacing.sm, [WIDE_SM]: spacing.ms},\n paddingBottom: {default: spacing.sm, [WIDE_SM]: spacing.ms},\n paddingLeft: {default: spacing.md, [WIDE_SM]: spacing.lg},\n paddingRight: {default: spacing.md, [WIDE_SM]: spacing.lg},\n },\n barMd: {\n position: {default: 'sticky', [WIDE_MD]: 'static'},\n top: 0,\n zIndex: {default: layers.floating, [WIDE_MD]: 'auto'},\n height: {default: sizes.appBarH, [WIDE_MD]: 'auto'},\n paddingTop: {default: spacing.sm, [WIDE_MD]: spacing.ms},\n paddingBottom: {default: spacing.sm, [WIDE_MD]: spacing.ms},\n paddingLeft: {default: spacing.md, [WIDE_MD]: spacing.lg},\n paddingRight: {default: spacing.md, [WIDE_MD]: spacing.lg},\n },\n barLg: {\n position: {default: 'sticky', [WIDE_LG]: 'static'},\n top: 0,\n zIndex: {default: layers.floating, [WIDE_LG]: 'auto'},\n height: {default: sizes.appBarH, [WIDE_LG]: 'auto'},\n paddingTop: {default: spacing.sm, [WIDE_LG]: spacing.ms},\n paddingBottom: {default: spacing.sm, [WIDE_LG]: spacing.ms},\n paddingLeft: {default: spacing.md, [WIDE_LG]: spacing.lg},\n paddingRight: {default: spacing.md, [WIDE_LG]: spacing.lg},\n },\n // Without a Header there is nothing to show above the collapse point.\n barEmptySm: {display: {default: 'flex', [WIDE_SM]: 'none'}},\n barEmptyMd: {display: {default: 'flex', [WIDE_MD]: 'none'}},\n barEmptyLg: {display: {default: 'flex', [WIDE_LG]: 'none'}},\n // The Menu button and the bar's copy of the brand: below the collapse\n // point only (display: none takes the hidden copy out of the a11y tree).\n narrowSm: {display: {default: 'flex', [WIDE_SM]: 'none'}},\n narrowMd: {display: {default: 'flex', [WIDE_MD]: 'none'}},\n narrowLg: {display: {default: 'flex', [WIDE_LG]: 'none'}},\n narrowItem: {\n flexShrink: 0,\n alignItems: 'center',\n minWidth: 0,\n },\n // The Header's content, after the Menu button and the brand.\n header: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n flexGrow: 1,\n minWidth: 0,\n },\n\n main: {\n gridArea: 'main',\n minWidth: 0,\n paddingTop: spacing.lg,\n paddingBottom: spacing.lg,\n // Focused by the skip link: no ring on a region that is not a control.\n outlineStyle: 'none',\n },\n mainSm: {\n paddingLeft: {default: spacing.md, [WIDE_SM]: spacing.lg},\n paddingRight: {default: spacing.md, [WIDE_SM]: spacing.lg},\n },\n mainMd: {\n paddingLeft: {default: spacing.md, [WIDE_MD]: spacing.lg},\n paddingRight: {default: spacing.md, [WIDE_MD]: spacing.lg},\n },\n mainLg: {\n paddingLeft: {default: spacing.md, [WIDE_LG]: spacing.lg},\n paddingRight: {default: spacing.md, [WIDE_LG]: spacing.lg},\n },\n})\n","import {\n Children,\n createContext,\n isValidElement,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n type Ref,\n type RefObject,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Button} from '../Button/Button'\nimport {Drawer} from '../Drawer/Drawer'\nimport {Icon} from '../Icon'\nimport {TextLink} from '../TextLink/TextLink'\nimport {useContainerBelow} from '../../hooks/useContainerBelow'\nimport type {OnNavigate} from '../../shared/navigate'\nimport {styles} from './styles.css'\n\n/* AppShell — an application's frame: a navigation rail beside the main\n * content, with an optional Header. At and above `collapseBelow` (the\n * shell's own width, a container query) the rail sits on the left, the brand\n * at its top, and the Header is a row above Main that scrolls with the page.\n * Below it the rail is hidden and ONE sticky bar takes the top: a Menu button\n * that opens the same navigation in a left Drawer, the brand, then the\n * Header's content when there is a Header — so a shell without a Header still\n * has its navigation on a phone. CSS makes the switch, so the server renders\n * one HTML for every width and nothing moves after hydration: the brand is in\n * the HTML twice (rail and bar) and `display: none` hides the inactive copy.\n *\n * Landmarks: the rail is a `nav` named by its `aria-label`, the bar a\n * `header` (banner), the content a `main`, which a skip link (the first tab\n * stop) focuses. */\n\nexport type AppShellCollapse = 'sm' | 'md' | 'lg'\n\ninterface AppShellContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n closeLabel: string\n brand: ReactNode\n collapseBelow: AppShellCollapse\n mainId: string\n mainRef: RefObject<HTMLElement | null>\n}\n\nconst AppShellContext = createContext<AppShellContextValue | null>(null)\n\n// True only where Root placed a Header itself: Root finds Header among its\n// direct children, so a Header wrapped in a fragment or a component would\n// otherwise render as a stray grid item and never reach the bar.\nconst HeaderSlotContext = createContext(false)\n\nfunction useAppShell(): AppShellContextValue {\n const ctx = useContext(AppShellContext)\n if (!ctx) throw new Error('AppShell compound components must be used within AppShell.Root')\n return ctx\n}\n\nconst variants = {\n sm: {\n grid: styles.gridSm,\n rail: styles.railSm,\n bar: styles.barSm,\n barEmpty: styles.barEmptySm,\n narrow: styles.narrowSm,\n main: styles.mainSm,\n },\n md: {\n grid: styles.gridMd,\n rail: styles.railMd,\n bar: styles.barMd,\n barEmpty: styles.barEmptyMd,\n narrow: styles.narrowMd,\n main: styles.mainMd,\n },\n lg: {\n grid: styles.gridLg,\n rail: styles.railLg,\n bar: styles.barLg,\n barEmpty: styles.barEmptyLg,\n narrow: styles.narrowLg,\n main: styles.mainLg,\n },\n} as const satisfies Record<AppShellCollapse, unknown>\n\n// --- Root ---\n\ninterface RootProps {\n /** The narrow-width button that opens the navigation (\"Menu\"), from your text catalog. */\n menuLabel: string\n /** The accessible name of the drawer's close button (\"Close navigation\"). */\n closeLabel: string\n /** The skip link's text (\"Skip to content\"): the first tab stop, it moves focus to Main. */\n skipLabel: string\n /**\n * The app's name or logo — usually a link home. Shown at the top of the\n * rail and, below `collapseBelow`, in the bar beside the Menu button.\n */\n brand?: ReactNode\n /**\n * Below this breakpoint, measured on the shell's own width, the rail\n * becomes a Drawer behind the Menu button. Default `sm`.\n */\n collapseBelow?: AppShellCollapse\n /**\n * `AppShell.Rail`, `AppShell.Main` and an optional `AppShell.Header`, as\n * direct children (Root places the Header's content in its bar).\n */\n children: ReactNode\n}\n\nfunction Root({\n menuLabel,\n closeLabel,\n skipLabel,\n brand,\n collapseBelow = 'sm',\n children,\n}: RootProps) {\n const [open, setOpen] = useState(false)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const menuButtonRef = useRef<HTMLButtonElement | null>(null)\n const mainRef = useRef<HTMLElement | null>(null)\n const narrow = useContainerBelow(containerRef, collapseBelow)\n const generatedId = useId()\n const variant = variants[collapseBelow]\n\n // The Header's content goes in the bar, after the Menu button and the\n // brand; Main may name its own id, which the skip link then targets.\n let header: ReactNode = null\n let hasHeader = false\n let mainId = `${generatedId}main`\n const rest: ReactNode[] = []\n Children.forEach(children, (child) => {\n if (isValidElement<HeaderProps>(child) && child.type === Header) {\n hasHeader = true\n header = child\n return\n }\n if (isValidElement<MainProps>(child) && child.type === Main && child.props.id) {\n mainId = child.props.id\n }\n rest.push(child)\n })\n\n // Widening past the collapse point while the drawer is open puts the rail\n // back: close it.\n useEffect(() => {\n if (!narrow) setOpen(false)\n }, [narrow])\n\n // Focus goes back to the Menu button when the drawer closes (Escape, the\n // close button, the backdrop, a navigation).\n const wasOpen = useRef(false)\n useEffect(() => {\n if (wasOpen.current && !open) menuButtonRef.current?.focus()\n wasOpen.current = open\n }, [open])\n\n const value = useMemo(\n () => ({open, setOpen, closeLabel, brand, collapseBelow, mainId, mainRef}),\n [open, closeLabel, brand, collapseBelow, mainId],\n )\n\n // Focus Main itself (tabIndex -1), not just scroll to it, and leave the\n // URL alone: a router may read the hash.\n const skip: OnNavigate = (_href, event) => {\n event.preventDefault()\n mainRef.current?.focus()\n }\n\n return (\n <AppShellContext.Provider value={value}>\n <html.div ref={containerRef} style={styles.container}>\n <html.div style={[styles.grid, variant.grid]}>\n <html.div style={styles.skip}>\n <TextLink href={`#${mainId}`} onNavigate={skip}>\n {skipLabel}\n </TextLink>\n </html.div>\n <html.header style={[styles.bar, variant.bar, !hasHeader && variant.barEmpty]}>\n <html.div style={[styles.narrowItem, variant.narrow]}>\n <Button\n ref={menuButtonRef}\n variant=\"secondary\"\n size=\"small\"\n aria-expanded={open}\n onClick={() => setOpen(true)}\n >\n <Icon name=\"menu\" size=\"sm\" />\n {menuLabel}\n </Button>\n </html.div>\n {brand != null && (\n <html.div style={[styles.narrowItem, variant.narrow]}>{brand}</html.div>\n )}\n <HeaderSlotContext.Provider value={true}>{header}</HeaderSlotContext.Provider>\n </html.header>\n {rest}\n </html.div>\n </html.div>\n </AppShellContext.Provider>\n )\n}\n\n// --- Rail ---\n\nexport interface AppShellRailState {\n /**\n * Closes the drawer. Call it after any selection in the navigation — the\n * current page included, where no route change would close it.\n */\n close: () => void\n}\n\ntype RailContent = ReactNode | ((state: AppShellRailState) => ReactNode)\n\ninterface RailProps {\n /** Names the navigation landmark and the drawer (\"Navigation\"); required. */\n 'aria-label': string\n /**\n * The navigation (a SideNav, a Tree). Rendered in the rail, or in the\n * drawer while it is open (never both); a function receives `close`.\n */\n children: RailContent\n /**\n * What sits at the rail's foot — the signed-in user, a licence line —\n * and at the end of the drawer. A function receives `close`.\n */\n footer?: RailContent\n}\n\nconst FOCUSABLE = 'a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nfunction Rail({'aria-label': ariaLabel, children, footer}: RailProps) {\n const {open, setOpen, closeLabel, brand, collapseBelow} = useAppShell()\n const close = useCallback(() => setOpen(false), [setOpen])\n const drawerNavRef = useRef<HTMLElement | null>(null)\n const content = typeof children === 'function' ? children({close}) : children\n const foot = typeof footer === 'function' ? footer({close}) : footer\n const variant = variants[collapseBelow]\n\n // The drawer is modal: move focus into it, onto the first control.\n useEffect(() => {\n if (!open) return\n drawerNavRef.current?.querySelector<HTMLElement>(FOCUSABLE)?.focus()\n }, [open])\n\n return (\n <>\n {/* Rendered in one place at a time, so ids (a Tree's) and the landmark\n name are never duplicated: the drawer only opens below the collapse\n point, where the rail is hidden. The brand stays: the bar holds the\n narrow copy, and display: none hides this one there. */}\n <html.nav\n aria-label={ariaLabel}\n style={[styles.rail, variant.rail]}\n hidden={open || undefined}\n >\n {brand != null && <html.div style={styles.railBrand}>{brand}</html.div>}\n <html.div style={styles.railBody}>{open ? null : content}</html.div>\n {foot != null && <html.div style={styles.railFooter}>{open ? null : foot}</html.div>}\n </html.nav>\n <Drawer.Root anchor=\"left\" open={open} onOpenChange={setOpen}>\n <Drawer.Portal size=\"sm\">\n <Drawer.Header>\n <Drawer.Title>{ariaLabel}</Drawer.Title>\n <Drawer.Close aria-label={closeLabel} />\n </Drawer.Header>\n <Drawer.Body>\n <html.nav ref={drawerNavRef} aria-label={ariaLabel}>\n {content}\n {foot != null && <html.div style={styles.drawerFooter}>{foot}</html.div>}\n </html.nav>\n </Drawer.Body>\n </Drawer.Portal>\n </Drawer.Root>\n </>\n )\n}\n\n// --- Header ---\n\ninterface HeaderProps {\n /**\n * The header's content: a search form, the account menu. Below\n * `collapseBelow` it joins the Menu button and the brand in the sticky\n * bar; above, it is a row over Main that scrolls with the page.\n */\n children?: ReactNode\n}\n\nfunction Header({children}: HeaderProps) {\n useAppShell()\n if (!useContext(HeaderSlotContext)) {\n throw new Error(\n 'AppShell.Header must be a direct child of AppShell.Root (not inside a fragment or another component)',\n )\n }\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Main ---\n\ninterface MainProps {\n children: ReactNode\n /** The skip link's target; Root makes one with `useId` when it is left out. */\n id?: string\n /** The `main` element: the container to hand `useContainerBelow`. */\n ref?: Ref<HTMLElement>\n}\n\nfunction Main({children, id, ref}: MainProps) {\n const {mainId, mainRef, collapseBelow} = useAppShell()\n const setRef = useCallback(\n (node: HTMLElement | null) => {\n mainRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) ref.current = node\n },\n [mainRef, ref],\n )\n return (\n <html.main\n ref={setRef}\n id={id ?? mainId}\n tabIndex={-1}\n style={[styles.main, variants[collapseBelow].main]}\n >\n {children}\n </html.main>\n )\n}\n\nexport const AppShell = {\n Root,\n Rail,\n Header,\n Main,\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\n// Kept in step with `--duro-app-shell-bar`, which AppShell/styles.css.ts sets (StyleX needs\n// the literal here, so the name is spelled out twice).\nconst BAR = 'var(--duro-app-shell-bar, 0px)'\n\nexport const styles = css.create({\n // Sticky within the viewport, and its own scroll box when taller than the\n // room it has, so a long table of contents never runs off the screen.\n // alignSelf: as a grid or flex item it would otherwise stretch to the\n // row's height and have nowhere to stick. The raised layer keeps it over\n // content that scrolls under it.\n root: {\n position: 'sticky',\n alignSelf: 'start',\n zIndex: layers.raised,\n overflowY: 'auto',\n overscrollBehavior: 'contain',\n minWidth: 0,\n },\n // The gap above it while stuck, and the same gap kept below it. Inside\n // AppShell below its collapse point the sticky bar covers the top of the\n // viewport, and AppShell sets `--duro-app-shell-bar` to the bar's height (appBarH)\n // so the aside sticks under it; anywhere else the property is unset and\n // the fallback 0 leaves the offset alone.\n offsetXs: {\n top: `calc(${BAR} + ${spacing.xs})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.xs})`,\n },\n offsetSm: {\n top: `calc(${BAR} + ${spacing.sm})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.sm})`,\n },\n offsetMs: {\n top: `calc(${BAR} + ${spacing.ms})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.ms})`,\n },\n offsetMd: {\n top: `calc(${BAR} + ${spacing.md})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.md})`,\n },\n offsetLg: {\n top: `calc(${BAR} + ${spacing.lg})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.lg})`,\n },\n offsetXl: {\n top: `calc(${BAR} + ${spacing.xl})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.xl})`,\n },\n offsetXxl: {\n top: `calc(${BAR} + ${spacing.xxl})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.xxl})`,\n },\n offsetXxxl: {\n top: `calc(${BAR} + ${spacing.xxxl})`,\n maxHeight: `calc(100dvh - ${BAR} - 2 * ${spacing.xxxl})`,\n },\n})\n","import type {ReactNode, Ref} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\ninterface AsideProps {\n /** Names the landmark (\"Page outline\"); required, from your text catalog. */\n 'aria-label': string\n /**\n * The gap kept above the aside while it is stuck, and below it when it is\n * taller than the viewport. Default `lg`.\n */\n offset?: SpacingToken\n /** The `aside` element. */\n ref?: Ref<HTMLElement>\n children: ReactNode\n}\n\nconst offsetMap = {\n xs: styles.offsetXs,\n sm: styles.offsetSm,\n ms: styles.offsetMs,\n md: styles.offsetMd,\n lg: styles.offsetLg,\n xl: styles.offsetXl,\n xxl: styles.offsetXxl,\n xxxl: styles.offsetXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\n/**\n * Aside — content beside the main reading column (a table of contents,\n * related pages): a labelled `aside` landmark that sticks within the viewport\n * while the page scrolls and scrolls on its own when it is taller than the\n * viewport. Put it in the second track of `Grid layout=\"content-aside\"`.\n */\nexport function Aside({'aria-label': ariaLabel, offset = 'lg', ref, children}: AsideProps) {\n return (\n <html.aside ref={ref} aria-label={ariaLabel} style={[styles.root, offsetMap[offset]]}>\n {children}\n </html.aside>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n lineHeight: 1,\n borderRadius: radii.full,\n whiteSpace: 'nowrap',\n },\n sizeMd: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n sizeSm: {\n paddingTop: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n fontSize: '0.625rem',\n },\n default: {\n backgroundColor: colors.bgCardHover,\n color: colors.textMuted,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n // A category or intent with no status meaning (a purple).\n highlight: {\n backgroundColor: colors.highlightBg,\n color: colors.highlightText,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info' | 'highlight'\nexport type BadgeSize = 'sm' | 'md'\n\ninterface BadgeProps {\n variant?: BadgeVariant\n size?: BadgeSize\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nexport function Badge({variant = 'default', size = 'md', children}: BadgeProps) {\n return (\n <html.span style={[styles.base, isNative && styles.nativeFlex, sizeMap[size], styles[variant]]}>\n {children}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// The picked docs browser (docs/mockups/docs-nav/Reader.dc.html, `.crumbs`):\n// small muted text, accent links, a `›` between items, the current page plain.\nexport const styles = css.create({\n root: {\n minWidth: 0,\n },\n list: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: spacing.xs,\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n item: {\n display: 'inline-flex',\n minWidth: 0,\n },\n separator: {\n display: 'inline-flex',\n color: colors.textMuted,\n userSelect: 'none',\n },\n // On a touch screen (coarse pointer, as Toggle does) each link is a\n // touch target; a mouse keeps the artboard's text-height row.\n link: {\n display: 'inline-flex',\n alignItems: 'center',\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecorationLine: {\n default: 'none',\n ':hover': 'underline',\n },\n borderRadius: radii.xs,\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n // the artboard keeps the current page in the list's muted colour; it is\n // told apart by not being a link (and by aria-current for assistive tech)\n current: {\n color: 'inherit',\n },\n})\n","import {Children, createContext, Fragment, isValidElement, type ReactNode, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\n/* Breadcrumb — where the current page sits in the site's hierarchy: a\n * labelled `nav` holding an ordered list of links, the last one the current\n * page (`aria-current=\"page\"`, shown as text). The separators between items\n * are decorative (`aria-hidden`), so a screen reader hears the list alone. */\n\n// Items render list items: outside Root's list they would be invalid markup.\nconst BreadcrumbContext = createContext(false)\n\nfunction useBreadcrumb() {\n if (!useContext(BreadcrumbContext))\n throw new Error('Breadcrumb compound components must be used within Breadcrumb.Root')\n}\n\n// --- Root ---\n\ninterface RootProps {\n /** Names the landmark (\"Breadcrumb\"); required, from your text catalog. */\n 'aria-label': string\n /** `Breadcrumb.Item`s, outermost first. */\n children: ReactNode\n}\n\nfunction Root({'aria-label': ariaLabel, children}: RootProps) {\n const items = Children.toArray(children).filter(isValidElement)\n return (\n <BreadcrumbContext.Provider value={true}>\n <html.nav aria-label={ariaLabel} style={styles.root}>\n <html.ol style={styles.list}>\n {items.map((item, i) => (\n <Fragment key={item.key ?? i}>\n {i > 0 ? (\n <html.li aria-hidden style={styles.separator}>\n ›\n </html.li>\n ) : null}\n {item}\n </Fragment>\n ))}\n </html.ol>\n </html.nav>\n </BreadcrumbContext.Provider>\n )\n}\n\n// --- Item ---\n\n/**\n * A link to an ancestor page, or the current page. The two are exclusive: the\n * current page has no `href` (it is text) and a link is never `current`.\n */\ntype ItemProps = {children: ReactNode} & (\n | {\n /** Where the item links to. */\n href: string\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key). Call `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n current?: never\n }\n | {\n /** The page the user is on: rendered as text with `aria-current=\"page\"`. */\n current: true\n href?: never\n onNavigate?: never\n }\n)\n\nfunction Item({href, current, onNavigate, children}: ItemProps) {\n useBreadcrumb()\n return (\n <html.li style={styles.item}>\n {current ? (\n <html.span aria-current=\"page\" style={styles.current}>\n {children}\n </html.span>\n ) : (\n <html.a href={href} onClick={linkClickHandler(href, onNavigate)} style={styles.link}>\n {children}\n </html.a>\n )}\n </html.li>\n )\n}\n\nexport const Breadcrumb = {\n Root,\n Item,\n}\n","import {useCallback, useLayoutEffect, useRef, useState} from 'react'\n\n/** A registered control: its id, in DOM order, and whether it is disabled. */\nexport interface RegisteredControl {\n id: string\n disabled: boolean\n}\n\nfunction sameEntries(a: RegisteredControl[], b: RegisteredControl[]) {\n return (\n a.length === b.length && a.every((e, i) => e.id === b[i].id && e.disabled === b[i].disabled)\n )\n}\n\n/**\n * Controls register their element here and come back in DOM order (the way\n * useRovingFocus orders a wrapping ToggleGroup). A control's place is read\n * from where it sits in the document, not from its parent: a Select or Menu\n * trigger sits inside its own Root, so `:first-child` cannot tell.\n *\n * Registration happens in a layout effect, so server-rendered HTML (and the\n * first client render) sees an empty registry.\n *\n * Keyed children can move without remounting, so the order is also re-read\n * after every commit of the owner; state changes only when the order did.\n */\nexport function useOrderedRegistry() {\n const elements = useRef(new Map<string, {el: HTMLElement; disabled: boolean}>())\n const [order, setOrder] = useState<RegisteredControl[]>([])\n\n const sync = useCallback(() => {\n const next = [...elements.current.entries()]\n .sort(([, a], [, b]) =>\n a.el.compareDocumentPosition(b.el) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n )\n .map(([id, {disabled}]) => ({id, disabled}))\n setOrder((prev) => (sameEntries(prev, next) ? prev : next))\n }, [])\n\n const register = useCallback(\n (id: string, el: HTMLElement, disabled: boolean) => {\n elements.current.set(id, {el, disabled})\n sync()\n return () => {\n if (elements.current.get(id)?.el === el) elements.current.delete(id)\n sync()\n }\n },\n [sync],\n )\n\n useLayoutEffect(() => {\n sync()\n })\n\n return {elements, order, register}\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n },\n horizontal: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n vertical: {\n flexDirection: 'column',\n },\n alignStart: {justifyContent: 'flex-start'},\n alignCenter: {justifyContent: 'center'},\n alignEnd: {justifyContent: 'flex-end'},\n verticalAlignStart: {alignItems: 'flex-start'},\n verticalAlignCenter: {alignItems: 'center'},\n verticalAlignEnd: {alignItems: 'flex-end'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMd: {gap: spacing.md},\n // One joined control: no gap, one row, every control as tall as the row.\n attached: {\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n },\n attachedVertical: {\n alignItems: 'stretch',\n },\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n","import {type ReactNode, useCallback, useMemo} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {useOrderedRegistry} from '../../shared/useOrderedRegistry'\nimport {ButtonGroupContext, type ButtonGroupContextValue} from './ButtonGroupContext'\nimport {styles} from './styles.css'\n\nexport type ButtonGroupGap = Extract<SpacingToken, 'xs' | 'sm' | 'md'>\n\nexport interface ButtonGroupProps {\n children: ReactNode\n /** Layout direction. Default: 'horizontal' */\n orientation?: 'horizontal' | 'vertical'\n /** Alignment within container. Default: 'start' */\n align?: 'start' | 'end' | 'center'\n /** Disable all buttons in group */\n disabled?: boolean\n /** Gap between buttons. Default: 'sm' (ignored when `attached`) */\n gap?: ButtonGroupGap\n /**\n * One joined control: no gap, shared borders, square inner corners. Holds\n * Buttons, Toggles and the Select, Menu and Popover triggers, in any mix.\n */\n attached?: boolean\n /** Names the group for assistive tech (a toolbar segment: \"Text style\"). */\n 'aria-label'?: string\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n md: styles.gapMd,\n} as const satisfies Record<ButtonGroupGap, unknown>\n\nconst horizontalAlignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst verticalAlignMap = {\n start: styles.verticalAlignStart,\n center: styles.verticalAlignCenter,\n end: styles.verticalAlignEnd,\n} as const\n\nexport function ButtonGroup({\n children,\n orientation = 'horizontal',\n align = 'start',\n disabled = false,\n gap = 'sm',\n attached = false,\n 'aria-label': ariaLabel,\n}: ButtonGroupProps) {\n const isVertical = orientation === 'vertical'\n const alignStyle = isVertical ? verticalAlignMap[align] : horizontalAlignMap[align]\n const {order, register} = useOrderedRegistry()\n\n const positionOf = useCallback<ButtonGroupContextValue['positionOf']>(\n (id) => {\n const i = order.findIndex((entry) => entry.id === id)\n if (i < 0) return 'middle'\n if (order.length === 1) return 'only'\n if (i === 0) return 'first'\n return i === order.length - 1 ? 'last' : 'middle'\n },\n [order],\n )\n const ctx = useMemo<ButtonGroupContextValue>(\n () => ({orientation, register, positionOf}),\n [orientation, register, positionOf],\n )\n\n return (\n // A non-attached group still resets the context, so a plain group nested\n // in an attached one lays out on its own.\n <ButtonGroupContext.Provider value={attached ? ctx : null}>\n <html.div\n role=\"group\"\n aria-label={ariaLabel}\n style={[\n styles.base,\n isVertical ? styles.vertical : styles.horizontal,\n alignStyle,\n attached ? (isVertical ? styles.attachedVertical : styles.attached) : gapMap[gap],\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.div>\n </ButtonGroupContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n // Vertically centres the icon with the message — the right default for the\n // short, single/two-line messages callouts usually carry.\n alignCenter: {\n alignItems: 'center',\n },\n // Aligns the icon to the first line — for long, multi-paragraph messages.\n alignStart: {\n alignItems: 'flex-start',\n },\n icon: {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n content: {\n flexGrow: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type CalloutVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<CalloutVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface CalloutProps {\n variant?: CalloutVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n /**\n * Vertical alignment of the icon against the message. `center` (default)\n * suits short single/two-line messages; `start` aligns the icon to the first\n * line for long multi-paragraph content.\n */\n align?: 'center' | 'start'\n children: ReactNode\n}\n\nfunction resolveIcon(icon: CalloutProps['icon'], variant: CalloutVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"xl\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"xl\" />\n return icon\n}\n\nexport function Callout({variant = 'info', icon, align = 'center', children}: CalloutProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div\n role=\"note\"\n style={[\n styles.base,\n styles[variant],\n align === 'center' ? styles.alignCenter : styles.alignStart,\n ]}\n >\n {resolvedIcon && <html.span style={styles.icon}>{resolvedIcon}</html.span>}\n <html.div style={styles.content}>{children}</html.div>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n },\n // Variants\n elevated: {\n borderRadius: radii.lg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n },\n outlined: {\n borderRadius: radii.md,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n filled: {\n borderRadius: radii.md,\n },\n interactive: {\n borderRadius: radii.md,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n backgroundColor: {\n default: colors.bgCard,\n ':hover': colors.bgCardHover,\n },\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n // Lift on hover; suppressed under reduced motion so there's no positional\n // shift (the token duration also collapses to 0ms there).\n transform: {\n default: 'translateY(0)',\n ':hover': {\n default: 'translateY(-2px)',\n '@media (prefers-reduced-motion: reduce)': 'translateY(0)',\n },\n },\n },\n // Sizes (padding)\n sizeDefault: {\n padding: spacing.lg,\n },\n sizeCompact: {\n padding: spacing.md,\n },\n sizeFull: {\n padding: spacing.xl,\n },\n // Header\n header: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n marginBottom: spacing.md,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'interactive'\nexport type CardSize = 'default' | 'compact' | 'full'\n\ninterface CardProps {\n variant?: CardVariant\n size?: CardSize\n header?: string\n onClick?: () => void\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n compact: styles.sizeCompact,\n full: styles.sizeFull,\n} as const\n\nexport function Card({\n variant = 'outlined',\n size = 'default',\n header,\n onClick,\n children,\n}: CardProps) {\n return (\n <html.div onClick={onClick} style={[styles.base, styles[variant], sizeMap[size]]}>\n {header && <html.div style={styles.header}>{header}</html.div>}\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n box: {\n width: sizes.indicator,\n height: sizes.indicator,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.xs,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n boxUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n boxChecked: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n // Native-only checkmark: a small box showing just its right + bottom border,\n // rotated 45° into a tick. Pure CSS (RSD translates the transform string to\n // an RN transform), so no SVG / react-native-svg weight reaches web.\n checkmark: {\n width: sizes.checkMarkW,\n height: sizes.checkMarkH,\n borderRightWidth: borders.strong,\n borderRightStyle: 'solid',\n borderRightColor: colors.accentContrast,\n borderBottomWidth: borders.strong,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.accentContrast,\n transform: 'rotate(45deg)',\n marginTop: -2,\n },\n checkmarkVisible: {\n opacity: 1,\n },\n checkmarkHidden: {\n opacity: 0,\n },\n // Native label text — RN <Text> doesn't inherit color/size from the button\n // ancestor the way web inherits from <label>, so set it explicitly.\n labelText: {\n fontSize: typography.fontSizeSm,\n color: colors.text,\n },\n // Strip the default button chrome RSD gives <button> on native (border/bg/\n // padding mimic the browser default) so the row matches the web checkbox.\n nativeButton: {\n borderWidth: 0,\n backgroundColor: 'transparent',\n padding: 0,\n },\n // Layered on visuallyHidden.base: a native input is also made transparent.\n input: {\n opacity: 0,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` (on both .root and .box); web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {css} from 'react-strict-dom'\n\n// The visually-hidden technique: a 1×1 box clipped by overflow, still in the\n// accessibility tree and still focusable where the element is. The 1px is the\n// technique, not a design measure, so this module is the one file the\n// every-measure-is-a-token rule exempts (ADR-0027; `exemptFiles` in\n// eslint.config.js). Components layer their own extras on top (`opacity: 0`\n// for a native input, `clip` for a label).\nexport const visuallyHidden = css.create({\n base: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n },\n // For text (VisuallyHidden): clipped to nothing, kept on one line so a\n // screen reader reads it whole.\n text: {\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n borderWidth: 0,\n padding: 0,\n },\n})\n","import {type ReactNode, useState, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\ninterface CheckboxProps {\n name?: string\n value?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n /** Accessible label when no visible label (children) is provided. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n children?: ReactNode\n}\n\nexport function Checkbox({\n name,\n value,\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n 'aria-label': ariaLabel,\n onChange,\n children,\n}: CheckboxProps) {\n const isControlled = controlledChecked !== undefined\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n // Web: the real <input type=checkbox> drives toggling, a11y and form submit.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked)\n }\n onChange?.(e)\n },\n [isControlled, onChange],\n )\n\n // Native: RSD only makes <button> pressable and has no <input type=checkbox>,\n // so the whole row is a button and we synthesize the change payload that\n // consumers read (e.target.checked).\n const handlePress = useCallback(() => {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) {\n setInternalChecked(next)\n }\n onChange?.({\n target: {checked: next, name, value},\n } as unknown as React.ChangeEvent<HTMLInputElement>)\n }, [disabled, isChecked, isControlled, onChange, name, value])\n\n if (isNative) {\n return (\n <html.button\n type=\"button\"\n onClick={handlePress}\n disabled={disabled}\n role=\"checkbox\"\n aria-checked={isChecked}\n aria-label={!children ? ariaLabel : undefined}\n style={[\n styles.root,\n styles.nativeFlex,\n styles.nativeButton,\n disabled && styles.rootDisabled,\n ]}\n >\n <html.div\n style={[\n styles.box,\n styles.nativeFlex,\n isChecked ? styles.boxChecked : styles.boxUnchecked,\n ]}\n >\n {/* CSS-border checkmark (rotated right+bottom borders) — no SVG, no\n react-native-svg dep, so nothing is added to the web bundle. */}\n <html.div\n style={[styles.checkmark, isChecked ? styles.checkmarkVisible : styles.checkmarkHidden]}\n />\n </html.div>\n {children && <html.span style={styles.labelText}>{children}</html.span>}\n </html.button>\n )\n }\n\n return (\n <html.label style={[styles.root, disabled && styles.rootDisabled]}>\n <html.input\n type=\"checkbox\"\n name={name}\n value={value}\n checked={isControlled ? controlledChecked : undefined}\n defaultChecked={!isControlled ? defaultChecked : undefined}\n disabled={disabled}\n aria-label={!children ? ariaLabel : undefined}\n onChange={handleChange}\n style={[visuallyHidden.base, styles.input]}\n />\n <html.span\n style={[styles.box, isChecked ? styles.boxChecked : styles.boxUnchecked]}\n aria-hidden\n >\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n style={{opacity: isChecked ? 1 : 0}}\n >\n <polyline\n points=\"2.5 6 5 8.5 9.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {visuallyHidden as hidden} from '../../styles/visually-hidden.css'\n\nexport type LiveRegionPoliteness = 'polite' | 'assertive'\n\ninterface LiveRegionProps {\n /**\n * What to announce. Change it to announce; leave it empty when there is\n * nothing to say — never unmount the region to clear it.\n */\n children?: ReactNode\n /**\n * `polite` (default) waits for the screen reader to finish (`role=\"status\"`):\n * \"Copied\", \"3 results\". `assertive` interrupts (`role=\"alert\"`): only for\n * what the person must hear now, such as an error that blocks them.\n */\n politeness?: LiveRegionPoliteness\n /** Keeps the region off screen and in the accessibility tree. Default false. */\n visuallyHidden?: boolean\n id?: string\n}\n\n/**\n * LiveRegion — tells assistive tech about a change that has no focus move to\n * go with it (\"Link copied\", \"Answer ready\"). A screen reader only announces\n * a change to a region that was already in the page, so render it from the\n * start (empty) and change its content; a region mounted together with its\n * message is often not read at all.\n */\nexport function LiveRegion({\n children,\n politeness = 'polite',\n visuallyHidden = false,\n id,\n}: LiveRegionProps) {\n return (\n <html.div\n id={id}\n role={politeness === 'assertive' ? 'alert' : 'status'}\n aria-live={politeness}\n aria-atomic={true}\n style={visuallyHidden ? [hidden.base, hidden.text] : null}\n >\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {typography, typeScale} from './typography.css'\n\nexport const typePresets = css.create({\n // Body\n bodySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize4,\n lineHeight: typeScale.lineHeight4,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize5,\n lineHeight: typeScale.lineHeight5,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n\n // UI\n caption: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingWide,\n },\n label: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n code: {\n fontFamily: typography.fontFamilyMono,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n overline: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase' as const,\n },\n\n // Heading\n headingSm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize6,\n lineHeight: typeScale.lineHeight6,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize7,\n lineHeight: typeScale.lineHeight7,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize8,\n lineHeight: typeScale.lineHeight8,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingXl: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize9,\n lineHeight: typeScale.lineHeight9,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n\n // Display (fluid)\n displaySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displaySm,\n lineHeight: 1.2,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayMd,\n lineHeight: 1.15,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayLg,\n lineHeight: 1.1,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n // One bordered block: a row for the copy button, then the code. The button\n // never sits over the code, which scrolls sideways under a long line.\n root: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n },\n bar: {\n display: 'flex',\n justifyContent: 'flex-end',\n paddingTop: spacing.xs,\n paddingRight: spacing.xs,\n paddingLeft: spacing.xs,\n },\n pre: {\n margin: 0,\n paddingTop: spacing.xs,\n paddingBottom: spacing.md,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n overflowX: 'auto',\n color: colors.text,\n // The root draws the block; inside Prose its pre rule would add a second\n // border, background and rounded top, so this pre states its own.\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomLeftRadius: radii.md,\n borderBottomRightRadius: radii.md,\n whiteSpace: 'pre',\n outlineWidth: {default: 0, ':focus-visible': borders.focusRing},\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineColor: {default: 'transparent', ':focus-visible': colors.accent},\n outlineOffset: {default: 0, ':focus-visible': borders.focusOffset},\n },\n})\n","import {useCallback, useEffect, useRef, useState, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Button} from '../Button/Button'\nimport {LiveRegion} from '../LiveRegion/LiveRegion'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\ninterface CodeBlockProps {\n /**\n * The code: text, or the `<code>` element a Markdown renderer produced\n * (highlighted spans included). What is copied is its text content.\n */\n children: ReactNode\n /** The copy button's label (\"Copy\"), from your text catalog. */\n copyLabel: string\n /**\n * The label while the copy is confirmed (\"Copied\"), also announced to\n * screen readers.\n */\n copiedLabel: string\n /** How long the confirmation stays, in milliseconds. Default 2000. */\n copiedDuration?: number\n /** Called when the clipboard refuses the write (an insecure context, a denied permission). */\n onCopyError?: (error: unknown) => void\n}\n\n/**\n * CodeBlock — a block of code with a copy button: a `pre` that scrolls\n * sideways when a line is long (and is then focusable, so a keyboard can\n * scroll it), and a Button that copies its text and\n * confirms (\"Copied\") on the button and through a polite LiveRegion. Inside\n * `Prose`, pass it as the Markdown renderer's `pre`.\n */\nexport function CodeBlock({\n children,\n copyLabel,\n copiedLabel,\n copiedDuration = 2000,\n onCopyError,\n}: CodeBlockProps) {\n const preRef = useRef<HTMLPreElement | null>(null)\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const [copied, setCopied] = useState(false)\n // A block that scrolls sideways joins the tab order, so a keyboard can\n // scroll it too; one that fits stays out of it.\n const [scrollable, setScrollable] = useState(false)\n\n useEffect(() => {\n const pre = preRef.current\n if (!pre || typeof ResizeObserver === 'undefined') return\n const measure = () => setScrollable(pre.scrollWidth > pre.clientWidth)\n const observer = new ResizeObserver(measure)\n observer.observe(pre)\n measure()\n return () => observer.disconnect()\n }, [])\n\n useEffect(\n () => () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n },\n [],\n )\n\n const copy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(preRef.current?.textContent ?? '')\n } catch (error) {\n // Never dropped: without a handler the failure still reaches the console.\n if (onCopyError) onCopyError(error)\n else console.error('CodeBlock: copying to the clipboard failed', error)\n return\n }\n if (timerRef.current) clearTimeout(timerRef.current)\n setCopied(true)\n timerRef.current = setTimeout(() => {\n timerRef.current = null\n setCopied(false)\n }, copiedDuration)\n }, [copiedDuration, onCopyError])\n\n return (\n <html.div style={styles.root}>\n <html.div style={styles.bar}>\n <Button variant=\"secondary\" size=\"small\" onClick={() => void copy()}>\n {copied ? copiedLabel : copyLabel}\n </Button>\n </html.div>\n <html.pre\n ref={preRef}\n tabIndex={scrollable ? 0 : undefined}\n style={[typePresets.code, styles.pre]}\n >\n {children}\n </html.pre>\n <LiveRegion visuallyHidden>{copied ? copiedLabel : ''}</LiveRegion>\n </html.div>\n )\n}\n","import {useState, useCallback} from 'react'\n\nexport function useControllableValue<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void,\n) {\n const [internal, setInternal] = useState(defaultValue)\n const value = controlledValue !== undefined ? controlledValue : internal\n const setValue = useCallback(\n (v: T) => {\n if (controlledValue === undefined) setInternal(v)\n onChange?.(v)\n },\n [controlledValue, onChange],\n )\n return [value, setValue] as const\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n})\n","import {createContext, useContext} from 'react'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\n\ninterface FieldContextValue {\n controlId: string\n /** id of the Field.Label — what a GROUP control points `aria-labelledby` at. */\n labelId: string\n /** The control is a group (ToggleGroup, CheckboxGroup, RadioGroup, a set of\n * checkboxes): the label names the group instead of pointing `for` at one\n * input, which a group is not. */\n group?: boolean\n descriptionId: string\n errorId: string\n invalid: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n field?: {\n value: unknown\n onChange: (...event: unknown[]) => void\n onBlur: () => void\n ref: React.RefCallback<unknown>\n name: string\n }\n errorMessage?: string\n}\n\nexport type {FieldContextValue}\n\nexport const FieldContext = createContext<FieldContextValue | null>(null)\n\nexport function useFieldContext() {\n return useContext(FieldContext)\n}\n\ninterface GroupLabelling {\n 'aria-label'?: string\n 'aria-labelledby'?: string\n}\n\n/** The accessible-name wiring for a group control: its own `aria-label` /\n * `aria-labelledby` when given, else the enclosing Field's label and its\n * description / error. Outside a Field with neither, the group is unnamed —\n * pass one. */\nexport function useFieldGroupLabelling(own: GroupLabelling) {\n const ctx = useFieldContext()\n const describedBy = ctx ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() : ''\n return {\n 'aria-label': own['aria-label'],\n 'aria-labelledby': own['aria-labelledby'] ?? (own['aria-label'] ? undefined : ctx?.labelId),\n 'aria-describedby': describedBy || undefined,\n }\n}\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {Checkbox} from '../Checkbox/Checkbox'\nimport {styles} from './styles.css'\nimport {useFieldGroupLabelling} from '../Field/FieldContext'\n\n// --- Context ---\n\ninterface CheckboxGroupContextValue {\n value: string[]\n onToggle: (itemValue: string, checked: boolean) => void\n disabled: boolean\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null)\n\nfunction useCheckboxGroup() {\n const ctx = useContext(CheckboxGroupContext)\n if (!ctx) {\n throw new Error('CheckboxGroup.Item must be used within CheckboxGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (value: string[]) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n /** Accessible name when the group is not inside a Field.Root (inside one,\n * the Field.Label names it). */\n 'aria-label'?: string\n /** id of the element that names the group, when not inside a Field.Root. */\n 'aria-labelledby'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n ...labelling\n}: RootProps) {\n const a11y = useFieldGroupLabelling(labelling)\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onToggle = useCallback(\n (itemValue: string, checked: boolean) => {\n if (disabled) return\n const next = checked ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n setValue(next)\n },\n [disabled, value, setValue],\n )\n\n return (\n <CheckboxGroupContext.Provider value={{value, onToggle, disabled}}>\n <html.div\n role=\"group\"\n aria-orientation={orientation}\n {...a11y}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </CheckboxGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onToggle, disabled: groupDisabled} = useCheckboxGroup()\n const isChecked = groupValue.includes(value)\n const isDisabled = groupDisabled || itemDisabled\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onToggle(value, e.target.checked)\n },\n [value, onToggle],\n )\n\n return (\n <Checkbox value={value} checked={isChecked} disabled={isDisabled} onChange={handleChange}>\n {children}\n </Checkbox>\n )\n}\n\n// inside a Field.Root, the label names this group (see Field's `group`)\nRoot.isFieldGroup = true as const\n\nexport const CheckboxGroup = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n width: sizes.swatchW,\n height: sizes.swatchH,\n padding: microSpacing.px2,\n backgroundColor: colors.bg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: borders.focusOffsetSm,\n },\n invalid: {\n borderColor: colors.error,\n },\n disabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ninterface ColorInputProps {\n /** Hex color, controlled (e.g. \"#cfc8ba\"). */\n value?: string\n defaultValue?: string\n name?: string\n /** Explicit id — overrides the Field-context controlId when set. */\n id?: string\n disabled?: boolean\n required?: boolean\n /** Accessible name when there is no associated <Field.Label>. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLInputElement>\n}\n\n/**\n * A styled native `<input type=\"color\">` swatch. Mirrors <Input>'s native\n * surface (value/defaultValue/name/onChange/ref/disabled/required) and adopts\n * the parent <Field.Root> context (controlId for label association, value/\n * onChange when bound to a Form, invalid border, disabled) — so it drops into a\n * <Field> exactly like <Input>. The text <Input> can't render type=color, hence\n * a dedicated leaf.\n */\nexport function ColorInput({\n value,\n defaultValue,\n name,\n id,\n disabled,\n required,\n 'aria-label': ariaLabel,\n onChange,\n onBlur,\n ref,\n}: ColorInputProps) {\n const ctx = useFieldContext()\n const fieldCtx = ctx?.field\n\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n\n return (\n <html.input\n type=\"color\"\n id={id ?? ctx?.controlId}\n name={effectiveName}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n required={required}\n aria-label={ariaLabel}\n aria-invalid={ctx?.invalid || undefined}\n aria-describedby={\n ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() || undefined\n : undefined\n }\n onChange={effectiveOnChange as React.ComponentProps<typeof html.input>['onChange']}\n onBlur={effectiveOnBlur as React.ComponentProps<typeof html.input>['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[styles.base, ctx?.invalid && styles.invalid, effectiveDisabled && styles.disabled]}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: colors.scrim,\n zIndex: layers.overlay,\n // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (centering container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: layers.modal,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.lg,\n // Allow clicking backdrop through viewport when clicking outside popup\n pointerEvents: 'none',\n },\n\n // --- Popup ---\n popup: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n borderRadius: radii.lg,\n boxShadow: shadows.lg,\n width: '100%',\n maxHeight: '85vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n // Focused only as the fallback when it holds nothing focusable.\n outlineStyle: 'none',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n popupOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n to: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n popupClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n to: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationMinimal: {animationDuration: duration.minimal},\n closeDurationQuick: {animationDuration: duration.quick},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBrisk: {animationDuration: duration.brisk},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Sizes ---\n sm: {maxWidth: sizes.dialogSm},\n md: {maxWidth: sizes.dialogMd},\n lg: {maxWidth: sizes.dialogLg},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButton,\n height: sizes.iconButton,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper (for Trigger / Close children) ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n\n // --- Reduced motion ---\n reducedMotion: {\n animationDuration: duration.minimal,\n },\n})\n","import {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {ModalContext} from '../../shared/ModalContext'\nimport {devWarnOnce} from '../../shared/devWarnOnce'\n\n// --- Types ---\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nexport type DialogSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n minimal: styles.closeDurationMinimal,\n quick: styles.closeDurationQuick,\n fast: styles.closeDurationFast,\n brisk: styles.closeDurationBrisk,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DialogContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n dismissable: boolean\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n descriptionId: string\n popupRef: RefObject<HTMLDivElement | null>\n /** Dialog.Close parts currently rendered (for the closeOnEscape dev warning). */\n registerClose: () => () => void\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null)\n\nfunction useDialog() {\n const ctx = useContext(DialogContext)\n if (!ctx) throw new Error('Dialog compound components must be used within Dialog.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when dialog open state changes */\n onOpenChange?: (open: boolean) => void\n /** Whether clicking the backdrop closes the dialog. Default: true */\n dismissable?: boolean\n /**\n * Whether Escape closes the dialog. Default: true, also when `dismissable`\n * is false. Turning it off leaves the keyboard no way out but a\n * Dialog.Close, so render one.\n */\n closeOnEscape?: boolean\n /** Element to focus on open. Default: the first focusable element, else the dialog itself. */\n initialFocus?: RefObject<HTMLElement | null>\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n dismissable = true,\n closeOnEscape = true,\n initialFocus,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const popupRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n // If controlled open goes false externally, trigger close animation\n useEffect(() => {\n if (isControlled && !controlledOpen && !closing) {\n // Already closed, nothing to animate\n }\n }, [isControlled, controlledOpen, closing])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key. A layer inside the dialog (a Menu, a Select) that\n // already handled it marks the event, and the dialog stays open.\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!closeOnEscape) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Escape' || e.defaultPrevented) return\n e.stopPropagation()\n requestClose()\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, closeOnEscape, requestClose])\n\n // Focus: into the dialog on open (initialFocus, else the first focusable\n // element, else the dialog itself), back to what had it on close. The\n // Portal is a descendant, so its popup is mounted when this effect runs.\n const closeCountRef = useRef(0)\n const registerClose = useCallback(() => {\n closeCountRef.current += 1\n return () => {\n closeCountRef.current -= 1\n }\n }, [])\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const wasOpenRef = useRef(false)\n useEffect(() => {\n if (isOpen && !wasOpenRef.current) {\n previousFocusRef.current = document.activeElement as HTMLElement | null\n const popup = popupRef.current\n if (popup) {\n const target = initialFocus?.current ?? popup.querySelector<HTMLElement>(FOCUSABLE) ?? popup\n target.focus({preventScroll: true})\n }\n if (!closeOnEscape && closeCountRef.current === 0) {\n devWarnOnce(\n 'Dialog',\n 'no-escape-no-close',\n 'Dialog.Root has closeOnEscape={false} and no Dialog.Close: a keyboard user cannot leave this dialog. Render a Dialog.Close, or keep Escape.',\n )\n }\n } else if (!isOpen && !closing && wasOpenRef.current) {\n const target = previousFocusRef.current\n previousFocusRef.current = null\n if (target?.isConnected) target.focus({preventScroll: true})\n }\n wasOpenRef.current = isOpen || closing\n }, [isOpen, closing, initialFocus, closeOnEscape])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DialogContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n dismissable,\n requestOpen,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n registerClose,\n }}\n >\n {children}\n </DialogContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {requestOpen} = useDialog()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal (renders backdrop + viewport + popup) ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DialogSize\n}\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n dismissable,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n } = useDialog()\n const mount = usePortalMount()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport (centering container, pointer-events: none) */}\n <html.div style={styles.viewport}>\n <html.div\n ref={popupRef}\n role=\"dialog\"\n aria-modal={true}\n tabIndex={-1}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.popup,\n styles[size],\n closing && styles.popupClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.popupOpen,\n ]}\n >\n <ModalContext.Provider value={true}>\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </ModalContext.Provider>\n </html.div>\n </html.div>\n </>\n )\n\n // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDialog()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDialog()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose, registerClose} = useDialog()\n useEffect(() => registerClose(), [registerClose])\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Dialog = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {createContext, useContext} from 'react'\n\ninterface InputGroupContextValue {\n inGroup: boolean\n}\n\nexport const InputGroupContext = createContext<InputGroupContextValue | null>(null)\n\nexport function useInputGroupContext() {\n return useContext(InputGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffsetSm,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n // Direction OutlineOnHover (docs/mockups/input-ghost/OutlineOnHover.dc.html):\n // reads as text at rest; hover draws the field's hairline border, focus\n // turns it accent and adds the ring. For inline edit with a visible label.\n ghost: {\n backgroundColor: 'transparent',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n // The text lines up with its label above.\n marginLeft: `calc(-1 * ${spacing.sm})`,\n borderColor: {\n default: 'transparent',\n ':hover': colors.border,\n ':focus': colors.accent,\n },\n },\n ghostError: {\n backgroundColor: colors.errorBg,\n borderColor: {\n default: colors.errorBorder,\n ':focus': colors.error,\n },\n },\n ghostDisabled: {\n color: colors.textMuted,\n cursor: 'not-allowed',\n borderColor: 'transparent',\n },\n inGroup: {\n borderWidth: 0,\n borderRadius: 0,\n outlineWidth: 0,\n },\n // orthogonal to variant (default/error) — composes on top so a mono field\n // still shows its error border. For slugs, identifiers, hashes.\n mono: {\n fontFamily: typography.fontFamilyMono,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {useInputGroupContext} from '../InputGroup/InputGroupContext'\nimport {styles} from './styles.css'\n\ntype StrictInputProps = React.ComponentProps<typeof html.input>\nexport type InputType = NonNullable<StrictInputProps['type']>\n\nexport type InputVariant = 'default' | 'error' | 'ghost'\n\ninterface InputProps {\n /**\n * `ghost` reads as text until hovered or focused — only for inline edit\n * where a visible label names the field (Field.Label). It shows the error\n * state when the Field is invalid.\n */\n variant?: InputVariant\n /** Orthogonal to variant — `mono` keeps the error border but uses the\n * monospace family (slugs, identifiers, hashes). */\n font?: 'mono'\n type?: InputType\n /** Explicit id — overrides the Field-context controlId when set (e.g. a\n * control used outside a Field that still needs a stable id). */\n id?: string\n name?: string\n placeholder?: string\n required?: boolean\n readOnly?: boolean\n minLength?: number\n maxLength?: number\n /** Numeric/range hints — forwarded to the native input (date/number/etc). */\n min?: string | number\n max?: string | number\n step?: string | number\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n /** id of a <datalist> for native typeahead. */\n list?: string\n pattern?: string\n autoComplete?:\n | 'on'\n | 'off'\n | 'email'\n | 'username'\n | 'current-password'\n | 'new-password'\n | 'name'\n | 'tel'\n | 'url'\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n /** Accessible name when there's no associated <Field.Label>. */\n 'aria-label'?: string\n /** Extra describedby ids (merged with the Field context's, if any). */\n 'aria-describedby'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void\n /** Keyboard handlers — e.g. Enter to commit, Escape to cancel, arrow-key\n * navigation of a list driven by this field. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void\n onKeyUp?: (e: React.KeyboardEvent<HTMLInputElement>) => void\n ref?: React.Ref<HTMLInputElement>\n}\n\nexport function Input({\n variant = 'default',\n font,\n type = 'text',\n id,\n name,\n placeholder,\n required,\n readOnly,\n minLength,\n maxLength,\n min,\n max,\n step,\n inputMode,\n list,\n pattern,\n autoComplete,\n value,\n defaultValue,\n disabled,\n autoFocus,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedby,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n ref,\n}: InputProps) {\n const ctx = useFieldContext()\n const groupCtx = useInputGroupContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const invalid = Boolean(ctx?.invalid) || variant === 'error'\n const ghost = variant === 'ghost'\n const effectiveVariant = ghost ? 'ghost' : ctx?.invalid ? 'error' : variant\n // Field context owns describedby (description + error); fall back to the\n // explicit prop only when standalone.\n const describedBy = ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim()\n : ariaDescribedby\n\n // react-strict-dom omits some web-only props from its types, but the\n // underlying DOM element supports them. Type-assert to pass them through.\n const extraProps: Record<string, unknown> = {}\n if (pattern !== undefined) extraProps.pattern = pattern\n if (autoFocus) extraProps.autoFocus = true\n if (readOnly) extraProps.readOnly = true\n if (maxLength !== undefined) extraProps.maxLength = maxLength\n if (min !== undefined) extraProps.min = min\n if (max !== undefined) extraProps.max = max\n if (step !== undefined) extraProps.step = step\n if (inputMode !== undefined) extraProps.inputMode = inputMode\n if (list !== undefined) extraProps.list = list\n if (ariaLabel !== undefined) extraProps['aria-label'] = ariaLabel\n\n return (\n <html.input\n id={id ?? ctx?.controlId}\n type={type}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n minLength={minLength}\n autoComplete={autoComplete}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={describedBy || undefined}\n aria-invalid={invalid || undefined}\n onChange={effectiveOnChange as StrictInputProps['onChange']}\n onBlur={effectiveOnBlur as StrictInputProps['onBlur']}\n onFocus={onFocus as StrictInputProps['onFocus']}\n onKeyDown={onKeyDown as StrictInputProps['onKeyDown']}\n onKeyUp={onKeyUp as StrictInputProps['onKeyUp']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[\n styles.base,\n styles[effectiveVariant],\n ghost && invalid && styles.ghostError,\n ghost && effectiveDisabled && styles.ghostDisabled,\n font === 'mono' && styles.mono,\n groupCtx?.inGroup && styles.inGroup,\n ]}\n {...extraProps}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n },\n rootSide: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.md,\n },\n label: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n labelSide: {\n minWidth: sizes.labelMinW,\n paddingTop: spacing.sm,\n flexShrink: 0,\n },\n description: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n error: {\n fontSize: typography.fontSizeXs,\n color: colors.errorText,\n },\n fieldContent: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n flex: 1,\n minWidth: 0,\n },\n necessityIcon: {\n color: colors.error,\n },\n necessityLabel: {\n color: colors.textMuted,\n fontWeight: typography.fontWeightNormal,\n fontSize: typography.fontSizeXs,\n },\n})\n","import {type ReactNode, Children, isValidElement, useId, useMemo} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useFormContext as useRHFFormContext, useController} from 'react-hook-form'\nimport {FieldContext, useFieldContext} from './FieldContext'\nimport {useFormContext} from '../Form/FormContext'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\nimport {styles} from './styles.css'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n /** The control is a group of controls rather than one input — the label\n * then names the group (`aria-labelledby`) instead of pointing `for` at an\n * input. Detected automatically when a direct child is a ToggleGroup,\n * CheckboxGroup.Root or RadioGroup.Root; set it for any other group. */\n group?: boolean\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}\n\n/** A group control marks itself so a Field can tell it holds a group. */\nexport type FieldGroupComponent = {isFieldGroup?: true}\n\nfunction holdsGroup(children: ReactNode): boolean {\n let found = false\n Children.forEach(children, (child) => {\n if (isValidElement(child) && (child.type as FieldGroupComponent).isFieldGroup) found = true\n })\n return found\n}\n\nfunction Root({name, group, ...props}: RootProps) {\n const formCtx = useFormContext()\n const isGroup = group ?? holdsGroup(props.children)\n if (name && formCtx) {\n return <ControlledRoot name={name} formCtx={formCtx} group={isGroup} {...props} />\n }\n return <StaticRoot group={isGroup} {...props} />\n}\n\n// Always calls useController — no conditional hooks\nfunction ControlledRoot({\n name,\n formCtx,\n group,\n invalid: invalidProp = false,\n required,\n disabled,\n labelPosition,\n children,\n}: {\n name: string\n formCtx: NonNullable<ReturnType<typeof useFormContext>>\n group: boolean\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const {control} = useRHFFormContext()\n const {field, fieldState} = useController({control, name})\n const invalid = invalidProp || !!fieldState.error\n\n const effectiveDisabled = disabled ?? formCtx.disabled\n const effectiveLabelPosition = labelPosition ?? formCtx.labelPosition\n const effectiveNecessityIndicator = formCtx.necessityIndicator\n\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n labelId: `${id}-label`,\n group,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled: effectiveDisabled,\n labelPosition: effectiveLabelPosition,\n necessityIndicator: effectiveNecessityIndicator,\n field: {\n value: field.value,\n onChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n name: field.name,\n },\n errorMessage: fieldState.error?.message,\n }),\n [\n id,\n group,\n invalid,\n required,\n effectiveDisabled,\n effectiveLabelPosition,\n effectiveNecessityIndicator,\n field.value,\n field.onChange,\n field.onBlur,\n field.ref,\n field.name,\n fieldState.error,\n ],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={effectiveLabelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// Current behavior, no RHF dependency\nfunction StaticRoot({\n group,\n invalid = false,\n required,\n disabled,\n labelPosition = 'top',\n children,\n}: {\n group: boolean\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n labelId: `${id}-label`,\n group,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled,\n labelPosition,\n }),\n [id, group, invalid, required, disabled, labelPosition],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={labelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// --- FieldLayout ---\n// When labelPosition is 'side', separates Label from other children\n// and wraps the non-label children in a content column.\nfunction FieldLayout({\n labelPosition,\n children,\n}: {\n labelPosition: LabelPosition\n children: ReactNode\n}) {\n if (labelPosition !== 'side') {\n return <html.div style={styles.root}>{children}</html.div>\n }\n\n let labelNode: ReactNode = null\n const rest: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === Label && !labelNode) {\n labelNode = child\n } else {\n rest.push(child)\n }\n })\n\n return (\n <html.div style={styles.rootSide}>\n {labelNode}\n <html.div style={styles.fieldContent}>{rest}</html.div>\n </html.div>\n )\n}\n\n// --- Label ---\ninterface LabelProps {\n children: ReactNode\n}\n\nfunction Label({children}: LabelProps) {\n const ctx = useFieldContext()\n const isSide = ctx?.labelPosition === 'side'\n const indicator = ctx?.necessityIndicator\n const content = (\n <>\n {children}\n {indicator === 'icon' && ctx?.required && (\n <html.span style={styles.necessityIcon} aria-hidden={true}>\n {' *'}\n </html.span>\n )}\n {indicator === 'label' && (\n <html.span style={styles.necessityLabel}>\n {ctx?.required ? ' (required)' : ' (optional)'}\n </html.span>\n )}\n </>\n )\n\n // A group is not a labelable element: `for` would point at nothing. The\n // group names itself from this id instead (aria-labelledby).\n if (ctx?.group) {\n return (\n <html.span id={ctx.labelId} style={[styles.label, isSide && styles.labelSide]}>\n {content}\n </html.span>\n )\n }\n return (\n <html.label\n id={ctx?.labelId}\n for={ctx?.controlId}\n style={[styles.label, isSide && styles.labelSide]}\n >\n {content}\n </html.label>\n )\n}\n\n// --- Description ---\ninterface DescriptionProps {\n children: ReactNode\n}\n\nfunction Description({children}: DescriptionProps) {\n const ctx = useFieldContext()\n return (\n <html.span id={ctx?.descriptionId} style={styles.description}>\n {children}\n </html.span>\n )\n}\n\n// --- Error ---\ninterface ErrorProps {\n children?: ReactNode\n}\n\nfunction Error({children}: ErrorProps) {\n const ctx = useFieldContext()\n const content = children ?? ctx?.errorMessage\n if (!ctx?.invalid && !content) return null\n\n return (\n <html.span id={ctx?.errorId} role=\"alert\" style={styles.error}>\n {content}\n </html.span>\n )\n}\n\nexport const Field = {\n Root,\n Label,\n Description,\n Error,\n}\n","import {type ReactNode, useState} from 'react'\nimport {Dialog, type DialogSize} from '../Dialog/Dialog'\nimport {Button} from '../Button/Button'\nimport {Input} from '../Input/Input'\nimport {Field} from '../Field/Field'\n\ninterface ConfirmDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: ReactNode\n /** Warning / cascade body. */\n children?: ReactNode\n /** When set, the confirm action stays DISABLED until the user types this\n * exact phrase (org name, slug…). The typed value is a client-side gate\n * only — it is never submitted. */\n confirmPhrase?: string\n /** Prompt shown above the phrase input. */\n promptLabel?: ReactNode\n cancelLabel?: ReactNode\n /**\n * App-owned confirm control. Receives whether the phrase gate is satisfied,\n * so the app can render its OWN <Button type=\"submit\"> INSIDE its form\n * (e.g. a react-router fetcher.Form with hidden intent fields) — the DS does\n * NOT own the submit, avoiding a fight with the app's form flow. Takes\n * precedence over onConfirm/confirmLabel.\n */\n confirmSlot?: (gate: {satisfied: boolean}) => ReactNode\n /** Simple case (no app form): the DS renders a danger Button calling this. */\n onConfirm?: () => void\n confirmLabel?: ReactNode\n size?: DialogSize\n}\n\n/**\n * Generic destructive-confirmation dialog: layout + an optional type-a-phrase\n * gate. The DS owns the shell and the gate; the APP owns the actual submit\n * (via `confirmSlot`) so it composes with form libraries instead of forcing a\n * callback. Domain warning text goes in `children`.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n children,\n confirmPhrase,\n promptLabel,\n cancelLabel = 'Cancel',\n confirmSlot,\n onConfirm,\n confirmLabel = 'Confirm',\n size = 'sm',\n}: ConfirmDialogProps) {\n const [typed, setTyped] = useState('')\n const satisfied = !confirmPhrase || typed.trim() === confirmPhrase\n\n const handleOpenChange = (next: boolean) => {\n if (!next) setTyped('') // reset the gate when the dialog closes\n onOpenChange(next)\n }\n\n return (\n <Dialog.Root open={open} onOpenChange={handleOpenChange}>\n <Dialog.Portal size={size}>\n <Dialog.Header>\n <Dialog.Title>{title}</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n {children}\n {confirmPhrase ? (\n <Field.Root>\n {promptLabel ? <Field.Label>{promptLabel}</Field.Label> : null}\n <Input\n font=\"mono\"\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoFocus\n aria-label=\"confirmation phrase\"\n />\n </Field.Root>\n ) : null}\n </Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"secondary\" onClick={() => handleOpenChange(false)}>\n {cancelLabel}\n </Button>\n {confirmSlot ? (\n confirmSlot({satisfied})\n ) : onConfirm ? (\n <Button variant=\"danger\" disabled={!satisfied} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n ) : null}\n </Dialog.Footer>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // The item is the drag handle: no browser panning starts on it, so a touch\n // hold becomes a drag instead of a scroll, and text inside never selects\n // mid-gesture.\n item: {\n touchAction: 'none',\n userSelect: 'none',\n cursor: 'grab',\n transitionProperty: 'opacity',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n itemDisabled: {\n cursor: 'default',\n },\n // The source stays in flow while its ghost travels, so nothing reflows.\n itemLifted: {\n opacity: 0.4,\n cursor: 'grabbing',\n },\n // The keyboard path: one focusable widget per item.\n handle: {\n borderRadius: radii.sm,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n },\n // Picked up by keyboard: the ring stays on even without :focus-visible.\n handlePicked: {\n outlineStyle: 'dashed',\n },\n zone: {\n borderRadius: radii.sm,\n transitionProperty: 'box-shadow, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n listVertical: {\n display: 'flex',\n flexDirection: 'column',\n },\n listHorizontal: {\n display: 'flex',\n flexDirection: 'row',\n },\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n fill: {\n boxSizing: 'border-box',\n width: '100%',\n height: '100%',\n },\n // Every zone shows it can receive while something is in the air; the one\n // under the pointer lights up. Drop-target rings, not focus: keyboard focus\n // stays on outlines, which survive forced-colors mode.\n // Forced-colors mode drops box-shadows and fills; the transparent outline\n // is what it paints instead (in a system colour), so the rings survive.\n zoneReady: {\n boxShadow: shadows.dropReady,\n outlineStyle: 'solid',\n outlineWidth: borders.hairline,\n outlineColor: 'transparent',\n outlineOffset: `calc(-1 * ${borders.hairline})`,\n },\n zoneOver: {\n boxShadow: shadows.dropOver,\n backgroundColor: colors.infoBg,\n outlineStyle: 'solid',\n outlineWidth: borders.strong,\n outlineColor: 'transparent',\n outlineOffset: `calc(-1 * ${borders.strong})`,\n },\n // Refused with a reason: the zone says no in the error tone, the ghost\n // carries the reason.\n zoneRefused: {\n backgroundColor: colors.errorBg,\n outlineStyle: 'dashed',\n outlineWidth: borders.strong,\n outlineColor: colors.errorBorder,\n outlineOffset: `calc(-1 * ${borders.strong})`,\n },\n placeholder: {\n flexShrink: 0,\n },\n ghost: {\n position: 'fixed',\n top: 0,\n left: 0,\n pointerEvents: 'none',\n // Portalled into the ThemeProvider mount, where it must clear a Dialog\n // or Drawer the drag happens in.\n zIndex: layers.popup,\n opacity: 0.9,\n cursor: 'grabbing',\n },\n // The lifted look: a slight tilt, dropped under reduced motion.\n ghostTilt: {\n transform: {\n default: 'rotate(2deg)',\n '@media (prefers-reduced-motion: reduce)': 'none',\n },\n },\n refusal: {\n marginTop: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n borderRadius: radii.xs,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.errorBorder,\n backgroundColor: colors.bgCard,\n color: colors.errorText,\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n boxShadow: shadows.md,\n width: 'max-content',\n maxWidth: '100%',\n },\n ghostSize: (width: number, height: number) => ({\n width,\n minHeight: height,\n }),\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {isNative} from '../../platform'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\n// ---------------------------------------------------------------------------\n// DragDrop — move items between zones, by pointer (mouse, pen and touch\n// through one pointer-event path) or by keyboard.\n//\n// Pointer: a press arms a drag, movement past a small threshold (or, on\n// touch, a short hold) starts it, and release resolves the zone under the\n// pointer. The innermost zone that accepts the item wins\n// (document.elementsFromPoint), so a zone nested in another (a card inside a\n// column) receives its own drops. The dragged item stays in the DOM (faded)\n// while a ghost follows the pointer. Item rects are measured once at pick-up\n// and shifted by how far their scrolling ancestors have scrolled since, so an\n// optional placeholder (renderPlaceholder) never feeds back into the index,\n// and a small hysteresis keeps the index from flickering at a midpoint.\n// Near the edge of a scrolling ancestor (or the window) the drag scrolls it.\n//\n// Keyboard: put a DragDrop.Handle in an Item. Handles are one roving tab\n// stop per zone; Up/Down and Left/Right move focus between them. Space picks\n// the item up, Up/Down move it within its zone, Left/Right move it across\n// zones (in `order`, else DOM order), Space or Enter drops, Escape (or Tab)\n// cancels, and focus returns to the item's handle either way.\n//\n// State lives in an external store read with useSyncExternalStore and\n// per-part selectors: a drag re-renders only the parts whose answer changed\n// (the two items around a moving placeholder, the zones on pick-up and drop),\n// and the ghost is moved by writing its transform, not by rendering.\n//\n// Every announcement (pick, move, drop, cancel, refuse) goes through the\n// Root's live region and the optional `announce` prop, so an app can supply\n// its own catalog strings. A zone can refuse with a reason\n// (`accepts` → `{ok: false, reason}`): the ghost shows it and it is announced.\n//\n// WCAG 2.5.7 still applies to pointer-only consumers: an Item without a\n// Handle has no keyboard path, so keep a button that does the same thing.\n//\n// Native: react-strict-dom does not route pointer capture on React Native,\n// so Item renders its children without drag behaviour there and the consumer's\n// non-drag path is the only path. Not exported from the native barrel.\n// ---------------------------------------------------------------------------\n\nexport interface DragDropItemData<T = unknown> {\n readonly id: string\n readonly zone: string\n readonly data: T\n}\n\nexport interface DragDropTarget {\n readonly zone: string\n /** Insertion index among the target zone's items, from the pointer's\n * position along the zone's axis. Excludes the dragged item itself. */\n readonly index: number\n}\n\nexport interface DragDropEvent<T = unknown> {\n readonly item: DragDropItemData<T>\n readonly target: DragDropTarget\n}\n\n/** What a zone's `accepts` answers: `true` takes the item, `false` lets it\n * pass silently (an outer zone may take it), and `{ok: false, reason}`\n * refuses it out loud — the reason is shown on the ghost and announced. */\nexport type DragDropVerdict = boolean | {readonly ok: false; readonly reason: string}\n\nexport interface DragDropRefusal {\n readonly zone: string\n readonly reason: string\n}\n\nexport interface DragDropOverEvent<T = unknown> {\n readonly item: DragDropItemData<T>\n /** Where the item would land now; null over nothing that accepts it. */\n readonly target: DragDropTarget | null\n /** The innermost zone that refused with a reason, when nothing accepted. */\n readonly refused: DragDropRefusal | null\n readonly keyboard: boolean\n}\n\nexport interface DragDropAnnouncement {\n readonly kind: 'pick' | 'move' | 'drop' | 'cancel' | 'refuse'\n /** The item's label. */\n readonly item: string\n /** The zone's label (pick, move, drop, refuse). */\n readonly zone?: string\n /** 1-based position in the zone, counting the item itself. */\n readonly position?: number\n /** How many items the zone holds with the item in it. */\n readonly count?: number\n /** The zone's refusal (refuse). */\n readonly reason?: string\n /** Whether the drag is a keyboard one. */\n readonly keyboard: boolean\n}\n\nexport interface DragDropPlaceholderInfo {\n readonly zone: string\n readonly index: number\n /** The zone's label, e.g. for \"→ In progress\". */\n readonly label: string\n}\n\nexport type DragDropRenderPlaceholder = (info: DragDropPlaceholderInfo) => ReactNode\n\ninterface ZoneRecord {\n el: HTMLElement | null\n orientation: 'horizontal' | 'vertical'\n label: string\n accepts?: (item: DragDropItemData) => DragDropVerdict\n order?: number\n renderPlaceholder?: DragDropRenderPlaceholder\n}\n\ninterface ItemRecord {\n el: HTMLElement | null\n zone: string\n label: string\n data: unknown\n preview: ReactNode\n disabled: boolean\n}\n\ninterface DragSession {\n readonly id: string\n readonly pointerId: number\n /** Event time of the press, for judging the touch hold by timestamps. */\n readonly downAt: number\n readonly startX: number\n readonly startY: number\n readonly offsetX: number\n readonly offsetY: number\n readonly width: number\n readonly height: number\n readonly source: HTMLElement\n active: boolean\n holdTimer: ReturnType<typeof setTimeout> | null\n}\n\n/** The drag as the parts see it. Replaced (never mutated) on every change, so\n * selectors can compare by reference. */\ninterface DragView {\n readonly id: string\n readonly keyboard: boolean\n readonly over: DragDropTarget | null\n readonly refused: DragDropRefusal | null\n /** Each zone's items in DOM order at pick-up, without the dragged one. */\n readonly order: ReadonlyMap<string, readonly string[]>\n}\n\ninterface GhostView {\n readonly preview: ReactNode\n readonly width: number\n readonly height: number\n}\n\ninterface Rect {\n readonly left: number\n readonly top: number\n readonly right: number\n readonly bottom: number\n}\n\ninterface Geometry {\n readonly rect: Rect\n readonly scrollers: readonly Element[]\n}\n\n/** The parts of a keydown the keyboard path reads. */\ninterface KeyLike {\n readonly key: string\n preventDefault(): void\n stopPropagation(): void\n}\n\ninterface LatestProps {\n onDrop: (event: DragDropEvent<unknown>) => void\n onDragOver?: (event: DragDropOverEvent<unknown>) => void\n announce?: (event: DragDropAnnouncement) => string\n renderPlaceholder?: DragDropRenderPlaceholder\n}\n\n/** How far the pointer moves before a press becomes a drag (mouse/pen), so a\n * click stays a click. */\nconst MOVE_THRESHOLD_PX = 6\n/** How long a touch holds still before it becomes a drag. Below this a touch\n * that moves is a scroll, and the browser gets it back via pointercancel. */\nconst TOUCH_HOLD_MS = 180\n/** How far past an item's midpoint the pointer must go before the insertion\n * index changes, so it does not flicker on the line. */\nconst HYSTERESIS_PX = 8\n/** Auto-scroll: the band along a scroller's edge that scrolls it, and the\n * largest step per frame (reached at the very edge). */\nconst EDGE_PX = 48\nconst MAX_STEP_PX = 16\n\nconst domOrder = (a: Element, b: Element) =>\n a === b ? 0 : a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n\nconst verdictOf = (v: DragDropVerdict | undefined): {ok: boolean; reason?: string} =>\n v === undefined || v === true\n ? {ok: true}\n : v === false\n ? {ok: false}\n : {ok: false, reason: v.reason}\n\nconst sameTarget = (a: DragDropTarget | null, b: DragDropTarget | null) =>\n a === b || (a !== null && b !== null && a.zone === b.zone && a.index === b.index)\n\nconst sameRefusal = (a: DragDropRefusal | null, b: DragDropRefusal | null) =>\n a === b || (a !== null && b !== null && a.zone === b.zone && a.reason === b.reason)\n\nfunction defaultAnnouncement(e: DragDropAnnouncement): string {\n const where = e.position !== undefined ? `${e.zone}, position ${e.position} of ${e.count}` : ''\n switch (e.kind) {\n case 'pick':\n return e.keyboard\n ? `Picked up ${e.item}. ${where}. Arrow keys move, Space drops, Escape cancels.`\n : `Picked up ${e.item}.`\n case 'move':\n return where\n case 'drop':\n return e.keyboard\n ? `Dropped ${e.item} in ${where}.`\n : `Dropped ${e.item} in ${e.zone ?? 'place'}.`\n case 'cancel':\n return `Cancelled moving ${e.item}.`\n case 'refuse':\n return `${e.zone}: ${e.reason}`\n }\n}\n\n// ---------------------------------------------------------------------------\n// Engine: the registry (stable), the drag store (subscribed to), and the\n// pointer/keyboard state machine. One per Root, created once.\n// ---------------------------------------------------------------------------\n\n/** setPointerCapture / releasePointerCapture throw these when there is no\n * active pointer to capture (a synthetic event, a pointer already gone) or\n * the capture is already released. Anything else is a real error. */\nconst isPointerCaptureMiss = (err: unknown): boolean =>\n err instanceof DOMException && (err.name === 'NotFoundError' || err.name === 'InvalidStateError')\n\nclass Engine {\n props: LatestProps = {onDrop: () => {}}\n readonly zones = new Map<string, ZoneRecord>()\n readonly items = new Map<string, ItemRecord>()\n readonly handles = new Map<string, HTMLElement>()\n\n drag: DragView | null = null\n ghost: GhostView | null = null\n ghostEl: HTMLElement | null = null\n refusalText: string | null = null\n announcement = ''\n focusRequest: string | null = null\n\n /** Roving tab stop per zone: the handle last focused there. */\n private readonly stops = new Map<string, string>()\n /** The first handle of each zone in DOM order, the stop until one is focused. */\n private firstStops = new Map<string, string>()\n private stopsDirty = false\n\n private session: DragSession | null = null\n private frame: number | null = null\n private pointer = {x: 0, y: 0}\n private geometry = new Map<string, Geometry>()\n private baseline = new Map<Element, {left: number; top: number}>()\n private scrollable = new Map<Element, boolean>()\n private readonly listeners = new Set<() => void>()\n\n // -- store ----------------------------------------------------------------\n\n subscribe = (listener: () => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n private emit() {\n for (const l of this.listeners) l()\n }\n\n tabStop(zone: string): string | undefined {\n const explicit = this.stops.get(zone)\n if (explicit && this.handles.has(explicit) && this.items.get(explicit)?.zone === zone) {\n return explicit\n }\n return this.firstStops.get(zone)\n }\n\n // -- registry -------------------------------------------------------------\n\n registerZone(id: string, record: ZoneRecord) {\n this.zones.set(id, record)\n return () => {\n if (this.zones.get(id) === record) this.zones.delete(id)\n }\n }\n\n registerItem(id: string, record: ItemRecord) {\n this.items.set(id, record)\n return () => {\n if (this.items.get(id) === record) this.items.delete(id)\n }\n }\n\n registerHandle(id: string, el: HTMLElement) {\n this.handles.set(id, el)\n this.recomputeStops()\n return () => {\n if (this.handles.get(id) === el) this.handles.delete(id)\n this.recomputeStops()\n }\n }\n\n /** Batched: a board mounting 300 handles recomputes once. */\n private recomputeStops() {\n if (this.stopsDirty) return\n this.stopsDirty = true\n queueMicrotask(() => {\n this.stopsDirty = false\n const next = new Map<string, string>()\n const firstEl = new Map<string, HTMLElement>()\n for (const [id, el] of this.handles) {\n const zone = this.items.get(id)?.zone\n if (zone === undefined) continue\n const cur = firstEl.get(zone)\n if (!cur || domOrder(el, cur) < 0) {\n firstEl.set(zone, el)\n next.set(zone, id)\n }\n }\n this.firstStops = next\n this.emit()\n })\n }\n\n private handlesIn(zone: string): string[] {\n const ids: string[] = []\n for (const [id] of this.handles) if (this.items.get(id)?.zone === zone) ids.push(id)\n return ids.sort((a, b) => domOrder(this.handles.get(a)!, this.handles.get(b)!))\n }\n\n /** Zones in keyboard order: by `order`, then DOM order. */\n private zoneSequence(): string[] {\n const list = [...this.zones].filter(([, z]) => z.el)\n list.sort(\n ([, a], [, b]) =>\n (a.order ?? Number.POSITIVE_INFINITY) - (b.order ?? Number.POSITIVE_INFINITY) ||\n domOrder(a.el!, b.el!),\n )\n return list.map(([id]) => id)\n }\n\n // -- announcements ----------------------------------------------------------\n\n private say(event: DragDropAnnouncement) {\n const announce = this.props.announce\n this.announcement = announce ? announce(event) : defaultAnnouncement(event)\n this.emit()\n }\n\n private labelOf(itemId: string) {\n return this.items.get(itemId)?.label ?? itemId\n }\n\n private zoneLabel(zone: string) {\n return this.zones.get(zone)?.label ?? zone\n }\n\n private placeAt(target: DragDropTarget) {\n const others = this.drag?.order.get(target.zone)?.length ?? 0\n return {zone: this.zoneLabel(target.zone), position: target.index + 1, count: others + 1}\n }\n\n private payload(itemId: string): DragDropItemData | null {\n const item = this.items.get(itemId)\n return item ? {id: itemId, zone: item.zone, data: item.data} : null\n }\n\n // -- measuring ------------------------------------------------------------\n\n private captureOrder(exclude: string): Map<string, string[]> {\n const byZone = new Map<string, string[]>()\n for (const [id, item] of this.items) {\n if (id === exclude || !item.el) continue\n const list = byZone.get(item.zone)\n if (list) list.push(id)\n else byZone.set(item.zone, [id])\n }\n for (const list of byZone.values()) {\n list.sort((a, b) => domOrder(this.items.get(a)!.el!, this.items.get(b)!.el!))\n }\n return byZone\n }\n\n private isScroller(el: Element): boolean {\n const known = this.scrollable.get(el)\n if (known !== undefined) return known\n const s = getComputedStyle(el)\n const scrolls = (o: string) => o === 'auto' || o === 'scroll' || o === 'overlay'\n const yes =\n (scrolls(s.overflowY) && el.scrollHeight > el.clientHeight) ||\n (scrolls(s.overflowX) && el.scrollWidth > el.clientWidth)\n this.scrollable.set(el, yes)\n return yes\n }\n\n /** Every item's rect, once, with the scrollers it moves with. Later reads\n * shift the rect by how far those have scrolled since, so a placeholder\n * inserted mid-drag never moves the geometry the index is read from. */\n private captureGeometry() {\n this.geometry = new Map()\n this.baseline = new Map()\n this.scrollable = new Map()\n const root = document.scrollingElement\n const chains = new Map<Element, Element[]>()\n const chain = (el: Element | null): Element[] => {\n if (!el || el === document.body || el === document.documentElement) return root ? [root] : []\n const known = chains.get(el)\n if (known) return known\n const up = chain(el.parentElement)\n const own = this.isScroller(el) ? [el, ...up] : up\n chains.set(el, own)\n return own\n }\n for (const [id, item] of this.items) {\n if (!item.el) continue\n const r = item.el.getBoundingClientRect()\n const scrollers = chain(item.el.parentElement)\n for (const s of scrollers) {\n if (!this.baseline.has(s)) this.baseline.set(s, {left: s.scrollLeft, top: s.scrollTop})\n }\n this.geometry.set(id, {\n rect: {left: r.left, top: r.top, right: r.right, bottom: r.bottom},\n scrollers,\n })\n }\n }\n\n private rectOf(id: string): Rect | null {\n const g = this.geometry.get(id)\n if (!g) return null\n let dx = 0\n let dy = 0\n for (const s of g.scrollers) {\n const b = this.baseline.get(s)\n if (!b) continue\n dx += s.scrollLeft - b.left\n dy += s.scrollTop - b.top\n }\n return {\n left: g.rect.left - dx,\n right: g.rect.right - dx,\n top: g.rect.top - dy,\n bottom: g.rect.bottom - dy,\n }\n }\n\n /** Where the dragged item would land at (x, y): the innermost zone that\n * accepts it, and the index from the pick-up geometry, with hysteresis\n * against the current index. */\n private locate(\n itemId: string,\n x: number,\n y: number,\n ): {target: DragDropTarget | null; refused: DragDropRefusal | null} {\n const payload = this.payload(itemId)\n const d = this.drag\n if (!payload || !d) return {target: null, refused: null}\n let refused: DragDropRefusal | null = null\n const seen = new Set<string>()\n const zoneByEl = new Map<Element, string>()\n for (const [id, z] of this.zones) if (z.el) zoneByEl.set(z.el, id)\n for (const el of document.elementsFromPoint(x, y)) {\n const zoneId = zoneByEl.get(el)\n if (zoneId === undefined || seen.has(zoneId)) continue\n seen.add(zoneId)\n const zone = this.zones.get(zoneId)!\n const verdict = verdictOf(zone.accepts?.(payload))\n if (!verdict.ok) {\n if (verdict.reason !== undefined && !refused)\n refused = {zone: zoneId, reason: verdict.reason}\n continue\n }\n const horizontal = zone.orientation === 'horizontal'\n const pos = horizontal ? x : y\n const prev = d.over && d.over.zone === zoneId ? d.over.index : null\n const others = d.order.get(zoneId) ?? []\n let index = 0\n others.forEach((otherId, k) => {\n const r = this.rectOf(otherId)\n if (!r) return\n const mid = horizontal ? (r.left + r.right) / 2 : (r.top + r.bottom) / 2\n const bias = prev === null ? 0 : k < prev ? -HYSTERESIS_PX : HYSTERESIS_PX\n if (pos > mid + bias) index += 1\n })\n return {target: {zone: zoneId, index}, refused: null}\n }\n return {target: null, refused}\n }\n\n /** Point the drag at a new target/refusal; tells listeners only on change. */\n private retarget(target: DragDropTarget | null, refused: DragDropRefusal | null) {\n const d = this.drag\n if (!d) return\n if (sameTarget(d.over, target) && sameRefusal(d.refused, refused)) return\n const wasRefused = d.refused\n this.drag = {...d, over: target, refused}\n this.refusalText = refused?.reason ?? null\n this.paintGhost()\n this.emit()\n const payload = this.payload(d.id)\n if (payload) this.props.onDragOver?.({item: payload, target, refused, keyboard: d.keyboard})\n if (refused && !sameRefusal(wasRefused, refused)) {\n this.say({\n kind: 'refuse',\n item: this.labelOf(d.id),\n zone: this.zoneLabel(refused.zone),\n reason: refused.reason,\n keyboard: d.keyboard,\n })\n }\n }\n\n // -- ghost ------------------------------------------------------------------\n\n /** The ghost moves by its transform, written here, so a frame of pointer\n * movement renders nothing. */\n paintGhost() {\n const el = this.ghostEl\n const s = this.session\n if (!el || !s) return\n el.style.transform = `translate3d(${this.pointer.x - s.offsetX}px, ${this.pointer.y - s.offsetY}px, 0)`\n }\n\n // -- auto-scroll --------------------------------------------------------------\n\n /** Scrolls the innermost scroller under the pointer whose edge band it is\n * in and that can still move that way. True when something scrolled. */\n private autoScroll(x: number, y: number): boolean {\n const root = document.scrollingElement\n const chain: Element[] = []\n let el: Element | null = document.elementsFromPoint(x, y)[0] ?? null\n while (el && el !== document.body && el !== document.documentElement) {\n if (this.isScroller(el)) chain.push(el)\n el = el.parentElement\n }\n if (root) chain.push(root)\n const step = (dist: number) =>\n dist < EDGE_PX ? Math.ceil(MAX_STEP_PX * (1 - Math.max(dist, 0) / EDGE_PX)) : 0\n for (const s of chain) {\n const r: Rect =\n s === root\n ? {left: 0, top: 0, right: window.innerWidth, bottom: window.innerHeight}\n : s.getBoundingClientRect()\n const up = step(y - r.top)\n const down = step(r.bottom - y)\n const left = step(x - r.left)\n const right = step(r.right - x)\n const dy = up ? -up : down\n const dx = left ? -left : right\n const canY =\n dy < 0 ? s.scrollTop > 0 : dy > 0 ? s.scrollTop + s.clientHeight < s.scrollHeight : false\n const canX =\n dx < 0 ? s.scrollLeft > 0 : dx > 0 ? s.scrollLeft + s.clientWidth < s.scrollWidth : false\n if (canY || canX) {\n if (canY) s.scrollTop += dy\n if (canX) s.scrollLeft += dx\n return true\n }\n }\n return false\n }\n\n // -- pointer --------------------------------------------------------------\n\n private scheduleFrame() {\n if (this.frame !== null) return\n this.frame = requestAnimationFrame(this.tick)\n }\n\n private tick = () => {\n this.frame = null\n const s = this.session\n if (!s || !s.active) return\n const {x, y} = this.pointer\n this.paintGhost()\n const scrolled = this.autoScroll(x, y)\n const {target, refused} = this.locate(s.id, x, y)\n this.retarget(target, refused)\n if (scrolled) this.scheduleFrame()\n }\n\n private onScroll = () => {\n if (this.session?.active) this.scheduleFrame()\n }\n\n private activate(s: DragSession, x: number, y: number) {\n s.active = true\n this.pointer = {x, y}\n const item = this.items.get(s.id)\n this.drag = {\n id: s.id,\n keyboard: false,\n over: null,\n refused: null,\n order: this.captureOrder(s.id),\n }\n this.captureGeometry()\n this.ghost = {preview: item?.preview ?? null, width: s.width, height: s.height}\n this.refusalText = null\n document.addEventListener('scroll', this.onScroll, {capture: true, passive: true})\n this.emit()\n this.say({kind: 'pick', item: this.labelOf(s.id), keyboard: false})\n const {target, refused} = this.locate(s.id, x, y)\n this.retarget(target, refused)\n }\n\n begin(id: string, e: React.PointerEvent) {\n if (this.session || this.drag || e.button !== 0) return\n if (this.items.get(id)?.disabled) return\n const source = e.currentTarget as HTMLElement\n const rect = source.getBoundingClientRect()\n const s: DragSession = {\n id,\n pointerId: e.pointerId,\n downAt: e.timeStamp,\n startX: e.clientX,\n startY: e.clientY,\n offsetX: e.clientX - rect.left,\n offsetY: e.clientY - rect.top,\n width: rect.width,\n height: rect.height,\n source,\n active: false,\n holdTimer: null,\n }\n this.session = s\n // Capture keeps the stream on the item if the pointer leaves the window;\n // the document listeners carry the drag either way, so a browser (or a\n // synthetic event) without an active pointer is not an error.\n try {\n source.setPointerCapture(e.pointerId)\n } catch (err) {\n if (!isPointerCaptureMiss(err)) throw err\n }\n if (e.pointerType === 'touch') {\n s.holdTimer = setTimeout(() => {\n s.holdTimer = null\n if (this.session === s && !s.active) this.activate(s, s.startX, s.startY)\n }, TOUCH_HOLD_MS)\n }\n }\n\n /** Ends a pointer drag. `commit` resolves the target from the release\n * point; otherwise the drag is cancelled. The consumer's onDrop runs here,\n * in the event handler, never inside a state updater. */\n private finishPointer(commit: {x: number; y: number} | null) {\n const s = this.session\n if (!s) return\n if (s.holdTimer) clearTimeout(s.holdTimer)\n if (this.frame !== null) cancelAnimationFrame(this.frame)\n this.frame = null\n this.session = null\n try {\n if (s.source.hasPointerCapture(s.pointerId)) s.source.releasePointerCapture(s.pointerId)\n } catch (err) {\n if (!isPointerCaptureMiss(err)) throw err\n }\n if (!s.active) return\n document.removeEventListener('scroll', this.onScroll, {capture: true})\n let target: DragDropTarget | null = null\n if (commit) {\n const found = this.locate(s.id, commit.x, commit.y)\n this.retarget(found.target, found.refused)\n target = this.drag?.over ?? null\n }\n const announcement = target ? this.placeAt(target) : null\n const payload = this.payload(s.id)\n this.drag = null\n this.ghost = null\n this.refusalText = null\n this.emit()\n if (target && payload && announcement) {\n this.props.onDrop({item: payload, target})\n this.say({kind: 'drop', item: this.labelOf(s.id), ...announcement, keyboard: false})\n } else {\n this.say({kind: 'cancel', item: this.labelOf(s.id), keyboard: false})\n }\n }\n\n // Move/up/cancel listen on the document: pointer capture keeps the events\n // flowing to the source element, but a single document listener survives\n // the item re-rendering under the pointer.\n attach() {\n const onMove = (e: PointerEvent) => {\n const s = this.session\n if (!s || e.pointerId !== s.pointerId) return\n if (!s.active) {\n const moved = Math.hypot(e.clientX - s.startX, e.clientY - s.startY)\n if (e.pointerType === 'touch') {\n // The hold is judged by event time, not by the timer having fired:\n // a busy main thread (seen on iOS Safari) can withhold the timer\n // AND every pointermove until the finger lifts, then deliver them\n // in one burst. Since touch-action:none keeps the browser from\n // panning on the item, a move stream that arrives at all is ours;\n // the hold only separates a drag from a quick flick.\n if (e.timeStamp - s.downAt >= TOUCH_HOLD_MS) {\n if (s.holdTimer) clearTimeout(s.holdTimer)\n s.holdTimer = null\n this.activate(s, s.startX, s.startY)\n } else {\n // Moved before the hold elapsed: a flick, not a drag.\n if (moved > MOVE_THRESHOLD_PX) this.finishPointer(null)\n return\n }\n } else {\n if (moved < MOVE_THRESHOLD_PX) return\n this.activate(s, e.clientX, e.clientY)\n }\n }\n this.pointer = {x: e.clientX, y: e.clientY}\n this.scheduleFrame()\n }\n const onUp = (e: PointerEvent) => {\n const s = this.session\n if (!s || e.pointerId !== s.pointerId) return\n // Resolve the target from the release point, not the last frame.\n this.pointer = {x: e.clientX, y: e.clientY}\n this.finishPointer(s.active ? {x: e.clientX, y: e.clientY} : null)\n }\n const onCancel = (e: PointerEvent) => {\n const s = this.session\n if (!s || e.pointerId !== s.pointerId) return\n this.finishPointer(null)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.session) this.finishPointer(null)\n }\n document.addEventListener('pointermove', onMove)\n document.addEventListener('pointerup', onUp)\n document.addEventListener('pointercancel', onCancel)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('pointermove', onMove)\n document.removeEventListener('pointerup', onUp)\n document.removeEventListener('pointercancel', onCancel)\n document.removeEventListener('keydown', onKey)\n document.removeEventListener('scroll', this.onScroll, {capture: true})\n if (this.frame !== null) cancelAnimationFrame(this.frame)\n }\n }\n\n // -- keyboard -------------------------------------------------------------\n\n focusHandle(id: string) {\n const zone = this.items.get(id)?.zone\n if (zone !== undefined && this.stops.get(zone) !== id) {\n this.stops.set(zone, id)\n this.emit()\n }\n }\n\n private pick(id: string) {\n const item = this.items.get(id)\n if (!item || item.disabled || !item.el) return\n const order = this.captureOrder(id)\n const index = (order.get(item.zone) ?? []).filter(\n (other) => domOrder(this.items.get(other)!.el!, item.el!) < 0,\n ).length\n this.drag = {id, keyboard: true, over: {zone: item.zone, index}, refused: null, order}\n this.emit()\n const target = this.drag.over!\n const payload = this.payload(id)\n if (payload) this.props.onDragOver?.({item: payload, target, refused: null, keyboard: true})\n this.say({kind: 'pick', item: item.label, ...this.placeAt(target), keyboard: true})\n }\n\n private moveWithin(delta: number) {\n const d = this.drag\n if (!d?.over) return\n const others = d.order.get(d.over.zone)?.length ?? 0\n const index = Math.min(Math.max(d.over.index + delta, 0), others)\n const target = {zone: d.over.zone, index}\n this.retarget(target, null)\n this.say({kind: 'move', item: this.labelOf(d.id), ...this.placeAt(target), keyboard: true})\n }\n\n private moveAcross(delta: number) {\n const d = this.drag\n const payload = d && this.payload(d.id)\n if (!d?.over || !payload) return\n const zones = this.zoneSequence()\n let refused: DragDropRefusal | null = null\n for (let j = zones.indexOf(d.over.zone) + delta; j >= 0 && j < zones.length; j += delta) {\n const zoneId = zones[j]\n const verdict = verdictOf(this.zones.get(zoneId)?.accepts?.(payload))\n if (!verdict.ok) {\n if (verdict.reason !== undefined && !refused)\n refused = {zone: zoneId, reason: verdict.reason}\n continue\n }\n const others = d.order.get(zoneId)?.length ?? 0\n const target = {zone: zoneId, index: Math.min(d.over.index, others)}\n this.retarget(target, null)\n this.say({kind: 'move', item: this.labelOf(d.id), ...this.placeAt(target), keyboard: true})\n return\n }\n if (refused) {\n // Nowhere to go that way; say why, and stay put.\n this.drag = {...d, refused}\n this.refusalText = refused.reason\n this.emit()\n this.say({\n kind: 'refuse',\n item: this.labelOf(d.id),\n zone: this.zoneLabel(refused.zone),\n reason: refused.reason,\n keyboard: true,\n })\n } else {\n this.say({kind: 'move', item: this.labelOf(d.id), ...this.placeAt(d.over), keyboard: true})\n }\n }\n\n private endKeyboard(commit: boolean) {\n const d = this.drag\n if (!d?.keyboard) return\n const target = commit ? d.over : null\n const announcement = target ? this.placeAt(target) : null\n const payload = this.payload(d.id)\n this.drag = null\n this.refusalText = null\n this.focusRequest = d.id\n if (target) this.stops.set(target.zone, d.id)\n this.emit()\n if (target && payload && announcement) {\n this.props.onDrop({item: payload, target})\n this.say({kind: 'drop', item: this.labelOf(d.id), ...announcement, keyboard: true})\n } else {\n this.say({kind: 'cancel', item: this.labelOf(d.id), keyboard: true})\n }\n }\n\n /** Blur while picked (Tab away, a click elsewhere) cancels. */\n blurHandle(id: string) {\n if (this.drag?.keyboard && this.drag.id === id) this.endKeyboard(false)\n }\n\n private moveFocus(id: string, key: string): boolean {\n const zone = this.items.get(id)?.zone\n if (zone === undefined) return false\n const inZone = this.handlesIn(zone)\n const i = inZone.indexOf(id)\n let next: string | undefined\n if (key === 'ArrowUp') next = inZone[i - 1]\n else if (key === 'ArrowDown') next = inZone[i + 1]\n else if (key === 'Home') next = inZone[0]\n else if (key === 'End') next = inZone[inZone.length - 1]\n else if (key === 'ArrowLeft' || key === 'ArrowRight') {\n const zones = this.zoneSequence().filter((z) => z === zone || this.handlesIn(z).length > 0)\n const other = zones[zones.indexOf(zone) + (key === 'ArrowRight' ? 1 : -1)]\n if (other !== undefined) {\n const there = this.handlesIn(other)\n next = there[Math.min(Math.max(i, 0), there.length - 1)]\n }\n } else return false\n if (next) this.handles.get(next)?.focus()\n return true\n }\n\n keyDown(id: string, e: KeyLike) {\n const d = this.drag\n if (d?.keyboard && d.id === id) {\n switch (e.key) {\n case 'ArrowUp':\n this.moveWithin(-1)\n break\n case 'ArrowDown':\n this.moveWithin(1)\n break\n case 'ArrowLeft':\n this.moveAcross(-1)\n break\n case 'ArrowRight':\n this.moveAcross(1)\n break\n case ' ':\n case 'Enter':\n this.endKeyboard(true)\n break\n case 'Escape':\n this.endKeyboard(false)\n break\n case 'Tab':\n this.endKeyboard(false)\n return\n default:\n return\n }\n e.preventDefault()\n e.stopPropagation()\n return\n }\n if (d || this.session) return\n if (e.key === ' ') {\n e.preventDefault()\n this.pick(id)\n return\n }\n if (this.moveFocus(id, e.key)) e.preventDefault()\n }\n}\n\n// ---------------------------------------------------------------------------\n// Contexts and selectors\n// ---------------------------------------------------------------------------\n\ninterface RootContextValue {\n readonly engine: Engine\n readonly instructionsId: string\n}\n\nconst RootContext = createContext<RootContextValue | null>(null)\n\nconst useRoot = (part: string): RootContextValue => {\n const ctx = useContext(RootContext)\n if (!ctx) throw new Error(`DragDrop.${part} must be used within DragDrop.Root`)\n return ctx\n}\n\nfunction useSelect<R>(engine: Engine | null | undefined, select: (e: Engine) => R, fallback: R): R {\n const get = () => (engine ? select(engine) : fallback)\n return useSyncExternalStore(engine ? engine.subscribe : noopSubscribe, get, get)\n}\nconst noopSubscribe = () => () => {}\n\ninterface ZoneContextValue {\n readonly id: string\n readonly list: boolean\n}\nconst ZoneContext = createContext<ZoneContextValue | null>(null)\n\ninterface ItemContextValue {\n readonly id: string\n readonly zone: string\n readonly label: string\n}\nconst ItemContext = createContext<ItemContextValue | null>(null)\n\n/** True inside the ghost: its copy of the preview may hold Zones, Items and\n * Handles, which must stay inert there — never registered, never focusable. */\nconst GhostContext = createContext(false)\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport interface DragDropRootProps<T = unknown> {\n /** Called when an item is released over a zone that accepts it (or dropped\n * with Space/Enter). Reordering inside the item's own zone arrives here\n * too, with the new index. */\n onDrop: (event: DragDropEvent<T>) => void\n /** Called whenever the target under the drag changes — a new zone or\n * index, nothing, or a refusal. */\n onDragOver?: (event: DragDropOverEvent<T>) => void\n /** Supplies every live-region string (pick, move, drop, cancel, refuse),\n * e.g. from the app's message catalog. Defaults to English. */\n announce?: (event: DragDropAnnouncement) => string\n /** What marks the insertion point in a zone while dragging; a Zone's own\n * renderPlaceholder wins. Without one, only the zone lights up. */\n renderPlaceholder?: DragDropRenderPlaceholder\n /** Read by screen readers on a focused Handle. */\n instructions?: string\n children: ReactNode\n}\n\nconst DEFAULT_INSTRUCTIONS = 'Press Space to pick up. Arrow keys move, Space drops, Escape cancels.'\n\nfunction Root<T = unknown>({\n onDrop,\n onDragOver,\n announce,\n renderPlaceholder,\n instructions = DEFAULT_INSTRUCTIONS,\n children,\n}: DragDropRootProps<T>) {\n const [engine] = useState(() => new Engine())\n const instructionsId = useId()\n\n useLayoutEffect(() => {\n engine.props = {\n onDrop: onDrop as LatestProps['onDrop'],\n onDragOver: onDragOver as LatestProps['onDragOver'],\n announce,\n renderPlaceholder,\n }\n })\n\n useEffect(() => engine.attach(), [engine])\n\n const value = useMemo<RootContextValue>(\n () => ({engine, instructionsId}),\n [engine, instructionsId],\n )\n\n return (\n <RootContext.Provider value={value}>\n {children}\n <Ghost engine={engine} />\n <LiveRegion engine={engine} />\n <Instructions engine={engine} id={instructionsId} text={instructions} />\n </RootContext.Provider>\n )\n}\n\nfunction LiveRegion({engine}: {engine: Engine}) {\n const text = useSelect(engine, (e) => e.announcement, '')\n return (\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={visuallyHidden.base}>\n {text}\n </html.div>\n )\n}\n\n/** The handles' description; rendered only while a Handle exists, so a\n * pointer-only board carries no stray text. */\nfunction Instructions({engine, id, text}: {engine: Engine; id: string; text: string}) {\n const any = useSelect(engine, (e) => e.handles.size > 0, false)\n if (!any) return null\n return (\n <html.div id={id} style={visuallyHidden.base}>\n {text}\n </html.div>\n )\n}\n\nfunction Ghost({engine}: {engine: Engine}) {\n const ghost = useSelect(engine, (e) => e.ghost, null)\n const refusal = useSelect(engine, (e) => (e.ghost ? e.refusalText : null), null)\n const ref = useRef<HTMLElement | null>(null)\n // The ghost renders in the ThemeProvider mount: inline, a Dialog's\n // transformed, overflow-clipped panel would clip and offset it.\n const mount = usePortalMount()\n\n useLayoutEffect(() => {\n engine.ghostEl = ref.current\n engine.paintGhost()\n return () => {\n engine.ghostEl = null\n }\n }, [engine, ghost])\n\n if (!ghost) return null\n const node = (\n <html.div\n ref={ref as never}\n aria-hidden\n style={[styles.ghost, styles.ghostSize(ghost.width, ghost.height)]}\n >\n <html.div style={styles.ghostTilt}>\n <GhostContext.Provider value>{ghost.preview}</GhostContext.Provider>\n </html.div>\n {refusal !== null && <html.div style={styles.refusal}>{refusal}</html.div>}\n </html.div>\n )\n return mount ? createPortal(node, mount) : node\n}\n\nfunction Placeholder({engine, zone, index}: {engine: Engine; zone: string; index: number}) {\n const record = engine.zones.get(zone)\n const render = record?.renderPlaceholder ?? engine.props.renderPlaceholder\n const ref = useRef<HTMLElement | null>(null)\n // A keyboard move keeps the insertion point in view.\n useEffect(() => {\n if (engine.drag?.keyboard) ref.current?.scrollIntoView?.({block: 'nearest', inline: 'nearest'})\n }, [engine, zone, index])\n if (!render) return null\n return (\n <html.div ref={ref as never} aria-hidden style={styles.placeholder}>\n {render({zone, index, label: record?.label ?? zone})}\n </html.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Zone\n// ---------------------------------------------------------------------------\n\nexport interface DragDropZoneProps<T = unknown> {\n id: string\n /** Read to screen readers when an item moves or drops here; the list's\n * accessible name with `list`. */\n label: string\n /** Which axis items flow along; decides how the insertion index is read\n * from the pointer. */\n orientation?: 'horizontal' | 'vertical'\n /** Take the item (`true`), let it pass to an outer zone (`false`), or\n * refuse it with a reason that is shown and announced\n * (`{ok: false, reason}`). Omitted: every item is taken. */\n accepts?: (item: DragDropItemData<T>) => DragDropVerdict\n /** Keyboard order across zones (Left/Right); zones without one follow, in\n * DOM order. */\n order?: number\n /** Marks the insertion point in this zone; overrides the Root's. */\n renderPlaceholder?: DragDropRenderPlaceholder\n /** Render the zone as a labelled list (`role=\"list\"`) laid out along\n * `orientation`, its Items as list items. Put the Items directly in it. */\n list?: boolean\n /** Gap between the Items of a `list` zone. */\n gap?: SpacingToken\n /** Stretch to fill the parent (a Timeline bar, a card) instead of sizing\n * to the content. */\n fill?: boolean\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nfunction Zone<T = unknown>({\n id,\n label,\n orientation = 'horizontal',\n accepts,\n order,\n renderPlaceholder,\n list = false,\n gap = 'sm',\n fill = false,\n children,\n}: DragDropZoneProps<T>) {\n const {engine} = useRoot('Zone')\n const inGhost = useContext(GhostContext)\n const ref = useRef<HTMLDivElement>(null)\n const [record] = useState<ZoneRecord>(() => ({el: null, orientation, label}))\n\n // The record is read at drag time, so the latest props land on it after\n // every render without re-registering.\n useEffect(() => {\n record.orientation = orientation\n record.label = label\n record.accepts = accepts as ZoneRecord['accepts']\n record.order = order\n record.renderPlaceholder = renderPlaceholder\n })\n\n useEffect(() => {\n if (isNative || inGhost) return\n record.el = ref.current\n return engine.registerZone(id, record)\n }, [engine, id, record, inGhost])\n\n const dragging = useSelect(engine, (e) => e.drag !== null, false)\n const over = useSelect(engine, (e) => e.drag?.over?.zone === id, false)\n const refused = useSelect(engine, (e) => e.drag?.refused?.zone === id, false)\n const placeholderAtEnd = useSelect(\n engine,\n (e) => {\n const d = e.drag\n if (!d?.over || d.over.zone !== id) return -1\n const n = d.order.get(id)?.length ?? 0\n return d.over.index >= n ? d.over.index : -1\n },\n -1,\n )\n const zoneContext = useMemo(() => ({id, list}), [id, list])\n\n return (\n <ZoneContext.Provider value={zoneContext}>\n <html.div\n ref={ref}\n role={list ? 'list' : undefined}\n aria-label={list ? label : undefined}\n style={[\n styles.zone,\n list && (orientation === 'vertical' ? styles.listVertical : styles.listHorizontal),\n list && gapMap[gap],\n fill && styles.fill,\n dragging && styles.zoneReady,\n over && styles.zoneOver,\n refused && styles.zoneRefused,\n ]}\n >\n {children}\n {placeholderAtEnd >= 0 && (\n <Placeholder engine={engine} zone={id} index={placeholderAtEnd} />\n )}\n </html.div>\n </ZoneContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Item\n// ---------------------------------------------------------------------------\n\nexport interface DragDropItemProps<T = unknown> {\n id: string\n /** The zone this item currently lives in. */\n zone: string\n /** Read to screen readers when picked up or dropped; a Handle's default\n * accessible name. */\n label: string\n /** Carried to onDrop untouched. */\n data?: T\n /** What follows the pointer; defaults to the children. */\n preview?: ReactNode\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item<T = unknown>({\n id,\n zone,\n label,\n data,\n preview,\n disabled = false,\n children,\n}: DragDropItemProps<T>) {\n const {engine} = useRoot('Item')\n const zoneCtx = useContext(ZoneContext)\n const inGhost = useContext(GhostContext)\n const ref = useRef<HTMLDivElement>(null)\n const [record] = useState<ItemRecord>(() => ({\n el: null,\n zone,\n label,\n data,\n preview: null,\n disabled,\n }))\n\n // Registration depends on the id only; what changes from render to render\n // (data, the preview, the children) is copied onto the record instead.\n useEffect(() => {\n record.zone = zone\n record.label = label\n record.data = data\n record.preview = preview ?? children\n record.disabled = disabled\n })\n\n useEffect(() => {\n if (isNative || inGhost) return\n record.el = ref.current\n return engine.registerItem(id, record)\n }, [engine, id, record, inGhost])\n\n // WebKit only honours the prefixed user-select, and a touch held on\n // selectable text becomes iOS's selection gesture (loupe and handles)\n // before our hold can turn it into a drag; the callout is the same race\n // for links and images. StyleX emits neither prefixed property and\n // react-strict-dom's types have no vendor keys, so they are set on the\n // element directly. Both inherit into the item's children.\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n const style = el.style as CSSStyleDeclaration & {webkitTouchCallout?: string}\n style.webkitUserSelect = 'none'\n style.webkitTouchCallout = 'none'\n }, [])\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n engine.begin(id, e)\n },\n [engine, disabled, id],\n )\n\n const lifted = useSelect(engine, (e) => e.drag?.id === id, false)\n const placeholderBefore = useSelect(\n engine,\n (e) => {\n const d = e.drag\n if (!d?.over || d.over.zone !== zone) return -1\n return d.order.get(zone)?.[d.over.index] === id ? d.over.index : -1\n },\n -1,\n )\n const itemContext = useMemo(() => ({id, zone, label}), [id, zone, label])\n\n if (isNative) return <>{children}</>\n\n return (\n <ItemContext.Provider value={itemContext}>\n {placeholderBefore >= 0 && (\n <Placeholder engine={engine} zone={zone} index={placeholderBefore} />\n )}\n <html.div\n ref={ref}\n role={zoneCtx?.list && zoneCtx.id === zone ? 'listitem' : undefined}\n onPointerDown={onPointerDown}\n style={[styles.item, disabled && styles.itemDisabled, lifted && styles.itemLifted]}\n >\n {children}\n </html.div>\n </ItemContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Handle\n// ---------------------------------------------------------------------------\n\nexport interface DragDropHandleProps {\n /** Defaults to the Item's label. */\n 'aria-label'?: string\n /** What the handle shows: a grip, or the item's whole face. Keep other\n * controls out of it — a handle is one widget. */\n children: ReactNode\n}\n\n/**\n * The keyboard path into an Item: one focusable widget (`role=\"button\"`) per\n * item, a roving tab stop per zone. Space picks the item up, the arrow keys\n * move it, Space or Enter drops it, Escape cancels.\n */\nfunction Handle({'aria-label': ariaLabel, children}: DragDropHandleProps) {\n const {engine, instructionsId} = useRoot('Handle')\n const item = useContext(ItemContext)\n const inGhost = useContext(GhostContext)\n if (!item && !inGhost) throw new Error('DragDrop.Handle must be used within DragDrop.Item')\n const ref = useRef<HTMLDivElement>(null)\n const id = item?.id ?? ''\n const zone = item?.zone ?? ''\n const label = item?.label ?? ''\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative || inGhost) return\n return engine.registerHandle(id, el)\n }, [engine, id, zone, inGhost])\n\n const tabStop = useSelect(engine, (e) => e.tabStop(zone) === id, false)\n const picked = useSelect(engine, (e) => e.drag?.keyboard === true && e.drag.id === id, false)\n const wantsFocus = useSelect(engine, (e) => e.focusRequest === id, false)\n\n useEffect(() => {\n if (!wantsFocus) return\n engine.focusRequest = null\n ref.current?.focus()\n }, [engine, wantsFocus])\n\n if (isNative || inGhost) return <>{children}</>\n\n return (\n <html.div\n ref={ref}\n role=\"button\"\n tabIndex={tabStop || picked ? 0 : -1}\n aria-label={ariaLabel ?? label}\n aria-describedby={instructionsId}\n onKeyDown={(e: unknown) => engine.keyDown(id, e as KeyLike)}\n onFocus={() => engine.focusHandle(id)}\n onBlur={() => engine.blurHandle(id)}\n style={[styles.handle, picked && styles.handlePicked]}\n >\n {children}\n </html.div>\n )\n}\n\n/** Current drag, for consumers that render their own placeholder or ghost. */\nexport function useDragDrop(): {\n readonly dragging: string | null\n readonly over: DragDropTarget | null\n readonly refused: DragDropRefusal | null\n readonly keyboard: boolean\n} {\n const engine = useContext(RootContext)?.engine\n const dragging = useSelect(engine, (e) => e.drag?.id ?? null, null)\n const over = useSelect(engine, (e) => e.drag?.over ?? null, null)\n const refused = useSelect(engine, (e) => e.drag?.refused ?? null, null)\n const keyboard = useSelect(engine, (e) => e.drag?.keyboard ?? false, false)\n return {dragging, over, refused, keyboard}\n}\n\nexport const DragDrop = {Root, Zone, Item, Handle}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\n// The \"Apple ease\" curves and the 280ms open live in the shared motion tokens\n// (easing.easeOut/easeIn, duration.slow). The close is duration.base, and the\n// closeAnimationDuration prop can override it via the closeDuration* styles.\n\nexport const styles = css.create({\n // --- Outer wrapper: animates width from 0 → target ---\n wrapper: {\n overflow: 'hidden',\n flexShrink: 0,\n position: 'relative',\n },\n\n // --- Wrapper open/close: SM (360px) ---\n wrapperOpenSm: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 360},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseSm: {\n animationName: css.keyframes({\n from: {width: 360},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Wrapper open/close: MD (480px) ---\n wrapperOpenMd: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 480},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseMd: {\n animationName: css.keyframes({\n from: {width: 480},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Content panel ---\n content: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n boxShadow: shadows.sm,\n position: 'relative',\n },\n\n // Content must maintain its target width even while wrapper is narrower\n contentSm: {width: sizes.panelSm},\n contentMd: {width: sizes.panelMd},\n\n // --- Content slide + fade animations ---\n slideIn: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n to: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOut: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n to: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationMinimal: {animationDuration: duration.minimal},\n closeDurationQuick: {animationDuration: duration.quick},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBrisk: {animationDuration: duration.brisk},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: 1.4,\n color: colors.text,\n margin: 0,\n flex: 1,\n minWidth: 0,\n },\n\n // --- Body ---\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.iconButton,\n height: sizes.iconButton,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n minimal: styles.closeDurationMinimal,\n quick: styles.closeDurationQuick,\n fast: styles.closeDurationFast,\n brisk: styles.closeDurationBrisk,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\nexport type DetailPanelSize = 'sm' | 'md'\n\n// --- Context ---\n\ninterface DetailPanelContextValue {\n present: boolean\n closing: boolean\n closeDuration: DurationToken\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n labelId: string | undefined\n registerTitle: (id: string) => void\n unregisterTitle: () => void\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DetailPanelContext = createContext<DetailPanelContextValue | null>(null)\n\nfunction useDetailPanel() {\n const ctx = useContext(DetailPanelContext)\n if (!ctx) throw new Error('DetailPanel compound components must be used within DetailPanel.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Motion token for the close animation. Default: 'base' (200ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n closeAnimationDuration = 'base',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [present, setPresent] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<Element | null>(null)\n\n const titleId = useId()\n const [labelId, setLabelId] = useState<string | undefined>(undefined)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n // Sync presence with open state\n useEffect(() => {\n if (isOpen && !present) {\n setPresent(true)\n setClosing(false)\n } else if (!isOpen && present && !closing) {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n setPresent(false)\n closingTimerRef.current = null\n }, DURATION_MS[closeAnimationDuration])\n }\n }, [isOpen, present, closing, closeAnimationDuration])\n\n // Focus management: move focus on open, restore on close\n useEffect(() => {\n if (present && !closing) {\n previousFocusRef.current = document.activeElement\n panelRef.current?.focus()\n }\n }, [present]) // eslint-disable-line react-hooks/exhaustive-deps -- only on present change\n\n useEffect(() => {\n if (!present && previousFocusRef.current) {\n const el = previousFocusRef.current as HTMLElement\n if (typeof el.focus === 'function') {\n el.focus()\n }\n previousFocusRef.current = null\n }\n }, [present])\n\n // ESC handler\n useEffect(() => {\n if (!present || closing) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [present, closing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n setClosing(false)\n }\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n const registerTitle = useCallback((id: string) => {\n setLabelId(id)\n }, [])\n\n const unregisterTitle = useCallback(() => {\n setLabelId(undefined)\n }, [])\n\n return (\n <DetailPanelContext.Provider\n value={{\n present,\n closing,\n closeDuration: closeAnimationDuration,\n requestOpen,\n requestClose,\n titleId,\n labelId,\n registerTitle,\n unregisterTitle,\n panelRef,\n }}\n >\n {children}\n </DetailPanelContext.Provider>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n /** Width of the panel. Default: 'sm' (360px) */\n size?: DetailPanelSize\n /** Accessible name for the complementary landmark */\n label: string\n}\n\nconst wrapperOpenMap = {\n sm: styles.wrapperOpenSm,\n md: styles.wrapperOpenMd,\n} as const\n\nconst wrapperCloseMap = {\n sm: styles.wrapperCloseSm,\n md: styles.wrapperCloseMd,\n} as const\n\nfunction Content({children, size = 'sm', label}: ContentProps) {\n const {present, closing, closeDuration, labelId, panelRef} = useDetailPanel()\n\n if (!present) return null\n\n return (\n <html.div\n style={[\n styles.wrapper,\n closing ? wrapperCloseMap[size] : wrapperOpenMap[size],\n closing && closeDurationMap[closeDuration],\n ]}\n >\n <html.div\n ref={panelRef}\n role=\"complementary\"\n aria-label={!labelId ? label : undefined}\n aria-labelledby={labelId || undefined}\n tabIndex={-1}\n style={[\n styles.content,\n size === 'sm' ? styles.contentSm : styles.contentMd,\n closing ? styles.slideOut : styles.slideIn,\n closing && closeDurationMap[closeDuration],\n ]}\n >\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId, registerTitle, unregisterTitle} = useDetailPanel()\n\n useEffect(() => {\n registerTitle(titleId)\n return () => unregisterTitle()\n }, [titleId, registerTitle, unregisterTitle])\n\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDetailPanel()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const DetailPanel = {\n Root,\n Content,\n Header,\n Title,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center',\n },\n message: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n lineHeight: typography.lineHeight,\n },\n action: {\n marginTop: spacing.sm,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\ninterface EmptyStateProps {\n message: string\n icon?: ReactNode\n action?: ReactNode\n}\n\nexport function EmptyState({message, icon, action}: EmptyStateProps) {\n return (\n <html.div style={styles.root}>\n {icon}\n <html.p style={styles.message}>{message}</html.p>\n {action && <html.div style={styles.action}>{action}</html.div>}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type HeadingVariant =\n | 'displayLg'\n | 'displayMd'\n | 'displaySm'\n | 'headingXl'\n | 'headingLg'\n | 'headingMd'\n | 'headingSm'\n\ninterface HeadingProps {\n level: 1 | 2 | 3 | 4 | 5 | 6\n variant?: HeadingVariant\n color?: 'default' | 'muted' | 'accent'\n align?: 'start' | 'center' | 'end'\n /** The heading's id: an in-page link's target (`href=\"#id\"`), an `aria-labelledby` reference. */\n id?: string\n children: ReactNode\n}\n\nconst defaultVariantMap: Record<number, HeadingVariant> = {\n 1: 'headingXl',\n 2: 'headingLg',\n 3: 'headingMd',\n 4: 'headingSm',\n 5: 'headingSm',\n 6: 'headingSm',\n}\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Heading({level, variant, color = 'default', align, id, children}: HeadingProps) {\n const resolvedVariant = variant ?? defaultVariantMap[level]\n const style = [typePresets[resolvedVariant], styles[color], align && alignMap[align]]\n\n if (level === 1)\n return (\n <html.h1 id={id} style={style}>\n {children}\n </html.h1>\n )\n if (level === 2)\n return (\n <html.h2 id={id} style={style}>\n {children}\n </html.h2>\n )\n if (level === 3)\n return (\n <html.h3 id={id} style={style}>\n {children}\n </html.h3>\n )\n if (level === 4)\n return (\n <html.h4 id={id} style={style}>\n {children}\n </html.h4>\n )\n if (level === 5)\n return (\n <html.h5 id={id} style={style}>\n {children}\n </html.h5>\n )\n return (\n <html.h6 id={id} style={style}>\n {children}\n </html.h6>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n // --- Root ---\n root: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n },\n\n // --- Item ---\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.quick,\n cursor: 'default',\n },\n itemSelected: {\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCardHover,\n },\n },\n itemDisabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n itemLast: {\n borderBottomWidth: 0,\n },\n\n // --- Item content area (text + description) ---\n content: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: microSpacing.px2,\n minWidth: 0,\n },\n\n // --- Primary text ---\n text: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Description text ---\n description: {\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Actions slot ---\n actions: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n flexShrink: 0,\n },\n\n // --- Empty state ---\n empty: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n color: colors.textMuted,\n fontSize: typography.fontSizeSm,\n },\n})\n","import {type ReactNode, createContext, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nexport type ListSelectionMode = 'none' | 'single' | 'multiple'\n\n// --- Context ---\n\ninterface ListContextValue {\n selectionMode: ListSelectionMode\n}\n\nconst ListContext = createContext<ListContextValue>({selectionMode: 'none'})\n\nfunction useList() {\n return useContext(ListContext)\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Selection mode: 'none' (default), 'single', or 'multiple' */\n selectionMode?: ListSelectionMode\n /** Accessible label for the list */\n 'aria-label'?: string\n}\n\nfunction Root({children, selectionMode = 'none', 'aria-label': ariaLabel}: RootProps) {\n return (\n <ListContext.Provider value={{selectionMode}}>\n <html.div role=\"list\" aria-label={ariaLabel} style={styles.root}>\n {children}\n </html.div>\n </ListContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n children: ReactNode\n /** Whether this item is selected */\n selected?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Click handler for the item */\n onClick?: () => void\n}\n\nfunction Item({children, selected, disabled, onClick}: ItemProps) {\n const {selectionMode} = useList()\n const isSelectable = selectionMode !== 'none'\n\n return (\n <html.div\n role=\"listitem\"\n aria-selected={isSelectable ? selected : undefined}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : onClick}\n style={[styles.item, selected && styles.itemSelected, disabled && styles.itemDisabled]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content: wraps primary text + description ---\n\nfunction Content({children}: {children: ReactNode}) {\n return <html.div style={styles.content}>{children}</html.div>\n}\n\n// --- Text: primary label ---\n\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.p style={styles.text}>{children}</html.p>\n}\n\n// --- Description: secondary text ---\n\nfunction Description({children}: {children: ReactNode}) {\n return <html.p style={styles.description}>{children}</html.p>\n}\n\n// --- Actions: slot for buttons, badges, etc. ---\n\nfunction Actions({children}: {children: ReactNode}) {\n return <html.div style={styles.actions}>{children}</html.div>\n}\n\n// --- Empty: placeholder when list has no items ---\n\nfunction Empty({children}: {children: ReactNode}) {\n return (\n <html.div role=\"listitem\" style={styles.empty}>\n {children}\n </html.div>\n )\n}\n\n// --- Export ---\n\nexport const List = {\n Root,\n Item,\n Content,\n Text: ItemText,\n Description,\n Actions,\n Empty,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n // Reset native fieldset chrome\n borderWidth: 0,\n margin: 0,\n padding: 0,\n minWidth: 0,\n },\n legend: {\n // Reset native legend quirks\n padding: 0,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n})\n","import {type ReactNode, Children, createContext, isValidElement, useContext, useId} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type FieldsetGap = Exclude<SpacingToken, 'xxl' | 'xxxl'>\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n} as const satisfies Record<FieldsetGap, unknown>\n\n// --- Root ---\ninterface RootProps {\n /** Disables all form controls within the fieldset */\n disabled?: boolean\n /** Gap between child elements */\n gap?: FieldsetGap\n children: ReactNode\n}\n\n// the Legend's id, so the group can name itself after it\nconst LegendIdContext = createContext<string | undefined>(undefined)\n\nfunction Root({disabled = false, gap = 'md', children}: RootProps) {\n const legendId = useId()\n let hasLegend = false\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === Legend) hasLegend = true\n })\n return (\n <LegendIdContext.Provider value={legendId}>\n <html.div\n role=\"group\"\n aria-labelledby={hasLegend ? legendId : undefined}\n aria-disabled={disabled || undefined}\n style={[styles.root, gapMap[gap], disabled && styles.disabled]}\n >\n {children}\n </html.div>\n </LegendIdContext.Provider>\n )\n}\n\n// --- Legend ---\ninterface LegendProps {\n children: ReactNode\n}\n\n/** Names the group: the Root points `aria-labelledby` at it. */\nfunction Legend({children}: LegendProps) {\n const id = useContext(LegendIdContext)\n return (\n <html.span id={id} style={styles.legend}>\n {children}\n </html.span>\n )\n}\n\nexport const Fieldset = {\n Root,\n Legend,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n wrapper: {\n display: 'flex',\n alignItems: 'stretch',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus-within': colors.accent,\n },\n borderRadius: radii.sm,\n overflow: 'hidden',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCardHover,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n userSelect: 'none',\n borderWidth: 0,\n },\n addonStart: {\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n addonEnd: {\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n addonClickable: {\n cursor: 'pointer',\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCard,\n ':active': colors.bg,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addonDisabled: {\n opacity: 0.4,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {useMemo} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {InputGroupContext} from './InputGroupContext'\nimport {styles} from './styles.css'\nimport {resolveLength, type Length} from '../../shared/length'\n\n// --- Root ---\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useMemo(() => ({inGroup: true}), [])\n\n return (\n <InputGroupContext.Provider value={ctx}>\n <html.div style={styles.wrapper}>{children}</html.div>\n </InputGroupContext.Provider>\n )\n}\n\n// --- Addon ---\nconst dynamicStyles = css.create({\n minWidth: (value: number | string) => ({minWidth: value}),\n})\n\ninterface AddonProps {\n position?: 'start' | 'end'\n onClick?: () => void\n disabled?: boolean\n /** Optional minimum width to prevent layout shift (e.g. Copy → Copied!): a\n * size token key or a relative length. */\n minWidth?: Length\n /**\n * Accessible name of a clickable addon (it renders a button). Required when\n * its content is an icon (copy, reveal): without it the button has no name.\n */\n 'aria-label'?: string\n children: ReactNode\n}\n\nfunction Addon({\n position = 'end',\n onClick,\n disabled,\n minWidth,\n 'aria-label': ariaLabel,\n children,\n}: AddonProps) {\n const positionStyle = position === 'start' ? styles.addonStart : styles.addonEnd\n const style = [\n styles.addon,\n isNative && styles.nativeFlex,\n positionStyle,\n onClick && !disabled && styles.addonClickable,\n disabled && styles.addonDisabled,\n minWidth != null && dynamicStyles.minWidth(resolveLength(minWidth)),\n ]\n\n if (onClick) {\n return (\n <html.button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n aria-label={ariaLabel}\n style={style}\n >\n {children}\n </html.button>\n )\n }\n\n return <html.span style={style}>{children}</html.span>\n}\n\nexport const InputGroup = {\n Root,\n Addon,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n cursor: 'pointer',\n textDecoration: 'none',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n // Matches Button: the 44px target under a coarse pointer (5.6).\n minWidth: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n\n // Matches Button: every small control is at least controlSm tall, and\n // the touch target under a coarse pointer (5.6).\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n color: colors.textMuted,\n },\n fullWidth: {\n width: '100%',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\nexport type LinkButtonVariant = 'primary' | 'secondary'\nexport type LinkButtonSize = 'default' | 'small'\n\ninterface LinkButtonProps {\n href: string\n variant?: LinkButtonVariant\n size?: LinkButtonSize\n fullWidth?: boolean\n target?: '_blank' | '_self'\n rel?: string\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key, no `target`); the browser default runs for every other click. Call\n * `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function LinkButton({\n href,\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n target,\n rel,\n onNavigate,\n children,\n}: LinkButtonProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel}\n onClick={linkClickHandler(href, onNavigate, target)}\n style={[styles.base, sizeMap[size], styles[variant], fullWidth && styles.fullWidth]}\n >\n {children}\n </html.a>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n track: {\n position: 'relative',\n width: '100%',\n height: sizes.meterH,\n borderRadius: radii.full,\n backgroundColor: colors.border,\n overflow: 'hidden',\n },\n fill: {\n height: '100%',\n borderRadius: radii.full,\n transitionProperty: 'width',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.standard,\n },\n accent: {backgroundColor: colors.accent},\n success: {backgroundColor: colors.success},\n warning: {backgroundColor: colors.warning},\n error: {backgroundColor: colors.error},\n fillAt: (percent: number) => ({\n width: `${percent}%`,\n }),\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// ---------------------------------------------------------------------------\n// Meter — a scalar inside a known range (WIP 2 of 3, 40% of a milestone's\n// tasks done): role=\"meter\" with a value text, drawn as a thin bar of the\n// `meterH` token. Not a progress bar for a running task (use Spinner) and\n// not an input (no thumb).\n// ---------------------------------------------------------------------------\n\nexport type MeterTone = 'accent' | 'success' | 'warning' | 'error'\n\nexport interface MeterProps {\n value: number\n /** Defaults to 0. */\n min?: number\n /** Defaults to 1, so a fraction needs nothing else. */\n max?: number\n /** The accessible name, e.g. \"In progress WIP\". */\n label: string\n /** What screen readers read for the value, e.g. \"4 of 3, over the limit\".\n * Defaults to the percentage. */\n valueText?: string\n /** The fill's colour; defaults to accent. */\n tone?: MeterTone\n}\n\nconst toneStyle = {\n accent: styles.accent,\n success: styles.success,\n warning: styles.warning,\n error: styles.error,\n} as const\n\nexport function Meter({value, min = 0, max = 1, label, valueText, tone = 'accent'}: MeterProps) {\n const span = max - min\n const fraction = span > 0 ? (value - min) / span : 0\n const clamped = Math.min(Math.max(fraction, 0), 1)\n // aria-valuenow must sit inside the range; the true value (over the\n // limit, say) is what valueText is for.\n const now = Math.min(Math.max(value, min), max)\n return (\n <html.div\n role=\"meter\"\n aria-label={label}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={now}\n aria-valuetext={valueText ?? `${Math.round(clamped * 100)}%`}\n style={styles.track}\n >\n <html.div style={[styles.fill, toneStyle[tone], styles.fillAt(clamped * 100)]} />\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {breakpoints} from '@duro-app/tokens/tokens/breakpoints.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// Below this container width the two cards stack (Mobile.dc.html); above it\n// they sit side by side, each in its own half (Reader.dc.html).\nconst STACK_BP = breakpoints.xs\nconst STACKED = `@container (max-width: ${STACK_BP})`\n\n// The picked docs browser (docs/mockups/docs-nav/Reader.dc.html and\n// Mobile.dc.html, `.pn .card`): two interactive cards, a small muted\n// direction label over the title, Next aligned right.\nexport const styles = css.create({\n // hosts the container query: a container cannot query itself\n root: {\n containerType: 'inline-size',\n minWidth: 0,\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: {\n default: 'minmax(0, 1fr) minmax(0, 1fr)',\n [STACKED]: 'minmax(0, 1fr)',\n },\n gap: spacing.md,\n },\n card: {\n display: 'flex',\n flexDirection: 'column',\n padding: spacing.md,\n fontFamily: typography.fontFamily,\n color: colors.text,\n textDecorationLine: 'none',\n backgroundColor: {\n default: colors.bgCard,\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n cursor: 'pointer',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffset,\n },\n },\n // each side keeps its slot: Next stays in the right half without a Prev\n prev: {\n gridColumn: {\n default: '1',\n [STACKED]: 'auto',\n },\n gridRow: {\n default: '1',\n [STACKED]: 'auto',\n },\n },\n next: {\n gridColumn: {\n default: '2',\n [STACKED]: 'auto',\n },\n gridRow: {\n default: '1',\n [STACKED]: 'auto',\n },\n textAlign: {\n default: 'right',\n [STACKED]: 'left',\n },\n },\n label: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n title: {\n fontSize: typography.fontSizeSm,\n overflowWrap: 'anywhere',\n },\n})\n","import {createContext, type ReactNode, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {linkClickHandler, type OnNavigate} from '../../shared/navigate'\n\n/* PageNav — the previous and next pages in reading order, at the foot of a\n * page: a labelled `nav` holding up to two link cards. Each card shows a small\n * direction label (\"Previous\", from your text catalog) over the page title.\n * Prev holds the left slot and Next the right one even when the other is\n * missing, so Next stays right-aligned on the last-but-one page too; on a\n * narrow container (below the `xs` breakpoint) the two stack.\n *\n * Not `Pagination` (numbered result pages, in `@duro-app/ui/table`). */\n\n// Prev and Next place themselves in Root's two-column grid.\nconst PageNavContext = createContext(false)\n\nfunction usePageNav() {\n if (!useContext(PageNavContext))\n throw new Error('PageNav compound components must be used within PageNav.Root')\n}\n\n// --- Root ---\n\ninterface RootProps {\n /** Names the landmark (\"Pages\"); required, from your text catalog. */\n 'aria-label': string\n /** A `PageNav.Prev` and/or a `PageNav.Next`. */\n children: ReactNode\n}\n\nfunction Root({'aria-label': ariaLabel, children}: RootProps) {\n return (\n <PageNavContext.Provider value={true}>\n <html.nav aria-label={ariaLabel} style={styles.root}>\n <html.div style={styles.grid}>{children}</html.div>\n </html.nav>\n </PageNavContext.Provider>\n )\n}\n\n// --- Prev / Next ---\n\ninterface LinkProps {\n href: string\n /** The page's title. */\n title: ReactNode\n /** The direction label above the title (\"Previous\", \"Next\"), from your text catalog. */\n label: ReactNode\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key). Call `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n}\n\nfunction Prev({href, title, label, onNavigate}: LinkProps) {\n usePageNav()\n return (\n <html.a\n href={href}\n onClick={linkClickHandler(href, onNavigate)}\n style={[styles.card, styles.prev]}\n >\n <html.span style={styles.label}>\n <html.span aria-hidden>←</html.span> {label}\n </html.span>\n <html.span style={styles.title}>{title}</html.span>\n </html.a>\n )\n}\n\nfunction Next({href, title, label, onNavigate}: LinkProps) {\n usePageNav()\n return (\n <html.a\n href={href}\n onClick={linkClickHandler(href, onNavigate)}\n style={[styles.card, styles.next]}\n >\n <html.span style={styles.label}>\n {label} <html.span aria-hidden>→</html.span>\n </html.span>\n <html.span style={styles.title}>{title}</html.span>\n </html.a>\n )\n}\n\nexport const PageNav = {\n Root,\n Prev,\n Next,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n },\n bordered: {\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: borders.hairline,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Adds an outer border. Default: false */\n bordered?: boolean\n}\n\nfunction Root({children, bordered = false}: RootProps) {\n return <html.div style={[styles.root, bordered && styles.bordered]}>{children}</html.div>\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Export ---\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n}\n","import type {ReactNode, Ref} from 'react'\nimport {html} from 'react-strict-dom'\nimport './prose.css'\n\ninterface ProseProps {\n /** HTML Duro does not author: the output of a Markdown renderer. */\n children: ReactNode\n /** The container element. */\n ref?: Ref<HTMLDivElement>\n}\n\n/**\n * Prose — the container for HTML Duro does not author (rendered Markdown, CMS\n * output): headings, paragraphs, lists, tables, blockquotes, inline code,\n * links and images are styled from tokens by descendant rules scoped to it.\n * Duro components inside it (a TextLink, a CodeBlock) keep their own styles,\n * and an app's own CSS wins over every Prose rule. Web only.\n */\nexport function Prose({children, ref}: ProseProps) {\n return (\n <html.div ref={ref} data-duro-prose=\"\">\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n item: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n itemDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n circle: {\n width: sizes.indicator,\n height: sizes.indicator,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.full,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n circleUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n circleChecked: {\n backgroundColor: colors.bg,\n borderColor: colors.accent,\n },\n dot: {\n width: sizes.indicatorDot,\n height: sizes.indicatorDot,\n borderRadius: radii.full,\n backgroundColor: colors.accent,\n },\n // Layered on visuallyHidden.base: a native input is also made transparent.\n input: {\n opacity: 0,\n },\n})\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\nimport {useFieldGroupLabelling} from '../Field/FieldContext'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\n// --- Context ---\n\ninterface RadioGroupContextValue {\n value: string\n onSelect: (value: string) => void\n disabled: boolean\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction useRadioGroup() {\n const ctx = useContext(RadioGroupContext)\n if (!ctx) {\n throw new Error('RadioGroup.Item must be used within RadioGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n /** Accessible name when the group is not inside a Field.Root (inside one,\n * the Field.Label names it). */\n 'aria-label'?: string\n /** id of the element that names the group, when not inside a Field.Root. */\n 'aria-labelledby'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n ...labelling\n}: RootProps) {\n const a11y = useFieldGroupLabelling(labelling)\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onSelect = useCallback(\n (itemValue: string) => {\n if (!disabled) {\n setValue(itemValue)\n }\n },\n [disabled, setValue],\n )\n\n return (\n <RadioGroupContext.Provider value={{value, onSelect, disabled}}>\n <html.div\n role=\"radiogroup\"\n aria-orientation={orientation}\n {...a11y}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </RadioGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onSelect, disabled: groupDisabled} = useRadioGroup()\n const isChecked = groupValue === value\n const isDisabled = groupDisabled || itemDisabled\n\n const handleClick = () => {\n if (!isDisabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.label style={[styles.item, isDisabled && styles.itemDisabled]} onClick={handleClick}>\n <html.input\n type=\"radio\"\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => onSelect(value)}\n style={[visuallyHidden.base, styles.input]}\n />\n <html.span\n style={[styles.circle, isChecked ? styles.circleChecked : styles.circleUnchecked]}\n aria-hidden\n >\n {isChecked && <html.span style={styles.dot} />}\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n\n// inside a Field.Root, the label names this group (see Field's `group`)\nRoot.isFieldGroup = true as const\n\nexport const RadioGroup = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n overflow: 'hidden',\n },\n viewport: {\n width: '100%',\n height: '100%',\n overflowX: 'auto',\n overflowY: 'auto',\n // Hide native scrollbar\n scrollbarWidth: 'none',\n },\n content: {\n minWidth: '100%',\n minHeight: '100%',\n },\n scrollbar: {\n position: 'absolute',\n zIndex: layers.raised,\n display: 'flex',\n touchAction: 'none',\n userSelect: 'none',\n transitionProperty: 'opacity',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.standard,\n },\n scrollbarVertical: {\n top: 0,\n right: 0,\n bottom: 0,\n width: sizes.scrollbar,\n flexDirection: 'column',\n paddingTop: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n paddingRight: microSpacing.px2,\n },\n scrollbarHorizontal: {\n left: 0,\n right: 0,\n bottom: 0,\n height: sizes.scrollbar,\n flexDirection: 'row',\n paddingLeft: microSpacing.px2,\n paddingRight: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n },\n scrollbarHidden: {\n opacity: 0,\n },\n scrollbarVisible: {\n opacity: 1,\n },\n thumb: {\n position: 'relative',\n flex: 1,\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.full,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n // Dynamic styles — simple identifier params only (StyleX constraint)\n viewportMaxHeight: (maxHeight: number | string) => ({\n maxHeight,\n }),\n thumbVertical: (height: string, transform: string) => ({\n height,\n transform,\n }),\n thumbHorizontal: (width: string, transform: string) => ({\n width,\n transform,\n }),\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ScrollAreaContextValue {\n viewportRef: React.RefObject<HTMLDivElement | null>\n contentRef: React.RefObject<HTMLDivElement | null>\n viewportId: string\n scrollTop: number\n scrollLeft: number\n scrollHeight: number\n scrollWidth: number\n clientHeight: number\n clientWidth: number\n scrolling: boolean\n}\n\nexport const ScrollAreaContext = createContext<ScrollAreaContextValue | null>(null)\n\nexport function useScrollArea() {\n const ctx = useContext(ScrollAreaContext)\n if (!ctx) throw new Error('ScrollArea compound components must be used within ScrollArea.Root')\n return ctx\n}\n","import {useState, useCallback, useRef, useEffect, useId} from 'react'\nimport type {ScrollAreaContextValue} from './ScrollAreaContext'\n\nexport function useScrollAreaRoot(): ScrollAreaContextValue {\n const viewportId = useId()\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const [scrollTop, setScrollTop] = useState(0)\n const [scrollLeft, setScrollLeft] = useState(0)\n const [scrollHeight, setScrollHeight] = useState(0)\n const [scrollWidth, setScrollWidth] = useState(0)\n const [clientHeight, setClientHeight] = useState(0)\n const [clientWidth, setClientWidth] = useState(0)\n const [scrolling, setScrolling] = useState(false)\n const scrollTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleScroll = useCallback(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n setScrollTop(vp.scrollTop)\n setScrollLeft(vp.scrollLeft)\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n setScrolling(true)\n\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current)\n scrollTimerRef.current = setTimeout(() => setScrolling(false), 1000)\n }, [])\n\n // Observe viewport size changes\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n const observer = new ResizeObserver(() => {\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n })\n observer.observe(vp)\n // Initial measurement\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n\n return () => observer.disconnect()\n }, [])\n\n // Attach scroll listener directly to ensure we capture it\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n vp.addEventListener('scroll', handleScroll, {passive: true})\n return () => vp.removeEventListener('scroll', handleScroll)\n }, [handleScroll])\n\n return {\n viewportRef,\n contentRef,\n viewportId,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n scrolling,\n }\n}\n","import {type ComponentProps, type ReactNode, useRef, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ScrollAreaContext, useScrollArea} from './ScrollAreaContext'\nimport {useScrollAreaRoot} from './useScrollAreaRoot'\nimport {resolveLength, type Length} from '../../shared/length'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useScrollAreaRoot()\n\n return (\n <ScrollAreaContext.Provider value={ctx}>\n <html.div style={styles.root}>{children}</html.div>\n </ScrollAreaContext.Provider>\n )\n}\n\n// --- Viewport ---\n\ninterface ViewportProps {\n children: ReactNode\n maxHeight?: Length\n /** Extra styles for the viewport (e.g. a pointer-aware max height). */\n style?: ComponentProps<typeof html.div>['style']\n /** A roving-focus group owns the keyboard: drop the viewport's own tab stop\n * and region role. */\n rovingOwner?: boolean\n}\n\nfunction Viewport({children, maxHeight, style, rovingOwner = false}: ViewportProps) {\n const {viewportRef, viewportId} = useScrollArea()\n\n return (\n <html.div\n ref={viewportRef}\n id={viewportId}\n data-duro-scroll=\"\"\n tabIndex={rovingOwner ? undefined : 0}\n role={rovingOwner ? undefined : 'region'}\n aria-label={rovingOwner ? undefined : 'Scrollable content'}\n style={[\n styles.viewport,\n maxHeight != null && styles.viewportMaxHeight(resolveLength(maxHeight)),\n style,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n}\n\nfunction Content({children}: ContentProps) {\n const {contentRef} = useScrollArea()\n return (\n <html.div ref={contentRef} style={styles.content}>\n {children}\n </html.div>\n )\n}\n\n// --- Scrollbar ---\n\ntype ScrollbarOrientation = 'vertical' | 'horizontal'\n\ninterface ScrollbarProps {\n orientation?: ScrollbarOrientation\n children: ReactNode\n}\n\nfunction Scrollbar({orientation = 'vertical', children}: ScrollbarProps) {\n const {\n viewportId,\n scrolling,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n } = useScrollArea()\n\n // Hide scrollbar when content fits\n const hasOverflow =\n orientation === 'vertical' ? scrollHeight > clientHeight : scrollWidth > clientWidth\n\n if (!hasOverflow) return null\n\n const isVertical = orientation === 'vertical'\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const valueNow = maxScroll > 0 ? Math.round((scrollOffset / maxScroll) * 100) : 0\n\n return (\n <html.div\n role=\"scrollbar\"\n aria-controls={viewportId}\n aria-orientation={orientation}\n aria-valuenow={valueNow}\n aria-valuemin={0}\n aria-valuemax={100}\n style={[\n styles.scrollbar,\n isVertical ? styles.scrollbarVertical : styles.scrollbarHorizontal,\n scrolling ? styles.scrollbarVisible : styles.scrollbarHidden,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Thumb ---\n\ninterface ThumbProps {\n orientation?: ScrollbarOrientation\n}\n\nfunction Thumb({orientation = 'vertical'}: ThumbProps) {\n const {viewportRef, scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth} =\n useScrollArea()\n const draggingRef = useRef(false)\n const startPosRef = useRef(0)\n const startScrollRef = useRef(0)\n\n const isVertical = orientation === 'vertical'\n\n const thumbSizePercent = isVertical\n ? Math.max((clientHeight / scrollHeight) * 100, 10)\n : Math.max((clientWidth / scrollWidth) * 100, 10)\n\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const trackSize = isVertical ? clientHeight : clientWidth\n const thumbPixelSize = (thumbSizePercent / 100) * trackSize\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const thumbOffset = maxScroll > 0 ? (scrollOffset / maxScroll) * (trackSize - thumbPixelSize) : 0\n\n const thumbStyle = isVertical\n ? styles.thumbVertical(`${thumbSizePercent}%`, `translateY(${thumbOffset}px)`)\n : styles.thumbHorizontal(`${thumbSizePercent}%`, `translateX(${thumbOffset}px)`)\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n draggingRef.current = true\n startPosRef.current = isVertical ? e.clientY : e.clientX\n startScrollRef.current = isVertical\n ? (viewportRef.current?.scrollTop ?? 0)\n : (viewportRef.current?.scrollLeft ?? 0)\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n },\n [isVertical, viewportRef],\n )\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!draggingRef.current) return\n const vp = viewportRef.current\n if (!vp) return\n\n const delta = (isVertical ? e.clientY : e.clientX) - startPosRef.current\n const scrollRatio = maxScroll / (trackSize - thumbPixelSize)\n const scrollDelta = delta * scrollRatio\n\n if (isVertical) {\n vp.scrollTop = startScrollRef.current + scrollDelta\n } else {\n vp.scrollLeft = startScrollRef.current + scrollDelta\n }\n },\n [isVertical, maxScroll, trackSize, thumbPixelSize, viewportRef],\n )\n\n const handlePointerUp = useCallback(() => {\n draggingRef.current = false\n }, [])\n\n return (\n <html.div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={[styles.thumb, thumbStyle]}\n />\n )\n}\n\nexport const ScrollArea = {\n Root,\n Viewport,\n Content,\n Scrollbar,\n Thumb,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n inputWrapper: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.xs,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n inputWrapperFocused: {\n borderColor: colors.accent,\n },\n input: {\n flex: 1,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: 'transparent',\n borderWidth: 0,\n outline: 'none',\n minWidth: 0,\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n backgroundColor: 'transparent',\n borderWidth: 0,\n color: colors.textMuted,\n cursor: 'pointer',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ComboboxContextValue {\n open: boolean\n openPopup: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n inputValue: string\n setInputValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n inputRef: React.RefObject<HTMLInputElement | null>\n rootRef: React.RefObject<HTMLDivElement | null>\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null)\n\nexport function useCombobox() {\n const ctx = useContext(ComboboxContext)\n if (!ctx) throw new Error('Combobox compound components must be used within Combobox.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ComboboxContextValue} from './ComboboxContext'\n\ninterface UseComboboxRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useComboboxRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n inputValue: controlledInputValue,\n onInputChange,\n initialLabels,\n}: UseComboboxRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n // Seed the visible text from the initially-selected value's label, so a\n // defaultValue/value shows its label on mount — and so the reconcile effect\n // below doesn't see \"value set but input empty\" and wipe the selection.\n const [internalInputValue, setInternalInputValue] = useState<string>(() => {\n const initial = controlledValue ?? defaultValue\n return initial ? (initialLabels?.[initial] ?? '') : ''\n })\n const inputValue = controlledInputValue !== undefined ? controlledInputValue : internalInputValue\n const setInputValue = useCallback(\n (v: string) => {\n if (controlledInputValue === undefined) setInternalInputValue(v)\n onInputChange?.(v)\n },\n [controlledInputValue, onInputChange],\n )\n\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n }, [])\n\n const openPopup = useCallback(() => {\n setOpen(true)\n // Highlight the selected item or first visible item\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n }, [value])\n\n const selectValue = useCallback(\n (itemValue: string) => {\n setValue(itemValue)\n // Set input to show the selected label\n const label = labels[itemValue] ?? itemValue\n setInputValue(label)\n close()\n inputRef.current?.focus()\n },\n [setValue, labels, setInputValue, close],\n )\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Get visible items (those matching the filter)\n const getVisibleOrder = useCallback(() => {\n const query = inputValue.toLowerCase()\n if (!query) return orderRef.current\n return orderRef.current.filter((id) => {\n const item = itemsRef.current.get(id)\n if (!item) return false\n const label = labels[item.value] ?? item.value\n return label.toLowerCase().includes(query)\n })\n }, [inputValue, labels])\n\n // Keyboard navigation\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const visibleOrder = getVisibleOrder()\n if (visibleOrder.length === 0 && e.key !== 'Escape' && e.key !== 'Tab') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (!open) {\n setOpen(true)\n return\n }\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : -1\n return visibleOrder[(idx + 1) % visibleOrder.length] ?? null\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : 0\n return visibleOrder[(idx - 1 + visibleOrder.length) % visibleOrder.length] ?? null\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(visibleOrder[0] ?? null)\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(visibleOrder[visibleOrder.length - 1] ?? null)\n break\n }\n case 'Enter': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = itemsRef.current.get(prev)\n if (item) selectValue(item.value)\n } else if (!inputValue.trim()) {\n // Empty input + Enter = clear selection (reset to \"All\")\n selectValue('')\n }\n return prev\n })\n break\n }\n case 'Escape': {\n e.preventDefault()\n close()\n inputRef.current?.focus()\n break\n }\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, selectValue, getVisibleOrder])\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (!highlightedId) return\n const item = itemsRef.current.get(highlightedId)\n item?.element.scrollIntoView({block: 'nearest'})\n }, [highlightedId])\n\n // Reconcile input text with the committed value once the popup closes.\n // Three cases when transitioning from open → closed:\n // - inputValue is empty: user cleared the field, treat that as\n // \"remove the selection\" so the consumer's onValueChange fires\n // with null and downstream UI (e.g. dependent fields) can reset.\n // - inputValue doesn't match the selected label: user typed something\n // but didn't pick anything; restore the label so the visible text\n // and the committed value stay consistent.\n // - inputValue equals the selected label: nothing to do.\n useEffect(() => {\n if (open) return\n // Treat an empty value (null OR '') as \"no selection\" — nothing to\n // reconcile. Without this, a controlled value=\"\" (e.g. a table column\n // filter) fires setValue(null) every render → inline onValueChange →\n // parent state change → re-render → infinite \"Maximum update depth\" loop.\n if (!value) return\n if (inputValue === '') {\n setValue(null)\n return\n }\n if (labels[value] && inputValue !== labels[value]) {\n setInputValue(labels[value])\n }\n }, [open, value, labels, inputValue, setInputValue, setValue])\n\n const ctx: ComboboxContextValue = useMemo(\n () => ({\n open,\n openPopup,\n close,\n value,\n setValue: selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n inputRef,\n rootRef,\n }),\n [\n open,\n openPopup,\n close,\n value,\n selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n popup: {\n // Fixed, with top/left (and width) applied inline from the anchor's rect,\n // so the list escapes any ancestor with overflow: hidden or a transform.\n position: 'fixed',\n top: 0,\n left: 0,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n overflowY: 'auto',\n // Above Dialog/Drawer (1000/1001): they portal into the same mount.\n zIndex: layers.popup,\n // The portal mount is pointer-events: none; the list takes them back.\n pointerEvents: 'auto',\n },\n // A list that does not take the anchor's width (an editor typeahead).\n ownWidth: {\n minWidth: sizes.popupMinW,\n },\n maxHeightListMaxH: {\n maxHeight: sizes.listMaxH,\n },\n maxHeightListMaxHSm: {\n maxHeight: sizes.listMaxHSm,\n },\n position: (top: number, left: number) => ({\n top,\n left,\n }),\n width: (width: number) => ({\n width,\n }),\n option: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n optionSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n // The fill is the highlight; the transparent outline is what forced-colors\n // mode paints, where fills are dropped.\n optionHighlighted: {\n backgroundColor: colors.bgCardHover,\n outlineStyle: 'solid',\n outlineWidth: borders.focusRing,\n outlineColor: 'transparent',\n outlineOffset: `calc(-1 * ${borders.focusRing})`,\n },\n optionDisabled: {\n color: colors.textMuted,\n cursor: 'default',\n },\n empty: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.textMuted,\n },\n})\n","import {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {SPACING_PX} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {computePopoverPosition} from '../Popover/position'\nimport {usePopoverLayer} from '../Popover/PopoverLayerContext'\n\n/**\n * A headless-state popup list of options for an input that keeps focus: a\n * Combobox's text field, or a rich-text editor's typeahead (mentions, slash\n * commands). The anchor element owns focus and the keyboard; it moves the\n * highlight by setting `highlightedId`, and wires itself to the list with\n * `getAnchorProps()` (aria-controls / aria-expanded / aria-activedescendant).\n * A press on an option never takes focus from the anchor.\n */\n\nexport type ListboxMaxHeight = 'listMaxH' | 'listMaxHSm'\n\nconst maxHeightMap = {\n listMaxH: styles.maxHeightListMaxH,\n listMaxHSm: styles.maxHeightListMaxHSm,\n} as const\n\n/** Default option id: the listbox id plus the value, made safe for an id. */\nexport function defaultOptionId(listboxId: string, value: string): string {\n return `${listboxId}-option-${value.replace(/[^\\w-]/g, (ch) => `_${ch.charCodeAt(0).toString(16)}`)}`\n}\n\nexport interface ListboxAnchorProps {\n role?: 'combobox'\n 'aria-controls': string | undefined\n 'aria-expanded': boolean\n 'aria-activedescendant': string | undefined\n 'aria-autocomplete': 'list'\n 'aria-haspopup': 'listbox'\n}\n\n/**\n * ARIA for the element that keeps focus and drives the list. Spread it on an\n * input, or set each attribute on a contenteditable root.\n */\nexport function getAnchorProps({\n id,\n open,\n highlightedId,\n}: {\n id: string\n open: boolean\n highlightedId: string | null | undefined\n}): ListboxAnchorProps {\n return {\n 'aria-controls': open ? id : undefined,\n 'aria-expanded': open,\n 'aria-activedescendant': open && highlightedId ? highlightedId : undefined,\n 'aria-autocomplete': 'list',\n 'aria-haspopup': 'listbox',\n }\n}\n\ninterface ListboxContextValue {\n id: string\n highlightedId: string | null\n onHighlight?: (id: string | null) => void\n onSelect?: (value: string) => void\n getOptionId: (value: string) => string\n}\n\nconst ListboxContext = createContext<ListboxContextValue | null>(null)\n\nfunction useListbox(part: string) {\n const ctx = useContext(ListboxContext)\n if (!ctx) throw new Error(`Listbox.${part} must be used within Listbox.Root`)\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n /** DOM id of the list; pass the same to getAnchorProps. */\n id: string\n open: boolean\n /** The rect the list is placed against: the input, or the editor's caret. */\n anchor: () => DOMRect | null | undefined\n /** Give the list the anchor's width (a Combobox under its input). */\n matchAnchorWidth?: boolean\n /** Id of the highlighted option, controlled by the anchor's keyboard handling. */\n highlightedId: string | null\n /** Pointer hover asks to move the highlight. */\n onHighlight?: (id: string | null) => void\n /** A press on an option. */\n onSelect?: (value: string) => void\n /** Option value → DOM id. Default: defaultOptionId(id, value). */\n getOptionId?: (value: string) => string\n /** Accessible name of the list. */\n 'aria-label'?: string\n /** Size-token key capping the list's height; longer lists scroll. Default: listMaxH. */\n maxHeight?: ListboxMaxHeight\n children: ReactNode\n}\n\nfunction Root({\n id,\n open,\n anchor,\n matchAnchorWidth = false,\n highlightedId,\n onHighlight,\n onSelect,\n getOptionId,\n 'aria-label': ariaLabel,\n maxHeight = 'listMaxH',\n children,\n}: RootProps) {\n const mount = usePortalMount()\n const listRef = useRef<HTMLDivElement>(null)\n const [place, setPlace] = useState<{top: number; left: number; width: number} | null>(null)\n const anchorRef = useRef(anchor)\n anchorRef.current = anchor\n\n useLayoutEffect(() => {\n if (!open) {\n setPlace(null)\n return\n }\n const update = () => {\n const rect = anchorRef.current()\n if (!rect) return\n const list = listRef.current\n const next = computePopoverPosition({\n anchor: {top: rect.top, left: rect.left, width: rect.width, height: rect.height},\n popup: {\n width: matchAnchorWidth ? rect.width : (list?.offsetWidth ?? 0),\n height: list?.offsetHeight ?? 0,\n },\n viewport: {width: window.innerWidth, height: window.innerHeight},\n side: 'bottom',\n align: 'start',\n offset: SPACING_PX.xs,\n })\n setPlace((prev) =>\n prev && prev.top === next.top && prev.left === next.left && prev.width === rect.width\n ? prev\n : {top: next.top, left: next.left, width: rect.width},\n )\n }\n update()\n // A second pass once the list has its size, so the flip sees its height.\n const frame = requestAnimationFrame(update)\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n cancelAnimationFrame(frame)\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, matchAnchorWidth])\n\n // A press inside the list must not move focus off the anchor.\n useEffect(() => {\n const list = listRef.current\n if (!list || !open) return\n const keep = (e: MouseEvent) => e.preventDefault()\n list.addEventListener('mousedown', keep)\n return () => list.removeEventListener('mousedown', keep)\n }, [open, place])\n\n // Keep the highlighted option in view.\n useEffect(() => {\n if (!open || !highlightedId) return\n const list = listRef.current\n const option = list?.querySelector<HTMLElement>(`[id=\"${CSS.escape(highlightedId)}\"]`)\n option?.scrollIntoView?.({block: 'nearest'})\n }, [open, highlightedId])\n\n usePopoverLayer(listRef, {active: open && place !== null})\n\n const optionId = useCallback(\n (value: string) => (getOptionId ? getOptionId(value) : defaultOptionId(id, value)),\n [getOptionId, id],\n )\n\n if (!open || !place || typeof document === 'undefined') return null\n\n const node = (\n <ListboxContext.Provider\n value={{id, highlightedId, onHighlight, onSelect, getOptionId: optionId}}\n >\n <html.div\n ref={listRef}\n id={id}\n role=\"listbox\"\n aria-label={ariaLabel}\n style={[\n styles.popup,\n maxHeightMap[maxHeight],\n styles.position(place.top, place.left),\n matchAnchorWidth ? styles.width(place.width) : styles.ownWidth,\n ]}\n >\n {children}\n </html.div>\n </ListboxContext.Provider>\n )\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Option ---\n\ninterface OptionProps {\n value: string\n /** DOM id. Default: Root's getOptionId(value). */\n id?: string\n /** The committed choice (aria-selected). */\n selected?: boolean\n disabled?: boolean\n children: ReactNode\n ref?: Ref<HTMLDivElement>\n}\n\nfunction Option({\n value,\n id: idProp,\n selected = false,\n disabled = false,\n children,\n ref,\n}: OptionProps) {\n const {highlightedId, onHighlight, onSelect, getOptionId} = useListbox('Option')\n const id = idProp ?? getOptionId(value)\n const highlighted = highlightedId === id\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : () => onSelect?.(value)}\n onPointerEnter={disabled ? undefined : () => onHighlight?.(id)}\n style={[\n styles.option,\n selected && styles.optionSelected,\n highlighted && styles.optionHighlighted,\n disabled && styles.optionDisabled,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Empty ---\n\n/** Shown in place of options when nothing matches. */\nfunction Empty({children}: {children: ReactNode}) {\n useListbox('Empty')\n return <html.div style={styles.empty}>{children}</html.div>\n}\n\nexport const Listbox = {\n Root,\n Option,\n Empty,\n getAnchorProps,\n}\n","import {type ReactNode, useCallback, useRef, useId, useEffect, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ComboboxContext, useCombobox} from './ComboboxContext'\nimport {useComboboxRoot} from './useComboboxRoot'\nimport {Listbox, getAnchorProps} from '../Listbox/Listbox'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({\n name,\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n children,\n}: RootProps) {\n const {ctx, rootRef} = useComboboxRoot({\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n })\n\n return (\n <ComboboxContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </ComboboxContext.Provider>\n )\n}\n\n// --- Input ---\nfunction Input({placeholder, children}: {placeholder?: string; children?: ReactNode}) {\n const {open, openPopup, close, inputValue, setInputValue, listboxId, highlightedId, inputRef} =\n useCombobox()\n const localRef = useRef<HTMLInputElement>(null)\n const [focused, setFocused] = useState(false)\n const anchor = getAnchorProps({id: listboxId, open, highlightedId})\n\n useEffect(() => {\n inputRef.current = localRef.current\n })\n\n return (\n <html.div style={[styles.inputWrapper, focused && styles.inputWrapperFocused]}>\n <html.input\n ref={localRef}\n type=\"text\"\n role={'combobox' as 'listbox'}\n value={inputValue}\n placeholder={placeholder}\n aria-expanded={anchor['aria-expanded']}\n aria-haspopup=\"listbox\"\n aria-controls={anchor['aria-controls']}\n aria-activedescendant={anchor['aria-activedescendant']}\n aria-autocomplete={'list' as 'none'}\n autoComplete=\"off\"\n style={styles.input}\n onFocus={() => {\n setFocused(true)\n openPopup()\n }}\n onBlur={() => {\n setFocused(false)\n // Delay close to allow item click to register\n setTimeout(close, 150)\n }}\n onChange={(e: any) => {\n setInputValue(e.target.value)\n if (!open) openPopup()\n }}\n />\n {children}\n </html.div>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({children}: {children?: ReactNode}) {\n const {open, openPopup, close, inputRef} = useCombobox()\n\n return (\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-label={open ? 'Close' : 'Open'}\n onClick={() => {\n if (open) {\n close()\n } else {\n openPopup()\n }\n inputRef.current?.focus()\n }}\n style={styles.trigger}\n >\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.button>\n )\n}\n\n// --- Popup ---\n// A Listbox placed under the input, as wide as the field: rendered into the\n// ThemeProvider portal mount so it escapes ancestor `overflow: hidden` /\n// `transform` containing blocks (notably Dialog and Drawer).\nfunction Popup({children}: {children: ReactNode}) {\n const {open, listboxId, rootRef, highlightedId, setHighlightedId, setValue} = useCombobox()\n const anchor = useCallback(() => rootRef.current?.getBoundingClientRect(), [rootRef])\n\n return (\n <Listbox.Root\n id={listboxId}\n open={open}\n anchor={anchor}\n matchAnchorWidth\n highlightedId={highlightedId}\n onHighlight={setHighlightedId}\n onSelect={setValue}\n maxHeight=\"listMaxHSm\"\n >\n {children}\n </Listbox.Root>\n )\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {value: selectedValue, inputValue, labels, registerLabel, registerItem} = useCombobox()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n\n // Filter: check if this item matches the input\n const label = labels[itemValue] ?? itemValue\n const query = inputValue.toLowerCase()\n const isVisible = !query || label.toLowerCase().includes(query)\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n if (!isVisible) return null\n\n return (\n <Listbox.Option ref={ref} id={id} value={itemValue} selected={isSelected}>\n {children}\n </Listbox.Option>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\n// --- Empty ---\nfunction Empty({children}: {children: ReactNode}) {\n const {open, inputValue, labels} = useCombobox()\n\n if (!open) return null\n\n // Check if any items are visible\n const query = inputValue.toLowerCase()\n const hasVisibleItems = query\n ? Object.values(labels).some((label) => label.toLowerCase().includes(query))\n : true\n\n if (hasVisibleItems) return null\n\n return <Listbox.Empty>{children}</Listbox.Empty>\n}\n\nexport const Combobox = {\n Root,\n Input,\n Trigger,\n Popup,\n Item,\n ItemText,\n Empty,\n}\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\ninterface VisuallyHiddenProps {\n children: ReactNode\n /** For aria-describedby / aria-labelledby to point at. */\n id?: string\n}\n\n/**\n * Text for assistive tech only: in the accessibility tree, not on screen. Use\n * it to give an icon-only control or a visual-only cue words — a status a\n * colour shows, \"(opens in a new tab)\" after a link.\n */\nexport function VisuallyHidden({children, id}: VisuallyHiddenProps) {\n return (\n <html.span id={id} style={[visuallyHidden.base, visuallyHidden.text]}>\n {children}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n trigger: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n // size=\"small\": Toggle sizeSmall's values, as longhands so they win over the\n // trigger's own longhands. Every small control is at least controlSm tall,\n // whatever it holds, and the touch target under a coarse pointer.\n triggerSmall: {\n gap: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n value: {\n color: colors.text,\n },\n placeholder: {\n color: colors.textMuted,\n },\n icon: {\n display: 'flex',\n alignItems: 'center',\n color: colors.textMuted,\n },\n backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n // Above Dialog/Drawer (1000/1001): they portal into the same mount, so a\n // popup opened from inside a dialog must out-rank the dialog itself.\n zIndex: layers.popupBackdrop,\n // The portal mount is pointer-events: none, so re-enable here to catch\n // outside clicks that close the popup.\n pointerEvents: 'auto',\n },\n popup: {\n // Position is `fixed` and top/left/minWidth are applied inline by Popup\n // (computed from the trigger's bounding rect) so the dropdown escapes any\n // ancestor with `overflow: hidden` / `transform` (notably inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n minWidth: sizes.labelMinW,\n maxHeight: sizes.listMaxH,\n overflowY: 'auto',\n zIndex: layers.popup,\n // Re-enable pointer events: the portal mount is pointer-events: none.\n pointerEvents: 'auto',\n },\n popupPosition: (top: number, left: number, minWidth: number) => ({\n top,\n left,\n minWidth,\n }),\n item: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n borderRadius: radii.sm,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n itemSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n itemHighlighted: {\n backgroundColor: colors.bgCardHover,\n },\n hidden: {\n display: 'none',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SelectContextValue {\n open: boolean\n toggle: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n triggerRef: React.RefObject<HTMLButtonElement | null>\n}\n\nexport const SelectContext = createContext<SelectContextValue | null>(null)\n\nexport function useSelect() {\n const ctx = useContext(SelectContext)\n if (!ctx) throw new Error('Select compound components must be used within Select.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {SelectContextValue} from './SelectContext'\n\ninterface UseSelectRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useSelectRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n initialLabels,\n}: UseSelectRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n triggerRef.current?.focus()\n }, [])\n\n const toggle = useCallback(() => {\n setOpen((prev) => {\n if (!prev) {\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n } else {\n setHighlightedId(null)\n }\n return !prev\n })\n }, [value])\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Closed: ArrowDown/ArrowUp on the trigger open the listbox (the APG\n // select-only combobox), on the selected option or the first. In a Toolbar\n // this is why a closed Select keeps those keys; Left/Right still move on.\n useEffect(() => {\n const root = rootRef.current\n if (!root || open) return\n function handleKeyDown(e: KeyboardEvent) {\n if (e.target !== triggerRef.current) return\n if (e.key !== 'ArrowDown' && e.key !== 'ArrowUp') return\n if (e.altKey || e.ctrlKey || e.metaKey) return\n e.preventDefault()\n toggle()\n }\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, toggle])\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const items = itemsRef.current\n if (e.key === 'Escape') {\n e.preventDefault()\n close()\n return\n }\n if (order.length === 0 && e.key !== 'Tab') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : -1\n return order[(idx + 1) % order.length]\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : 0\n return order[(idx - 1 + order.length) % order.length]\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(order[0])\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(order[order.length - 1])\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = items.get(prev)\n if (item) {\n setValue(item.value)\n close()\n }\n }\n return prev\n })\n break\n }\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, setValue])\n\n const ctx: SelectContextValue = useMemo(\n () => ({\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n triggerRef,\n }),\n [\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {SelectContext, useSelect} from './SelectContext'\nimport {useSelectRoot} from './useSelectRoot'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {usePopoverLayer} from '../Popover/PopoverLayerContext'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({name, defaultValue, value, onValueChange, initialLabels, children}: RootProps) {\n const {ctx, rootRef} = useSelectRoot({defaultValue, value, onValueChange, initialLabels})\n\n return (\n <SelectContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </SelectContext.Provider>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({\n children,\n 'aria-label': ariaLabel,\n size = 'default',\n}: {\n children: ReactNode\n 'aria-label'?: string\n /** `small` matches a small Toggle or Button beside it. Default: `default`. */\n size?: ControlSize\n}) {\n const {open, toggle, listboxId, highlightedId, triggerRef} = useSelect()\n const localRef = useRef<HTMLButtonElement>(null)\n const grouped = useGroupedControl<HTMLButtonElement>()\n // Inside a <Field.Root>, adopt its controlId so <Field.Label for={controlId}>\n // labels the trigger (a labelable <button>) — no manual aria-label needed; and\n // surface the field's description/error + invalid state, mirroring <Input>.\n const fieldCtx = useFieldContext()\n const describedBy = fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n\n // Sync local ref to context triggerRef\n useEffect(() => {\n triggerRef.current = localRef.current\n })\n\n return (\n <html.button\n ref={mergeRefs(localRef, grouped.ref)}\n tabIndex={grouped.tabIndex}\n onFocus={grouped.onFocus}\n id={fieldCtx?.controlId}\n type=\"button\"\n role={'combobox' as 'listbox'}\n onClick={toggle}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\n aria-describedby={describedBy || undefined}\n aria-invalid={fieldCtx?.invalid || undefined}\n style={[styles.trigger, size === 'small' && styles.triggerSmall, grouped.style]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Value ---\nfunction Value({placeholder}: {placeholder?: string}) {\n const {value, labels} = useSelect()\n const display = value ? (labels[value] ?? value) : null\n\n return (\n <html.span style={display ? styles.value : styles.placeholder}>\n {display ?? placeholder}\n </html.span>\n )\n}\n\n// --- Icon ---\nfunction Icon({children}: {children?: ReactNode}) {\n return (\n <html.span style={styles.icon}>\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.span>\n )\n}\n\n// --- Popup ---\n// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates (measured off the trigger) so it escapes ancestor\n// `overflow: hidden` / `transform` containing blocks (notably Dialog/Drawer).\n// The listbox stays mounted while closed (display: none) so Items can register\n// their labels from DOM text before the popup is ever opened.\nfunction Popup({children}: {children: ReactNode}) {\n const {open, close, listboxId, triggerRef} = useSelect()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the trigger when the popup opens, and re-measure on scroll/resize so\n // the dropdown follows it. Capture-phase scroll catches scroll on any ancestor\n // (e.g. a Dialog body).\n useLayoutEffect(() => {\n if (!open) return\n const update = () => {\n const el = triggerRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // `xs` token = 4px gap below the trigger.\n setCoords({top: rect.bottom + 4, left: rect.left, width: rect.width})\n }\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, triggerRef])\n\n const listboxRef = useRef<HTMLDivElement>(null)\n const backdropRef = useRef<HTMLDivElement>(null)\n usePopoverLayer(listboxRef, {active: open})\n usePopoverLayer(backdropRef, {active: open})\n\n const node = (\n <>\n {open && <html.div ref={backdropRef} style={styles.backdrop} onClick={close} />}\n <html.div\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-hidden={!open}\n style={[\n styles.popup,\n (!open || !coords) && styles.hidden,\n coords && styles.popupPosition(coords.top, coords.left, coords.width),\n ]}\n >\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </html.div>\n </>\n )\n\n // SSR / pre-mount fallback: render inline (hidden under overflow parents but\n // won't crash). Once the mount exists, portal into it.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {\n value: selectedValue,\n setValue,\n close,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useSelect()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\n\n // Register label from DOM text content (works with both string and JSX children)\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n const handleClick = () => {\n setValue(itemValue)\n close()\n }\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={handleClick}\n onPointerEnter={() => setHighlightedId(id)}\n style={[\n styles.item,\n isSelected && styles.itemSelected,\n isHighlighted && styles.itemHighlighted,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\nexport const Select = {\n Root,\n Trigger,\n Value,\n Icon,\n Popup,\n Item,\n ItemText,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n },\n group: {\n display: 'flex',\n flexDirection: 'column',\n },\n groupTrigger: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n cursor: 'pointer',\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n groupTriggerActive: {\n color: colors.text,\n },\n chevron: {\n display: 'inline-flex',\n alignItems: 'center',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(90deg)',\n },\n // The `role=\"group\"` wrapper around a Section's / an expanded Group's items.\n // Purely structural: it exists to carry the accessible name, so it must not\n // change how the items stack.\n items: {\n display: 'flex',\n flexDirection: 'column',\n },\n // Static (non-collapsible) section — see SideNav.Section.\n section: {\n display: 'flex',\n flexDirection: 'column',\n },\n sectionLabel: {\n paddingTop: spacing.md,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.06em',\n color: colors.textMuted,\n },\n item: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: microSpacing.px6,\n paddingBottom: microSpacing.px6,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightNormal,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 0,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textAlign: 'left' as const,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n },\n itemActive: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n backgroundColor: colors.bgCardHover,\n },\n // Active indicator — a bar at the rail's left edge that grows in on select.\n marker: {\n position: 'absolute',\n left: 0,\n top: '50%',\n width: sizes.navMarkerW,\n height: 0,\n transform: 'translateY(-50%)',\n borderTopRightRadius: radii.full,\n borderBottomRightRadius: radii.full,\n backgroundColor: colors.accent,\n transitionProperty: 'height',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n markerActive: {\n height: sizes.navMarkerH,\n },\n itemIcon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: sizes.indicator,\n height: sizes.indicator,\n },\n itemLabel: {\n flexGrow: 1,\n minWidth: 0,\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SideNavContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n expandedGroups: Set<string>\n toggleGroup: (group: string) => void\n /** Idempotent expand (add-only) — used by auto-expand/defaultExpanded so a\n * group that qualifies twice (e.g. defaultExpanded AND holding the active\n * item) doesn't get toggled back closed. `toggleGroup` stays for user clicks. */\n expandGroup: (group: string) => void\n registerItem: (value: string) => () => void\n orderRef: React.RefObject<string[]>\n}\n\nexport const SideNavContext = createContext<SideNavContextValue | null>(null)\n\nexport function useSideNav() {\n const ctx = useContext(SideNavContext)\n if (!ctx) throw new Error('SideNav compound components must be used within SideNav.Root')\n return ctx\n}\n","import {type ReactNode, useState, useCallback, useRef, useEffect, useId} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {SideNavContext, useSideNav} from './SideNavContext'\n\n/**\n * SideNav has two ways to chunk a rail, and they are NOT interchangeable.\n *\n * `Section` — a labelled block that is always open. This is the DEFAULT for\n * primary navigation. A nav's job is to advertise where you can go; an\n * always-open list keeps the whole information architecture scannable and puts\n * every destination one click away. The uppercase label does the chunking work\n * on its own — you get the grouping benefit without hiding anything.\n *\n * `Group` — the same block behind a chevron (a disclosure). Collapsing costs\n * every destination inside it an extra click and hides it from scanning, so it\n * has to buy something back. It does when the region is:\n * • rare or advanced (\"Advanced\", \"Danger zone\", \"Legacy\") — disclose the\n * seldom-used, never the everyday;\n * • unbounded / data-driven (one entry per namespace, project, team) — you\n * cannot author-flatten a list whose length you don't control;\n * • one of many in a rail long enough (>~30 leaves) that a flat list stops\n * reading as an overview.\n * The healthy shape is a mix: flat Sections for the journey, one collapsed\n * Group at the bottom.\n *\n * Neither is a tree. Arbitrary-depth *data* browsing (a file tree, a\n * namespace → resource drill-down) needs `role=\"tree\"` with roving tabindex,\n * typeahead and aria-level — a different component, not a deeper SideNav.\n */\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /**\n * Names the navigation landmark (\"Main\", \"Settings\"). Give one whenever\n * the page has another nav (a breadcrumb, a pager): screen readers list\n * landmarks by name.\n */\n 'aria-label'?: string\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nfunction Root({\n children,\n 'aria-label': ariaLabel,\n value: controlledValue,\n defaultValue,\n onValueChange,\n}: RootProps) {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set())\n const orderRef = useRef<string[]>([])\n\n const toggleGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev)\n if (next.has(group)) {\n next.delete(group)\n } else {\n next.add(group)\n }\n return next\n })\n }, [])\n\n // Idempotent expand — never closes an already-open group. The mount effects\n // in Group (defaultExpanded + auto-expand-active) use this instead of\n // toggleGroup so a group that qualifies on both counts stays open rather than\n // being toggled open-then-closed.\n const expandGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n if (prev.has(group)) return prev\n const next = new Set(prev)\n next.add(group)\n return next\n })\n }, [])\n\n const registerItem = useCallback((value: string) => {\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return (\n <SideNavContext.Provider\n value={{\n activeValue,\n onSelect,\n expandedGroups,\n toggleGroup,\n expandGroup,\n registerItem,\n orderRef,\n }}\n >\n <html.nav role=\"navigation\" aria-label={ariaLabel} style={styles.root}>\n {children}\n </html.nav>\n </SideNavContext.Provider>\n )\n}\n\n// --- Group ---\n\ninterface GroupProps {\n children: ReactNode\n label: string\n groupKey?: string\n defaultExpanded?: boolean\n}\n\nfunction Group({children, label, groupKey, defaultExpanded}: GroupProps) {\n const key = groupKey ?? label\n const {expandedGroups, toggleGroup, expandGroup, activeValue} = useSideNav()\n const isExpanded = expandedGroups.has(key)\n const groupRef = useRef<HTMLDivElement>(null)\n const triggerId = useId()\n const panelId = useId()\n\n // Auto-expand if this group contains the active item. Uses expandGroup (not\n // toggleGroup) so it never races the defaultExpanded effect into a closed\n // state when the active item lives in a defaultExpanded group.\n useEffect(() => {\n if (!activeValue || expandedGroups.has(key)) return\n const el = groupRef.current\n if (!el) return\n const activeBtn = el.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n if (activeBtn) {\n expandGroup(key)\n }\n }, [activeValue, key, expandedGroups, expandGroup])\n\n // Expand on first render if defaultExpanded (idempotent add, not a toggle).\n useEffect(() => {\n if (defaultExpanded) {\n expandGroup(key)\n }\n // Only run on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const hasActiveChild = (() => {\n if (!activeValue || !groupRef.current) return false\n return !!groupRef.current.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n })()\n\n return (\n <html.div ref={groupRef} style={styles.group}>\n <html.button\n type=\"button\"\n id={triggerId}\n onClick={() => toggleGroup(key)}\n style={[styles.groupTrigger, hasActiveChild && styles.groupTriggerActive]}\n aria-expanded={isExpanded}\n aria-controls={isExpanded ? panelId : undefined}\n >\n <html.span style={[styles.chevron, isExpanded && styles.chevronOpen]}>\n <svg\n width={10}\n height={10}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </html.span>\n {label}\n </html.button>\n {isExpanded ? (\n <html.div id={panelId} role=\"group\" aria-labelledby={triggerId} style={styles.items}>\n {children}\n </html.div>\n ) : null}\n </html.div>\n )\n}\n\n// --- Section ---\n\ninterface SectionProps {\n children: ReactNode\n label: string\n}\n\n/**\n * A static, non-collapsible grouping: an always-visible uppercase header with\n * its items below. Unlike `Group` there is no chevron, toggle, or hidden state.\n *\n * Reach for this first — see the note at the top of this file for when a\n * collapsible `Group` is the better call. The label is exposed as the group's\n * accessible name, so a screen reader announces \"Networking, group\" on the way\n * into its items instead of dropping the user into an undifferentiated run of\n * thirty buttons.\n */\nfunction Section({children, label}: SectionProps) {\n const labelId = useId()\n return (\n <html.div style={styles.section}>\n <html.div id={labelId} style={styles.sectionLabel}>\n {label}\n </html.div>\n <html.div role=\"group\" aria-labelledby={labelId} style={styles.items}>\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n children: ReactNode\n /** Optional leading glyph (e.g. a design-system `<Icon />`). Inherits the\n * item's text color, so it turns accent when the item is active. */\n icon?: ReactNode\n}\n\nfunction Item({value, children, icon}: ItemProps) {\n const {activeValue, onSelect, registerItem} = useSideNav()\n const isActive = activeValue === value\n\n useEffect(() => {\n return registerItem(value)\n }, [value, registerItem])\n\n return (\n <html.button\n type=\"button\"\n data-nav-value={value}\n onClick={() => onSelect(value)}\n style={[styles.item, isActive && styles.itemActive]}\n aria-current={isActive ? 'page' : undefined}\n >\n <html.span aria-hidden style={[styles.marker, isActive && styles.markerActive]} />\n {icon ? (\n <html.span aria-hidden style={styles.itemIcon}>\n {icon}\n </html.span>\n ) : null}\n <html.span style={styles.itemLabel}>{children}</html.span>\n </html.button>\n )\n}\n\nexport const SideNav = {\n Root,\n Group,\n Section,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nconst spin = css.keyframes({\n '0%': {transform: 'rotate(0deg)'},\n '100%': {transform: 'rotate(360deg)'},\n})\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n spinner: {\n borderRadius: '50%',\n borderStyle: 'solid',\n borderColor: colors.border,\n borderTopColor: colors.accent,\n animationName: spin,\n animationDuration: '0.6s',\n animationTimingFunction: easing.linear,\n animationIterationCount: 'infinite',\n },\n sm: {\n width: sizes.spinnerSm,\n height: sizes.spinnerSm,\n borderWidth: borders.strong,\n },\n md: {\n width: sizes.spinnerMd,\n height: sizes.spinnerMd,\n borderWidth: borders.strong,\n },\n lg: {\n width: sizes.spinnerLg,\n height: sizes.spinnerLg,\n borderWidth: borders.accent,\n },\n // Layered on visuallyHidden.base.\n srOnly: {\n clip: 'rect(0, 0, 0, 0)',\n },\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\ninterface SpinnerProps {\n size?: SpinnerSize\n label?: string\n}\n\nconst sizeMap = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const\n\nexport function Spinner({size = 'md', label = 'Loading'}: SpinnerProps) {\n return (\n <html.div role=\"status\" style={styles.root}>\n <html.div style={[styles.spinner, sizeMap[size]]} aria-hidden />\n <html.span style={[visuallyHidden.base, styles.srOnly]}>{label}</html.span>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nconst enter = css.keyframes({\n from: {opacity: 0, transform: 'translateY(10px)'},\n to: {opacity: 1, transform: 'translateY(0)'},\n})\n\nexport const styles = css.create({\n // Fixed, viewport-anchored stack. Portaled into the ThemeProvider mount so it\n // layers above dialogs; the container itself is click-through, each toast\n // re-enables pointer events.\n region: {\n position: 'fixed',\n bottom: spacing.lg,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n pointerEvents: 'none',\n // Above modals and popups: a toast fired while a Dialog is open shows.\n zIndex: layers.toast,\n },\n toast: {\n pointerEvents: 'auto',\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: sizes.toastMaxW,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderLeftWidth: borders.accent,\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n color: colors.text,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n animationName: {\n default: enter,\n '@media (prefers-reduced-motion: reduce)': 'none',\n },\n animationDuration: duration.brisk,\n animationTimingFunction: easing.easeOut,\n },\n success: {borderLeftColor: colors.successBorder},\n error: {borderLeftColor: colors.errorBorder},\n info: {borderLeftColor: colors.infoBorder},\n warning: {borderLeftColor: colors.warningBorder},\n\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: microSpacing.px1,\n },\n iconSuccess: {color: colors.successText},\n iconError: {color: colors.errorText},\n iconInfo: {color: colors.infoText},\n iconWarning: {color: colors.warningText},\n\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: microSpacing.px2,\n },\n message: {\n color: colors.text,\n },\n action: {\n alignSelf: 'flex-start',\n marginTop: microSpacing.px2,\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: colors.accent,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n textDecorationLine: 'underline',\n cursor: 'pointer',\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n borderRadius: radii.sm,\n },\n closeBtn: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: microSpacing.px2,\n marginTop: -1,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: {default: colors.textMuted, ':hover': colors.text},\n cursor: 'pointer',\n borderRadius: radii.sm,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffsetSm,\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {Icon, type IconName} from '../Icon'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\nexport type ToastVariant = 'success' | 'error' | 'info' | 'warning'\n\nexport interface ToastAction {\n label: string\n onClick: () => void\n}\n\nexport interface ToastOptions {\n /** Visual + semantic tone. Errors announce assertively; errors and\n * warnings linger longer. */\n variant?: ToastVariant\n message: ReactNode\n /** Optional single action, e.g. Undo. Runs, then dismisses the toast. */\n action?: ToastAction\n /** Auto-dismiss delay in ms. `0` (or negative) keeps it until dismissed.\n * The countdown pauses while the toast is hovered or holds focus. */\n duration?: number\n}\n\nexport interface ToastContextValue {\n /** Show a toast; returns its id so it can be dismissed programmatically. */\n toast: (opts: ToastOptions) => string\n dismiss: (id: string) => void\n}\n\ninterface ToastEntry {\n id: string\n variant: ToastVariant\n message: ReactNode\n action?: ToastAction\n duration: number\n}\n\ninterface ToastStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ToastEntry[]\n add: (opts: ToastOptions) => string\n remove: (id: string) => void\n}\n\nconst DEFAULT_DURATION: Record<ToastVariant, number> = {\n success: 5000,\n info: 5000,\n error: 8000,\n warning: 8000,\n}\n\nfunction createToastStore(): ToastStore {\n let entries: ToastEntry[] = []\n let seq = 0\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n add: (opts) => {\n const variant = opts.variant ?? 'info'\n const id = `toast-${++seq}`\n const duration = opts.duration ?? DEFAULT_DURATION[variant]\n entries = [...entries, {id, variant, message: opts.message, action: opts.action, duration}]\n notify()\n return id\n },\n remove: (id) => {\n const next = entries.filter((e) => e.id !== id)\n if (next.length !== entries.length) {\n entries = next\n notify()\n }\n },\n }\n}\n\nconst variantIcon: Record<ToastVariant, IconName> = {\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n}\nconst variantIconStyle = {\n success: styles.iconSuccess,\n error: styles.iconError,\n info: styles.iconInfo,\n warning: styles.iconWarning,\n} as const\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within a <ToastProvider>')\n return ctx\n}\n\nfunction ToastItem({\n entry,\n onDismiss,\n dismissLabel,\n}: {\n entry: ToastEntry\n onDismiss: (id: string) => void\n dismissLabel: string\n}) {\n const {id, variant, message, action, duration} = entry\n const [hovered, setHovered] = useState(false)\n const [focused, setFocused] = useState(false)\n const paused = hovered || focused\n // What is left of the countdown; a pause keeps it, a resume restarts the\n // timer with what was left (WCAG 2.2.1: the reader controls the timing).\n const remaining = useRef(duration)\n\n useEffect(() => {\n if (duration <= 0 || paused) return\n const started = Date.now()\n const timer = setTimeout(() => onDismiss(id), Math.max(remaining.current, 0))\n return () => {\n clearTimeout(timer)\n remaining.current -= Date.now() - started\n }\n }, [id, duration, paused, onDismiss])\n\n return (\n <html.div\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n style={[styles.toast, styles[variant]]}\n onPointerEnter={() => setHovered(true)}\n onPointerLeave={() => setHovered(false)}\n onFocus={() => setFocused(true)}\n onBlur={(e: {currentTarget: HTMLElement; relatedTarget: EventTarget | null}) => {\n // Focus moving between the toast's own buttons keeps it paused.\n if (!e.currentTarget.contains(e.relatedTarget as Node | null)) setFocused(false)\n }}\n >\n <html.div style={[styles.iconWrap, variantIconStyle[variant]]}>\n <Icon name={variantIcon[variant]} size=\"md\" />\n </html.div>\n <html.div style={styles.content}>\n <html.div style={styles.message}>{message}</html.div>\n {action ? (\n <html.button\n type=\"button\"\n style={styles.action}\n onClick={() => {\n action.onClick()\n onDismiss(id)\n }}\n >\n {action.label}\n </html.button>\n ) : null}\n </html.div>\n <html.button\n type=\"button\"\n aria-label={dismissLabel}\n style={styles.closeBtn}\n onClick={() => onDismiss(id)}\n >\n <Icon name=\"x-circle\" size=\"sm\" />\n </html.button>\n </html.div>\n )\n}\n\nexport interface ToastProviderProps {\n /** Accessible name of each toast's close button, e.g. from the app's\n * message catalog. */\n dismissLabel?: string\n children: ReactNode\n}\n\nexport function ToastProvider({dismissLabel = 'Dismiss', children}: ToastProviderProps) {\n const storeRef = useRef<ToastStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createToastStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const mount = usePortalMount()\n\n const value = useMemo<ToastContextValue>(\n () => ({\n toast: (opts) => store.add(opts),\n dismiss: (id) => store.remove(id),\n }),\n [store],\n )\n\n const dismiss = useCallback((id: string) => store.remove(id), [store])\n\n const region = (\n <html.div role=\"region\" aria-label=\"Notifications\" style={styles.region}>\n {entries.map((entry) => (\n <ToastItem key={entry.id} entry={entry} onDismiss={dismiss} dismissLabel={dismissLabel} />\n ))}\n </html.div>\n )\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {mount ? createPortal(region, mount) : region}\n </ToastContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: spacing.md,\n },\n error: {\n color: colors.error,\n },\n success: {\n color: colors.success,\n },\n warning: {\n color: colors.warning,\n },\n info: {\n color: colors.info,\n },\n muted: {\n color: colors.textMuted,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName, IconSize} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type StatusIconName = Extract<\n IconName,\n 'x-circle' | 'check-circle' | 'check-done' | 'clock' | 'forbidden'\n>\nexport type StatusIconVariant = 'error' | 'success' | 'warning' | 'info' | 'muted'\n\ninterface StatusIconProps {\n name: StatusIconName\n size?: IconSize\n variant?: StatusIconVariant\n}\n\nexport function StatusIcon({name, size = 'xxl', variant = 'muted'}: StatusIconProps) {\n return (\n <html.div style={[styles.root, styles[variant]]}>\n <Icon name={name} size={size} />\n </html.div>\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport interface TagGroupContextValue {\n values: string[]\n addTag: (value: string) => void\n removeTag: (value: string) => void\n editable: boolean\n setEditable: (v: boolean) => void\n disabled: boolean\n validate?: (value: string) => true | string\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n inputRef: React.RefObject<HTMLInputElement | null>\n gridId: string\n name?: string\n}\n\nexport const TagGroupContext = createContext<TagGroupContextValue | null>(null)\n\nexport function useTagGroup(): TagGroupContextValue | null {\n return useContext(TagGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightNormal,\n lineHeight: 1,\n borderRadius: radii.xs,\n whiteSpace: 'nowrap',\n minWidth: 0,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffsetSm,\n },\n },\n sizeMd: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontSize: typography.fontSizeSm,\n },\n sizeSm: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n // Opt-in wrapping for long identifier-style labels. Overrides the base\n // nowrap so the text breaks within its container (e.g. a table cell)\n // instead of overflowing into the next column. `anywhere` also lets the\n // tag shrink below its content's intrinsic width so a flex/grid parent can\n // actually give it a narrow track.\n wrap: {\n whiteSpace: 'normal',\n overflowWrap: 'anywhere',\n lineHeight: 1.35,\n textAlign: 'start',\n },\n // Reduce right padding when removable to keep visual balance with the button\n removableMd: {\n paddingRight: spacing.sm,\n },\n removableSm: {\n paddingRight: spacing.xs,\n },\n default: {\n backgroundColor: {\n default: colors.bg,\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n removeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n borderRadius: radii.full,\n opacity: {\n default: 0.6,\n ':hover': 1,\n },\n outlineWidth: 0,\n },\n removeButtonDisabled: {\n cursor: 'not-allowed',\n opacity: 0.4,\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useTagGroup} from '../TagGroup/TagGroupContext'\nimport {styles} from './styles.css'\n\nexport type TagVariant = 'default' | 'success' | 'warning' | 'error' | 'info'\nexport type TagSize = 'sm' | 'md'\n\ninterface TagProps {\n /** Value identifier — required when used inside TagGroup */\n value?: string\n variant?: TagVariant\n size?: TagSize\n /** Show remove button. Auto-derived from TagGroup context when inside one. */\n removable?: boolean\n /** Called when remove button is clicked. Auto-wired to TagGroup when inside one. */\n onRemove?: () => void\n disabled?: boolean\n /**\n * Allow the label to wrap / break instead of staying on one line. Tags are\n * `white-space: nowrap` by default (they read as pills); set this for long\n * identifier-style values (e.g. `lldap.group.member.remove`) sitting in a\n * constrained column, so they break within their cell instead of leaking\n * into the next one.\n */\n wrap?: boolean\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nconst removableSizeMap = {\n sm: styles.removableSm,\n md: styles.removableMd,\n} as const\n\nexport function Tag({\n value,\n variant = 'default',\n size = 'md',\n removable: removableProp,\n onRemove: onRemoveProp,\n disabled: disabledProp = false,\n wrap = false,\n children,\n}: TagProps) {\n const group = useTagGroup()\n const contentRef = useRef<HTMLElement>(null)\n\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const removable = removableProp ?? (isGrouped ? group.editable : false)\n\n const onRemove = useCallback(() => {\n if (disabled) return\n if (onRemoveProp) {\n onRemoveProp()\n } else if (isGrouped && value !== undefined) {\n group.removeTag(value)\n }\n }, [disabled, onRemoveProp, isGrouped, value, group])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return\n if ((e.key === 'Backspace' || e.key === 'Delete') && removable) {\n e.preventDefault()\n onRemove()\n }\n // Arrow key navigation delegated to TagGroup via context\n if (isGrouped && (e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n e.preventDefault()\n const idx = value !== undefined ? group.values.indexOf(value) : -1\n if (e.key === 'ArrowLeft' && idx > 0) {\n group.setFocusedIndex(idx - 1)\n } else if (e.key === 'ArrowRight') {\n if (idx < group.values.length - 1) {\n group.setFocusedIndex(idx + 1)\n } else {\n // Move focus to input\n group.inputRef.current?.focus()\n group.setFocusedIndex(-1)\n }\n }\n }\n },\n [disabled, removable, onRemove, isGrouped, value, group],\n )\n\n const removeLabel = contentRef.current?.textContent\n ? `Remove ${contentRef.current.textContent}`\n : 'Remove'\n\n const tagContent = (\n <>\n <html.span ref={contentRef} {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n {children}\n </html.span>\n {removable && (\n <html.span {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n <html.button\n type=\"button\"\n aria-label={removeLabel}\n disabled={disabled}\n onClick={(e) => {\n ;(e as any).stopPropagation?.()\n onRemove()\n }}\n tabIndex={-1}\n style={[styles.removeButton, disabled && styles.removeButtonDisabled]}\n >\n <svg\n width={size === 'sm' ? 10 : 12}\n height={size === 'sm' ? 10 : 12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M3 3l6 6M9 3l-6 6\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n </html.span>\n )}\n </>\n )\n\n return (\n <html.span\n {...(isGrouped ? {role: 'row' as any} : {})}\n tabIndex={isGrouped ? 0 : undefined}\n onKeyDown={isGrouped ? (handleKeyDown as any) : undefined}\n style={[\n styles.base,\n sizeMap[size],\n removable && removableSizeMap[size],\n styles[variant],\n disabled && styles.disabled,\n wrap && styles.wrap,\n ]}\n >\n {tagContent}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n containerError: {},\n containerDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // Static display (no Input) — no gap needed\n containerStatic: {\n gap: 0,\n },\n list: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: spacing.xs,\n alignItems: 'center',\n },\n input: {\n width: '100%',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus': colors.accent,\n },\n borderRadius: radii.sm,\n backgroundColor: colors.bg,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n minHeight: sizes.controlLg,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus': borders.focusOffsetSm,\n },\n boxSizing: 'border-box',\n },\n inputError: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n})\n","import {\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {TagGroupContext, type TagGroupContextValue} from './TagGroupContext'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\n// ---------------------------------------------------------------------------\n// Local context accessor (non-throwing, returns null)\n// ---------------------------------------------------------------------------\n\nfunction useTagGroupCtx() {\n return useContext(TagGroupContext)\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Root\n// ---------------------------------------------------------------------------\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (values: string[]) => void\n /** Validate a value before adding. Return `true` if valid, or an error string. */\n onValidate?: (value: string) => true | string\n disabled?: boolean\n /** Form field name — renders hidden inputs for each tag value */\n name?: string\n 'aria-label'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n onValidate,\n disabled: disabledProp = false,\n name,\n 'aria-label': ariaLabel,\n children,\n}: RootProps) {\n const gridId = useId()\n const fieldCtx = useFieldContext()\n const [values, setValues] = useControllableValue(controlledValue, defaultValue, onValueChange)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [editable, setEditable] = useState(false)\n const [announcement, setAnnouncement] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const disabled = disabledProp || (fieldCtx?.disabled ?? false)\n const isInvalid = fieldCtx?.invalid ?? false\n\n const addTag = useCallback(\n (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) return\n if (values.includes(trimmed)) return\n if (onValidate) {\n const result = onValidate(trimmed)\n if (result !== true) return\n }\n setValues([...values, trimmed])\n setAnnouncement(`Added ${trimmed}`)\n },\n [values, setValues, onValidate],\n )\n\n const removeTag = useCallback(\n (value: string) => {\n const idx = values.indexOf(value)\n if (idx === -1) return\n const next = values.filter((v) => v !== value)\n setValues(next)\n setAnnouncement(`Removed ${value}`)\n\n // Focus management: move to next tag, or previous, or input\n if (next.length === 0) {\n inputRef.current?.focus()\n setFocusedIndex(-1)\n } else if (idx >= next.length) {\n setFocusedIndex(next.length - 1)\n } else {\n setFocusedIndex(idx)\n }\n },\n [values, setValues],\n )\n\n // Focus the tag at focusedIndex when it changes\n useEffect(() => {\n if (focusedIndex >= 0 && focusedIndex < values.length) {\n const container = document.getElementById(gridId)\n if (!container) return\n const rows = container.querySelectorAll('[role=\"row\"]')\n const target = rows[focusedIndex] as HTMLElement | undefined\n target?.focus()\n }\n }, [focusedIndex, gridId, values.length])\n\n const ctx = useMemo<TagGroupContextValue>(\n () => ({\n values,\n addTag,\n removeTag,\n editable,\n setEditable,\n disabled,\n validate: onValidate,\n focusedIndex,\n setFocusedIndex,\n inputRef,\n gridId,\n name,\n }),\n [values, addTag, removeTag, editable, disabled, onValidate, focusedIndex, gridId, name],\n )\n\n return (\n <TagGroupContext.Provider value={ctx}>\n <html.div style={styles.root} aria-label={ariaLabel}>\n <html.div\n style={[\n styles.container,\n !editable && styles.containerStatic,\n isInvalid && styles.containerError,\n disabled && styles.containerDisabled,\n ]}\n aria-describedby={\n fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n }\n aria-invalid={isInvalid || undefined}\n >\n {children}\n </html.div>\n\n {/* Hidden inputs for form submission */}\n {name && values.map((v) => <html.input key={v} type=\"hidden\" name={name} value={v} />)}\n\n {/* Live region for screen reader announcements */}\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={visuallyHidden.base}>\n {announcement}\n </html.div>\n </html.div>\n </TagGroupContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.List\n// ---------------------------------------------------------------------------\n\ninterface ListProps {\n children: ReactNode\n 'aria-label'?: string\n}\n\nfunction List({children, 'aria-label': ariaLabel}: ListProps) {\n const ctx = useTagGroupCtx()\n\n return (\n <html.div role={'grid' as any} aria-label={ariaLabel} id={ctx?.gridId} style={styles.list}>\n {children}\n </html.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Input\n// ---------------------------------------------------------------------------\n\ninterface InputProps {\n placeholder?: string\n}\n\nfunction Input({placeholder}: InputProps) {\n const ctx = useTagGroupCtx()\n const [inputValue, setInputValue] = useState('')\n const localRef = useRef<HTMLInputElement>(null)\n\n // Sync local ref with context inputRef\n useEffect(() => {\n if (ctx?.inputRef) {\n ;(ctx.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = localRef.current\n }\n })\n\n // Register as editable on mount\n useEffect(() => {\n ctx?.setEditable(true)\n return () => ctx?.setEditable(false)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const commitValueRef = useRef<(raw: string) => boolean>(() => false)\n commitValueRef.current = (raw: string) => {\n const trimmed = raw.trim()\n if (!trimmed || !ctx) return false\n ctx.addTag(trimmed)\n setInputValue('')\n return true\n }\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const el = localRef.current\n if (!el) return\n\n function handleKeyDown(e: KeyboardEvent) {\n if (!ctx) return\n const target = e.target as HTMLInputElement\n\n if (e.key === 'Enter' || e.key === ',' || e.key === ';') {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Tab' && target.value.trim()) {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Backspace' && !target.value && ctx.values.length > 0) {\n e.preventDefault()\n ctx.removeTag(ctx.values[ctx.values.length - 1])\n return\n }\n\n if (e.key === 'ArrowLeft' && (target.selectionStart ?? 0) === 0 && ctx.values.length > 0) {\n e.preventDefault()\n ctx.setFocusedIndex(ctx.values.length - 1)\n return\n }\n\n if (e.key === 'Escape') {\n setInputValue('')\n }\n }\n\n function handlePaste(e: ClipboardEvent) {\n if (!ctx) return\n const text = e.clipboardData?.getData('text') ?? ''\n const items = text\n .split(/[\\n,;]+/)\n .map((s) => s.trim())\n .filter(Boolean)\n if (items.length > 1) {\n e.preventDefault()\n for (const item of items) {\n ctx.addTag(item)\n }\n }\n }\n\n function handleFocus() {\n ctx?.setFocusedIndex(-1)\n }\n\n el.addEventListener('keydown', handleKeyDown)\n el.addEventListener('paste', handlePaste)\n el.addEventListener('focus', handleFocus)\n return () => {\n el.removeEventListener('keydown', handleKeyDown)\n el.removeEventListener('paste', handlePaste)\n el.removeEventListener('focus', handleFocus)\n }\n }, [ctx])\n\n return (\n <html.input\n ref={localRef as React.Ref<HTMLInputElement>}\n type=\"text\"\n value={inputValue}\n onChange={(e: any) => setInputValue(e.target.value)}\n placeholder={placeholder}\n disabled={ctx?.disabled}\n style={styles.input}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Namespace export\n// ---------------------------------------------------------------------------\n\nexport const TagGroup = {\n Root,\n List,\n Input,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typeScale, typography} from '@duro-app/tokens/tokens/typography.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// The picked docs browser: the list is Reader.dc.html's `.toc` / `.tocitem`\n// (a hairline rail, the active item marked by the nav marker bar), the menu is\n// Mobile.dc.html's `.mtoc` (docs/mockups/docs-nav/).\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n fontFamily: typography.fontFamily,\n },\n caption: {\n marginBottom: spacing.sm,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase',\n color: colors.textMuted,\n },\n list: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n // the menu's list opens below its button, as a panel\n listMenu: {\n gap: 0,\n marginTop: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n backgroundColor: colors.bgCard,\n },\n item: {\n display: 'flex',\n flexDirection: 'column',\n },\n // On a touch screen (coarse pointer, as Toggle does) each item is a touch\n // target; a mouse keeps the artboard's compact rail.\n link: {\n display: {default: 'block', '@media (pointer: coarse)': 'flex'},\n alignItems: {default: null, '@media (pointer: coarse)': 'center'},\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n paddingTop: microSpacing.px2,\n paddingBottom: microSpacing.px2,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightNormal,\n textDecorationLine: 'none',\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n cursor: 'pointer',\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // a touch target per item when the menu is the narrow-screen form\n linkMenu: {\n display: 'flex',\n alignItems: 'center',\n minHeight: sizes.touchTarget,\n },\n level3: {\n paddingLeft: `calc(${spacing.ms} + ${spacing.md})`,\n },\n // not colour alone: the marker bar and a heavier weight\n linkActive: {\n color: colors.text,\n fontWeight: typography.fontWeightMedium,\n boxShadow: `inset ${sizes.navMarkerW} 0 0 ${colors.accent}`,\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.sm,\n width: '100%',\n minHeight: sizes.touchTarget,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n textAlign: 'left',\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // the keyboard ring, inset so a neighbour or the panel edge never clips it\n focusable: {\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': `calc(-1 * ${borders.focusOffset})`,\n },\n },\n chevron: {\n color: colors.textMuted,\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(180deg)',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport type TableOfContentsVariant = 'list' | 'menu'\n\nexport interface TableOfContentsContextValue {\n /** the id of the section being read (an Item is active when its href is `#<value>`) */\n value: string | null\n variant: TableOfContentsVariant\n /** closes the menu variant's disclosure (no-op for the list) */\n close: () => void\n}\n\nexport const TableOfContentsContext = createContext<TableOfContentsContextValue | null>(null)\n\nexport function useTableOfContents() {\n const ctx = useContext(TableOfContentsContext)\n if (!ctx)\n throw new Error('TableOfContents compound components must be used within TableOfContents.Root')\n return ctx\n}\n","import {type ReactNode, useCallback, useId, useMemo, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {isPlainClick, type LinkClickEvent, type OnNavigate} from '../../shared/navigate'\nimport {\n TableOfContentsContext,\n useTableOfContents,\n type TableOfContentsVariant,\n} from './TableOfContentsContext'\n\n/* TableOfContents — the \"On this page\" list of a long page's sections: a\n * labelled `nav` of in-page links. The section being read is `value`; its item\n * carries `aria-current=\"location\"` and a marker bar plus a heavier weight, so\n * colour is never the only cue. Which section is being read is the app's to\n * work out (an IntersectionObserver over the headings): the component does no\n * scroll-spy.\n *\n * `variant=\"menu\"` is the narrow-screen form: a disclosure button (with\n * `aria-expanded`) that shows the same list below it, and closes again when an\n * item is followed or on Escape. */\n\n// --- Root ---\n\n/**\n * The disclosure state (`open`, `defaultOpen`, `onOpenChange`) exists only on\n * the menu: the list variant has no button, so it takes none of them.\n */\ntype RootProps = {\n /** Names the landmark (\"On this page\"); required, from your text catalog. */\n 'aria-label': string\n /** The id of the section being read; the Item whose href is `#<value>` is active. */\n value?: string | null\n /**\n * Visible title: the caption above the list, or the menu button's text.\n * The menu button falls back to `aria-label`; the list shows none without it.\n */\n label?: ReactNode\n children: ReactNode\n} & (\n | {\n /** `list` (default) for a sidebar; `menu` for a narrow screen, behind a disclosure button (only `menu` takes open / defaultOpen / onOpenChange). */\n variant?: 'list'\n open?: never\n defaultOpen?: never\n onOpenChange?: never\n }\n | {\n /** `list` (default) for a sidebar; `menu` for a narrow screen, behind a disclosure button (only `menu` takes open / defaultOpen / onOpenChange). */\n variant: 'menu'\n /** Whether the list is shown (controlled). */\n open?: boolean\n /** Whether the list starts shown (uncontrolled; default false). */\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n }\n)\n\nfunction Root({\n 'aria-label': ariaLabel,\n value = null,\n variant = 'list',\n label,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n children,\n}: RootProps) {\n const [open, setOpen] = useControllableValue(openProp, defaultOpen, onOpenChange)\n const listId = useId()\n const triggerRef = useRef<HTMLButtonElement>(null)\n const isMenu = variant === 'menu'\n\n const close = useCallback(() => {\n if (isMenu && open) setOpen(false)\n }, [isMenu, open, setOpen])\n\n const ctx = useMemo(() => ({value, variant, close}), [value, variant, close])\n\n const list = (\n <html.ul id={isMenu ? listId : undefined} style={[styles.list, isMenu && styles.listMenu]}>\n {children}\n </html.ul>\n )\n\n return (\n <TableOfContentsContext.Provider value={ctx}>\n <html.nav\n aria-label={ariaLabel}\n onKeyDown={(e: {key: string}) => {\n if (isMenu && open && e.key === 'Escape') {\n setOpen(false)\n triggerRef.current?.focus()\n }\n }}\n style={styles.root}\n >\n {isMenu ? (\n <>\n <html.button\n ref={triggerRef}\n type=\"button\"\n aria-expanded={open}\n aria-controls={open ? listId : undefined}\n onClick={() => setOpen(!open)}\n style={[styles.trigger, styles.focusable]}\n >\n <html.span>{label ?? ariaLabel}</html.span>\n <html.span aria-hidden style={[styles.chevron, open && styles.chevronOpen]}>\n ▾\n </html.span>\n </html.button>\n {open ? list : null}\n </>\n ) : (\n <>\n {label != null ? <html.div style={styles.caption}>{label}</html.div> : null}\n {list}\n </>\n )}\n </html.nav>\n </TableOfContentsContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n /** The section's anchor, `#<heading id>`. */\n href: string\n /** The heading's level: 2, or 3 (indented under the 2 before it). */\n level?: 2 | 3\n /**\n * Client-side navigation: called for a plain primary click (no modifier\n * key). Call `event.preventDefault()`, then scroll or navigate yourself.\n */\n onNavigate?: OnNavigate\n children: ReactNode\n}\n\nfunction Item({href, level = 2, onNavigate, children}: ItemProps) {\n const {value, variant, close} = useTableOfContents()\n const active = value != null && href === `#${value}`\n return (\n <html.li style={styles.item}>\n <html.a\n href={href}\n aria-current={active ? 'location' : undefined}\n onClick={(e: LinkClickEvent) => {\n if (!isPlainClick(e)) return\n onNavigate?.(href, e)\n close()\n }}\n style={[\n styles.link,\n styles.focusable,\n variant === 'menu' && styles.linkMenu,\n level === 3 && styles.level3,\n active && styles.linkActive,\n ]}\n >\n {children}\n </html.a>\n </html.li>\n )\n}\n\nexport const TableOfContents = {\n Root,\n Item,\n}\n\nexport type {TableOfContentsVariant}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n rootVertical: {\n flexDirection: 'row',\n },\n list: {\n display: 'flex',\n flexDirection: 'row',\n borderBottomWidth: borders.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n gap: spacing.xs,\n // Positioning context for the sliding indicator.\n position: 'relative',\n },\n listVertical: {\n flexDirection: 'column',\n borderBottomWidth: 0,\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n gap: 0,\n },\n tab: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderBottomWidth: borders.strong,\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n cursor: 'pointer',\n transitionProperty: 'color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': `calc(-1 * ${borders.focusOffset})`,\n },\n },\n tabVertical: {\n justifyContent: 'flex-start',\n borderBottomWidth: 0,\n borderRightWidth: borders.strong,\n borderRightStyle: 'solid',\n borderRightColor: 'transparent',\n },\n tabActiveHorizontal: {\n color: colors.text,\n borderBottomColor: colors.accent,\n },\n tabActiveVertical: {\n color: colors.text,\n borderRightColor: colors.accent,\n },\n // Applied to the active tab once JS drives the sliding indicator: drop the\n // per-tab accent border so the single sliding bar is the only underline\n // (avoids a double line and an instant-pop that would undercut the slide).\n tabIndicatorActive: {\n borderBottomColor: 'transparent',\n borderRightColor: 'transparent',\n },\n // --- Sliding active indicator (positioned by measuring the active tab) ---\n indicator: {\n position: 'absolute',\n backgroundColor: colors.accent,\n pointerEvents: 'none',\n transitionProperty: 'transform, width, height',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.easeOut,\n },\n indicatorHorizontal: {\n bottom: -1,\n left: 0,\n height: sizes.tabIndicator,\n },\n indicatorVertical: {\n right: -1,\n top: 0,\n width: sizes.tabIndicator,\n },\n // Dynamic transform/size from the measured active tab (StyleX dynamic style:\n // simple identifier params only).\n indicatorOffsetH: (offset: number, size: number) => ({\n transform: `translateX(${offset}px)`,\n width: size,\n }),\n indicatorOffsetV: (offset: number, size: number) => ({\n transform: `translateY(${offset}px)`,\n height: size,\n }),\n tabDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n color: colors.textMuted,\n },\n panel: {\n paddingTop: spacing.md,\n },\n panelVertical: {\n paddingTop: 0,\n paddingLeft: spacing.md,\n },\n})\n","import {createContext, useContext} from 'react'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface TabsContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n orientation: Orientation\n registerTab: (value: string, disabled: boolean) => () => void\n tabsRef: React.RefObject<Map<string, boolean>>\n orderRef: React.RefObject<string[]>\n // True once the List has measured the active tab and is driving a sliding\n // indicator. Tabs suppress their own accent border while it's true so the\n // single sliding bar is the only underline; it stays false without JS\n // (SSR / no-hydration), where the per-tab border is the graceful fallback.\n indicatorActive: boolean\n setIndicatorActive: (active: boolean) => void\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport function useTabs() {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error('Tabs compound components must be used within Tabs.Root')\n return ctx\n}\n","import {useCallback, useRef, useState} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {Orientation, TabsContextValue} from './TabsContext'\n\ninterface UseTabsRootOptions {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: Orientation\n}\n\nexport function useTabsRoot({\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: UseTabsRootOptions): TabsContextValue {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const tabsRef = useRef(new Map<string, boolean>())\n const orderRef = useRef<string[]>([])\n const [indicatorActive, setIndicatorActive] = useState(false)\n\n const registerTab = useCallback((value: string, disabled: boolean) => {\n tabsRef.current.set(value, disabled)\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n tabsRef.current.delete(value)\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return {\n activeValue,\n onSelect,\n orientation,\n registerTab,\n tabsRef,\n orderRef,\n indicatorActive,\n setIndicatorActive,\n }\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {TabsContext, useTabs} from './TabsContext'\nimport {useTabsRoot} from './useTabsRoot'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n}\n\nfunction Root({\n children,\n value,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: RootProps) {\n const ctx = useTabsRoot({value, defaultValue, onValueChange, orientation})\n\n return (\n <TabsContext.Provider value={ctx}>\n <html.div style={[styles.root, orientation === 'vertical' && styles.rootVertical]}>\n {children}\n </html.div>\n </TabsContext.Provider>\n )\n}\n\n// --- List ---\n\ninterface ListProps {\n children: ReactNode\n}\n\nfunction List({children}: ListProps) {\n const {orientation, activeValue, onSelect, tabsRef, orderRef, setIndicatorActive} = useTabs()\n const listRef = useRef<HTMLDivElement>(null)\n const [indicator, setIndicator] = useState<{offset: number; size: number} | null>(null)\n\n // Measure the active tab and drive the sliding indicator. useLayoutEffect so\n // the first position is set before paint (the indicator element mounts already\n // in place — no slide-in from zero; only later tab changes animate). Observes\n // the active tab (its own size, e.g. a changing \"(3)\" count) and the list\n // (container resize / reflow). A non-active sibling resizing while you're on\n // another tab is the one case not caught; it self-corrects on the next\n // selection or resize.\n useLayoutEffect(() => {\n const list = listRef.current\n if (!list || !activeValue) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const el = list.querySelector<HTMLElement>(`[data-tab-value=\"${CSS.escape(activeValue)}\"]`)\n if (!el) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const measure = () => {\n setIndicator(\n orientation === 'horizontal'\n ? {offset: el.offsetLeft, size: el.offsetWidth}\n : {offset: el.offsetTop, size: el.offsetHeight},\n )\n setIndicatorActive(true)\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n ro.observe(list)\n return () => ro.disconnect()\n }, [activeValue, orientation, setIndicatorActive])\n\n useEffect(() => {\n const el = listRef.current\n if (!el) return\n const listEl = el\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const tabs = tabsRef.current\n if (order.length === 0) return\n\n const prevKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'\n const nextKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown'\n\n let targetValue: string | null = null\n\n switch (e.key) {\n case nextKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : -1\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx + i) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case prevKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : 0\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx - i + order.length) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'Home': {\n e.preventDefault()\n for (const val of order) {\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'End': {\n e.preventDefault()\n for (let i = order.length - 1; i >= 0; i--) {\n if (!tabs.get(order[i])) {\n targetValue = order[i]\n break\n }\n }\n break\n }\n }\n\n if (targetValue) {\n onSelect(targetValue)\n // Focus the newly activated tab button\n const tabEl = listEl.querySelector(\n `[data-tab-value=\"${targetValue}\"]`,\n ) as HTMLElement | null\n tabEl?.focus()\n }\n }\n\n el.addEventListener('keydown', handleKeyDown)\n return () => el.removeEventListener('keydown', handleKeyDown)\n }, [orientation, activeValue, onSelect, tabsRef, orderRef])\n\n return (\n <html.div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n style={[styles.list, orientation === 'vertical' && styles.listVertical]}\n >\n {children}\n {indicator && (\n <html.div\n aria-hidden\n style={[\n styles.indicator,\n orientation === 'horizontal' ? styles.indicatorHorizontal : styles.indicatorVertical,\n orientation === 'horizontal'\n ? styles.indicatorOffsetH(indicator.offset, indicator.size)\n : styles.indicatorOffsetV(indicator.offset, indicator.size),\n ]}\n />\n )}\n </html.div>\n )\n}\n\n// --- Tab ---\n\ninterface TabProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Tab({value, disabled = false, children}: TabProps) {\n const {activeValue, onSelect, orientation, registerTab, indicatorActive} = useTabs()\n const isActive = activeValue === value\n const tabId = useId()\n const panelId = `${tabId}-panel`\n\n useEffect(() => {\n return registerTab(value, disabled)\n }, [value, disabled, registerTab])\n\n const handleClick = () => {\n if (!disabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.button\n type=\"button\"\n role=\"tab\"\n id={tabId}\n aria-selected={isActive}\n aria-controls={panelId}\n aria-disabled={disabled || undefined}\n data-tab-value={value}\n tabIndex={isActive ? 0 : -1}\n onClick={handleClick}\n style={[\n styles.tab,\n orientation === 'vertical' && styles.tabVertical,\n isActive &&\n (orientation === 'vertical' ? styles.tabActiveVertical : styles.tabActiveHorizontal),\n isActive && indicatorActive && styles.tabIndicatorActive,\n disabled && styles.tabDisabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Panel ---\n\ninterface PanelProps {\n value: string\n children: ReactNode\n}\n\nfunction Panel({value, children}: PanelProps) {\n const {activeValue, orientation} = useTabs()\n\n if (activeValue !== value) return null\n\n return (\n <html.div\n role=\"tabpanel\"\n style={[styles.panel, orientation === 'vertical' && styles.panelVertical]}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tabs = {\n Root,\n List,\n Tab,\n Panel,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n // Two columns — row labels, date track — with the axis as the first row.\n root: {\n display: 'grid',\n gridTemplateColumns: `${sizes.timelineLabelW} 1fr`,\n rowGap: spacing.xs,\n color: colors.text,\n },\n heading: {\n display: 'flex',\n alignItems: 'flex-end',\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n axis: {\n position: 'relative',\n height: sizes.chip,\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n whiteSpace: 'nowrap',\n },\n tick: {\n position: 'absolute',\n top: 0,\n paddingLeft: spacing.xs,\n borderLeftWidth: borders.hairline,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n todayLabel: {\n position: 'absolute',\n bottom: 0,\n transform: 'translateX(-50%)',\n color: colors.errorText,\n fontWeight: typography.fontWeightMedium,\n },\n left: (percent: number) => ({left: `${percent}%`}),\n width: (percent: number) => ({width: `${percent}%`}),\n label: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n minWidth: 0,\n paddingRight: spacing.sm,\n },\n labelText: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n labelDescription: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n whiteSpace: 'nowrap',\n },\n track: {\n position: 'relative',\n height: sizes.controlMd,\n },\n today: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n borderLeftWidth: borders.strong,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.error,\n pointerEvents: 'none',\n zIndex: 2,\n },\n bar: {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n boxSizing: 'border-box',\n height: sizes.controlSm,\n },\n face: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n boxSizing: 'border-box',\n width: '100%',\n height: '100%',\n padding: 0,\n overflow: 'hidden',\n borderRadius: radii.xs,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {default: colors.border, ':hover': colors.accent},\n backgroundColor: colors.bg,\n color: colors.text,\n cursor: 'pointer',\n textAlign: 'left',\n transitionProperty: 'box-shadow, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n },\n faceSelected: {\n borderColor: colors.accent,\n boxShadow: `0 0 0 ${microSpacing.px1} ${colors.accent}`,\n },\n barPlanned: {\n borderStyle: 'dashed',\n },\n barDone: {\n backgroundColor: colors.successBg,\n },\n fill: {\n position: 'absolute',\n left: 0,\n top: 0,\n bottom: 0,\n backgroundColor: colors.infoBg,\n borderRightWidth: borders.strong,\n borderRightStyle: 'solid',\n borderRightColor: colors.accent,\n },\n fillDone: {\n backgroundColor: colors.successBg,\n borderRightColor: colors.success,\n },\n barText: {\n position: 'relative',\n paddingLeft: spacing.sm,\n fontSize: typography.fontSizeXs,\n fontVariantNumeric: 'tabular-nums',\n whiteSpace: 'nowrap',\n },\n // The edges: keyboard sliders, drawn only while focused.\n edge: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n width: spacing.sm,\n borderRadius: radii.xs,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: borders.focusRing,\n outlineColor: colors.accent,\n backgroundColor: {default: 'transparent', ':focus-visible': colors.accent},\n zIndex: 3,\n },\n edgeStart: {\n left: `calc(-1 * ${spacing.xs})`,\n },\n edgeEnd: {\n right: `calc(-1 * ${spacing.xs})`,\n },\n})\n","import {createContext, useContext, useMemo, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DragDrop, type DragDropItemData, type DragDropVerdict} from '../DragDrop/DragDrop'\nimport {styles} from './styles.css'\n\n// ---------------------------------------------------------------------------\n// Timeline — rows of date bars against a date axis: milestones, releases,\n// sprints. Dates are calendar days ('YYYY-MM-DD', read as UTC) so a bar\n// never shifts with the viewer's time zone.\n//\n// A bar is a toggle button (select it) with a progress fill, and can be a\n// DragDrop.Zone target (`dropZone`) inside a DragDrop.Root. Its two edges are\n// sliders whose value text is a date: Left/Right move a day, PageUp/PageDown\n// a week, Home/End to the limit. They are keyboard-only — there is no\n// pointer drag of an edge.\n// ---------------------------------------------------------------------------\n\n/** A calendar day, 'YYYY-MM-DD'. */\nexport type TimelineDate = string\n\nconst DAY_MS = 86_400_000\n\nconst dayOf = (date: TimelineDate): number => Math.floor(Date.parse(`${date}T00:00:00Z`) / DAY_MS)\nconst dateOf = (day: number): TimelineDate => new Date(day * DAY_MS).toISOString().slice(0, 10)\n\ninterface TimelineContextValue {\n readonly first: number\n readonly days: number\n readonly today: number | null\n readonly todayLabel: string\n readonly formatDate: (date: TimelineDate) => string\n}\n\nconst TimelineContext = createContext<TimelineContextValue | null>(null)\n\nconst useTimeline = (part: string) => {\n const ctx = useContext(TimelineContext)\n if (!ctx) throw new Error(`Timeline.${part} must be used within Timeline.Root`)\n return ctx\n}\n\n/** Percent of the axis from its first day to `day`. */\nconst at = (ctx: TimelineContextValue, day: number) => ((day - ctx.first) / ctx.days) * 100\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport interface TimelineRootProps {\n /** First day on the axis. */\n start: TimelineDate\n /** Last day on the axis (included). */\n end: TimelineDate\n /** Draws the today marker when inside the range. */\n today?: TimelineDate\n /** The timeline's accessible name. */\n 'aria-label': string\n /** Text above the row labels, e.g. \"Milestones\". */\n heading?: ReactNode\n /** The today marker's text. */\n todayLabel?: string\n /** BCP 47 locale for the default date format. */\n locale?: string\n /** Formats a day for the axis and the edge sliders' value text. */\n formatDate?: (date: TimelineDate) => string\n children: ReactNode\n}\n\nfunction Root({\n start,\n end,\n today,\n 'aria-label': ariaLabel,\n heading,\n todayLabel = 'Today',\n locale,\n formatDate,\n children,\n}: TimelineRootProps) {\n const ctx = useMemo<TimelineContextValue>(() => {\n const first = dayOf(start)\n const days = Math.max(dayOf(end) - first + 1, 1)\n const t = today === undefined ? null : dayOf(today)\n return {\n first,\n days,\n today: t !== null && t >= first && t < first + days ? t : null,\n todayLabel,\n formatDate:\n formatDate ??\n ((date) =>\n new Date(`${date}T00:00:00Z`).toLocaleDateString(locale, {\n day: 'numeric',\n month: 'short',\n timeZone: 'UTC',\n })),\n }\n }, [start, end, today, todayLabel, locale, formatDate])\n\n // Daily ticks for up to three weeks, weekly beyond.\n const step = ctx.days > 21 ? 7 : 1\n const ticks: number[] = []\n for (let d = ctx.first; d < ctx.first + ctx.days; d += step) ticks.push(d)\n\n return (\n <TimelineContext.Provider value={ctx}>\n <html.div role=\"group\" aria-label={ariaLabel} style={styles.root}>\n <html.div style={styles.heading}>{heading}</html.div>\n <html.div aria-hidden style={styles.axis}>\n {ticks.map((d) => (\n <html.span key={d} style={[styles.tick, styles.left(at(ctx, d))]}>\n {ctx.formatDate(dateOf(d))}\n </html.span>\n ))}\n {ctx.today !== null && (\n <html.span style={[styles.todayLabel, styles.left(at(ctx, ctx.today + 0.5))]}>\n {todayLabel}\n </html.span>\n )}\n </html.div>\n {children}\n </html.div>\n </TimelineContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Row\n// ---------------------------------------------------------------------------\n\nexport interface TimelineRowProps {\n /** The row's name, shown in the label column. */\n label: string\n /** A second line under the label, e.g. \"4 of 7 done\". */\n description?: ReactNode\n children?: ReactNode\n}\n\nfunction Row({label, description, children}: TimelineRowProps) {\n const ctx = useTimeline('Row')\n return (\n <>\n <html.div style={styles.label}>\n <html.span style={styles.labelText}>{label}</html.span>\n {description !== undefined && (\n <html.span style={styles.labelDescription}>{description}</html.span>\n )}\n </html.div>\n <html.div role=\"group\" aria-label={label} style={styles.track}>\n {ctx.today !== null && (\n <html.div aria-hidden style={[styles.today, styles.left(at(ctx, ctx.today + 0.5))]} />\n )}\n {children}\n </html.div>\n </>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Bar\n// ---------------------------------------------------------------------------\n\nexport interface TimelineBarDropZone<T = unknown> {\n /** The DragDrop zone id; drops arrive in the Root's onDrop with it. */\n id: string\n /** Read to screen readers when an item moves or drops here. */\n label: string\n accepts?: (item: DragDropItemData<T>) => DragDropVerdict\n}\n\nexport interface TimelineBarProps<T = unknown> {\n start: TimelineDate\n end: TimelineDate\n /** The bar's accessible name. */\n label: string\n /** Done fraction, 0–1, drawn as a fill from the start edge. */\n progress?: number\n /** `planned` draws a dashed outline; `done` the success tone. */\n tone?: 'default' | 'planned' | 'done'\n /** Makes the bar a toggle button (aria-pressed). */\n selected?: boolean\n onSelect?: () => void\n /** Adds the start-edge slider. */\n onStartChange?: (date: TimelineDate) => void\n /** Adds the end-edge slider. */\n onEndChange?: (date: TimelineDate) => void\n /** Names of the edge sliders; default \"<label>, start\" / \"<label>, end\". */\n startLabel?: string\n endLabel?: string\n /** Makes the bar a DragDrop.Zone (needs a DragDrop.Root above). */\n dropZone?: TimelineBarDropZone<T>\n /** Text inside the bar, e.g. \"4/7\". */\n children?: ReactNode\n}\n\nconst toneStyle = {\n default: null,\n planned: styles.barPlanned,\n done: styles.barDone,\n} as const\n\nfunction Bar<T = unknown>({\n start,\n end,\n label,\n progress,\n tone = 'default',\n selected,\n onSelect,\n onStartChange,\n onEndChange,\n startLabel,\n endLabel,\n dropZone,\n children,\n}: TimelineBarProps<T>) {\n const ctx = useTimeline('Bar')\n const s = dayOf(start)\n const e = dayOf(end)\n const left = at(ctx, s)\n const width = ((e - s + 1) / ctx.days) * 100\n const last = ctx.first + ctx.days - 1\n\n const face = (\n <>\n <html.button\n type=\"button\"\n aria-label={label}\n aria-pressed={selected}\n onClick={onSelect}\n style={[styles.face, toneStyle[tone], selected === true && styles.faceSelected]}\n >\n {progress !== undefined && progress > 0 && (\n <html.span\n aria-hidden\n style={[\n styles.fill,\n tone === 'done' && styles.fillDone,\n styles.width(Math.min(Math.max(progress, 0), 1) * 100),\n ]}\n />\n )}\n {children !== undefined && <html.span style={styles.barText}>{children}</html.span>}\n </html.button>\n {onStartChange && (\n <EdgeSlider\n edge=\"start\"\n label={startLabel ?? `${label}, start`}\n day={s}\n min={ctx.first}\n max={e}\n onChange={onStartChange}\n />\n )}\n {onEndChange && (\n <EdgeSlider\n edge=\"end\"\n label={endLabel ?? `${label}, end`}\n day={e}\n min={s}\n max={last}\n onChange={onEndChange}\n />\n )}\n </>\n )\n\n return (\n <html.div style={[styles.bar, styles.left(left), styles.width(width)]}>\n {dropZone ? (\n <DragDrop.Zone<T> id={dropZone.id} label={dropZone.label} accepts={dropZone.accepts} fill>\n {face}\n </DragDrop.Zone>\n ) : (\n face\n )}\n </html.div>\n )\n}\n\nfunction EdgeSlider({\n edge,\n label,\n day,\n min,\n max,\n onChange,\n}: {\n edge: 'start' | 'end'\n label: string\n day: number\n min: number\n max: number\n onChange: (date: TimelineDate) => void\n}) {\n const ctx = useTimeline('Bar')\n const onKeyDown = (event: unknown) => {\n const e = event as {key: string; preventDefault(): void}\n const by: Record<string, number> = {\n ArrowLeft: -1,\n ArrowDown: -1,\n ArrowRight: 1,\n ArrowUp: 1,\n PageDown: -7,\n PageUp: 7,\n }\n let next: number\n if (e.key in by) next = day + by[e.key]\n else if (e.key === 'Home') next = min\n else if (e.key === 'End') next = max\n else return\n e.preventDefault()\n next = Math.min(Math.max(next, min), max)\n if (next !== day) onChange(dateOf(next))\n }\n return (\n <html.div\n role=\"slider\"\n tabIndex={0}\n aria-label={label}\n aria-orientation=\"horizontal\"\n aria-valuemin={min - ctx.first}\n aria-valuemax={max - ctx.first}\n aria-valuenow={day - ctx.first}\n aria-valuetext={ctx.formatDate(dateOf(day))}\n onKeyDown={onKeyDown}\n style={[styles.edge, edge === 'start' ? styles.edgeStart : styles.edgeEnd]}\n />\n )\n}\n\nexport const Timeline = {Root, Row, Bar}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n },\n // The `role=\"group\"` holding a branch's children: purely structural.\n group: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n listStyleType: 'none',\n },\n // The treeitem carries focus; its row draws the ring (the item also wraps\n // its children, so a ring on it would circle the whole branch).\n item: {\n display: 'flex',\n flexDirection: 'column',\n outlineWidth: 0,\n outlineStyle: 'none',\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: microSpacing.px5,\n paddingBottom: microSpacing.px5,\n paddingRight: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n borderRadius: radii.sm,\n cursor: 'pointer',\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // the row of an item with href: a real link that looks like the others\n rowLink: {\n textDecorationLine: 'none',\n outlineWidth: 0,\n outlineStyle: 'none',\n },\n // one indent step per level below the top\n indent: (level: number) => ({\n paddingLeft: `calc(${spacing.sm} + ${Math.max(0, level - 1)} * ${spacing.lg})`,\n }),\n rowFocused: {\n outlineWidth: borders.focusRing,\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: `calc(-1 * ${borders.focusOffset})`,\n },\n rowSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n backgroundColor: colors.bgCardHover,\n },\n chevron: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: sizes.glyphMd,\n flexShrink: 0,\n color: colors.textMuted,\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(90deg)',\n },\n // a leaf keeps the chevron's width (labels align) but shows nothing\n chevronLeaf: {\n visibility: 'hidden',\n },\n label: {\n flexGrow: 1,\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n meta: {\n flexShrink: 0,\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface TreeContextValue {\n /** the selected item's value (single selection), or null */\n selectedValue: string | null\n onSelect: (value: string) => void\n isExpanded: (value: string) => boolean\n toggle: (value: string) => void\n setExpanded: (value: string, expanded: boolean) => void\n /** the item holding the tree's single tab stop (roving tabindex) */\n focusValue: string | null\n setFocusValue: (value: string) => void\n /** the focus holder is focused from the keyboard (draws its ring) */\n keyboardFocus: boolean\n}\n\nexport const TreeContext = createContext<TreeContextValue | null>(null)\n\nexport function useTree() {\n const ctx = useContext(TreeContext)\n if (!ctx) throw new Error('Tree compound components must be used within Tree.Root')\n return ctx\n}\n\n/** The nesting depth of the items rendered here (1 = top level). */\nexport const TreeLevelContext = createContext(1)\n","import {\n Children,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {TreeContext, TreeLevelContext, useTree} from './TreeContext'\nimport {isPlainClick, type LinkClickEvent, type OnNavigate} from '../../shared/navigate'\n\n/* Tree — a hierarchy of items (the WAI-ARIA tree pattern): single selection,\n * expandable branches, one tab stop (roving tabindex), and the keyboard of a\n * file explorer — ↑/↓ move between visible items, → opens a branch then goes\n * to its first child, ← closes it then goes to the parent, Home/End, Enter\n * or Space select, and typing jumps to the next item whose label starts with\n * the typed letters.\n *\n * An item with `href` renders its row as a real link (cmd-click opens a tab,\n * \"Copy link\" works) that stays out of the tab order: the treeitem keeps the\n * single tab stop and the keyboard above, and Enter or Space on it follows\n * the link, through `onNavigate` when given. */\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** accessible name of the tree (or give `aria-labelledby`) */\n 'aria-label'?: string\n 'aria-labelledby'?: string\n /** the selected item (controlled) */\n value?: string | null\n defaultValue?: string | null\n onValueChange?: (value: string) => void\n /** the open branches (controlled) */\n expanded?: ReadonlyArray<string>\n defaultExpanded?: ReadonlyArray<string>\n onExpandedChange?: (expanded: string[]) => void\n}\n\nconst TYPEAHEAD_RESET_MS = 500\n\nfunction Root({\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n value,\n defaultValue = null,\n onValueChange,\n expanded,\n defaultExpanded = [],\n onExpandedChange,\n}: RootProps) {\n const [selectedInner, setSelectedInner] = useState<string | null>(defaultValue)\n const selectedValue = value !== undefined ? value : selectedInner\n const [expandedInner, setExpandedInner] = useState<ReadonlyArray<string>>(defaultExpanded)\n const open = expanded ?? expandedInner\n const [focusValue, setFocusValue] = useState<string | null>(selectedValue)\n // the ring shows on the focused ROW (the item wraps its children, so a\n // ring on it would circle the whole branch), only for keyboard focus —\n // the tree's own :focus-visible\n const [keyboardFocus, setKeyboardFocus] = useState(false)\n const rootRef = useRef<HTMLUListElement>(null)\n\n const onSelect = useCallback(\n (v: string) => {\n if (value === undefined) setSelectedInner(v)\n onValueChange?.(v)\n },\n [value, onValueChange],\n )\n const setExpanded = useCallback(\n (v: string, isOpen: boolean) => {\n const next = isOpen ? [...new Set([...open, v])] : open.filter((x) => x !== v)\n if (next.length === open.length && next.every((x, i) => x === open[i])) return\n if (expanded === undefined) setExpandedInner(next)\n onExpandedChange?.(next)\n },\n [open, expanded, onExpandedChange],\n )\n const isExpanded = useCallback((v: string) => open.includes(v), [open])\n const toggle = useCallback((v: string) => setExpanded(v, !open.includes(v)), [open, setExpanded])\n\n // Exactly one item is tabbable: the focus holder, else the selection, else\n // the first item — re-checked when an item appears, closes or goes away.\n useLayoutEffect(() => {\n const root = rootRef.current\n if (!root) return\n const tabbable = root.querySelector('[role=\"treeitem\"][tabindex=\"0\"]')\n if (tabbable) return\n const first = root.querySelector<HTMLElement>('[role=\"treeitem\"]')\n const next = first?.dataset.treeValue ?? null\n if (next !== focusValue) setFocusValue(next)\n }, [focusValue, open, children])\n\n // Keyboard: DOM order over the rendered items IS the visible order (a\n // closed branch renders no children), so navigation reads it directly.\n const typeahead = useRef({text: '', at: 0})\n useEffect(() => {\n const root = rootRef.current\n if (!root) return\n const rootEl = root\n const items = () => Array.from(rootEl.querySelectorAll<HTMLElement>('[role=\"treeitem\"]'))\n const focusItem = (el: HTMLElement | null | undefined) => {\n if (!el) return\n el.focus()\n }\n function onKeyDown(e: KeyboardEvent) {\n const current = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]')\n if (!current || !rootEl.contains(current)) return\n const list = items()\n const i = list.indexOf(current)\n const val = current.dataset.treeValue ?? ''\n const isOpen = current.getAttribute('aria-expanded')\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault()\n focusItem(list[i + 1])\n return\n case 'ArrowUp':\n e.preventDefault()\n focusItem(list[i - 1])\n return\n case 'ArrowRight':\n e.preventDefault()\n if (isOpen === 'false') setExpanded(val, true)\n else if (isOpen === 'true') focusItem(list[i + 1])\n return\n case 'ArrowLeft': {\n e.preventDefault()\n if (isOpen === 'true') {\n setExpanded(val, false)\n return\n }\n const parent = current.parentElement?.closest<HTMLElement>('[role=\"treeitem\"]')\n if (parent && rootEl.contains(parent)) focusItem(parent)\n return\n }\n case 'Home':\n e.preventDefault()\n focusItem(list[0])\n return\n case 'End':\n e.preventDefault()\n focusItem(list[list.length - 1])\n return\n case 'Enter':\n case ' ': {\n e.preventDefault()\n // an item with href: follow its link (the click selects it and\n // runs onNavigate, or the browser navigates)\n const link = current.querySelector<HTMLElement>(':scope > [data-tree-link]')\n if (link) link.click()\n else onSelect(val)\n return\n }\n }\n // typeahead: a printable character, no modifier\n if (e.key.length === 1 && !e.ctrlKey && !e.metaKey && !e.altKey) {\n const now = Date.now()\n const t = typeahead.current\n t.text = now - t.at > TYPEAHEAD_RESET_MS ? e.key : t.text + e.key\n t.at = now\n // the same letter typed again cycles through the items it starts;\n // a real prefix (\"fi\") narrows, and may match the current item\n const typed = t.text.toLocaleLowerCase()\n const repeat = [...typed].every((c) => c === typed[0])\n const needle = repeat ? typed[0] : typed\n const start = repeat ? i + 1 : i\n for (let k = 0; k < list.length; k++) {\n const el = list[(start + k) % list.length]\n if ((el.dataset.treeText ?? '').toLocaleLowerCase().startsWith(needle)) {\n focusItem(el)\n break\n }\n }\n }\n }\n // the roving tab stop follows focus, however it moved (keys or pointer)\n function onFocusIn(e: FocusEvent) {\n const item = (e.target as HTMLElement).closest<HTMLElement>('[role=\"treeitem\"]')\n const v = item?.dataset.treeValue\n if (v) setFocusValue(v)\n setKeyboardFocus(item?.matches(':focus-visible') ?? false)\n }\n function onFocusOut(e: FocusEvent) {\n if (!rootEl.contains(e.relatedTarget as Node | null)) setKeyboardFocus(false)\n }\n const onPointerDown = () => setKeyboardFocus(false)\n const onKey = () => setKeyboardFocus(true)\n root.addEventListener('keydown', onKeyDown)\n root.addEventListener('keydown', onKey)\n root.addEventListener('focusin', onFocusIn)\n root.addEventListener('focusout', onFocusOut)\n root.addEventListener('pointerdown', onPointerDown)\n return () => {\n root.removeEventListener('keydown', onKeyDown)\n root.removeEventListener('keydown', onKey)\n root.removeEventListener('focusin', onFocusIn)\n root.removeEventListener('focusout', onFocusOut)\n root.removeEventListener('pointerdown', onPointerDown)\n }\n }, [onSelect, setExpanded])\n\n return (\n <TreeContext.Provider\n value={{\n selectedValue,\n onSelect,\n isExpanded,\n toggle,\n setExpanded,\n focusValue,\n setFocusValue,\n keyboardFocus,\n }}\n >\n <TreeLevelContext.Provider value={1}>\n <html.ul\n ref={rootRef}\n role=\"tree\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n style={styles.root}\n >\n {children}\n </html.ul>\n </TreeLevelContext.Provider>\n </TreeContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n /** unique within the tree */\n value: string\n /** what the row shows */\n label: ReactNode\n /** plain text for typeahead when `label` isn't a string */\n textValue?: string\n /** nested items: the branch's children (none = a leaf) */\n children?: ReactNode\n /** trailing content on the row (a count, a status) */\n meta?: ReactNode\n /**\n * Makes the row a link to this URL. A plain click (or Enter / Space)\n * selects the item and calls `onNavigate`; a modified click keeps the\n * browser default (new tab, new window) and does not select.\n */\n href?: string\n /**\n * Client-side navigation for `href`: called for a plain primary click. Call\n * `event.preventDefault()`, then your router's navigate.\n */\n onNavigate?: OnNavigate\n}\n\nfunction Item({value, label, textValue, children, meta, href, onNavigate}: ItemProps) {\n const {selectedValue, onSelect, isExpanded, toggle, focusValue, keyboardFocus} = useTree()\n const level = useContext(TreeLevelContext)\n const hasChildren = Children.count(children) > 0\n const open = hasChildren && isExpanded(value)\n const selected = selectedValue === value\n const text = textValue ?? (typeof label === 'string' ? label : '')\n // named by its own label only: a branch's content includes its children,\n // and a name computed from content would read the whole subtree\n const labelId = useId()\n const rowStyles = [\n styles.indent(level),\n selected && styles.rowSelected,\n keyboardFocus && focusValue === value && styles.rowFocused,\n ]\n const rowContent = (\n <>\n <html.span\n aria-hidden\n onClick={(e: {stopPropagation: () => void; preventDefault: () => void}) => {\n if (!hasChildren) return\n // the chevron only toggles: it never selects, nor follows a link\n e.stopPropagation()\n e.preventDefault()\n toggle(value)\n }}\n style={[styles.chevron, open && styles.chevronOpen, !hasChildren && styles.chevronLeaf]}\n >\n ▸\n </html.span>\n <html.span id={labelId} style={styles.label}>\n {label}\n </html.span>\n {meta != null ? <html.span style={styles.meta}>{meta}</html.span> : null}\n </>\n )\n\n return (\n <html.li\n role=\"treeitem\"\n aria-labelledby={labelId}\n aria-level={level}\n aria-expanded={hasChildren ? open : undefined}\n aria-selected={selected}\n tabIndex={focusValue === value ? 0 : -1}\n data-tree-value={value}\n data-tree-text={text}\n style={styles.item}\n >\n {href !== undefined ? (\n <html.a\n href={href}\n tabIndex={-1}\n data-tree-link=\"\"\n onClick={(e: LinkClickEvent) => {\n if (!isPlainClick(e)) return\n onSelect(value)\n onNavigate?.(href, e)\n }}\n style={[styles.row, styles.rowLink, ...rowStyles]}\n >\n {rowContent}\n </html.a>\n ) : (\n <html.div onClick={() => onSelect(value)} style={[styles.row, ...rowStyles]}>\n {rowContent}\n </html.div>\n )}\n {open ? (\n <TreeLevelContext.Provider value={level + 1}>\n <html.ul role=\"group\" style={styles.group}>\n {children}\n </html.ul>\n </TreeLevelContext.Provider>\n ) : null}\n </html.li>\n )\n}\n\nexport const Tree = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n resize: 'vertical' as const,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': borders.focusRing,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': borders.focusOffsetSm,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ntype StrictTextareaProps = React.ComponentProps<typeof html.textarea>\n\nexport type TextareaVariant = 'default' | 'error'\n\ninterface TextareaProps {\n variant?: TextareaVariant\n name?: string\n placeholder?: string\n required?: boolean\n rows?: number\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onBlur?: () => void\n onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void\n /** Keyboard handlers — e.g. Enter to commit, Escape to cancel, arrow-key\n * navigation of a list driven by this field. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onKeyUp?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n ref?: React.Ref<HTMLTextAreaElement>\n}\n\nexport function Textarea({\n variant = 'default',\n name,\n placeholder,\n required,\n rows = 3,\n value,\n defaultValue,\n disabled,\n autoFocus,\n onChange,\n onBlur,\n onFocus,\n onKeyDown,\n onKeyUp,\n ref,\n}: TextareaProps) {\n const ctx = useFieldContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const effectiveVariant = ctx?.invalid ? 'error' : variant\n\n const extraProps: Record<string, unknown> = {}\n if (autoFocus) extraProps.autoFocus = true\n\n return (\n <html.textarea\n id={ctx?.controlId}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n rows={rows}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={\n ctx ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() : undefined\n }\n aria-invalid={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictTextareaProps['onChange']}\n onBlur={effectiveOnBlur as StrictTextareaProps['onBlur']}\n onFocus={onFocus as StrictTextareaProps['onFocus']}\n onKeyDown={onKeyDown as StrictTextareaProps['onKeyDown']}\n onKeyUp={onKeyUp as StrictTextareaProps['onKeyUp']}\n ref={effectiveRef as React.Ref<HTMLTextAreaElement>}\n style={[styles.base, styles[effectiveVariant]]}\n {...extraProps}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': borders.focusRing},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n },\n})\n","import {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {Icon, type IconName, type IconSize} from '../Icon/Icon'\nimport {ThemeProvider, type ThemeName} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\n/**\n * The user's *preference*. `'system'` follows the OS `prefers-color-scheme`;\n * the others pin a concrete {@link ThemeName}. Resolves to a ThemeName via\n * {@link useColorMode}().theme.\n */\nexport type ColorModePreference = 'system' | ThemeName\n\nconst PREFERENCES: readonly ColorModePreference[] = ['system', 'light', 'dark', 'high-contrast']\n\nconst ICON: Record<ColorModePreference, IconName> = {\n system: 'monitor',\n light: 'sun',\n dark: 'moon',\n 'high-contrast': 'contrast',\n}\n\nconst LABEL: Record<ColorModePreference, string> = {\n system: 'system',\n light: 'light',\n dark: 'dark',\n 'high-contrast': 'high contrast',\n}\n\ninterface ColorModeContextValue {\n /** The user's chosen preference. */\n preference: ColorModePreference\n /** The concrete theme the preference resolves to (system → OS scheme). */\n theme: ThemeName\n /** Set the preference explicitly. */\n setPreference: (preference: ColorModePreference) => void\n /** Advance to the next preference in {@link modes} (wraps). */\n cycle: () => void\n /** The cycle order used by `cycle()` and the toggle. */\n modes: readonly ColorModePreference[]\n}\n\nconst ColorModeContext = createContext<ColorModeContextValue | null>(null)\n\n/**\n * Read the active color mode. Throws if used outside a {@link ColorModeProvider}.\n */\nexport function useColorMode(): ColorModeContextValue {\n const ctx = useContext(ColorModeContext)\n if (!ctx) {\n throw new Error('useColorMode must be used within a <ColorModeProvider>')\n }\n return ctx\n}\n\nconst canUseDom =\n !isNative && typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n\nfunction isPreference(value: unknown): value is ColorModePreference {\n return typeof value === 'string' && (PREFERENCES as readonly string[]).includes(value)\n}\n\nfunction readStored(key: string | null): ColorModePreference | null {\n if (!key || isNative || typeof window === 'undefined') return null\n try {\n const raw = window.localStorage.getItem(key)\n return isPreference(raw) ? raw : null\n } catch {\n // Private mode / blocked storage — degrade to no persistence.\n return null\n }\n}\n\nfunction writeStored(key: string | null, value: ColorModePreference): void {\n if (!key || isNative || typeof window === 'undefined') return\n try {\n window.localStorage.setItem(key, value)\n } catch {\n /* ignore */\n }\n}\n\ninterface ColorModeProviderProps {\n children: ReactNode\n /** Initial preference (uncontrolled). Default `'system'`. For SSR with no\n * hydration flash, pass the value you persisted server-side (e.g. a cookie). */\n defaultPreference?: ColorModePreference\n /** Controlled preference — when set, the provider does not own the state. */\n preference?: ColorModePreference\n /** Fired whenever the preference changes (controlled or not). */\n onPreferenceChange?: (preference: ColorModePreference) => void\n /** Cycle order for `cycle()` / `<ColorModeToggle>`. Default `['light', 'dark']`. */\n modes?: readonly ColorModePreference[]\n /** localStorage key for persistence; `null` disables it. Default `'duro-color-mode'`. */\n storageKey?: string | null\n /** Wrap children in the DS `ThemeProvider` with the resolved theme. Default `true`.\n * Set `false` to drive your own ThemeProvider from `useColorMode().theme`. */\n applyTheme?: boolean\n}\n\n/**\n * Owns color-mode state, resolves `'system'` against the OS scheme, persists the\n * choice, and (by default) applies the resolved theme via `ThemeProvider`.\n * Pair with {@link ColorModeToggle} or read state via {@link useColorMode}.\n */\nexport function ColorModeProvider({\n children,\n defaultPreference = 'system',\n preference: controlled,\n onPreferenceChange,\n modes = ['light', 'dark'],\n storageKey = 'duro-color-mode',\n applyTheme = true,\n}: ColorModeProviderProps) {\n const [internal, setInternal] = useState<ColorModePreference>(controlled ?? defaultPreference)\n const preference = controlled ?? internal\n\n // Hydrate from storage AFTER mount (not in the initializer) so the first\n // client render matches the server and React doesn't warn about a mismatch.\n useEffect(() => {\n if (controlled !== undefined) return\n const stored = readStored(storageKey)\n if (stored) setInternal(stored)\n // Only on mount / when the key changes.\n }, [controlled, storageKey])\n\n const setPreference = useCallback(\n (next: ColorModePreference) => {\n if (controlled === undefined) setInternal(next)\n writeStored(storageKey, next)\n onPreferenceChange?.(next)\n },\n [controlled, storageKey, onPreferenceChange],\n )\n\n // Track the OS scheme so `'system'` stays live. The initial value MUST be the\n // SSR-stable default ('dark', what the server renders without a DOM) so the\n // first client render matches the server — reading matchMedia in the\n // initializer would diverge (server 'dark' vs client's real scheme) and trip\n // a hydration mismatch. The effect reconciles to the real scheme after mount.\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('dark')\n useEffect(() => {\n if (!canUseDom) return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const onChange = () => setSystemTheme(mq.matches ? 'dark' : 'light')\n onChange()\n mq.addEventListener('change', onChange)\n return () => mq.removeEventListener('change', onChange)\n }, [])\n\n const theme: ThemeName = preference === 'system' ? systemTheme : preference\n\n const cycle = useCallback(() => {\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0]\n if (next) setPreference(next)\n }, [modes, preference, setPreference])\n\n const value = useMemo<ColorModeContextValue>(\n () => ({preference, theme, setPreference, cycle, modes}),\n [preference, theme, setPreference, cycle, modes],\n )\n\n return (\n <ColorModeContext.Provider value={value}>\n {applyTheme ? <ThemeProvider theme={theme}>{children}</ThemeProvider> : children}\n </ColorModeContext.Provider>\n )\n}\n\ninterface ColorModeToggleProps {\n /** Icon size token. Default `'md'` (18px). */\n size?: IconSize\n /** Override the announced label (otherwise auto-generated from current/next). */\n 'aria-label'?: string\n}\n\n/**\n * A compact icon button that cycles the color-mode preference through the\n * provider's `modes`. The glyph reflects the current preference\n * (sun/moon/monitor/contrast). Must be inside a {@link ColorModeProvider}.\n */\nexport function ColorModeToggle({size = 'md', 'aria-label': ariaLabel}: ColorModeToggleProps) {\n const {preference, cycle, modes} = useColorMode()\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0] ?? preference\n const label = ariaLabel ?? `Color mode: ${LABEL[preference]}. Switch to ${LABEL[next]}.`\n\n return (\n <html.button type=\"button\" aria-label={label} onClick={cycle} style={styles.button}>\n <Icon name={ICON[preference]} size={size} />\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n error: {\n color: colors.errorText,\n },\n success: {\n color: colors.successText,\n },\n warning: {\n color: colors.warningText,\n },\n\n // Weight overrides\n weightNormal: {\n fontWeight: typography.fontWeightNormal,\n },\n weightMedium: {\n fontWeight: typography.fontWeightMedium,\n },\n weightSemibold: {\n fontWeight: typography.fontWeightSemibold,\n },\n weightBold: {\n fontWeight: typography.fontWeightBold,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n\n // Truncate. minWidth: 0 lets a truncating Text actually shrink inside a\n // flex/grid container — without it, the default `min-width: auto` would\n // keep the element at its content width, so text-overflow: ellipsis would\n // never trigger and the text would just overflow the parent instead.\n truncate: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type TextVariant = 'bodySm' | 'bodyMd' | 'bodyLg' | 'caption' | 'label' | 'code' | 'overline'\nexport type TextColor = 'default' | 'muted' | 'accent' | 'error' | 'success' | 'warning'\n\ninterface TextProps {\n variant?: TextVariant\n color?: TextColor\n weight?: 'normal' | 'medium' | 'semibold' | 'bold'\n align?: 'start' | 'center' | 'end'\n truncate?: boolean\n as?: 'span' | 'p' | 'div'\n children: ReactNode\n}\n\nconst weightMap = {\n normal: styles.weightNormal,\n medium: styles.weightMedium,\n semibold: styles.weightSemibold,\n bold: styles.weightBold,\n} as const\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Text({\n variant = 'bodyMd',\n color = 'default',\n weight,\n align,\n truncate,\n as = 'span',\n children,\n}: TextProps) {\n const style = [\n typePresets[variant],\n styles[color],\n weight && weightMap[weight],\n align && alignMap[align],\n truncate && styles.truncate,\n ]\n\n if (as === 'p') return <html.p style={style}>{children}</html.p>\n if (as === 'div') return <html.div style={style}>{children}</html.div>\n return <html.span style={style}>{children}</html.span>\n}\n","import type {ReactNode} from 'react'\n\ninterface TimeProps {\n /**\n * The instant, machine-readable: a `Date` (written as its ISO string) or an\n * ISO 8601 string, which is passed through unchanged.\n */\n dateTime: Date | string\n /**\n * The exact date and time, shown on hover (\"8 October 2026, 14:03 UTC\"),\n * formatted by you in the reader's locale.\n */\n title?: string\n /** What the reader sees: a relative label from `relative()`, or a date. */\n children: ReactNode\n}\n\n/**\n * Time — a date or time in running text as a `<time>` element: the visible\n * text is yours (often `relative(date, {now, locale})`), the exact instant\n * goes in `dateTime` for machines and `title` for people.\n *\n * Web only. A raw `<time>`: react-strict-dom has no `html.time`, and the\n * element carries no style of its own (it inherits the text around it).\n */\nexport function Time({dateTime, title, children}: TimeProps) {\n const iso = typeof dateTime === 'string' ? dateTime : dateTime.toISOString()\n return (\n <time dateTime={iso} title={title}>\n {children}\n </time>\n )\n}\n","// Pure date arithmetic behind Time: no React, no react-strict-dom, so the\n// unit project tests it in Node.\n\nexport interface RelativeOptions {\n /**\n * The instant to measure from. Required: read the clock once where the data\n * is loaded (a route loader) and pass the same value to the server and the\n * client render, so both produce the same text. Never `Date.now()` during a\n * render — the client would hydrate a different string.\n */\n now: Date | number\n /** BCP 47 locale(s) for the words (\"3 days ago\", \"il y a 3 jours\"). */\n locale: string | readonly string[]\n /**\n * `auto` (default) says \"yesterday\" / \"tomorrow\" / \"now\" where the locale has\n * a word for it; `always` keeps the number (\"1 day ago\").\n */\n numeric?: 'auto' | 'always'\n}\n\ntype Step = readonly [Intl.RelativeTimeFormatUnit, number]\n\n// Each unit is used while |difference| stays below the next one. Months and\n// years are average lengths: a relative label is a rounded reading, the\n// exact instant goes in the dateTime attribute.\nconst SECOND = 1000\nconst MINUTE = 60 * SECOND\nconst HOUR = 60 * MINUTE\nconst DAY = 24 * HOUR\nconst WEEK = 7 * DAY\nconst MONTH = 30.436875 * DAY\nconst YEAR = 365.2425 * DAY\n\nconst STEPS: readonly Step[] = [\n ['second', SECOND],\n ['minute', MINUTE],\n ['hour', HOUR],\n ['day', DAY],\n ['week', WEEK],\n ['month', MONTH],\n ['year', YEAR],\n]\n\nconst LIMITS: Record<Intl.RelativeTimeFormatUnit, number> = {\n second: MINUTE,\n seconds: MINUTE,\n minute: HOUR,\n minutes: HOUR,\n hour: DAY,\n hours: DAY,\n day: WEEK,\n days: WEEK,\n week: MONTH,\n weeks: MONTH,\n month: YEAR,\n months: YEAR,\n quarter: Infinity,\n quarters: Infinity,\n year: Infinity,\n years: Infinity,\n}\n\nfunction toTime(value: Date | number | string): number {\n return typeof value === 'number' ? value : new Date(value).getTime()\n}\n\n/**\n * How far `date` is from `now`, in words, in the caller's locale:\n * `relative(lastCommit, {now, locale: 'en'})` → \"3 days ago\". Built on\n * `Intl.RelativeTimeFormat`; the largest unit that keeps the count at least 1\n * is used, rounded to the nearest whole unit.\n *\n * An unparseable date throws a `RangeError` (as `Intl` does): check the data\n * before rendering it.\n */\nexport function relative(date: Date | number | string, options: RelativeOptions): string {\n const {now, locale, numeric = 'auto'} = options\n const target = toTime(date)\n const from = toTime(now)\n if (!Number.isFinite(target) || !Number.isFinite(from)) {\n throw new RangeError(`relative: invalid date ${String(date)}`)\n }\n const diff = target - from\n const [unit, size] =\n STEPS.find(([unit]) => Math.abs(diff) < LIMITS[unit]) ?? STEPS[STEPS.length - 1]\n // `+ 0` turns a -0 into 0, so \"now\" is not \"0 seconds ago\" in `always` mode.\n const value = Math.round(diff / size) + 0\n return new Intl.RelativeTimeFormat(locale as string | string[], {numeric}).format(value, unit)\n}\n","import {createContext, useContext} from 'react'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface ToggleGroupContextValue {\n value: string[]\n toggle: (itemValue: string) => void\n disabled: boolean\n orientation: Orientation\n size: ToggleSize\n /** Items wrap onto rows with their own borders (and roving focus). */\n wrap: boolean\n /** The item holding the group's single tab stop (wrap only). */\n tabStopValue: string | null\n register: (itemValue: string, el: HTMLElement) => () => void\n onItemFocus: (itemValue: string) => void\n}\n\nexport const ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null)\n\nexport function useToggleGroup() {\n return useContext(ToggleGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n cursor: 'pointer',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n transitionProperty: 'background-color, border-color, color, opacity',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': borders.focusRing},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n minWidth: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n minHeight: {default: null, '@media (pointer: coarse)': sizes.touchTarget},\n },\n sizeDefault: {\n padding: `${spacing.sm} ${spacing.md}`,\n fontSize: typography.fontSizeSm,\n borderRadius: radii.sm,\n gap: spacing.sm,\n },\n sizeSmall: {\n padding: `${spacing.xs} ${spacing.sm}`,\n fontSize: typography.fontSizeXs,\n borderRadius: radii.sm,\n gap: spacing.xs,\n // Every small control is at least controlSm tall, whatever it holds (5.6).\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n // wrapped toggles: a fixed block size per size, the touch target under a\n // coarse pointer. ToggleGroup's maxRows arithmetic reads the same tokens.\n wrappedDefault: {\n boxSizing: 'border-box',\n height: {default: sizes.controlMd, '@media (pointer: coarse)': sizes.touchTarget},\n },\n wrappedSmall: {\n boxSizing: 'border-box',\n height: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n unpressed: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n color: colors.textMuted,\n },\n pressed: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n borderColor: colors.accent,\n color: colors.accentContrast,\n },\n grouped: {\n borderWidth: 0,\n borderRadius: 0,\n borderRightWidth: borders.hairline,\n borderRightStyle: 'solid',\n // Override any borderColor set by pressed state — dividers always use border token\n borderColor: colors.border,\n },\n // Pressed, in an attached group: the accent edge is drawn inset, inside the\n // border a neighbour's negative margin overlaps, so it shows on all four\n // sides without a z-index (which stays for focus).\n attachedPressed: {\n boxShadow: `inset 0 0 0 ${borders.hairline} ${colors.accent}`,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n})\n","import {type ReactNode, useCallback, useLayoutEffect, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useToggleGroup} from '../ToggleGroup/ToggleGroupContext'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\nimport {styles} from './styles.css'\n\nexport type ToggleSize = ControlSize\n\ninterface ToggleProps {\n /** Controlled pressed state (standalone usage). */\n pressed?: boolean\n /** Initial pressed state (uncontrolled, standalone usage). */\n defaultPressed?: boolean\n /** Callback fired when the pressed state changes (standalone usage). */\n onPressedChange?: (pressed: boolean) => void\n /** Unique value when used inside a ToggleGroup. */\n value?: string\n /** Prevents user interaction. */\n disabled?: boolean\n /** Size variant (overridden by ToggleGroup when grouped). */\n size?: ToggleSize\n 'aria-label'?: string\n children: ReactNode\n}\n\nconst wrappedSizeMap = {\n default: styles.wrappedDefault,\n small: styles.wrappedSmall,\n} as const\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Toggle({\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n value,\n disabled: disabledProp = false,\n size: sizeProp = 'default',\n 'aria-label': ariaLabel,\n children,\n}: ToggleProps) {\n const group = useToggleGroup()\n\n // When inside a ToggleGroup, derive pressed state from group context\n const groupPressed = group && value !== undefined ? group.value.includes(value) : undefined\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const size = group?.size ?? sizeProp\n\n const wrap = group?.wrap ?? false\n const ref = useRef<HTMLButtonElement>(null)\n const register = group?.register\n useLayoutEffect(() => {\n if (!wrap || !register || value === undefined || !ref.current) return\n return register(value, ref.current)\n }, [wrap, register, value])\n\n const [standalonePressed, setStandalonePressed] = useControllableValue(\n controlledPressed,\n defaultPressed,\n onPressedChange,\n )\n\n const pressed = groupPressed ?? standalonePressed\n const grouped = useGroupedControl<HTMLButtonElement>({disabled})\n // In a Toolbar the toolbar owns the roving tabindex, not a wrapping group.\n const roving = wrap && value !== undefined && !grouped.onFocus\n\n const handleClick = useCallback(() => {\n if (disabled) return\n if (isGrouped && value !== undefined) {\n group.toggle(value)\n } else {\n setStandalonePressed(!pressed)\n }\n }, [disabled, isGrouped, value, group, pressed, setStandalonePressed])\n\n return (\n <html.button\n ref={mergeRefs(ref, grouped.ref)}\n type=\"button\"\n tabIndex={\n grouped.onFocus\n ? grouped.tabIndex\n : roving\n ? group?.tabStopValue === value\n ? 0\n : -1\n : undefined\n }\n onFocus={grouped.onFocus ?? (roving ? () => group?.onItemFocus(value) : undefined)}\n aria-pressed={pressed}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={handleClick}\n data-pressed={pressed ? '' : undefined}\n style={[\n styles.base,\n sizeMap[size],\n pressed ? styles.pressed : styles.unpressed,\n wrap && wrappedSizeMap[size],\n // In an attached ButtonGroup the group joins the borders instead.\n isGrouped && !wrap && !grouped.attached && styles.grouped,\n disabled && styles.disabled,\n grouped.style,\n grouped.attached && pressed && styles.attachedPressed,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {useCallback, useEffect, useLayoutEffect, useRef, useState, type RefObject} from 'react'\n\nconst ROW_TOLERANCE = 2\n\nfunction sameOrder(a: string[], b: string[]) {\n return a.length === b.length && a.every((v, i) => v === b[i])\n}\n\n/**\n * Roving focus for a wrapping ToggleGroup (WAI-ARIA toolbar pattern): one tab\n * stop — the focused item, else the first pressed one, else the first — with\n * arrow keys in reading order, Up/Down by visual row, Home/End.\n */\nexport function useRovingFocus({\n enabled,\n pressed,\n rootRef,\n}: {\n enabled: boolean\n pressed: string[]\n rootRef: RefObject<HTMLElement | null>\n}) {\n const items = useRef(new Map<string, HTMLElement>())\n const [order, setOrder] = useState<string[]>([])\n const [focusedValue, setFocusedValue] = useState<string | null>(null)\n\n const sync = useCallback(() => {\n const entries = [...items.current.entries()].sort(([, a], [, b]) =>\n a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1,\n )\n const next = entries.map(([v]) => v)\n setOrder((prev) => (sameOrder(prev, next) ? prev : next))\n }, [])\n\n const register = useCallback(\n (value: string, el: HTMLElement) => {\n items.current.set(value, el)\n sync()\n return () => {\n if (items.current.get(value) === el) items.current.delete(value)\n sync()\n }\n },\n [sync],\n )\n\n // a focus holder that unmounted no longer holds the tab stop\n useLayoutEffect(() => {\n if (focusedValue !== null && !order.includes(focusedValue)) setFocusedValue(null)\n }, [order, focusedValue])\n\n const tabStopValue = !enabled\n ? null\n : focusedValue !== null && order.includes(focusedValue)\n ? focusedValue\n : (pressed.find((v) => order.includes(v)) ?? order[0] ?? null)\n\n // native listener: RSD's onKeyDown event is a reduced shape (as in Tree)\n useEffect(() => {\n const root = rootRef.current\n if (!enabled || !root) return\n function onKeyDown(e: KeyboardEvent) {\n if (e.altKey || e.ctrlKey || e.metaKey) return\n const els = order\n .map((v) => items.current.get(v))\n .filter((el): el is HTMLElement => !!el && !(el as HTMLButtonElement).disabled)\n const i = els.indexOf(e.target as HTMLElement)\n if (i < 0) return\n let target: HTMLElement | undefined\n switch (e.key) {\n case 'ArrowRight':\n target = els[Math.min(i + 1, els.length - 1)]\n break\n case 'ArrowLeft':\n target = els[Math.max(i - 1, 0)]\n break\n case 'Home':\n target = els[0]\n break\n case 'End':\n target = els[els.length - 1]\n break\n case 'ArrowDown':\n case 'ArrowUp': {\n const down = e.key === 'ArrowDown'\n const cur = els[i].getBoundingClientRect()\n const cx = cur.left + cur.width / 2\n const rects = els.map((el) => el.getBoundingClientRect())\n // rows, by distinct top, in the direction of travel\n const tops = [...new Set(rects.map((r) => Math.round(r.top)))].sort((a, b) => a - b)\n const rowIdx = tops.findIndex((t) => Math.abs(t - cur.top) <= ROW_TOLERANCE)\n const nextTop = tops[rowIdx + (down ? 1 : -1)]\n if (nextTop === undefined) break\n let best = Infinity\n rects.forEach((r, k) => {\n if (Math.abs(r.top - nextTop) > ROW_TOLERANCE) return\n const d = Math.abs(r.left + r.width / 2 - cx)\n if (d < best) {\n best = d\n target = els[k]\n }\n })\n break\n }\n default:\n return\n }\n e.preventDefault()\n target?.focus()\n }\n root.addEventListener('keydown', onKeyDown)\n return () => root.removeEventListener('keydown', onKeyDown)\n }, [enabled, order, rootRef])\n\n return {\n tabStopValue,\n register,\n onItemFocus: setFocusedValue,\n items,\n }\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n overflow: 'hidden',\n },\n wrap: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: spacing.xs,\n borderWidth: 0,\n borderRadius: 0,\n overflow: 'visible',\n },\n // the scroll content: room for focus rings to draw\n scrollContent: {\n position: 'relative',\n padding: spacing.xs,\n },\n // shows rows + 0.5 rows so the cut-off row hints at more; shorter content\n // sizes itself (max, not fixed). Row heights match the wrapped Toggles.\n maxRowsSmall: (rows: number) => ({\n maxHeight: {\n default: `calc((${rows} + 0.5) * ${sizes.controlSm} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n '@media (pointer: coarse)': `calc((${rows} + 0.5) * ${sizes.touchTarget} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n },\n }),\n maxRowsDefault: (rows: number) => ({\n maxHeight: {\n default: `calc((${rows} + 0.5) * ${sizes.controlMd} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n '@media (pointer: coarse)': `calc((${rows} + 0.5) * ${sizes.touchTarget} + ${rows} * ${spacing.xs} + 2 * ${spacing.xs})`,\n },\n }),\n vertical: {\n flexDirection: 'column',\n },\n // In an attached ButtonGroup: no frame of its own; its toggles join the\n // group's border like any other control.\n inAttachedGroup: {\n borderWidth: 0,\n borderRadius: 0,\n overflow: 'visible',\n },\n})\n","import {type ReactNode, useCallback, useLayoutEffect, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport {ToggleGroupContext, type Orientation} from './ToggleGroupContext'\nimport {useFieldGroupLabelling} from '../Field/FieldContext'\nimport {ScrollArea} from '../ScrollArea/ScrollArea'\nimport {useRovingFocus} from './useRovingFocus'\nimport {useToolbar} from '../Toolbar/ToolbarContext'\nimport {useButtonGroup} from '../ButtonGroup/ButtonGroupContext'\nimport {styles} from './styles.css'\n\ninterface ToggleGroupProps {\n /** Controlled value — array of pressed item values. */\n value?: string[]\n /** Initial value (uncontrolled). */\n defaultValue?: string[]\n /** Callback fired when the set of pressed values changes. */\n onValueChange?: (value: string[]) => void\n /** When false, at most one item can be pressed at a time. */\n multiple?: boolean\n /** Prevents interaction with all items. */\n disabled?: boolean\n /** Layout direction. */\n orientation?: Orientation\n /** Size applied to all child toggles. */\n size?: ToggleSize\n /** Items wrap onto rows, each with its own border (default false). Enables\n * roving focus: one tab stop, arrow keys move between items. */\n wrap?: boolean\n // holds-until: the registry generator (packages/cli/scripts) reads a\n // discriminated union. `{wrap?: false; maxRows?: never} | {wrap: true;\n // maxRows?: number}` is the right type, but today it drops both props from\n // the registry the CLI and MCP serve.\n /** Caps a wrapping group at this many rows (plus half a row, hinting more)\n * and scrolls the rest. Only with `wrap`; ignored without it. */\n maxRows?: number\n /** Accessible name when the group is not inside a Field.Root (inside one,\n * the Field.Label names it). */\n 'aria-label'?: string\n /** id of the element that names the group, when not inside a Field.Root. */\n 'aria-labelledby'?: string\n children: ReactNode\n}\n\nexport function ToggleGroup({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n multiple = false,\n disabled = false,\n orientation = 'horizontal',\n size = 'default',\n wrap = false,\n maxRows,\n children,\n ...labelling\n}: ToggleGroupProps) {\n const a11y = useFieldGroupLabelling(labelling)\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const toggle = useCallback(\n (itemValue: string) => {\n const nextPressed = !value.includes(itemValue)\n let next: string[]\n if (multiple) {\n next = nextPressed ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n } else {\n next = nextPressed ? [itemValue] : []\n }\n setValue(next)\n },\n [value, multiple, setValue],\n )\n\n const rootRef = useRef<HTMLDivElement>(null)\n // Inside a Toolbar, the toolbar's roving focus covers these toggles: one\n // handler, never two. Inside an attached ButtonGroup, the group draws the\n // borders and corners.\n const inToolbar = useToolbar() !== null\n const inAttachedGroup = useButtonGroup() !== null\n const roving = useRovingFocus({enabled: wrap && !inToolbar, pressed: value, rootRef})\n const scrolls = wrap && maxRows !== undefined\n const pressedValue = value[0]\n\n // bring the pressed toggle into view by moving the viewport itself, never\n // scrollIntoView, which would scroll the page too\n const {items} = roving\n useLayoutEffect(() => {\n if (!scrolls || pressedValue === undefined) return\n const viewport = rootRef.current?.closest<HTMLElement>('[data-duro-scroll]')\n if (!viewport) return\n // Measured against the viewport's own box, not offsetTop: a positioned\n // ancestor (a Drawer panel) would otherwise be the reference.\n const centre = () => {\n const el = items.current.get(pressedValue)\n if (!el || viewport.clientHeight === 0) return false\n const top =\n el.getBoundingClientRect().top - viewport.getBoundingClientRect().top + viewport.scrollTop\n const centered = top - (viewport.clientHeight - el.offsetHeight) / 2\n const max = viewport.scrollHeight - viewport.clientHeight\n viewport.scrollTop = Math.min(Math.max(centered, 0), Math.max(max, 0))\n return true\n }\n if (centre()) return\n // Not laid out yet (a container still opening): centre once it has a size.\n const observer = new ResizeObserver(() => {\n if (centre()) observer.disconnect()\n })\n observer.observe(viewport)\n return () => observer.disconnect()\n }, [scrolls, pressedValue, items])\n\n const group = (\n <html.div\n ref={rootRef}\n role={inToolbar ? 'group' : 'toolbar'}\n aria-orientation={inToolbar ? undefined : orientation}\n {...a11y}\n style={[\n styles.root,\n orientation === 'vertical' && styles.vertical,\n wrap && styles.wrap,\n inAttachedGroup && styles.inAttachedGroup,\n ]}\n >\n {children}\n </html.div>\n )\n\n return (\n <ToggleGroupContext.Provider\n value={{\n value,\n toggle,\n disabled,\n orientation,\n size,\n wrap,\n tabStopValue: roving.tabStopValue,\n register: roving.register,\n onItemFocus: roving.onItemFocus,\n }}\n >\n {scrolls ? (\n <ScrollArea.Root>\n <ScrollArea.Viewport\n rovingOwner\n style={size === 'small' ? styles.maxRowsSmall(maxRows) : styles.maxRowsDefault(maxRows)}\n >\n <ScrollArea.Content>\n <html.div style={styles.scrollContent}>{group}</html.div>\n </ScrollArea.Content>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n ) : (\n group\n )}\n </ToggleGroupContext.Provider>\n )\n}\n\n// inside a Field.Root, the label names this group (see Field's `group`)\nToggleGroup.isFieldGroup = true as const\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n popup: {\n position: 'absolute',\n zIndex: layers.floating,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n },\n top: {\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: spacing.xs,\n },\n bottom: {\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginTop: spacing.xs,\n },\n left: {\n right: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginRight: spacing.xs,\n },\n right: {\n left: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginLeft: spacing.xs,\n },\n})\n","import {\n type ReactNode,\n createContext,\n useContext,\n useState,\n useRef,\n useCallback,\n useId,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ntype Placement = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipContextValue {\n open: boolean\n show: () => void\n hide: () => void\n tooltipId: string\n placement: Placement\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null)\n\nfunction useTooltip() {\n const ctx = useContext(TooltipContext)\n if (!ctx) throw new Error('Tooltip compound components must be used within Tooltip.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n content: ReactNode\n placement?: Placement\n delay?: number\n}\n\nfunction Root({children, content, placement = 'top', delay = 300}: RootProps) {\n const [open, setOpen] = useState(false)\n const tooltipId = useId()\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const hide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = null\n setOpen(false)\n }, [])\n\n return (\n <TooltipContext.Provider value={{open, show, hide, tooltipId, placement}}>\n <html.div style={styles.root}>\n {children}\n {open && (\n <html.div id={tooltipId} role=\"tooltip\" style={[styles.popup, styles[placement]]}>\n {content}\n </html.div>\n )}\n </html.div>\n </TooltipContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {open, show, hide, tooltipId} = useTooltip()\n\n return (\n <html.div\n onPointerEnter={show}\n onPointerLeave={hide}\n onFocus={show}\n onBlur={hide}\n aria-describedby={open ? tooltipId : undefined}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tooltip = {\n Root,\n Trigger,\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: spacing.sm,\n },\n vertical: {\n flexDirection: 'column',\n flexWrap: 'nowrap',\n alignItems: 'stretch',\n },\n})\n","import {type ReactNode, useCallback, useEffect, useMemo, useRef, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {Orientation} from '../../shared/types'\nimport {useOrderedRegistry} from '../../shared/useOrderedRegistry'\nimport {ToolbarContext, type ToolbarContextValue} from './ToolbarContext'\nimport {styles} from './styles.css'\n\nexport interface ToolbarProps {\n /** Names the toolbar (\"Formatting\"). Required: a toolbar is a landmark-like widget. */\n 'aria-label': string\n /**\n * Arrow keys follow the orientation: Left/Right (default) or Up/Down. A\n * vertical toolbar cannot hold a Select, whose closed trigger opens on\n * ArrowDown/ArrowUp. A Menu can: its closed trigger handles no arrow key,\n * so Up/Down move past it and Enter or Space opens it.\n */\n orientation?: Orientation\n children: ReactNode\n}\n\n/**\n * A row of controls with one tab stop (the WAI-ARIA toolbar pattern). Every\n * Button, Toggle and Select/Menu/Popover trigger inside it, through any\n * ButtonGroup, joins one roving tabindex: Tab enters at the last focused\n * control, Left/Right (Up/Down when vertical) move, Home/End jump to the ends.\n */\nexport function Toolbar({\n 'aria-label': ariaLabel,\n orientation = 'horizontal',\n children,\n}: ToolbarProps) {\n const rootRef = useRef<HTMLDivElement>(null)\n const {elements, order, register} = useOrderedRegistry()\n const [focusedId, setFocusedId] = useState<string | null>(null)\n\n const enabled = order.filter((entry) => !entry.disabled)\n const tabStop =\n focusedId !== null && enabled.some((entry) => entry.id === focusedId)\n ? focusedId\n : (enabled[0]?.id ?? null)\n\n const tabIndexOf = useCallback<ToolbarContextValue['tabIndexOf']>(\n (id) => {\n if (!order.some((entry) => entry.id === id)) return undefined\n return id === tabStop ? 0 : -1\n },\n [order, tabStop],\n )\n\n // One listener on the document, in the bubble phase, so it runs after the\n // controls' own handlers (React dispatches from the app root, below the\n // document). It acts only on a key aimed at one of this toolbar's own\n // registered controls, so keys typed in a portalled popup (a Popover's\n // input) never move toolbar focus. A control whose popup is open\n // (aria-expanded=\"true\") keeps its keys, and so does one that already\n // handled the key (defaultPrevented).\n useEffect(() => {\n const doc = rootRef.current?.ownerDocument\n if (!doc) return\n const [prev, next] =\n orientation === 'vertical' ? ['ArrowUp', 'ArrowDown'] : ['ArrowLeft', 'ArrowRight']\n function onKeyDown(e: KeyboardEvent) {\n if (e.defaultPrevented || e.altKey || e.ctrlKey || e.metaKey) return\n const els = order\n .filter((entry) => !entry.disabled)\n .map((entry) => elements.current.get(entry.id)?.el)\n .filter((el): el is HTMLElement => el !== undefined)\n const target = e.target as HTMLElement\n const i = els.indexOf(target)\n if (i < 0 || target.getAttribute('aria-expanded') === 'true') return\n let to: HTMLElement | undefined\n switch (e.key) {\n case next:\n to = els[Math.min(i + 1, els.length - 1)]\n break\n case prev:\n to = els[Math.max(i - 1, 0)]\n break\n case 'Home':\n to = els[0]\n break\n case 'End':\n to = els[els.length - 1]\n break\n default:\n return\n }\n e.preventDefault()\n to?.focus()\n }\n doc.addEventListener('keydown', onKeyDown)\n return () => doc.removeEventListener('keydown', onKeyDown)\n }, [order, orientation, elements])\n\n const ctx = useMemo<ToolbarContextValue>(\n () => ({register, tabIndexOf, onItemFocus: setFocusedId}),\n [register, tabIndexOf],\n )\n\n return (\n <ToolbarContext.Provider value={ctx}>\n <html.div\n ref={rootRef}\n role=\"toolbar\"\n aria-label={ariaLabel}\n aria-orientation={orientation}\n style={[styles.root, orientation === 'vertical' && styles.vertical]}\n >\n {children}\n </html.div>\n </ToolbarContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\nimport {layers} from '@duro-app/tokens/tokens/layers.css'\n\nexport const styles = css.create({\n trigger: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n },\n // size=\"small\": Toggle sizeSmall's values, as longhands so they win over the\n // trigger's own longhands. Every small control is at least controlSm tall,\n // whatever it holds, and the touch target under a coarse pointer.\n triggerSmall: {\n gap: spacing.xs,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n minHeight: {default: sizes.controlSm, '@media (pointer: coarse)': sizes.touchTarget},\n },\n // Inside a Dialog or Drawer: above that modal (same portal mount), below a\n // Select or Menu opened from inside the Popover.\n popupInModal: {\n zIndex: layers.popover,\n },\n // `raised`: over another floating surface, outside a modal (still under a\n // Dialog or Drawer opened later) and inside one (still under its popups).\n popupRaised: {\n zIndex: layers.floatingRaised,\n },\n popupInModalRaised: {\n zIndex: layers.popoverRaised,\n },\n popup: {\n position: 'fixed',\n top: 0,\n left: 0,\n boxSizing: 'border-box',\n backgroundColor: colors.bgCard,\n borderWidth: borders.hairline,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n padding: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n // Outside a modal: floating chrome, so a Dialog or Drawer opened later\n // (even from inside this Popover) covers it.\n zIndex: layers.floating,\n // The portal layer is pointer-events: none so clicks fall through it;\n // the popup takes them back.\n pointerEvents: 'auto',\n },\n close: {\n display: 'inline-flex',\n alignItems: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 0,\n borderRadius: radii.sm,\n cursor: 'pointer',\n },\n // Dynamic position — applied at runtime from the measured anchor.\n popupPosition: (top: number, left: number) => ({\n top,\n left,\n }),\n})\n","import {\n type ReactNode,\n type Ref,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\nimport {computePopoverPosition, type PopoverAlign, type PopoverSide} from './position'\nimport {isOutsidePress} from './outside'\nimport {PopoverLayerContext, type PopoverLayerContextValue} from './PopoverLayerContext'\nimport {useGroupedControl} from '../ButtonGroup/useGroupedControl'\nimport {ControlContextBoundary} from '../Toolbar/ControlContextBoundary'\nimport {mergeRefs} from '../../shared/mergeRefs'\nimport type {ControlSize} from '../../shared/types'\nimport {useInModal} from '../../shared/ModalContext'\n\n// --- Context ---\n\ntype IgnoreEntry = Element | null | (() => Element | null)\n\ninterface PopoverContextValue {\n open: boolean\n setOpen: (open: boolean) => void\n popoverId: string\n side: PopoverSide\n align: PopoverAlign\n anchor?: () => DOMRect\n triggerRef: React.RefObject<HTMLButtonElement | null>\n popupRef: React.RefObject<HTMLDivElement | null>\n repositionRef: React.RefObject<(() => void) | null>\n}\n\nconst PopoverContext = createContext<PopoverContextValue | null>(null)\n\nfunction usePopover(part: string) {\n const ctx = useContext(PopoverContext)\n if (!ctx) throw new Error(`Popover.${part} must be used within Popover.Root`)\n return ctx\n}\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nconst OFFSET = 4 // `xs` token\n\n// --- Root ---\n\nexport interface PopoverHandle {\n /** Re-measure the anchor and re-place the popup. */\n reposition: () => void\n}\n\ninterface RootProps {\n children: ReactNode\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n side?: PopoverSide\n align?: PopoverAlign\n /** Virtual anchor: a viewport rect. Replaces the Trigger as the anchor. */\n anchor?: () => DOMRect\n /** Elements (or getters) whose pointerdown does not count as an outside press. */\n ignore?: ReadonlyArray<IgnoreEntry>\n ref?: Ref<PopoverHandle>\n}\n\nfunction Root({\n children,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n side = 'bottom',\n align = 'start',\n anchor,\n ignore,\n ref,\n}: RootProps) {\n const [inner, setInner] = useState(defaultOpen)\n const controlled = openProp !== undefined\n const open = controlled ? openProp : inner\n const popoverId = useId()\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const popupRef = useRef<HTMLDivElement | null>(null)\n const repositionRef = useRef<(() => void) | null>(null)\n const previousFocusRef = useRef<HTMLElement | null>(null)\n const ignoreRef = useRef(ignore)\n ignoreRef.current = ignore\n const openRef = useRef(open)\n openRef.current = open\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!controlled) setInner(next)\n if (next !== openRef.current) onOpenChange?.(next)\n },\n [controlled, onOpenChange],\n )\n\n useImperativeHandle(ref, () => ({reposition: () => repositionRef.current?.()}), [])\n\n // Focus: into the popup on open, back to the trigger (or the previously\n // focused element when there is no trigger) on close.\n const wasOpenRef = useRef(false)\n useEffect(() => {\n if (open && !wasOpenRef.current) {\n previousFocusRef.current = document.activeElement as HTMLElement | null\n const popup = popupRef.current\n if (popup) {\n const first = popup.querySelector<HTMLElement>(FOCUSABLE)\n ;(first ?? popup).focus({preventScroll: true})\n }\n } else if (!open && wasOpenRef.current) {\n const target = triggerRef.current ?? previousFocusRef.current\n target?.focus?.()\n previousFocusRef.current = null\n }\n wasOpenRef.current = open\n }, [open])\n\n // Esc and outside press.\n useEffect(() => {\n if (!open) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key !== 'Escape' || e.defaultPrevented) return\n e.preventDefault()\n setOpen(false)\n }\n\n function onPointerDown(e: PointerEvent) {\n const ignored = (ignoreRef.current ?? []).map((entry) =>\n typeof entry === 'function' ? entry() : entry,\n )\n const inside = [popupRef.current, triggerRef.current, ...ignored, ...layersRef.current]\n if (isOutsidePress(e.target as Node | null, inside)) setOpen(false)\n }\n\n document.addEventListener('keydown', onKeyDown)\n document.addEventListener('pointerdown', onPointerDown, true)\n return () => {\n document.removeEventListener('keydown', onKeyDown)\n document.removeEventListener('pointerdown', onPointerDown, true)\n }\n }, [open, setOpen])\n\n const layersRef = useRef(new Set<Element>())\n // A nested Popover's layers are inside its parent too.\n const parentLayer = useContext(PopoverLayerContext)\n const layerCtx = useMemo<PopoverLayerContextValue>(\n () => ({\n register: (el) => {\n layersRef.current.add(el)\n const unregisterParent = parentLayer?.register(el)\n return () => {\n layersRef.current.delete(el)\n unregisterParent?.()\n }\n },\n // Inside a raised Popup, this Popover is raised too.\n raised: parentLayer?.raised,\n }),\n [parentLayer],\n )\n useLayoutEffect(() => {\n const popup = popupRef.current\n if (!open || !popup) return\n return parentLayer?.register(popup)\n }, [open, parentLayer])\n\n const ctx: PopoverContextValue = {\n open,\n setOpen,\n popoverId,\n side,\n align,\n anchor,\n triggerRef,\n popupRef,\n repositionRef,\n }\n\n return (\n <PopoverContext.Provider value={ctx}>\n <PopoverLayerContext.Provider value={layerCtx}>{children}</PopoverLayerContext.Provider>\n </PopoverContext.Provider>\n )\n}\n\n// --- Trigger ---\n// Trigger IS the button (like Menu.Trigger): give it a label, not a Button.\n\ninterface TriggerProps {\n children: ReactNode\n /** Accessible name: required when the label is an icon only. */\n 'aria-label'?: string\n /** `small` matches a small Toggle or Button beside it. Default: `default`. */\n size?: ControlSize\n /** The trigger <button>, e.g. to measure it or return focus to it. */\n ref?: Ref<HTMLButtonElement>\n}\n\nfunction Trigger({children, 'aria-label': ariaLabel, size = 'default', ref}: TriggerProps) {\n const {open, setOpen, popoverId, triggerRef} = usePopover('Trigger')\n const grouped = useGroupedControl<HTMLButtonElement>()\n\n return (\n <html.button\n ref={mergeRefs(triggerRef, grouped.ref, ref)}\n tabIndex={grouped.tabIndex}\n onFocus={grouped.onFocus}\n type=\"button\"\n onClick={() => setOpen(!open)}\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-controls={open ? popoverId : undefined}\n style={[styles.trigger, size === 'small' && styles.triggerSmall, grouped.style]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Popup ---\n\ninterface PopupProps {\n children: ReactNode\n /** Accessible name for the dialog. */\n label: string\n /**\n * Draw over another floating surface: `layers.floatingRaised` outside a\n * modal, `layers.popoverRaised` inside a Dialog or Drawer, instead of\n * `floating` / `popover`. For one floating thing that must cover a sibling\n * one (a link editor over a format bar), never for covering a modal: a\n * Dialog opened later still covers it. A Popover nested inside a raised one\n * is raised too. Default: inherited, else `false`.\n */\n raised?: boolean\n}\n\nfunction Popup({children, label, raised}: PopupProps) {\n const {open, popoverId, side, align, anchor, triggerRef, popupRef, repositionRef} =\n usePopover('Popup')\n const [coords, setCoords] = useState({top: 0, left: 0})\n // Inside ThemeProvider's portal layer, like Select/Dialog/Drawer: theme\n // tokens cascade into the popup and it stacks above dialogs.\n const mount = usePortalMount()\n const inModal = useInModal()\n const layer = useContext(PopoverLayerContext)\n const isRaised = raised ?? layer?.raised ?? false\n // Re-provided around the children: the Root can't see this prop, and a\n // Popover nested in here reads it to stay above this one.\n const raisedLayer = useMemo<PopoverLayerContextValue | null>(\n () => (layer ? {...layer, raised: isRaised} : null),\n [layer, isRaised],\n )\n\n // Measure before paint on open; re-measure on scroll/resize (capture phase\n // catches any scrolling ancestor) and when Root.reposition() is called.\n useLayoutEffect(() => {\n if (!open) {\n repositionRef.current = null\n return\n }\n const update = () => {\n const popup = popupRef.current\n if (!popup) return\n const rect = anchor ? anchor() : triggerRef.current?.getBoundingClientRect()\n if (!rect) return\n const next = computePopoverPosition({\n anchor: {top: rect.top, left: rect.left, width: rect.width, height: rect.height},\n popup: {width: popup.offsetWidth, height: popup.offsetHeight},\n viewport: {width: window.innerWidth, height: window.innerHeight},\n side,\n align,\n offset: OFFSET,\n })\n setCoords((prev) =>\n prev.top === next.top && prev.left === next.left ? prev : {top: next.top, left: next.left},\n )\n }\n repositionRef.current = update\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n repositionRef.current = null\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, side, align, anchor, triggerRef, popupRef, repositionRef])\n\n if (!open || typeof document === 'undefined') return null\n\n return createPortal(\n <html.div\n ref={popupRef}\n id={popoverId}\n role=\"dialog\"\n aria-label={label}\n tabIndex={-1}\n style={[\n styles.popup,\n inModal && styles.popupInModal,\n isRaised && (inModal ? styles.popupInModalRaised : styles.popupRaised),\n styles.popupPosition(coords.top, coords.left),\n ]}\n >\n <PopoverLayerContext.Provider value={raisedLayer}>\n <ControlContextBoundary>{children}</ControlContextBoundary>\n </PopoverLayerContext.Provider>\n </html.div>,\n mount ?? document.body,\n )\n}\n\n// --- Close ---\n\nfunction Close({children}: {children: ReactNode}) {\n const {setOpen} = usePopover('Close')\n\n return (\n <html.button type=\"button\" onClick={() => setOpen(false)} style={styles.close}>\n {children}\n </html.button>\n )\n}\n\nexport const Popover = {\n Root,\n Trigger,\n Popup,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {microSpacing, radii, spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\nimport {borders} from '@duro-app/tokens/tokens/borders.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n track: {\n position: 'relative',\n width: sizes.switchTrackW,\n height: sizes.switchTrackH,\n borderRadius: radii.full,\n borderWidth: 0,\n padding: 0,\n cursor: 'inherit',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': borders.focusRing},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: borders.focusOffset,\n flexShrink: 0,\n },\n trackUnchecked: {\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n trackChecked: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n },\n thumb: {\n position: 'absolute',\n top: microSpacing.px2,\n left: microSpacing.px2,\n width: sizes.switchThumb,\n height: sizes.switchThumb,\n borderRadius: radii.full,\n backgroundColor: colors.fixedLight,\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n thumbChecked: {\n // Travel: the track less the thumb and both insets.\n transform: `translateX(calc(${sizes.switchTrackW} - ${sizes.switchThumb} - 2 * ${microSpacing.px2}))`,\n },\n // Layered on visuallyHidden.base: a native input is also made transparent.\n input: {\n opacity: 0,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\nimport {visuallyHidden} from '../../styles/visually-hidden.css'\n\ninterface SwitchProps {\n /** Controlled checked state. */\n checked?: boolean\n /** Initial checked state (uncontrolled). */\n defaultChecked?: boolean\n /** Callback fired when the checked state changes. */\n onCheckedChange?: (checked: boolean) => void\n /** Prevents user interaction. */\n disabled?: boolean\n /** Form field name for the hidden input. */\n name?: string\n /** Value submitted when checked. */\n value?: string\n /** Label content rendered beside the switch. */\n children?: ReactNode\n}\n\nexport function Switch({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n name,\n value,\n children,\n}: SwitchProps) {\n const [checked, setChecked] = useControllableValue(\n controlledChecked,\n defaultChecked,\n onCheckedChange,\n )\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleClick = useCallback(() => {\n if (disabled) return\n setChecked(!checked)\n // Keep hidden input in sync for form submission\n if (inputRef.current) {\n inputRef.current.checked = !checked\n }\n }, [disabled, checked, setChecked])\n\n return (\n <html.label\n style={[styles.root, isNative && styles.nativeFlex, disabled && styles.rootDisabled]}\n >\n {!isNative && (\n // Web: hidden real checkbox carries a11y + form submission. RSD has no\n // <input type=checkbox> on native, so it's omitted there and the\n // button below carries the switch role instead.\n <html.input\n ref={inputRef}\n type=\"checkbox\"\n role=\"switch\"\n name={name}\n value={value}\n checked={controlledChecked !== undefined ? controlledChecked : undefined}\n defaultChecked={controlledChecked === undefined ? defaultChecked : undefined}\n disabled={disabled}\n aria-checked={checked}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n onCheckedChange?.(e.target.checked)\n }}\n style={[visuallyHidden.base, styles.input]}\n />\n )}\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-hidden={isNative ? undefined : true}\n role={isNative ? 'switch' : undefined}\n aria-checked={isNative ? checked : undefined}\n disabled={disabled}\n onClick={handleClick}\n style={[styles.track, checked ? styles.trackChecked : styles.trackUnchecked]}\n >\n <html.span style={[styles.thumb, checked && styles.thumbChecked]} />\n </html.button>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'column',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignStretch: {alignItems: 'stretch'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type SpacingKey = SpacingToken\n\ninterface StackProps {\n gap?: SpacingKey\n align?: 'start' | 'center' | 'end' | 'stretch'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n stretch: styles.alignStretch,\n} as const\n\nexport function Stack({gap = 'md', align = 'stretch', children}: StackProps) {\n return <html.div style={[styles.base, gapMap[gap], alignMap[align]]}>{children}</html.div>\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignBaseline: {alignItems: 'baseline'},\n alignStretch: {alignItems: 'stretch'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface InlineProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end' | 'baseline' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n baseline: styles.alignBaseline,\n stretch: styles.alignStretch,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Inline({gap = 'sm', align = 'center', justify = 'start', children}: InlineProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface ClusterProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Cluster({gap = 'sm', align = 'start', justify = 'start', children}: ClusterProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {breakpoints} from '@duro-app/tokens/tokens/breakpoints.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\n// Where a split collapses to one column — measured on the split's OWN\n// container, not the viewport. A split nested in another split (a list/detail\n// board inside a nav/content shell) has far less room than the window: at a\n// 768px viewport the shell leaves ~408px for its content column, and a\n// viewport-keyed inner split would still open there and squeeze its detail\n// pane to ~150px. Container queries collapse each split on what it actually\n// has. defineConsts strings, inlined into the @container text at build time.\nconst SPLIT_WIDE_BP = breakpoints.md // 280px rail + real content\nconst SPLIT_BP = breakpoints.sm // 240px list + ≥ 384px detail\nconst CONTENT_ASIDE_BP = breakpoints.md // reading column + 320px aside\n\nexport const styles = css.create({\n base: {\n display: 'grid',\n },\n col1: {gridTemplateColumns: '1fr'},\n col2: {gridTemplateColumns: 'repeat(2, 1fr)'},\n col3: {gridTemplateColumns: 'repeat(3, 1fr)'},\n col4: {gridTemplateColumns: 'repeat(4, 1fr)'},\n col5: {gridTemplateColumns: 'repeat(5, 1fr)'},\n col6: {gridTemplateColumns: 'repeat(6, 1fr)'},\n autoFit: (minWidth: string | number) => ({\n gridTemplateColumns: `repeat(auto-fill, minmax(${minWidth}, 1fr))`,\n }),\n // Hosts the @container query for a named layout. A container cannot query\n // itself, so the grid sits inside this wrapper (the Table.rootContainer\n // pattern). Only `layout` grids get it: counted and weighted grids keep\n // their DOM exactly as before.\n splitContainer: {\n containerType: 'inline-size',\n },\n // Asymmetric list/detail splits: a bounded first column, the rest for the\n // detail; one column when the container is narrower than the breakpoint.\n // Static entries rather than a parameter because the pair (widths +\n // collapse point) is the design decision — a screen picks a split, it does\n // not tune one.\n split: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_BP})`]: `minmax(${sizes.gridColSm}, 1fr) minmax(0, 2fr)`,\n },\n },\n splitWide: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_WIDE_BP})`]: `minmax(${sizes.gridColMd}, 1fr) minmax(0, 3fr)`,\n },\n },\n // A reading column beside an Aside (table of contents, related links): the\n // aside keeps its asideW track, the content takes the rest and may shrink\n // (minmax(0, …) so a wide code block scrolls instead of widening the\n // grid); one column below md.\n contentAside: {\n gridTemplateColumns: {\n default: 'minmax(0, 1fr)',\n [`@container (min-width: ${CONTENT_ASIDE_BP})`]: `minmax(0, 1fr) ${sizes.asideW}`,\n },\n },\n // Weighted columns: `[1, 2]` → `1fr 2fr` (see columns.ts).\n template: (tracks: string) => ({\n gridTemplateColumns: tracks,\n }),\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n\n // --- native only (see NativeGrid in Grid.tsx) -----------------------------\n // React Native honours `display: 'flex'` only, and RSD gives it web flex\n // semantics, so the row direction is explicit.\n nativeRow: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n // A definite width so percentage bases resolve in Yoga's measure pass;\n // against an auto width the line breaks come out wrong and the container\n // under-reports its height (verified on the iOS simulator).\n width: '100%',\n },\n // border-box is explicit: react-strict-dom mirrors the web default\n // (content-box) on native, which adds the gap padding on top of the basis\n // and overflows the row so every cell wraps.\n nativeCell: (basis: string) => ({\n flexBasis: basis,\n flexShrink: 0,\n boxSizing: 'border-box',\n }),\n // Auto-fit approximation: start at the minimum width, grow to fill. flexGrow\n // is fine here: this style is native-only, so RSD-web's forced flex-grow: 0\n // never applies.\n nativeMinCell: (minWidth: string | number) => ({\n flexBasis: minWidth,\n flexGrow: 1,\n boxSizing: 'border-box',\n }),\n cellGapLeftXs: {paddingLeft: spacing.xs},\n cellGapLeftSm: {paddingLeft: spacing.sm},\n cellGapLeftMs: {paddingLeft: spacing.ms},\n cellGapLeftMd: {paddingLeft: spacing.md},\n cellGapLeftLg: {paddingLeft: spacing.lg},\n cellGapLeftXl: {paddingLeft: spacing.xl},\n cellGapLeftXxl: {paddingLeft: spacing.xxl},\n cellGapLeftXxxl: {paddingLeft: spacing.xxxl},\n cellGapTopXs: {paddingTop: spacing.xs},\n cellGapTopSm: {paddingTop: spacing.sm},\n cellGapTopMs: {paddingTop: spacing.ms},\n cellGapTopMd: {paddingTop: spacing.md},\n cellGapTopLg: {paddingTop: spacing.lg},\n cellGapTopXl: {paddingTop: spacing.xl},\n cellGapTopXxl: {paddingTop: spacing.xxl},\n cellGapTopXxxl: {paddingTop: spacing.xxxl},\n})\n","// Pure column arithmetic behind Grid. No react-strict-dom, no platform: this\n// is what the unit project tests, and what both the web and native renderers\n// derive their styles from.\n\nexport type GridColumnCount = 1 | 2 | 3 | 4 | 5 | 6\n\n/**\n * Column spec: a count (equal columns) or a list of weights (`[1, 2]` is a\n * one-third / two-thirds split). Weights are the portable form of\n * `grid-template-columns: 1fr 2fr` — the only shape both runtimes can\n * honour, since React Native has no grid.\n */\nexport type GridColumns = GridColumnCount | readonly number[]\n\n/** Normalise a column spec to weights; `undefined` when no spec was given\n * (the caller then falls back to auto-fit or a single column). An invalid\n * weight list (empty, non-finite or non-positive entries) is a programming\n * error, reported in development and treated as one column. */\nexport function columnWeights(columns: GridColumns | undefined): readonly number[] | undefined {\n if (columns === undefined) return undefined\n if (typeof columns === 'number') return Array.from({length: columns}, () => 1)\n const valid = columns.length > 0 && columns.every((w) => Number.isFinite(w) && w > 0)\n if (!valid) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Grid: \\`columns\\` must be a non-empty list of positive numbers, got ${JSON.stringify(columns)}. Falling back to one column.`,\n )\n }\n return [1]\n }\n return columns\n}\n\n/** Web track list: `[1, 2]` → `\"1fr 2fr\"`. */\nexport function gridTemplate(weights: readonly number[]): string {\n return weights.map((w) => `${w}fr`).join(' ')\n}\n\n/** Native cell basis for the child at `index`: its column's share of the row\n * as a percentage string Yoga accepts (`\"33.3333%\"`). Children flow into\n * columns in order and wrap, exactly like grid auto-placement. */\nexport function cellBasis(weights: readonly number[], index: number): string {\n const total = weights.reduce((sum, w) => sum + w, 0)\n const share = (weights[index % weights.length] / total) * 100\n // Four decimals keeps a row summing to 100% within Yoga's tolerance while\n // never exceeding it (which would wrap the last cell).\n return `${Math.floor(share * 10000) / 10000}%`\n}\n\n/** Where the child at `index` sits in an `columnCount`-wide flow: whether it\n * opens a row (no gap to its left) and whether it is on the first row (no\n * gap above). Drives the native gap-as-padding scheme. */\nexport function cellPosition(\n index: number,\n columnCount: number,\n): {opensRow: boolean; firstRow: boolean} {\n return {opensRow: index % columnCount === 0, firstRow: index < columnCount}\n}\n","import {Children, type ReactNode, type Ref} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {isNative} from '../../platform'\nimport {cellBasis, cellPosition, columnWeights, gridTemplate, type GridColumns} from './columns'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {resolveLength, resolveTrack, type GridTrack, type Length} from '../../shared/length'\n\nexport type GridLayout = 'split' | 'split-wide' | 'content-aside'\n\ninterface GridProps {\n gap?: SpacingToken\n /** A column count (equal columns) or weights: `[1, 2]` gives a one-third /\n * two-thirds split. Weights are the portable form of a track list — a CSS\n * template string would be silently ignored on native. */\n columns?: GridColumns\n /** Responsive auto-fit: as many columns of at least this width as fit — a\n * size token key (`\"gridColMd\"`) or a relative length. Wins over `columns`\n * when both are set. On native this approximates to cells of that minimum\n * width that grow and wrap. */\n minColumnWidth?: Length\n /**\n * A named responsive layout. `split` is list/detail (1:2, list ≥ 240px),\n * `split-wide` is nav/content (1:3, nav ≥ 280px). Each collapses to one\n * column on the width of its OWN container — `split` below `sm` (640px),\n * `split-wide` below `md` (768px) — so a split nested inside another\n * split, or beside an open DetailPanel, collapses when it runs out of room\n * rather than when the window does. `content-aside` is a reading column\n * beside an `Aside` (`asideW`, 320px), one column below `md`. Wins over\n * `columns` / `minColumnWidth`.\n */\n layout?: GridLayout\n /**\n * An explicit track list, for columns that are not all fractions: a size\n * token for a fixed track (`['1fr', 'asideW']`), or `minmax()` /\n * `fit-content()` of tokens and fractions (`'minmax(gridColXs, 1fr)'`).\n * A px is a type error. Web only — on native it falls back to equal\n * columns, one per track. Wins over `columns` / `minColumnWidth`; `layout`\n * wins over it.\n */\n tracks?: readonly GridTrack[]\n /**\n * The Grid's outer element: with a `layout`, the wrapper its container\n * query measures (hand it to `useContainerBelow` to follow the same\n * collapse); otherwise the grid itself. Web only: on native the ref is not\n * attached.\n */\n ref?: Ref<HTMLDivElement>\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\n// Fixed counts keep their static classes so existing web consumers emit the\n// exact CSS they did before; only weight lists go through the dynamic style.\nconst columnsMap = {\n 1: styles.col1,\n 2: styles.col2,\n 3: styles.col3,\n 4: styles.col4,\n 5: styles.col5,\n 6: styles.col6,\n} as const\n\nconst layoutMap = {\n split: styles.split,\n 'split-wide': styles.splitWide,\n 'content-aside': styles.contentAside,\n} as const satisfies Record<GridLayout, unknown>\n\n// On native the named layouts are their weights; there is no media query to\n// collapse them, so a split stays a split on a phone (see NativeGrid).\nconst layoutWeights = {\n split: [1, 2],\n 'split-wide': [1, 3],\n 'content-aside': [2, 1],\n} as const satisfies Record<GridLayout, readonly number[]>\n\nconst cellGapLeftMap = {\n xs: styles.cellGapLeftXs,\n sm: styles.cellGapLeftSm,\n ms: styles.cellGapLeftMs,\n md: styles.cellGapLeftMd,\n lg: styles.cellGapLeftLg,\n xl: styles.cellGapLeftXl,\n xxl: styles.cellGapLeftXxl,\n xxxl: styles.cellGapLeftXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst cellGapTopMap = {\n xs: styles.cellGapTopXs,\n sm: styles.cellGapTopSm,\n ms: styles.cellGapTopMs,\n md: styles.cellGapTopMd,\n lg: styles.cellGapTopLg,\n xl: styles.cellGapTopXl,\n xxl: styles.cellGapTopXxl,\n xxxl: styles.cellGapTopXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nexport function Grid({\n gap = 'md',\n columns,\n minColumnWidth,\n layout,\n tracks,\n ref,\n children,\n}: GridProps) {\n const hasTracks = tracks !== undefined && tracks.length > 0\n if (isNative) {\n return (\n <NativeGrid\n gap={gap}\n columns={layout ? layoutWeights[layout] : hasTracks ? tracks.map(() => 1) : columns}\n minColumnWidth={layout || hasTracks ? undefined : minColumnWidth}\n >\n {children}\n </NativeGrid>\n )\n }\n\n const columnStyle = layout\n ? layoutMap[layout]\n : hasTracks\n ? styles.template(tracks.map((track) => String(resolveTrack(track))).join(' '))\n : minColumnWidth\n ? styles.autoFit(resolveLength(minColumnWidth))\n : typeof columns === 'number'\n ? columnsMap[columns]\n : columns\n ? styles.template(gridTemplate(columnWeights(columns) ?? [1]))\n : undefined\n\n const grid = (\n <html.div ref={layout ? undefined : ref} style={[styles.base, gapMap[gap], columnStyle]}>\n {children}\n </html.div>\n )\n // A named layout answers its container query from a wrapper: an element\n // cannot query its own size.\n return layout ? (\n <html.div ref={ref} style={styles.splitContainer}>\n {grid}\n </html.div>\n ) : (\n grid\n )\n}\n\n/**\n * React Native has no grid, so the native Grid is a wrapping flex row with\n * each child in a cell:\n *\n * - Weighted / counted columns: the cell's `flexBasis` is its column's share\n * of the row. Percentages plus a real `gap` would overflow and wrap early,\n * so the gap is padding on the cell instead — left on every cell that does\n * not open a row, top on every row after the first. RN is border-box, so\n * the bases still sum to exactly 100%, and the gap stays a token.\n * - `minColumnWidth`: cells start at that width and grow, and the row uses a\n * real `gap`, since here wrapping is width-driven and row membership is\n * not known from the index.\n *\n * Only this branch wraps children; on web grid children stay direct, so\n * existing DOM trees are untouched.\n */\nfunction NativeGrid({gap = 'md', columns, minColumnWidth, children}: GridProps) {\n const items = Children.toArray(children)\n if (minColumnWidth) {\n return (\n <html.div style={[styles.nativeRow, gapMap[gap]]}>\n {items.map((child, index) => (\n <html.div key={index} style={styles.nativeMinCell(resolveLength(minColumnWidth))}>\n {child}\n </html.div>\n ))}\n </html.div>\n )\n }\n const weights = columnWeights(columns) ?? [1]\n return (\n <html.div style={styles.nativeRow}>\n {items.map((child, index) => {\n const {opensRow, firstRow} = cellPosition(index, weights.length)\n return (\n <html.div\n key={index}\n style={[\n styles.nativeCell(cellBasis(weights, index)),\n !opensRow && cellGapLeftMap[gap],\n !firstRow && cellGapTopMap[gap],\n ]}\n >\n {child}\n </html.div>\n )\n })}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {layoutSpacing} from '@duro-app/tokens/tokens/layout-spacing.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {sizes} from '@duro-app/tokens/tokens/sizes.css'\n\nexport const styles = css.create({\n root: {\n width: '100%',\n },\n container: {\n width: '100%',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n // Max-width presets\n maxSm: {maxWidth: sizes.pageSm},\n maxMd: {maxWidth: sizes.pageMd},\n maxLg: {maxWidth: sizes.pageLg},\n // Horizontal padding\n padSm: {paddingLeft: layoutSpacing.containerSm, paddingRight: layoutSpacing.containerSm},\n padMd: {paddingLeft: layoutSpacing.containerMd, paddingRight: layoutSpacing.containerMd},\n padLg: {paddingLeft: layoutSpacing.containerLg, paddingRight: layoutSpacing.containerLg},\n // Vertical spacing\n headerPadding: {paddingTop: spacing.lg},\n mainPadding: {paddingTop: spacing.xl, paddingBottom: spacing.xl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type PageShellMaxWidth = 'sm' | 'md' | 'lg' | 'full'\nexport type PageShellPadding = 'sm' | 'md' | 'lg'\n\ninterface PageShellProps {\n /** Max-width preset: sm (600), md (800), lg (1200), full (none). Default: 'lg' */\n maxWidth?: PageShellMaxWidth\n /** Horizontal padding preset. Default: 'md' (24px) */\n padding?: PageShellPadding\n /** Header element rendered above the main content with same constraints */\n header?: ReactNode\n children: ReactNode\n}\n\nconst maxWidthMap = {\n sm: styles.maxSm,\n md: styles.maxMd,\n lg: styles.maxLg,\n full: null,\n} as const\n\nconst paddingMap = {\n sm: styles.padSm,\n md: styles.padMd,\n lg: styles.padLg,\n} as const\n\nexport function PageShell({maxWidth = 'lg', padding = 'md', header, children}: PageShellProps) {\n const mw = maxWidthMap[maxWidth]\n const pad = paddingMap[padding]\n\n return (\n <html.div style={styles.root}>\n {header != null && (\n <html.header style={[styles.container, styles.maxLg, pad, styles.headerPadding]}>\n {header}\n </html.header>\n )}\n <html.main style={[styles.container, mw, pad, styles.mainPadding]}>{children}</html.main>\n </html.div>\n )\n}\n","import {useRef, useState, useEffect} from 'react'\nimport {breakpointsPx, type Breakpoint} from '@duro-app/tokens/tokens/breakpoints.css'\n\nexport type ContainerSize = 'compact' | 'default' | 'spacious'\n\ninterface UseContainerQueryOptions {\n compactBelow?: Breakpoint | number\n spaciousAbove?: Breakpoint | number\n}\n\nfunction toPx(value: Breakpoint | number): number {\n return typeof value === 'number' ? value : breakpointsPx[value]\n}\n\nexport function useContainerQuery<T extends HTMLElement = HTMLElement>(\n options: UseContainerQueryOptions = {},\n): {\n ref: React.RefObject<T | null>\n size: ContainerSize\n} {\n const {compactBelow: compactOpt = 'xs', spaciousAbove: spaciousOpt = 'md'} = options\n const compactBelow = toPx(compactOpt)\n const spaciousAbove = toPx(spaciousOpt)\n const ref = useRef<T | null>(null)\n const [size, setSize] = useState<ContainerSize>('default')\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n let rafId: number | null = null\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId)\n\n rafId = requestAnimationFrame(() => {\n const entry = entries[0]\n if (!entry) return\n\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n\n if (width < compactBelow) {\n setSize('compact')\n } else if (width >= spaciousAbove) {\n setSize('spacious')\n } else {\n setSize('default')\n }\n })\n })\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n if (rafId !== null) cancelAnimationFrame(rafId)\n }\n }, [compactBelow, spaciousAbove])\n\n return {ref, size}\n}\n"],"names":["createActionBarStore","entries","listeners","Set","notify","forEach","l","subscribe","cb","add","delete","getSnapshot","push","id","render","update","map","e","remove","filter","ActionBarContext","createContext","ActionBarProvider","children","storeRef","useRef","current","store","useSyncExternalStore","topEntry","length","jsxs","useActionBarStack","$","_c","useContext","useId","t0","some","register","t1","unregister","t2","bb0","t3","entries_0","isTop","t4","managed","spacing","xs","sm","lg","xxl","_temp","styles","overlay","$$css","centered","inset","end","val","undefined","overlayOffset","bottom","overlayEmphasized","selectedCount","selectedCountEmphasized","actions","actionsScroll","closeButton","closeButtonEmphasized","separator","separatorEmphasized","ActionBarContent","selectedItemCount","selectedLabel","isEmphasized","onClearSelection","dismissible","bottomOffset","insetInlineEnd","countStr","label","t5","t6","SPACING_PX","t7","t8","t9","t10","t11","jsx","_rsdMerge","_rsdDefaultStyles","span","t12","t13","div","t14","t15","t16","t17","button","t18","ActionBarInner","props","stack","isActive","renderBar","useEffect","ActionBar","strokeIcons","Fragment","clock","forbidden","shield","lock","key","layers","repeat","database","route","menu","server","box","image","tag","users","mail","plug","pin","search","mic","sun","moon","monitor","contrast","filledIcons","Icon","name","size","ICON_SIZES","filled","base","iconWrap","content","error","success","warning","info","defaultIcons","resolveIcon","icon","variant","Alert","resolvedIcon","isNative","mergeRefs","refs","value","ref","sizeDefault","sizeSmall","primary","secondary","link","inverseSecondary","danger","fullWidth","disabled","nativeFlex","sizeMap","default","small","Button","type","onClick","ariaLabel","ariaExpanded","ariaControls","grouped","useGroupedControl","tabIndex","onFocus","style","backdrop","backdropOpen","backdropClosing","viewport","viewportRight","viewportLeft","viewportBottom","panel","panelHorizontal","panelVertical","panelLeftBorder","md","slideInRight","slideOutRight","slideInLeft","slideOutLeft","slideInBottom","slideOutBottom","closeDurationInstant","closeDurationMinimal","closeDurationQuick","closeDurationFast","closeDurationBrisk","closeDurationBase","closeDurationSlow","header","title","description","body","footer","inlineWrapper","ModalContext","useInModal","DISMISS_THRESHOLD","VELOCITY_THRESHOLD","DISMISS_DURATION","OPPOSITE_MAX_OVERSCROLL","useSwipeDismiss","anchor","enabled","onDismiss","Symbol","for","startX","startY","currentX","currentY","startTime","swiping","panelSize","deferredScroll","pointerId","stateRef","isHorizontal","state","dx","getMovement","movement","panelEl","Number","dataset","progress","sign","transform","closest","previousElementSibling","opacity","String","Math","max","absMovement","abs","overscroll","shadowSpread","round","boxShadow","applyTransform","resetStyles","panelEl_1","dismissTransform","transition","backdrop_1","dismissed","done","addEventListener","once","setTimeout","animateDismiss","animateSnapBack","_temp2","handlePointerDown","target","scrollEl","rect","getBoundingClientRect","state_0","clientX","clientY","Date","now","width","height","beginCapture","setPointerCapture","animation","isAtDismissEdge","el","scrollLeft","clientWidth","scrollWidth","scrollTop","handlePointerMove","e_0","state_1","dx_0","dy","sqrt","scrollEl_0","preventDefault","movement_0","handlePointerUp","_e","state_2","movement_1","elapsed","velocity","handlePointerCancel","state_3","handleTouchMove","e_1","passive","removeEventListener","panelEl_2","backdrop_2","cleanup","panelEl_0","backdrop_0","closeDurationMap","instant","minimal","quick","fast","brisk","slow","DrawerContext","useDrawer","ctx","Error","Root","open","controlledOpen","defaultOpen","onOpenChange","dismissable","swipeDismiss","closeAnimationDuration","isControlled","internalOpen","setInternalOpen","useState","closing","setClosing","closingTimerRef","panelRef","isOpen","titleId","descriptionId","clearTimeout","requestOpen","DURATION_MS","requestClose","requestCloseImmediate","onKeyDown","stopPropagation","document","prev","overflow","closeDuration","Trigger","slideInMap","right","left","slideOutMap","viewportAnchorMap","Portal","swipeEnabled","mount","usePortalMount","setPanel","attachPanel","handleBackdropClick","t19","t20","t21","ControlContextBoundary","t22","t23","t24","node","t25","createPortal","Header","Title","h2","Description","p","Body","Footer","Close","Drawer","subtle","isPlainClick","event","metaKey","ctrlKey","shiftKey","altKey","defaultPrevented","linkClickHandler","href","onNavigate","TextLink","rel","a","useContainerBelow","breakpoint","below","setBelow","limit","breakpointsPx","element","ResizeObserver","observer","entry","contentBoxSize","inlineSize","contentRect","observe","disconnect","container","grid","gridSm","gridMd","gridLg","skip","rail","railSm","railMd","railLg","railBrand","railBody","railFooter","drawerFooter","bar","barSm","barMd","barLg","barEmptySm","barEmptyMd","barEmptyLg","narrowSm","narrowMd","narrowLg","narrowItem","main","mainSm","mainMd","mainLg","AppShellContext","HeaderSlotContext","useAppShell","variants","barEmpty","narrow","menuLabel","closeLabel","skipLabel","brand","collapseBelow","setOpen","containerRef","menuButtonRef","mainRef","generatedId","hasHeader","mainId","rest","Children","child","isValidElement","Main","wasOpen","focus","_href","FOCUSABLE","Rail","close","drawerNavRef","foot","querySelector","nav","setRef","AppShell","root","offsetXs","offsetSm","offsetMs","offsetMd","offsetLg","offsetXl","offsetXxl","offsetXxxl","offsetMap","ms","xl","xxxl","Aside","offset","aside","sizeMd","sizeSm","highlight","Badge","list","item","BreadcrumbContext","useBreadcrumb","T0","T1","T2","items","toArray","Provider","html","ol","i","li","Item","Breadcrumb","sameEntries","b","every","useOrderedRegistry","Map","elements","order","setOrder","next","sort","sync","id_0","disabled_0","set","get","useLayoutEffect","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","horizontal","vertical","alignStart","alignCenter","alignEnd","verticalAlignStart","verticalAlignCenter","verticalAlignEnd","gapXs","gapSm","gapMd","attached","attachedVertical","gapMap","horizontalAlignMap","start","center","verticalAlignMap","ButtonGroup","orientation","align","gap","isVertical","alignStyle","findIndex","positionOf","ButtonGroupContext","Callout","elevated","outlined","interactive","sizeCompact","sizeFull","compact","full","Card","rootDisabled","boxUnchecked","boxChecked","input","visuallyHidden","text","Checkbox","checked","controlledChecked","defaultChecked","onChange","internalChecked","setInternalChecked","isChecked","handleChange","LiveRegion","politeness","hidden","typePresets","bodySm","bodyMd","bodyLg","caption","code","overline","headingSm","headingMd","headingLg","headingXl","displaySm","displayMd","displayLg","pre","CodeBlock","copyLabel","copiedLabel","copiedDuration","onCopyError","preRef","timerRef","copied","setCopied","scrollable","setScrollable","measure","copy","useCallback","navigator","clipboard","writeText","textContent","console","useControllableValue","controlledValue","defaultValue","internal","setInternal","v","setValue","rootHorizontal","FieldContext","useFieldContext","useFieldGroupLabelling","own","invalid","errorId","trim","describedBy","labelId","CheckboxGroupContext","useCheckboxGroup","labelling","onValueChange","a11y","itemValue","onToggle","itemDisabled","groupValue","groupDisabled","includes","isDisabled","isFieldGroup","CheckboxGroup","ColorInput","required","onBlur","fieldCtx","field","effectiveName","effectiveValue","effectiveOnChange","effectiveOnBlur","effectiveRef","effectiveDisabled","controlId","popup","popupOpen","popupClosing","reducedMotion","DialogContext","useDialog","closeOnEscape","initialFocus","popupRef","closeCountRef","registerClose","previousFocusRef","wasOpenRef","activeElement","preventScroll","devWarnOnce","target_0","isConnected","Dialog","InputGroupContext","useInputGroupContext","ghost","ghostError","ghostDisabled","inGroup","mono","Input","font","placeholder","readOnly","minLength","maxLength","min","step","inputMode","pattern","autoComplete","autoFocus","ariaDescribedby","onKeyUp","groupCtx","Boolean","effectiveVariant","extraProps","rootSide","labelSide","fieldContent","necessityIcon","necessityLabel","holdsGroup","found","group","formCtx","useFormContext","isGroup","ControlledRoot","StaticRoot","labelPosition","invalidProp","control","useRHFFormContext","fieldState","useController","effectiveLabelPosition","effectiveNecessityIndicator","necessityIndicator","message","errorMessage","FieldLayout","labelNode","Label","isSide","indicator","Field","ConfirmDialog","confirmPhrase","promptLabel","cancelLabel","confirmSlot","onConfirm","confirmLabel","typed","setTyped","satisfied","handleOpenChange","itemLifted","handle","handlePicked","zone","listVertical","listHorizontal","gapMs","gapLg","gapXl","gapXxl","gapXxxl","fill","zoneReady","zoneOver","zoneRefused","ghostTilt","refusal","ghostSize","MOVE_THRESHOLD_PX","TOUCH_HOLD_MS","HYSTERESIS_PX","EDGE_PX","MAX_STEP_PX","domOrder","verdictOf","ok","reason","sameTarget","index","sameRefusal","defaultAnnouncement","where","position","count","kind","keyboard","isPointerCaptureMiss","err","DOMException","Engine","onDrop","zones","handles","drag","ghostEl","refusalText","announcement","focusRequest","stops","firstStops","stopsDirty","session","frame","pointer","x","y","geometry","baseline","listener","tick","s","active","paintGhost","scrolled","autoScroll","refused","locate","retarget","scheduleFrame","onScroll","emit","tabStop","explicit","has","registerZone","record","registerItem","registerHandle","recomputeStops","queueMicrotask","firstEl","cur","handlesIn","ids","zoneSequence","z","POSITIVE_INFINITY","say","announce","labelOf","itemId","zoneLabel","placeAt","others","payload","data","captureOrder","exclude","byZone","values","isScroller","known","getComputedStyle","scrolls","o","yes","overflowY","scrollHeight","clientHeight","overflowX","captureGeometry","scrollingElement","chains","chain","documentElement","up","parentElement","r","scrollers","top","rectOf","g","d","seen","zoneByEl","elementsFromPoint","zoneId","verdict","accepts","pos","over","otherId","k","mid","bias","wasRefused","onDragOver","offsetX","offsetY","dist","ceil","window","innerWidth","innerHeight","down","canY","canX","requestAnimationFrame","activate","preview","capture","begin","source","currentTarget","downAt","timeStamp","holdTimer","pointerType","finishPointer","commit","cancelAnimationFrame","hasPointerCapture","releasePointerCapture","attach","onMove","moved","hypot","onUp","onCancel","onKey","focusHandle","pick","other","moveWithin","delta","moveAcross","j","indexOf","endKeyboard","blurHandle","moveFocus","inZone","there","keyDown","RootContext","useRoot","part","useSelect","engine","select","fallback","noopSubscribe","ZoneContext","ItemContext","GhostContext","DEFAULT_INSTRUCTIONS","renderPlaceholder","instructions","instructionsId","useMemo","Ghost","Instructions","Placeholder","scrollIntoView","block","inline","Zone","inGhost","dragging","placeholderAtEnd","n","zoneContext","zoneCtx","webkitUserSelect","webkitTouchCallout","onPointerDown","lifted","placeholderBefore","itemContext","Handle","picked","wantsFocus","useDragDrop","_temp3","_temp4","_temp5","_temp6","e_2","DragDrop","wrapper","wrapperOpenSm","wrapperCloseSm","wrapperOpenMd","wrapperCloseMd","contentSm","contentMd","slideIn","slideOut","bodyPadded","DetailPanelContext","useDetailPanel","present","setPresent","setLabelId","registerTitle","unregisterTitle","wrapperOpenMap","wrapperCloseMap","Content","padded","DetailPanel","action","EmptyState","muted","accent","defaultVariantMap","alignMap","Heading","level","color","resolvedVariant","h1","h3","h4","h5","h6","itemSelected","empty","ListContext","selectionMode","useList","selected","ItemText","Actions","Empty","List","Text","legend","LegendIdContext","legendId","hasLegend","Legend","Fieldset","addon","addonStart","addonEnd","addonClickable","addonDisabled","dynamicStyles","minWidth","Addon","positionStyle","resolveLength","InputGroup","LinkButton","track","fillAt","percent","toneStyle","Meter","valueText","tone","fraction","clamped","card","PageNavContext","usePageNav","Prev","Next","PageNav","bordered","Panel","Prose","circle","circleUnchecked","circleChecked","dot","RadioGroupContext","useRadioGroup","onSelect","handleClick","RadioGroup","scrollbar","scrollbarVertical","scrollbarHorizontal","scrollbarHidden","scrollbarVisible","thumb","viewportMaxHeight","maxHeight","thumbVertical","thumbHorizontal","ScrollAreaContext","useScrollArea","useScrollAreaRoot","viewportId","viewportRef","contentRef","setScrollTop","setScrollLeft","setScrollHeight","setScrollWidth","setClientHeight","setClientWidth","scrolling","setScrolling","scrollTimerRef","vp","handleScroll","vp_0","vp_1","Viewport","rovingOwner","Scrollbar","maxScroll","scrollOffset","valueNow","Thumb","draggingRef","startPosRef","startScrollRef","thumbSizePercent","trackSize","thumbPixelSize","thumbOffset","thumbStyle","scrollRatio","scrollDelta","ScrollArea","inputWrapper","inputWrapperFocused","trigger","ComboboxContext","useCombobox","useComboboxRoot","inputValue","controlledInputValue","onInputChange","initialLabels","initial","internalInputValue","setInternalInputValue","setInputValue","labels","setLabels","highlightedId","setHighlightedId","listboxId","rootRef","inputRef","itemsRef","orderRef","openPopup","selectValue","v_0","label_0","registerLabel","itemValue_0","keys","elA","elB","query","toLowerCase","id_1","item_0","getVisibleOrder","handleKeyDown","visibleOrder","bb137","prev_2","idx_0","idx","prev_1","prev_0","item_1","ownWidth","maxHeightListMaxH","maxHeightListMaxHSm","option","optionSelected","optionHighlighted","optionDisabled","maxHeightMap","listMaxH","listMaxHSm","defaultOptionId","replace","ch","charCodeAt","toString","getAnchorProps","ListboxContext","useListbox","matchAnchorWidth","onHighlight","getOptionId","listRef","place","setPlace","anchorRef","computePopoverPosition","offsetWidth","offsetHeight","side","keep","CSS","escape","usePopoverLayer","optionId","Option","idProp","highlighted","Listbox","localRef","focused","setFocused","Popup","selectedValue","isSelected","isVisible","el_0","Object","Combobox","VisuallyHidden","triggerSmall","popupPosition","itemHighlighted","SelectContext","useSelectRoot","triggerRef","toggle","root_0","handleKeyDown_0","order_0","items_0","bb126","prev_3","Value","display","coords","setCoords","listboxRef","backdropRef","isHighlighted","Select","groupTrigger","groupTriggerActive","chevron","chevronOpen","section","sectionLabel","itemActive","marker","markerActive","itemIcon","itemLabel","SideNavContext","useSideNav","activeValue","expandedGroups","setExpandedGroups","toggleGroup","group_0","next_0","expandGroup","Group","groupKey","defaultExpanded","isExpanded","groupRef","triggerId","panelId","hasActiveChild","Section","SideNav","spinner","srOnly","Spinner","region","toast","iconSuccess","iconError","iconInfo","iconWarning","closeBtn","DEFAULT_DURATION","createToastStore","seq","opts","duration","variantIcon","variantIconStyle","ToastContext","useToast","ToastItem","dismissLabel","hovered","setHovered","paused","remaining","started","timer","contains","relatedTarget","ToastProvider","dismiss","StatusIcon","TagGroupContext","useTagGroup","wrap","removableMd","removableSm","removeButton","removeButtonDisabled","removableSizeMap","Tag","removable","removableProp","onRemove","onRemoveProp","disabledProp","isGrouped","editable","removeTag","setFocusedIndex","removeLabel","tagContent","role","containerError","containerDisabled","containerStatic","useTagGroupCtx","onValidate","gridId","setValues","focusedIndex","setEditable","setAnnouncement","isInvalid","trimmed","addTag","value_0","getElementById","querySelectorAll","validate","commitValueRef","raw","selectionStart","handlePaste","clipboardData","getData","split","handleFocus","TagGroup","listMenu","linkMenu","level3","linkActive","focusable","TableOfContentsContext","useTableOfContents","openProp","listId","isMenu","ul","TableOfContents","rootVertical","tab","tabVertical","tabActiveHorizontal","tabActiveVertical","tabIndicatorActive","indicatorHorizontal","indicatorVertical","indicatorOffsetH","indicatorOffsetV","tabDisabled","TabsContext","useTabs","useTabsRoot","tabsRef","indicatorActive","setIndicatorActive","registerTab","setIndicator","offsetLeft","offsetTop","ro","listEl","tabs","prevKey","nextKey","targetValue","bb36","currentIdx_0","i_1","currentIdx","val_1","i_0","val_0","Tab","tabId","Tabs","heading","axis","todayLabel","labelText","labelDescription","today","face","faceSelected","barPlanned","barDone","fillDone","barText","edge","edgeStart","edgeEnd","DAY_MS","dayOf","date","floor","parse","dateOf","day","toISOString","slice","TimelineContext","useTimeline","at","first","days","locale","formatDate","t","toLocaleDateString","month","timeZone","ticks","d_0","Row","planned","Bar","onStartChange","onEndChange","startLabel","endLabel","dropZone","last","EdgeSlider","by","ArrowLeft","ArrowDown","ArrowRight","ArrowUp","PageDown","PageUp","Timeline","row","rowLink","indent","rowFocused","rowSelected","chevronLeaf","meta","TreeContext","useTree","TreeLevelContext","TYPEAHEAD_RESET_MS","ariaLabelledBy","expanded","onExpandedChange","selectedInner","setSelectedInner","expandedInner","setExpandedInner","focusValue","setFocusValue","keyboardFocus","setKeyboardFocus","x_0","setExpanded","v_1","v_2","treeValue","typeahead","rootEl","Array","from","focusItem","isOpen_0","getAttribute","parent","click","toLocaleLowerCase","c","needle","treeText","startsWith","onFocusIn","v_3","matches","onFocusOut","textValue","hasChildren","rowStyles","rowContent","Tree","Textarea","rows","textarea","PREFERENCES","ICON","system","light","dark","LABEL","ColorModeContext","useColorMode","canUseDom","matchMedia","isPreference","readStored","localStorage","getItem","writeStored","setItem","ColorModeProvider","defaultPreference","preference","controlled","onPreferenceChange","modes","storageKey","applyTheme","stored","setPreference","systemTheme","setSystemTheme","mq","theme","cycle","ThemeProvider","ColorModeToggle","weightNormal","weightMedium","weightSemibold","weightBold","truncate","weightMap","normal","medium","semibold","bold","weight","as","Time","dateTime","iso","SECOND","MINUTE","HOUR","DAY","WEEK","MONTH","YEAR","STEPS","LIMITS","second","seconds","minute","minutes","hour","hours","week","weeks","months","quarter","Infinity","quarters","year","years","toTime","getTime","relative","options","numeric","isFinite","RangeError","diff","unit","find","Intl","RelativeTimeFormat","format","ToggleGroupContext","useToggleGroup","wrappedDefault","wrappedSmall","unpressed","pressed","attachedPressed","wrappedSizeMap","Toggle","controlledPressed","defaultPressed","onPressedChange","sizeProp","groupPressed","standalonePressed","setStandalonePressed","roving","tabStopValue","onItemFocus","ROW_TOLERANCE","sameOrder","useRovingFocus","focusedValue","setFocusedValue","els","bb81","cx","rects","tops","rowIdx","nextTop","best","r_0","a_0","b_0","el_1","scrollContent","maxRowsSmall","sizes","controlSm","touchTarget","maxRowsDefault","controlMd","inAttachedGroup","ToggleGroup","maxRows","multiple","nextPressed","inToolbar","useToolbar","useButtonGroup","pressedValue","centre","TooltipContext","useTooltip","placement","delay","tooltipId","show","hide","Tooltip","Toolbar","focusedId","setFocusedId","entry_0","entry_1","tabIndexOf","doc","ownerDocument","entry_3","to","ToolbarContext","entry_2","popupInModal","popupRaised","popupInModalRaised","PopoverContext","usePopover","OFFSET","ignore","inner","setInner","popoverId","repositionRef","ignoreRef","openRef","useImperativeHandle","reposition","ignored","inside","layersRef","isOutsidePress","parentLayer","PopoverLayerContext","layerCtx","unregisterParent","raised","inModal","layer","isRaised","raisedLayer","Popover","trackUnchecked","trackChecked","thumbChecked","Switch","onCheckedChange","setChecked","alignStretch","stretch","Stack","alignBaseline","justifyStart","justifyCenter","justifyEnd","justifyBetween","justifyMap","between","Inline","justify","Cluster","col1","col2","col3","col4","col5","col6","autoFit","splitContainer","splitWide","contentAside","template","tracks","nativeRow","nativeCell","basis","nativeMinCell","cellGapLeftXs","cellGapLeftSm","cellGapLeftMs","cellGapLeftMd","cellGapLeftLg","cellGapLeftXl","cellGapLeftXxl","cellGapLeftXxxl","cellGapTopXs","cellGapTopSm","cellGapTopMs","cellGapTopMd","cellGapTopLg","cellGapTopXl","cellGapTopXxl","cellGapTopXxxl","columnWeights","columns","w","process","env","NODE_ENV","JSON","stringify","gridTemplate","weights","join","columnsMap","layoutMap","Grid","minColumnWidth","layout","hasTracks","columnStyle","resolveTrack","maxSm","maxMd","maxLg","padSm","padMd","padLg","headerPadding","mainPadding","maxWidthMap","paddingMap","PageShell","maxWidth","padding","mw","pad","toPx","useContainerQuery","compactBelow","spaciousAbove","compactOpt","spaciousOpt","setSize","rafId"],"mappings":"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"}
|