@duro-app/ui 3.2.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +9 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
- package/dist/components/Field/Field.d.ts +10 -1
- package/dist/components/Field/Field.d.ts.map +1 -1
- package/dist/components/Field/Field.meta.d.ts.map +1 -1
- package/dist/components/Field/Field.stories.d.ts +3 -0
- package/dist/components/Field/Field.stories.d.ts.map +1 -1
- package/dist/components/Field/FieldContext.d.ts +19 -0
- package/dist/components/Field/FieldContext.d.ts.map +1 -1
- package/dist/components/Fieldset/Fieldset.d.ts +1 -0
- package/dist/components/Fieldset/Fieldset.d.ts.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts +9 -1
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -1
- package/dist/components/ToggleGroup/ToggleGroup.d.ts +9 -1
- package/dist/components/ToggleGroup/ToggleGroup.d.ts.map +1 -1
- package/dist/index.js +1646 -1593
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +12 -0
- package/src/components/Field/Field.meta.ts +27 -0
- package/src/components/Field/Field.stories.tsx +93 -0
- package/src/components/Field/Field.tsx +51 -7
- package/src/components/Field/FieldContext.ts +25 -0
- package/src/components/Fieldset/Fieldset.tsx +26 -9
- package/src/components/RadioGroup/RadioGroup.tsx +12 -0
- package/src/components/ToggleGroup/ToggleGroup.tsx +12 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../tokens/src/keys.ts","../src/components/ActionBar/ActionBarProvider.tsx","../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/Button/styles.css.ts","../src/components/Button/Button.tsx","../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/components/Checkbox/Checkbox.tsx","../src/hooks/useControllableValue.ts","../src/components/CheckboxGroup/styles.css.ts","../src/components/CheckboxGroup/CheckboxGroup.tsx","../src/components/Field/FieldContext.ts","../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/Form/FormContext.ts","../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/Form/Form.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/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","../../tokens/src/themes/light.css.ts","../../tokens/src/themes/high-contrast.css.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/Combobox/Combobox.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/Tabs/styles.css.ts","../src/components/Tabs/TabsContext.ts","../src/components/Tabs/useTabsRoot.ts","../src/components/Tabs/Tabs.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/styles.css.ts","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tooltip/styles.css.ts","../src/components/Tooltip/Tooltip.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":["// Token key unions and raw numeric values, as plain TypeScript.\n//\n// The css.ts files can't export these: StyleX requires inline object literals,\n// and `css.defineVars` returns an opaque VarGroup whose keyof includes phantom\n// members (`__opaqueId`, `__tokens`). So the scales are duplicated here as the\n// typed source of truth for component props, Storybook argTypes, and tooling —\n// with zero StyleX/react-strict-dom imports, so this module is safe to load in\n// Node (tests, scripts, the ESLint plugin's drift test).\n//\n// `scripts/check-token-drift.mjs` runs in `prebuild` and fails the build if any\n// value here diverges from the corresponding css.ts literal.\n\n// Explicit .js extensions: this module is also typechecked under NodeNext\n// resolution (the ESLint plugin's tests import it via the `types` condition),\n// which rejects extensionless relative imports. Both are type-only, so they\n// are erased at build time.\nimport type {RawColors} from './raw.js'\n\nexport const SPACING_KEYS = ['xs', 'sm', 'ms', 'md', 'lg', 'xl', 'xxl', 'xxxl'] as const\nexport type SpacingToken = (typeof SPACING_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `spacing` (px).\nexport const SPACING_PX = {\n xs: 4,\n sm: 8,\n ms: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n xxxl: 64,\n} as const\n\nexport const RADIUS_KEYS = ['xs', 'sm', 'md', 'lg', 'full'] as const\nexport type RadiusToken = (typeof RADIUS_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `radii` (px).\nexport const RADII_PX = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n full: 9999,\n} as const\n\nexport const SHADOW_KEYS = ['sm', 'md', 'lg'] as const\nexport type ShadowToken = (typeof SHADOW_KEYS)[number]\n\n// Mirrors tokens/motion.css.ts `duration`, as numbers for setTimeout use.\nexport const DURATION_MS = {\n instant: 0,\n fast: 150,\n base: 200,\n slow: 280,\n} as const\nexport type DurationToken = keyof typeof DURATION_MS\n\n// Icon rendering sizes (SVG width/height, px). Not a css.defineVars scale —\n// icons size via attributes, not CSS custom properties.\nexport const ICON_SIZES = {\n sm: 16,\n md: 18,\n lg: 24,\n xl: 36,\n xxl: 48,\n} as const\nexport type IconSize = keyof typeof ICON_SIZES\n\n// Mirrors tokens/breakpoints.css.ts `breakpoints` (css.defineConsts), as\n// numbers. The css.ts file also exports `breakpointsPx`, but importing it\n// pulls react-strict-dom; tooling that only needs the numbers reads here.\nexport const BREAKPOINT_KEYS = ['xs', 'sm', 'md', 'lg', 'xl'] as const\nexport const BREAKPOINTS_PX = {\n xs: 480,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font sizes, in rem.\nexport const FONT_SIZE_REM = {\n fontSizeXs: 0.75,\n fontSizeSm: 0.875,\n fontSizeMd: 1,\n fontSizeLg: 1.125,\n fontSizeXl: 1.25,\n fontSizeHeading: 1.5,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font weights, as numbers.\nexport const FONT_WEIGHTS = {\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n} as const\n\n// Mirrors tokens/typography.css.ts `typeScale` fontSize1..9, in rem.\nexport const TYPE_SCALE_FONT_SIZE_REM = {\n fontSize1: 0.75,\n fontSize2: 0.8125,\n fontSize3: 0.875,\n fontSize4: 1,\n fontSize5: 1.125,\n fontSize6: 1.25,\n fontSize7: 1.5,\n fontSize8: 1.875,\n fontSize9: 2.25,\n} as const\n\n// Mirrors tokens/shadows.css.ts `shadows` (the base, dark palette) verbatim.\nexport const SHADOWS = {\n sm: '0 2px 4px rgba(0, 0, 0, 0.3)',\n md: '0 4px 12px rgba(0, 0, 0, 0.4)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.5)',\n} as const\n\n// Mirrors tokens/motion.css.ts `easing` verbatim.\nexport const EASINGS = {\n standard: 'ease',\n easeOut: 'cubic-bezier(0.32, 0.72, 0, 1)',\n easeIn: 'cubic-bezier(0.72, 0, 0.68, 0.28)',\n} as const\n\nexport type ColorToken = keyof RawColors\n\nexport type {Breakpoint} from './tokens/breakpoints.css.js'\n","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'\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'\n\nexport const styles = css.create({\n overlay: {\n position: 'fixed',\n bottom: spacing.lg,\n left: '50%',\n transform: 'translateX(-50%)',\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: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n boxShadow: shadows.lg,\n zIndex: 50,\n maxWidth: 'calc(100vw - 48px)',\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 closeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\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': 2,\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': 2,\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: 1,\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 /** 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 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 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}>{children}</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 // 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 // ---- 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 {spacing, radii} 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: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\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: 1,\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 {spacing, radii} 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: 2,\n paddingBottom: 2,\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 // 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'\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 {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'\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: 1,\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': 2,\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': 2,\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 },\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: 'rgba(0, 0, 0, 0.10)',\n ':hover': 'rgba(0, 0, 0, 0.18)',\n },\n borderColor: {\n default: 'rgba(0, 0, 0, 0.55)',\n ':hover': 'rgba(0, 0, 0, 0.70)',\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} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'inverseSecondary' | 'link' | 'danger'\nexport type ButtonSize = 'default' | 'small'\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 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 children,\n}: ButtonProps) {\n return (\n <html.button\n type={type}\n disabled={disabled}\n onClick={onClick}\n aria-label={ariaLabel}\n style={[\n styles.base,\n isNative && styles.nativeFlex,\n sizeMap[size],\n styles[variant],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.button>\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 },\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 disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\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 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' */\n gap?: ButtonGroupGap\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}: ButtonGroupProps) {\n const isVertical = orientation === 'vertical'\n const alignStyle = isVertical ? verticalAlignMap[align] : horizontalAlignMap[align]\n\n return (\n <html.div\n role=\"group\"\n style={[\n styles.base,\n isVertical ? styles.vertical : styles.horizontal,\n gapMap[gap],\n alignStyle,\n disabled && styles.disabled,\n ]}\n >\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'\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: 1,\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'\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: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n },\n outlined: {\n borderRadius: radii.md,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n filled: {\n borderRadius: radii.md,\n },\n interactive: {\n borderRadius: radii.md,\n borderWidth: 1,\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'\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: 18,\n height: 18,\n borderWidth: 1,\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: 5,\n height: 9,\n borderRightWidth: 2,\n borderRightStyle: 'solid',\n borderRightColor: colors.accentContrast,\n borderBottomWidth: 2,\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 input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\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 {type ReactNode, useState, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.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={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 {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'\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 children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n}: RootProps) {\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 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\nexport const CheckboxGroup = {\n Root,\n Item,\n}\n","import {createContext, useContext} from 'react'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\n\ninterface FieldContextValue {\n controlId: string\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","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n width: 44,\n height: 34,\n padding: 2,\n backgroundColor: colors.bg,\n borderWidth: 1,\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': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: 1,\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'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\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: 1001,\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 borderWidth: 1,\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 closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Sizes ---\n sm: {maxWidth: 400},\n md: {maxWidth: 520},\n lg: {maxWidth: 680},\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: 1,\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: 32,\n height: 32,\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: '1ms',\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\nexport type DialogSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\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}\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 backdrop closes the dialog. Default: true */\n dismissable?: 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 dismissable = 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 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\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 <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 }}\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\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n return (\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 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 {children}\n </html.div>\n </html.div>\n </>\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} = 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} = useDialog()\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'\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: 1,\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': 2,\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': 1,\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 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'\n\ninterface InputProps {\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 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 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 effectiveVariant = 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={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictInputProps['onChange']}\n onBlur={effectiveOnBlur as StrictInputProps['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[\n styles.base,\n styles[effectiveVariant],\n font === 'mono' && styles.mono,\n groupCtx?.inGroup && styles.inGroup,\n ]}\n {...extraProps}\n />\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport type LabelPosition = 'top' | 'side'\nexport type NecessityIndicator = 'icon' | 'label' | false\n\nexport interface FormContextValue {\n disabled: boolean\n labelPosition: LabelPosition\n necessityIndicator: NecessityIndicator\n}\n\nexport const FormContext = createContext<FormContextValue | null>(null)\n\nexport function useFormContext() {\n return useContext(FormContext)\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 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: 120,\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 invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}\n\nfunction Root({name, ...props}: RootProps) {\n const formCtx = useFormContext()\n if (name && formCtx) {\n return <ControlledRoot name={name} formCtx={formCtx} {...props} />\n }\n return <StaticRoot {...props} />\n}\n\n// Always calls useController — no conditional hooks\nfunction ControlledRoot({\n name,\n formCtx,\n invalid: invalidProp = false,\n required,\n disabled,\n labelPosition,\n children,\n}: {\n name: string\n formCtx: NonNullable<ReturnType<typeof useFormContext>>\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 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 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 invalid = false,\n required,\n disabled,\n labelPosition = 'top',\n children,\n}: {\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 descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled,\n labelPosition,\n }),\n [id, 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\n return (\n <html.label for={ctx?.controlId} style={[styles.label, isSide && styles.labelSide]}>\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 </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} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.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 zone: {\n borderRadius: radii.sm,\n transitionProperty: 'box-shadow, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // Every zone shows it can receive while something is in the air; the one\n // under the pointer lights up.\n zoneReady: {\n boxShadow: `inset 0 0 0 1px ${colors.border}`,\n },\n zoneOver: {\n boxShadow: `inset 0 0 0 2px ${colors.accent}`,\n backgroundColor: colors.infoBg,\n },\n ghost: {\n position: 'fixed',\n top: 0,\n left: 0,\n pointerEvents: 'none',\n zIndex: 1000,\n opacity: 0.9,\n cursor: 'grabbing',\n },\n ghostAt: (x: number, y: number, width: number, height: number) => ({\n width,\n height,\n transform: `translate3d(${x}px, ${y}px, 0)`,\n }),\n // Same visually-hidden recipe as TagGroup's live region.\n liveRegion: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {isNative} from '../../platform'\n\n// ---------------------------------------------------------------------------\n// DragDrop — move items between zones with one pointer, on mouse, pen and\n// touch alike.\n//\n// Pointer events are the single input path: a press arms a drag, movement\n// past a small threshold (or, on touch, a short hold) starts it, pointer\n// capture keeps the stream on the item, and release resolves the zone under\n// the pointer. The dragged item stays in the DOM (faded) while a ghost copy\n// follows the pointer, so layout never shifts mid-drag and a cancelled drag\n// costs nothing.\n//\n// Dragging is a pointer gesture only. Every consumer MUST keep a non-drag way\n// to do the same thing (a button that adds, a remove affordance) — that is\n// the keyboard and assistive path, and WCAG 2.5.7 requires it. The Root's\n// live region announces picks and drops so screen readers follow along.\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\ninterface ZoneRecord {\n readonly el: HTMLElement\n readonly orientation: 'horizontal' | 'vertical'\n readonly accepts?: (item: DragDropItemData) => boolean\n readonly label: string\n}\n\ninterface ItemRecord {\n readonly el: HTMLElement\n readonly zone: string\n readonly data: unknown\n readonly label: string\n readonly preview: ReactNode\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\ninterface DragState {\n readonly id: string\n readonly preview: ReactNode\n readonly width: number\n readonly height: number\n readonly x: number\n readonly y: number\n readonly over: DragDropTarget | null\n}\n\ninterface RootContextValue {\n registerZone: (id: string, record: ZoneRecord) => () => void\n registerItem: (id: string, record: ItemRecord) => () => void\n begin: (id: string, e: React.PointerEvent) => void\n drag: DragState | null\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\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\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport interface DragDropRootProps<T = unknown> {\n /** Called when an item is released over a zone that accepts it. Reordering\n * inside the item's own zone arrives here too, with the new index. */\n onDrop: (event: DragDropEvent<T>) => void\n /** Overrides the default screen-reader announcements. */\n announce?: (event: {kind: 'pick' | 'drop' | 'cancel'; item: string; zone?: string}) => string\n children: ReactNode\n}\n\nfunction Root<T = unknown>({onDrop, announce, children}: DragDropRootProps<T>) {\n const zones = useRef(new Map<string, ZoneRecord>())\n const items = useRef(new Map<string, ItemRecord>())\n const session = useRef<DragSession | null>(null)\n const frame = useRef<number | null>(null)\n const [drag, setDrag] = useState<DragState | null>(null)\n const [announcement, setAnnouncement] = useState('')\n\n const say = useCallback(\n (kind: 'pick' | 'drop' | 'cancel', itemId: string, zoneId?: string) => {\n const item = items.current.get(itemId)?.label ?? itemId\n const zone = zoneId ? (zones.current.get(zoneId)?.label ?? zoneId) : undefined\n const text = announce\n ? announce({kind, item, zone})\n : kind === 'pick'\n ? `Picked up ${item}.`\n : kind === 'drop'\n ? `Dropped ${item} in ${zone ?? 'place'}.`\n : `Cancelled moving ${item}.`\n setAnnouncement(text)\n },\n [announce],\n )\n\n const registerZone = useCallback((id: string, record: ZoneRecord) => {\n zones.current.set(id, record)\n return () => {\n zones.current.delete(id)\n }\n }, [])\n\n const registerItem = useCallback((id: string, record: ItemRecord) => {\n items.current.set(id, record)\n return () => {\n items.current.delete(id)\n }\n }, [])\n\n /** The zone under the pointer that accepts the dragged item, and where in\n * it the item would land. */\n const locate = useCallback((itemId: string, x: number, y: number): DragDropTarget | null => {\n const item = items.current.get(itemId)\n if (!item) return null\n const payload: DragDropItemData = {id: itemId, zone: item.zone, data: item.data}\n for (const [zoneId, zone] of zones.current) {\n const r = zone.el.getBoundingClientRect()\n if (x < r.left || x > r.right || y < r.top || y > r.bottom) continue\n if (zone.accepts && !zone.accepts(payload)) return null\n const horizontal = zone.orientation === 'horizontal'\n let index = 0\n for (const [otherId, other] of items.current) {\n if (otherId === itemId || other.zone !== zoneId) continue\n const or = other.el.getBoundingClientRect()\n const mid = horizontal ? (or.left + or.right) / 2 : (or.top + or.bottom) / 2\n if ((horizontal ? x : y) > mid) index += 1\n }\n return {zone: zoneId, index}\n }\n return null\n }, [])\n\n // `target` is the resolved drop target (null cancels). The consumer's\n // onDrop runs here, in the event handler, never inside a state updater:\n // React may call an updater more than once and forbids updating another\n // component from it.\n const finish = useCallback(\n (target: DragDropTarget | null) => {\n const s = session.current\n if (!s) return\n if (s.holdTimer) clearTimeout(s.holdTimer)\n if (frame.current !== null) cancelAnimationFrame(frame.current)\n frame.current = null\n session.current = null\n try {\n if (s.source.hasPointerCapture(s.pointerId)) s.source.releasePointerCapture(s.pointerId)\n } catch {\n // already released\n }\n if (!s.active) return\n const item = items.current.get(s.id)\n setDrag(null)\n if (target && item) {\n onDrop({item: {id: s.id, zone: item.zone, data: item.data as T}, target})\n say('drop', s.id, target.zone)\n } else {\n say('cancel', s.id)\n }\n },\n [onDrop, say],\n )\n\n const activate = useCallback(\n (s: DragSession, x: number, y: number) => {\n s.active = true\n const item = items.current.get(s.id)\n setDrag({\n id: s.id,\n preview: item?.preview ?? null,\n width: s.width,\n height: s.height,\n x: x - s.offsetX,\n y: y - s.offsetY,\n over: locate(s.id, x, y),\n })\n say('pick', s.id)\n },\n [locate, say],\n )\n\n const begin = useCallback(\n (id: string, e: React.PointerEvent) => {\n if (session.current || e.button !== 0) 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 session.current = s\n // Capture keeps the stream on the item if the pointer leaves the window;\n // the document listeners below carry the drag either way, so a browser\n // (or a synthetic event) without an active pointer is not an error.\n try {\n source.setPointerCapture(e.pointerId)\n } catch {\n // no active pointer to capture\n }\n if (e.pointerType === 'touch') {\n s.holdTimer = setTimeout(() => {\n s.holdTimer = null\n if (session.current === s && !s.active) activate(s, s.startX, s.startY)\n }, TOUCH_HOLD_MS)\n }\n },\n [activate],\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 useEffect(() => {\n const onMove = (e: PointerEvent) => {\n const s = session.current\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 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) finish(null)\n return\n }\n } else {\n if (moved < MOVE_THRESHOLD_PX) return\n activate(s, e.clientX, e.clientY)\n }\n }\n if (frame.current !== null) return\n frame.current = requestAnimationFrame(() => {\n frame.current = null\n const x = e.clientX\n const y = e.clientY\n setDrag((current) =>\n current\n ? {...current, x: x - s.offsetX, y: y - s.offsetY, over: locate(s.id, x, y)}\n : current,\n )\n })\n }\n const onUp = (e: PointerEvent) => {\n const s = session.current\n if (!s || e.pointerId !== s.pointerId) return\n // Resolve the target from the release point, not the last frame.\n finish(s.active ? locate(s.id, e.clientX, e.clientY) : null)\n }\n const onCancel = (e: PointerEvent) => {\n const s = session.current\n if (!s || e.pointerId !== s.pointerId) return\n finish(null)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && session.current) finish(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 }\n }, [activate, finish, locate])\n\n const value = useMemo<RootContextValue>(\n () => ({registerZone, registerItem, begin, drag}),\n [registerZone, registerItem, begin, drag],\n )\n\n return (\n <RootContext.Provider value={value}>\n {children}\n {drag && (\n <html.div\n aria-hidden\n style={[styles.ghost, styles.ghostAt(drag.x, drag.y, drag.width, drag.height)]}\n >\n {drag.preview}\n </html.div>\n )}\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={styles.liveRegion}>\n {announcement}\n </html.div>\n </RootContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Zone\n// ---------------------------------------------------------------------------\n\nexport interface DragDropZoneProps<T = unknown> {\n id: string\n /** Read to screen readers when an item is dropped here. */\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 /** Refuse an item; the zone then never lights up for it. */\n accepts?: (item: DragDropItemData<T>) => boolean\n children: ReactNode\n}\n\nfunction Zone<T = unknown>({\n id,\n label,\n orientation = 'horizontal',\n accepts,\n children,\n}: DragDropZoneProps<T>) {\n const {registerZone, drag} = useRoot('Zone')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n return registerZone(id, {\n el,\n orientation,\n label,\n accepts: accepts as ZoneRecord['accepts'],\n })\n }, [id, label, orientation, accepts, registerZone])\n\n const over = drag?.over?.zone === id\n const dragging = drag !== null\n\n return (\n <html.div\n ref={ref}\n style={[styles.zone, dragging && styles.zoneReady, over && styles.zoneOver]}\n >\n {children}\n </html.div>\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. */\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 {registerItem, begin, drag} = useRoot('Item')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n return registerItem(id, {el, zone, data, label, preview: preview ?? children})\n }, [id, zone, data, label, preview, children, registerItem])\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 begin(id, e)\n },\n [begin, disabled, id],\n )\n\n if (isNative) return <>{children}</>\n\n const lifted = drag?.id === id\n return (\n <html.div\n ref={ref}\n onPointerDown={onPointerDown}\n style={[styles.item, disabled && styles.itemDisabled, lifted && styles.itemLifted]}\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} {\n const ctx = useContext(RootContext)\n return {dragging: ctx?.drag?.id ?? null, over: ctx?.drag?.over ?? null}\n}\n\nexport const DragDrop = {Root, Zone, Item}\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 {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.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: 1,\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: 360},\n contentMd: {width: 480},\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 closeDurationFast: {animationDuration: duration.fast},\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: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n // --- Title ---\n title: {\n fontSize: 18,\n fontWeight: 600,\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: 1,\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: 32,\n height: 32,\n borderRadius: 8,\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 fast: styles.closeDurationFast,\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'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\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: 1001,\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: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n panelVertical: {\n width: '100%',\n borderTopWidth: 1,\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: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n\n // --- Panel widths (horizontal anchors) ---\n sm: {maxWidth: 360},\n md: {maxWidth: 480},\n lg: {maxWidth: 640},\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 closeDurationFast: {animationDuration: duration.fast},\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: 1,\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: 32,\n height: 32,\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 panelRef: React.RefObject<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}\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, panelRef}: 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 })\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) return\n const panel = panelRef.current\n if (!panel) return\n\n function handlePointerDown(e: PointerEvent) {\n if (e.button !== 0) return\n const target = e.target as HTMLElement\n if (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 panel!.dataset.panelSize = String(state.panelSize)\n panel!.setPointerCapture(e.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 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 return\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\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 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 panelRef,\n anchor,\n isHorizontal,\n getMovement,\n applyTransform,\n resetStyles,\n animateSnapBack,\n animateDismiss,\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'\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 fast: styles.closeDurationFast,\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\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 panelRef,\n })\n\n if (!open) return null\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n return (\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={panelRef}\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 {children}\n </html.div>\n </html.div>\n </>\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} = 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 {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 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: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: '120ms',\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: 2,\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 {type ReactNode, useCallback, useEffect, useMemo, useRef} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {\n useForm,\n FormProvider,\n type UseFormReturn,\n type DefaultValues,\n type FieldValues,\n type FieldErrors,\n type Path,\n} from 'react-hook-form'\nimport {effectTsResolver} from '@hookform/resolvers/effect-ts'\nimport type {Schema} from 'effect'\nimport {FormContext, type LabelPosition, type NecessityIndicator} from './FormContext'\n\nexport interface FormProps<T extends FieldValues> {\n schema: Schema.Schema<T>\n defaultValues: DefaultValues<T>\n onSubmit: (data: T) => void | Promise<void>\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n validationErrors?: Partial<Record<Path<T>, string>>\n children: ReactNode | ((methods: UseFormReturn<T>) => ReactNode)\n}\n\nconst formStyles = css.create({\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n\nexport function Form<T extends FieldValues>({\n schema,\n defaultValues,\n onSubmit,\n disabled = false,\n labelPosition = 'top',\n necessityIndicator = false,\n validationErrors,\n children,\n}: FormProps<T>) {\n const methods = useForm<T>({\n resolver: effectTsResolver(schema),\n defaultValues,\n mode: 'onTouched',\n reValidateMode: 'onChange',\n })\n\n // Sync server-side validation errors into RHF\n const prevErrorKeysRef = useRef<string[]>([])\n useEffect(() => {\n const prevKeys = prevErrorKeysRef.current\n const nextKeys = validationErrors ? Object.keys(validationErrors) : []\n\n // Clear errors that were removed\n for (const key of prevKeys) {\n if (!nextKeys.includes(key)) {\n methods.clearErrors(key as Path<T>)\n }\n }\n\n // Set new errors\n if (validationErrors) {\n for (const [key, message] of Object.entries(validationErrors)) {\n if (message) {\n methods.setError(key as Path<T>, {type: 'server', message: message as string})\n }\n }\n }\n\n prevErrorKeysRef.current = nextKeys\n }, [validationErrors, methods])\n\n const formRef = useRef<HTMLFormElement>(null)\n\n const onInvalid = useCallback(\n (errors: FieldErrors<T>) => {\n const firstField = Object.keys(errors)[0]\n if (firstField) {\n methods.setFocus(firstField as Path<T>)\n }\n },\n [methods],\n )\n\n const handleSubmit = useCallback(\n (e: Event) => {\n e.preventDefault()\n void methods.handleSubmit(onSubmit, onInvalid)()\n },\n [methods, onSubmit, onInvalid],\n )\n\n useEffect(() => {\n const el = formRef.current\n if (!el) return\n el.addEventListener('submit', handleSubmit)\n return () => el.removeEventListener('submit', handleSubmit)\n }, [handleSubmit])\n\n const formCtx = useMemo(\n () => ({disabled, labelPosition, necessityIndicator}),\n [disabled, labelPosition, necessityIndicator],\n )\n\n return (\n <FormProvider {...methods}>\n <FormContext.Provider value={formCtx}>\n <html.form\n ref={formRef}\n aria-disabled={disabled || undefined}\n style={disabled && formStyles.disabled}\n >\n {typeof children === 'function' ? children(methods) : children}\n </html.form>\n </FormContext.Provider>\n </FormProvider>\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'\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} 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\nfunction Root({disabled = false, gap = 'md', children}: RootProps) {\n return (\n <html.div\n role=\"group\"\n aria-disabled={disabled || undefined}\n style={[styles.root, gapMap[gap], disabled && styles.disabled]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Legend ---\ninterface LegendProps {\n children: ReactNode\n}\n\nfunction Legend({children}: LegendProps) {\n return <html.span style={styles.legend}>{children}</html.span>\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'\n\nexport const styles = css.create({\n wrapper: {\n display: 'flex',\n alignItems: 'stretch',\n borderWidth: 1,\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: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n addonEnd: {\n borderLeftWidth: 1,\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'\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!) */\n minWidth?: number | string\n children: ReactNode\n}\n\nfunction Addon({position = 'end', onClick, disabled, minWidth, children}: 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(minWidth),\n ]\n\n if (onClick) {\n return (\n <html.button type=\"button\" onClick={onClick} disabled={disabled} style={style}>\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'\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 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: 1,\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'\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 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 children,\n}: LinkButtonProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel}\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 {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n },\n bordered: {\n borderWidth: 1,\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: 1,\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: 1,\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'\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: 18,\n height: 18,\n borderWidth: 1,\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: 8,\n height: 8,\n borderRadius: radii.full,\n backgroundColor: colors.accent,\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\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'\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 children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n}: RootProps) {\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 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={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\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 {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.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: 1,\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: 8,\n flexDirection: 'column',\n paddingTop: 2,\n paddingBottom: 2,\n paddingRight: 2,\n },\n scrollbarHorizontal: {\n left: 0,\n right: 0,\n bottom: 0,\n height: 8,\n flexDirection: 'row',\n paddingLeft: 2,\n paddingRight: 2,\n paddingBottom: 2,\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 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'\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?: number | string\n}\n\nfunction Viewport({children, maxHeight}: ViewportProps) {\n const {viewportRef, viewportId} = useScrollArea()\n\n return (\n <html.div\n ref={viewportRef}\n id={viewportId}\n tabIndex={0}\n role=\"region\"\n aria-label=\"Scrollable content\"\n style={[styles.viewport, maxHeight != null && styles.viewportMaxHeight(maxHeight)]}\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 {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.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: 1,\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 backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 49,\n },\n popup: {\n // Position is `fixed` and the top/left/width are applied inline by Popup\n // (computed from the root's bounding rect) so the dropdown can escape any\n // ancestor with `overflow: hidden` or `transform` (e.g. inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n maxHeight: 200,\n overflowY: 'auto',\n // Re-enable pointer events: the portal mount is pointer-events: none so\n // clicks fall through except on the popup itself.\n pointerEvents: 'auto',\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 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 itemHidden: {\n display: 'none',\n },\n empty: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n hidden: {\n display: 'none',\n },\n // Dynamic position — applied at runtime from the input's bounding rect.\n popupPosition: (top: number, left: number, width: number) => ({\n top,\n left,\n width,\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 '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const lightTheme = css.createTheme(colors, {\n bg: '#ffffff',\n bgCard: '#f5f5f5',\n bgCardHover: '#ebebeb',\n text: '#1a1a1a',\n textMuted: '#4a4a4a',\n accent: '#1e40af',\n accentHover: '#1a3799',\n accentContrast: '#ffffff',\n border: '#d4d4d4',\n error: '#991b1b',\n errorHover: '#7f1d1d',\n errorBg: 'rgba(153, 27, 27, 0.08)',\n errorBorder: 'rgba(153, 27, 27, 0.3)',\n errorText: '#7f1d1d',\n errorContrast: '#ffffff',\n success: '#166534',\n successBg: 'rgba(22, 101, 52, 0.08)',\n successBorder: 'rgba(22, 101, 52, 0.3)',\n successText: '#14532d',\n warning: '#92400e',\n warningBg: 'rgba(146, 64, 14, 0.08)',\n warningBorder: 'rgba(146, 64, 14, 0.3)',\n warningText: '#78350f',\n info: '#1e40af',\n infoBg: 'rgba(30, 64, 175, 0.08)',\n infoBorder: 'rgba(30, 64, 175, 0.3)',\n infoText: '#1e40af',\n})\n\nexport const lightShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.08)',\n md: '0 4px 12px rgba(0, 0, 0, 0.12)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.16)',\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const highContrastTheme = css.createTheme(colors, {\n bg: '#000000',\n bgCard: '#111111',\n bgCardHover: '#1a1a1a',\n text: '#ffffff',\n textMuted: '#b0b0b0',\n accent: '#60a5fa',\n accentHover: '#93c5fd',\n accentContrast: '#000000',\n border: '#555555',\n error: '#f87171',\n errorHover: '#fca5a5',\n errorBg: 'rgba(248, 113, 113, 0.15)',\n errorBorder: 'rgba(248, 113, 113, 0.5)',\n errorText: '#fca5a5',\n errorContrast: '#000000',\n success: '#4ade80',\n successBg: 'rgba(74, 222, 128, 0.15)',\n successBorder: 'rgba(74, 222, 128, 0.5)',\n successText: '#86efac',\n warning: '#fcd34d',\n warningBg: 'rgba(252, 211, 77, 0.15)',\n warningBorder: 'rgba(252, 211, 77, 0.5)',\n warningText: '#fef08a',\n info: '#60a5fa',\n infoBg: 'rgba(96, 165, 250, 0.15)',\n infoBorder: 'rgba(96, 165, 250, 0.5)',\n infoText: '#bfdbfe',\n})\n\nexport const highContrastShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.6)',\n md: '0 4px 12px rgba(0, 0, 0, 0.7)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.8)',\n})\n","import {createContext, type ReactNode, useContext, useState} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {lightTheme, lightShadows} from '@duro-app/tokens/themes/light.css'\nimport {highContrastTheme, highContrastShadows} from '@duro-app/tokens/themes/high-contrast.css'\n\nexport type ThemeName = 'dark' | 'light' | 'high-contrast'\n\ninterface ThemeProviderProps {\n theme?: ThemeName\n children: ReactNode\n}\n\nconst themeMap: Partial<Record<ThemeName, readonly [typeof lightTheme, typeof lightShadows]>> = {\n light: [lightTheme, lightShadows],\n 'high-contrast': [highContrastTheme, highContrastShadows],\n}\n\nconst styles = css.create({\n root: {\n display: 'contents',\n color: colors.text,\n },\n // Sibling overlay where floating popups (Combobox, Menu, Tooltip) portal to.\n // Lives inside ThemeProvider so theme tokens cascade. Fixed + inset 0 so\n // popups can position freely with viewport coords; pointer-events: none lets\n // clicks fall through except where children re-enable them.\n portalMount: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n // Above Dialog (1001) so popups inside dialogs render on top.\n zIndex: 1100,\n },\n})\n\n// react-strict-dom's style prop rejects Theme<VarGroup<{named keys}>> because the\n// concrete VarGroup lacks the generic index signature. This is a known typing gap.\ntype DivStyle = Parameters<typeof html.div>[0]['style']\n\nconst PortalMountContext = createContext<HTMLElement | null>(null)\n\nexport function usePortalMount(): HTMLElement | null {\n return useContext(PortalMountContext)\n}\n\nexport function ThemeProvider({theme = 'dark', children}: ThemeProviderProps) {\n const overrides = themeMap[theme]\n const themeStyles = [overrides?.[0], overrides?.[1], styles.root] as DivStyle\n const [mount, setMount] = useState<HTMLElement | null>(null)\n\n return (\n <html.div data-theme={theme} style={themeStyles}>\n <PortalMountContext.Provider value={mount}>{children}</PortalMountContext.Provider>\n <html.div ref={setMount} data-portal-mount style={styles.portalMount} />\n </html.div>\n )\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 {ComboboxContext, useCombobox} from './ComboboxContext'\nimport {useComboboxRoot} from './useComboboxRoot'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\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\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={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\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// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates so it escapes ancestor `overflow: hidden` / `transform`\n// containing blocks (notably Dialog and Drawer).\nfunction Popup({children}: {children: ReactNode}) {\n const {open, listboxId, rootRef} = useCombobox()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the root each time the popup opens, and re-measure on scroll/resize\n // so the dropdown follows the input. Capture-phase scroll listener catches\n // scroll on any ancestor (e.g. Dialog body).\n useLayoutEffect(() => {\n if (!open) {\n setCoords(null)\n return\n }\n const update = () => {\n const el = rootRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // Position immediately below the input with a small gap. `xs` token = 4px.\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, rootRef])\n\n if (!open || !coords) return null\n\n const node = (\n <html.div\n id={listboxId}\n role=\"listbox\"\n style={[styles.popup, styles.popupPosition(coords.top, coords.left, coords.width)]}\n >\n {children}\n </html.div>\n )\n\n // SSR / pre-mount fallback: render inline (will be invisible under\n // overflow:hidden parents but won't crash). Once the mount is available,\n // 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 inputValue,\n labels,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useCombobox()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\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 <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => setValue(itemValue)}\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\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 <html.div style={styles.empty}>{children}</html.div>\n}\n\nexport const Combobox = {\n Root,\n Input,\n Trigger,\n Popup,\n Item,\n ItemText,\n Empty,\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'\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: 1,\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 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 zIndex: 49,\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: 1,\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: 120,\n maxHeight: 280,\n overflowY: 'auto',\n zIndex: 50,\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 // 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 (order.length === 0) 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 'Escape':\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'\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}: {\n children: ReactNode\n 'aria-label'?: string\n}) {\n const {open, toggle, listboxId, highlightedId, triggerRef} = useSelect()\n const localRef = useRef<HTMLButtonElement>(null)\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={localRef}\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}\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 node = (\n <>\n {open && <html.div style={styles.backdrop} onClick={close} />}\n <html.div\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 {children}\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 {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'\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: '6px',\n paddingBottom: '6px',\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': 2,\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: '3px',\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: '18px',\n },\n itemIcon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: '18px',\n height: '18px',\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'\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: 'linear',\n animationIterationCount: 'infinite',\n },\n sm: {\n width: 16,\n height: 16,\n borderWidth: 2,\n },\n md: {\n width: 24,\n height: 24,\n borderWidth: 2,\n },\n lg: {\n width: 40,\n height: 40,\n borderWidth: 3,\n },\n srOnly: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n },\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.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={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 {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 {easing} from '@duro-app/tokens/tokens/motion.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 },\n toast: {\n pointerEvents: 'auto',\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: 440,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderLeftWidth: 3,\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: '160ms',\n animationTimingFunction: easing.easeOut,\n },\n success: {borderLeftColor: colors.successBorder},\n error: {borderLeftColor: colors.errorBorder},\n info: {borderLeftColor: colors.infoBorder},\n\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 1,\n },\n iconSuccess: {color: colors.successText},\n iconError: {color: colors.errorText},\n iconInfo: {color: colors.infoText},\n\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n },\n message: {\n color: colors.text,\n },\n action: {\n alignSelf: 'flex-start',\n marginTop: 2,\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: 2,\n outlineColor: colors.accent,\n outlineOffset: 2,\n borderRadius: radii.sm,\n },\n closeBtn: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 2,\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: 2,\n outlineColor: colors.accent,\n outlineOffset: 1,\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\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'\n\nexport interface ToastAction {\n label: string\n onClick: () => void\n}\n\nexport interface ToastOptions {\n /** Visual + semantic tone. Errors announce assertively and 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 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}\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}\nconst variantIconStyle = {\n success: styles.iconSuccess,\n error: styles.iconError,\n info: styles.iconInfo,\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({entry, onDismiss}: {entry: ToastEntry; onDismiss: (id: string) => void}) {\n const {id, variant, message, action, duration} = entry\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => onDismiss(id), duration)\n return () => clearTimeout(timer)\n }, [id, duration, 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 >\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=\"Dismiss\"\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 function ToastProvider({children}: {children: ReactNode}) {\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} />\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 {spacing, radii} 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 gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightNormal,\n lineHeight: 1,\n borderRadius: 4,\n whiteSpace: 'nowrap',\n minWidth: 0,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\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': 1,\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'\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: 1,\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: 40,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus': 2,\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': 1,\n },\n boxSizing: 'border-box',\n },\n inputError: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n liveRegion: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\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'\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={styles.liveRegion}>\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 {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'\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: 1,\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: 1,\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: 2,\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': 2,\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': -2,\n },\n },\n tabVertical: {\n justifyContent: 'flex-start',\n borderBottomWidth: 0,\n borderRightWidth: 2,\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: 2,\n },\n indicatorVertical: {\n right: -1,\n top: 0,\n width: 2,\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 {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'\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: 1,\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': 2,\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': 1,\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 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 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 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'\n\nexport const styles = css.create({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.sm,\n borderWidth: 1,\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': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\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}\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'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1,\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': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\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 },\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: 1,\n borderRightStyle: 'solid',\n // Override any borderColor set by pressed state — dividers always use border token\n borderColor: colors.border,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n})\n","import {type ReactNode, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useToggleGroup} from '../ToggleGroup/ToggleGroupContext'\nimport {styles} from './styles.css'\n\nexport type ToggleSize = 'default' | 'small'\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 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 [standalonePressed, setStandalonePressed] = useControllableValue(\n controlledPressed,\n defaultPressed,\n onPressedChange,\n )\n\n const pressed = groupPressed ?? standalonePressed\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 type=\"button\"\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 isGrouped && styles.grouped,\n disabled && styles.disabled,\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 {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n overflow: 'hidden',\n },\n vertical: {\n flexDirection: 'column',\n },\n})\n","import {type ReactNode, useCallback} 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 {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 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 children,\n}: ToggleGroupProps) {\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 return (\n <ToggleGroupContext.Provider value={{value, toggle, disabled, orientation, size}}>\n <html.div\n role=\"toolbar\"\n aria-orientation={orientation}\n style={[styles.root, orientation === 'vertical' && styles.vertical]}\n >\n {children}\n </html.div>\n </ToggleGroupContext.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'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n popup: {\n position: 'absolute',\n zIndex: 50,\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: 1,\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 {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'\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: 36,\n height: 20,\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': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\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: 2,\n left: 2,\n width: 16,\n height: 16,\n borderRadius: radii.full,\n backgroundColor: '#fff',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n thumbChecked: {\n transform: 'translateX(16px)',\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\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'\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={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'\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) => ({\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(240px, 1fr) minmax(0, 2fr)',\n },\n },\n splitWide: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_WIDE_BP})`]: 'minmax(280px, 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) => ({\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'\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.\n * Wins over `columns` when both are set. On native this approximates to\n * cells of that minimum width that grow and wrap. */\n minColumnWidth?: string\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 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, children}: GridProps) {\n if (isNative) {\n return (\n <NativeGrid\n gap={gap}\n columns={layout ? layoutWeights[layout] : columns}\n minColumnWidth={layout ? undefined : minColumnWidth}\n >\n {children}\n </NativeGrid>\n )\n }\n\n const columnStyle = layout\n ? layoutMap[layout]\n : minColumnWidth\n ? styles.autoFit(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(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'\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: 600},\n maxMd: {maxWidth: 800},\n maxLg: {maxWidth: 1200},\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":["SPACING_PX","xs","sm","ms","md","lg","xl","xxl","xxxl","DURATION_MS","instant","fast","base","slow","ICON_SIZES","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","styles","overlay","$$css","overlayOffset","bottom","val","undefined","overlayEmphasized","selectedCount","selectedCountEmphasized","actions","closeButton","closeButtonEmphasized","separator","separatorEmphasized","ActionBarContent","selectedItemCount","selectedLabel","isEmphasized","onClearSelection","dismissible","bottomOffset","countStr","label","t5","t6","t7","t8","t9","jsx","_rsdMerge","_rsdDefaultStyles","span","t10","t11","div","t12","t13","button","t14","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","sun","moon","monitor","contrast","filledIcons","Icon","name","size","filled","iconWrap","content","error","success","warning","info","defaultIcons","resolveIcon","icon","variant","Alert","resolvedIcon","isNative","sizeMd","sizeSm","default","nativeFlex","sizeMap","Badge","sizeDefault","sizeSmall","primary","secondary","link","inverseSecondary","danger","fullWidth","disabled","small","Button","type","onClick","ariaLabel","horizontal","vertical","alignStart","alignCenter","alignEnd","verticalAlignStart","verticalAlignCenter","verticalAlignEnd","gapXs","gapSm","gapMd","gapMap","horizontalAlignMap","start","center","end","verticalAlignMap","ButtonGroup","orientation","align","gap","isVertical","alignStyle","Callout","elevated","outlined","interactive","sizeCompact","sizeFull","header","compact","full","Card","root","rootDisabled","boxUnchecked","boxChecked","input","Checkbox","value","checked","controlledChecked","defaultChecked","onChange","isControlled","internalChecked","setInternalChecked","useState","isChecked","target","handleChange","next","opacity","t15","Symbol","for","t16","t17","t18","t19","useControllableValue","controlledValue","defaultValue","internal","setInternal","v","setValue","rootHorizontal","CheckboxGroupContext","useCheckboxGroup","ctx","Error","Root","onValueChange","itemValue","onToggle","Item","itemDisabled","groupValue","groupDisabled","includes","isDisabled","CheckboxGroup","FieldContext","useFieldContext","invalid","ColorInput","required","onBlur","ref","fieldCtx","field","effectiveName","effectiveValue","String","effectiveOnChange","effectiveOnBlur","effectiveRef","effectiveDisabled","controlId","descriptionId","errorId","trim","backdrop","backdropOpen","backdropClosing","viewport","popup","popupOpen","popupClosing","closeDurationInstant","closeDurationFast","closeDurationBase","closeDurationSlow","title","description","body","footer","inlineWrapper","reducedMotion","closeDurationMap","DialogContext","useDialog","open","controlledOpen","defaultOpen","onOpenChange","dismissable","closeAnimationDuration","internalOpen","setInternalOpen","closing","setClosing","closingTimerRef","popupRef","isOpen","titleId","clearTimeout","requestOpen","setTimeout","requestClose","onKeyDown","stopPropagation","document","addEventListener","removeEventListener","prev","style","overflow","closeDuration","Trigger","Portal","handleBackdropClick","Header","Title","h2","Description","p","Body","Footer","Close","Dialog","InputGroupContext","useInputGroupContext","inGroup","mono","Input","font","placeholder","readOnly","minLength","maxLength","min","max","step","inputMode","list","pattern","autoComplete","autoFocus","ariaDescribedby","groupCtx","effectiveVariant","describedBy","extraProps","FormContext","useFormContext","rootSide","labelSide","fieldContent","necessityIcon","necessityLabel","formCtx","ControlledRoot","StaticRoot","labelPosition","invalidProp","control","useRHFFormContext","fieldState","useController","effectiveLabelPosition","effectiveNecessityIndicator","necessityIndicator","message","errorMessage","FieldLayout","labelNode","rest","Children","child","isValidElement","Label","isSide","indicator","Field","ConfirmDialog","confirmPhrase","promptLabel","cancelLabel","confirmSlot","onConfirm","confirmLabel","typed","setTyped","satisfied","handleOpenChange","_temp","item","itemLifted","zone","zoneReady","zoneOver","ghost","ghostAt","x","y","width","height","liveRegion","RootContext","useRoot","part","MOVE_THRESHOLD_PX","TOUCH_HOLD_MS","onDrop","announce","Map","zones","items","session","frame","drag","setDrag","announcement","setAnnouncement","kind","itemId","zoneId","get","text","say","record","set","registerZone","id_0","record_0","registerItem","itemId_0","item_0","payload","data","zoneId_0","zone_0","r","el","getBoundingClientRect","left","right","top","accepts","index","otherId","other","or","mid","locate","s","holdTimer","cancelAnimationFrame","source","hasPointerCapture","pointerId","releasePointerCapture","active","item_1","finish","s_0","x_0","y_0","item_2","preview","offsetX","offsetY","over","activate","id_1","currentTarget","rect","s_1","downAt","timeStamp","startX","clientX","startY","clientY","setPointerCapture","pointerType","begin","onMove","e_0","s_2","moved","Math","hypot","requestAnimationFrame","x_1","y_1","onUp","e_1","s_3","onCancel","e_2","s_4","onKey","e_3","Zone","el_0","webkitUserSelect","webkitTouchCallout","onPointerDown","lifted","useDragDrop","dragging","DragDrop","wrapper","wrapperOpenSm","wrapperCloseSm","wrapperOpenMd","wrapperCloseMd","contentSm","contentMd","slideIn","slideOut","bodyPadded","DetailPanelContext","useDetailPanel","present","setPresent","panelRef","previousFocusRef","labelId","setLabelId","activeElement","focus","useCallback","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","stateRef","isHorizontal","state","dx","getMovement","movement","panelEl","Number","dataset","progress","sign","transform","closest","previousElementSibling","absMovement","abs","overscroll","shadowSpread","round","boxShadow","applyTransform","resetStyles","panelEl_1","dismissTransform","transition","backdrop_1","dismissed","done","once","animateDismiss","animateSnapBack","_temp2","handlePointerDown","state_0","Date","now","animation","handlePointerMove","state_1","dx_0","dy","sqrt","preventDefault","movement_0","handlePointerUp","_e","state_2","movement_1","elapsed","velocity","handlePointerCancel","state_3","handleTouchMove","passive","panelEl_2","backdrop_2","cleanup","panelEl_0","backdrop_0","DrawerContext","useDrawer","swipeDismiss","requestCloseImmediate","slideInMap","slideOutMap","viewportAnchorMap","swipeEnabled","t20","t21","t22","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","formStyles","Form","schema","defaultValues","onSubmit","validationErrors","effectTsResolver","resolver","mode","reValidateMode","methods","useForm","prevErrorKeysRef","prevKeys","nextKeys","Object","keys","clearErrors","key_0","setError","formRef","errors","firstField","setFocus","onInvalid","handleSubmit","form","FormProvider","legend","gapMs","gapLg","gapXl","Legend","Fieldset","addon","addonStart","addonEnd","addonClickable","addonDisabled","dynamicStyles","minWidth","Addon","position","positionStyle","InputGroup","LinkButton","href","rel","a","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","scrollTop","setScrollTop","scrollLeft","setScrollLeft","scrollHeight","setScrollHeight","scrollWidth","setScrollWidth","clientHeight","setClientHeight","clientWidth","setClientWidth","scrolling","setScrolling","scrollTimerRef","vp","handleScroll","vp_0","observer","ResizeObserver","observe","disconnect","vp_1","Viewport","Scrollbar","maxScroll","scrollOffset","valueNow","Thumb","draggingRef","startPosRef","startScrollRef","thumbSizePercent","trackSize","thumbPixelSize","thumbOffset","thumbStyle","delta","scrollRatio","scrollDelta","ScrollArea","inputWrapper","inputWrapperFocused","trigger","itemHighlighted","itemHidden","hidden","popupPosition","ComboboxContext","useCombobox","useComboboxRoot","inputValue","controlledInputValue","onInputChange","initialLabels","initial","internalInputValue","setInternalInputValue","setInputValue","setOpen","labels","setLabels","highlightedId","setHighlightedId","listboxId","rootRef","inputRef","itemsRef","orderRef","close","order","found","openPopup","selectValue","v_0","label_0","registerLabel","itemValue_0","element","ids","sort","b","elA","elB","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","i","query","toLowerCase","getVisibleOrder","handleKeyDown","visibleOrder","bb137","prev_2","idx_0","indexOf","idx","prev_1","prev_0","scrollIntoView","block","lightTheme","xjvd03b","lightShadows","x13v825q","highContrastTheme","highContrastShadows","themeMap","light","portalMount","PortalMountContext","usePortalMount","ThemeProvider","theme","overrides","themeStyles","mount","setMount","localRef","focused","setFocused","Popup","coords","setCoords","window","useLayoutEffect","node","createPortal","selectedValue","isSelected","isHighlighted","isVisible","textContent","values","Combobox","SelectContext","useSelect","useSelectRoot","triggerRef","toggle","order_0","items_0","bb86","prev_3","Value","display","Select","group","groupTrigger","groupTriggerActive","chevron","chevronOpen","section","sectionLabel","itemActive","marker","markerActive","itemIcon","itemLabel","SideNavContext","useSideNav","activeValue","expandedGroups","setExpandedGroups","has","toggleGroup","group_0","next_0","expandGroup","nav","Group","groupKey","defaultExpanded","isExpanded","groupRef","triggerId","panelId","querySelector","hasActiveChild","Section","SideNav","spinner","srOnly","Spinner","region","toast","iconSuccess","iconError","iconInfo","closeBtn","DEFAULT_DURATION","createToastStore","seq","opts","duration","variantIcon","variantIconStyle","ToastContext","useToast","ToastItem","entry","timer","ToastProvider","useMemo","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","isInvalid","trimmed","addTag","value_0","getElementById","querySelectorAll","validate","commitValueRef","raw","selectionStart","handlePaste","clipboardData","getData","split","Boolean","handleFocus","TagGroup","rootVertical","listVertical","tab","tabVertical","tabActiveHorizontal","tabActiveVertical","tabIndicatorActive","indicatorHorizontal","indicatorVertical","indicatorOffsetH","offset","indicatorOffsetV","tabDisabled","TabsContext","useTabs","useTabsRoot","tabsRef","indicatorActive","setIndicatorActive","registerTab","listRef","setIndicator","CSS","escape","measure","offsetLeft","offsetWidth","offsetTop","offsetHeight","ro","listEl","tabs","prevKey","nextKey","targetValue","bb36","currentIdx_0","i_1","currentIdx","val_1","i_0","val_0","Tab","tabId","Tabs","Textarea","rows","textarea","PREFERENCES","ICON","system","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","matches","cycle","ColorModeToggle","weightNormal","weightMedium","weightSemibold","weightBold","truncate","weightMap","normal","medium","semibold","bold","weight","as","ToggleGroupContext","useToggleGroup","unpressed","pressed","grouped","Toggle","controlledPressed","defaultPressed","onPressedChange","sizeProp","groupPressed","standalonePressed","setStandalonePressed","ToggleGroup","multiple","nextPressed","TooltipContext","useTooltip","placement","delay","tooltipId","timerRef","show","hide","Tooltip","track","trackUnchecked","trackChecked","thumbChecked","Switch","onCheckedChange","setChecked","alignStretch","gapXxl","gapXxxl","stretch","Stack","alignBaseline","justifyStart","justifyCenter","justifyEnd","justifyBetween","baseline","justifyMap","between","Inline","justify","Cluster","_temp3","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","Array","from","every","w","isFinite","process","env","NODE_ENV","console","JSON","stringify","gridTemplate","weights","join","columnsMap","layoutMap","Grid","minColumnWidth","layout","columnStyle","grid","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":["../../tokens/src/keys.ts","../src/components/ActionBar/ActionBarProvider.tsx","../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/Button/styles.css.ts","../src/components/Button/Button.tsx","../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/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/components/Dialog/Dialog.tsx","../src/components/InputGroup/InputGroupContext.ts","../src/components/Input/styles.css.ts","../src/components/Input/Input.tsx","../src/components/Form/FormContext.ts","../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/Form/Form.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/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","../../tokens/src/themes/light.css.ts","../../tokens/src/themes/high-contrast.css.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/Combobox/Combobox.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/Tabs/styles.css.ts","../src/components/Tabs/TabsContext.ts","../src/components/Tabs/useTabsRoot.ts","../src/components/Tabs/Tabs.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/styles.css.ts","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tooltip/styles.css.ts","../src/components/Tooltip/Tooltip.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":["// Token key unions and raw numeric values, as plain TypeScript.\n//\n// The css.ts files can't export these: StyleX requires inline object literals,\n// and `css.defineVars` returns an opaque VarGroup whose keyof includes phantom\n// members (`__opaqueId`, `__tokens`). So the scales are duplicated here as the\n// typed source of truth for component props, Storybook argTypes, and tooling —\n// with zero StyleX/react-strict-dom imports, so this module is safe to load in\n// Node (tests, scripts, the ESLint plugin's drift test).\n//\n// `scripts/check-token-drift.mjs` runs in `prebuild` and fails the build if any\n// value here diverges from the corresponding css.ts literal.\n\n// Explicit .js extensions: this module is also typechecked under NodeNext\n// resolution (the ESLint plugin's tests import it via the `types` condition),\n// which rejects extensionless relative imports. Both are type-only, so they\n// are erased at build time.\nimport type {RawColors} from './raw.js'\n\nexport const SPACING_KEYS = ['xs', 'sm', 'ms', 'md', 'lg', 'xl', 'xxl', 'xxxl'] as const\nexport type SpacingToken = (typeof SPACING_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `spacing` (px).\nexport const SPACING_PX = {\n xs: 4,\n sm: 8,\n ms: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n xxxl: 64,\n} as const\n\nexport const RADIUS_KEYS = ['xs', 'sm', 'md', 'lg', 'full'] as const\nexport type RadiusToken = (typeof RADIUS_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `radii` (px).\nexport const RADII_PX = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n full: 9999,\n} as const\n\nexport const SHADOW_KEYS = ['sm', 'md', 'lg'] as const\nexport type ShadowToken = (typeof SHADOW_KEYS)[number]\n\n// Mirrors tokens/motion.css.ts `duration`, as numbers for setTimeout use.\nexport const DURATION_MS = {\n instant: 0,\n fast: 150,\n base: 200,\n slow: 280,\n} as const\nexport type DurationToken = keyof typeof DURATION_MS\n\n// Icon rendering sizes (SVG width/height, px). Not a css.defineVars scale —\n// icons size via attributes, not CSS custom properties.\nexport const ICON_SIZES = {\n sm: 16,\n md: 18,\n lg: 24,\n xl: 36,\n xxl: 48,\n} as const\nexport type IconSize = keyof typeof ICON_SIZES\n\n// Mirrors tokens/breakpoints.css.ts `breakpoints` (css.defineConsts), as\n// numbers. The css.ts file also exports `breakpointsPx`, but importing it\n// pulls react-strict-dom; tooling that only needs the numbers reads here.\nexport const BREAKPOINT_KEYS = ['xs', 'sm', 'md', 'lg', 'xl'] as const\nexport const BREAKPOINTS_PX = {\n xs: 480,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font sizes, in rem.\nexport const FONT_SIZE_REM = {\n fontSizeXs: 0.75,\n fontSizeSm: 0.875,\n fontSizeMd: 1,\n fontSizeLg: 1.125,\n fontSizeXl: 1.25,\n fontSizeHeading: 1.5,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font weights, as numbers.\nexport const FONT_WEIGHTS = {\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n} as const\n\n// Mirrors tokens/typography.css.ts `typeScale` fontSize1..9, in rem.\nexport const TYPE_SCALE_FONT_SIZE_REM = {\n fontSize1: 0.75,\n fontSize2: 0.8125,\n fontSize3: 0.875,\n fontSize4: 1,\n fontSize5: 1.125,\n fontSize6: 1.25,\n fontSize7: 1.5,\n fontSize8: 1.875,\n fontSize9: 2.25,\n} as const\n\n// Mirrors tokens/shadows.css.ts `shadows` (the base, dark palette) verbatim.\nexport const SHADOWS = {\n sm: '0 2px 4px rgba(0, 0, 0, 0.3)',\n md: '0 4px 12px rgba(0, 0, 0, 0.4)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.5)',\n} as const\n\n// Mirrors tokens/motion.css.ts `easing` verbatim.\nexport const EASINGS = {\n standard: 'ease',\n easeOut: 'cubic-bezier(0.32, 0.72, 0, 1)',\n easeIn: 'cubic-bezier(0.72, 0, 0.68, 0.28)',\n} as const\n\nexport type ColorToken = keyof RawColors\n\nexport type {Breakpoint} from './tokens/breakpoints.css.js'\n","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'\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'\n\nexport const styles = css.create({\n overlay: {\n position: 'fixed',\n bottom: spacing.lg,\n left: '50%',\n transform: 'translateX(-50%)',\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: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n boxShadow: shadows.lg,\n zIndex: 50,\n maxWidth: 'calc(100vw - 48px)',\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 closeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\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': 2,\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': 2,\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: 1,\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 /** 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 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 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}>{children}</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 // 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 // ---- 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 {spacing, radii} 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: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\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: 1,\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 {spacing, radii} 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: 2,\n paddingBottom: 2,\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 // 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'\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 {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'\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: 1,\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': 2,\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': 2,\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 },\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: 'rgba(0, 0, 0, 0.10)',\n ':hover': 'rgba(0, 0, 0, 0.18)',\n },\n borderColor: {\n default: 'rgba(0, 0, 0, 0.55)',\n ':hover': 'rgba(0, 0, 0, 0.70)',\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} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'inverseSecondary' | 'link' | 'danger'\nexport type ButtonSize = 'default' | 'small'\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 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 children,\n}: ButtonProps) {\n return (\n <html.button\n type={type}\n disabled={disabled}\n onClick={onClick}\n aria-label={ariaLabel}\n style={[\n styles.base,\n isNative && styles.nativeFlex,\n sizeMap[size],\n styles[variant],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.button>\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 },\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 disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\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 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' */\n gap?: ButtonGroupGap\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}: ButtonGroupProps) {\n const isVertical = orientation === 'vertical'\n const alignStyle = isVertical ? verticalAlignMap[align] : horizontalAlignMap[align]\n\n return (\n <html.div\n role=\"group\"\n style={[\n styles.base,\n isVertical ? styles.vertical : styles.horizontal,\n gapMap[gap],\n alignStyle,\n disabled && styles.disabled,\n ]}\n >\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'\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: 1,\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'\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: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n },\n outlined: {\n borderRadius: radii.md,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n filled: {\n borderRadius: radii.md,\n },\n interactive: {\n borderRadius: radii.md,\n borderWidth: 1,\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'\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: 18,\n height: 18,\n borderWidth: 1,\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: 5,\n height: 9,\n borderRightWidth: 2,\n borderRightStyle: 'solid',\n borderRightColor: colors.accentContrast,\n borderBottomWidth: 2,\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 input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\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 {type ReactNode, useState, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.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={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 {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n width: 44,\n height: 34,\n padding: 2,\n backgroundColor: colors.bg,\n borderWidth: 1,\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': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: 1,\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'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\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: 1001,\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 borderWidth: 1,\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 closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Sizes ---\n sm: {maxWidth: 400},\n md: {maxWidth: 520},\n lg: {maxWidth: 680},\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: 1,\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: 32,\n height: 32,\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: '1ms',\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\nexport type DialogSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\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}\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 backdrop closes the dialog. Default: true */\n dismissable?: 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 dismissable = 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 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\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 <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 }}\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\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n return (\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 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 {children}\n </html.div>\n </html.div>\n </>\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} = 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} = useDialog()\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'\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: 1,\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': 2,\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': 1,\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 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'\n\ninterface InputProps {\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 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 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 effectiveVariant = 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={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictInputProps['onChange']}\n onBlur={effectiveOnBlur as StrictInputProps['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[\n styles.base,\n styles[effectiveVariant],\n font === 'mono' && styles.mono,\n groupCtx?.inGroup && styles.inGroup,\n ]}\n {...extraProps}\n />\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport type LabelPosition = 'top' | 'side'\nexport type NecessityIndicator = 'icon' | 'label' | false\n\nexport interface FormContextValue {\n disabled: boolean\n labelPosition: LabelPosition\n necessityIndicator: NecessityIndicator\n}\n\nexport const FormContext = createContext<FormContextValue | null>(null)\n\nexport function useFormContext() {\n return useContext(FormContext)\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 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: 120,\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} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.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 zone: {\n borderRadius: radii.sm,\n transitionProperty: 'box-shadow, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // Every zone shows it can receive while something is in the air; the one\n // under the pointer lights up.\n zoneReady: {\n boxShadow: `inset 0 0 0 1px ${colors.border}`,\n },\n zoneOver: {\n boxShadow: `inset 0 0 0 2px ${colors.accent}`,\n backgroundColor: colors.infoBg,\n },\n ghost: {\n position: 'fixed',\n top: 0,\n left: 0,\n pointerEvents: 'none',\n zIndex: 1000,\n opacity: 0.9,\n cursor: 'grabbing',\n },\n ghostAt: (x: number, y: number, width: number, height: number) => ({\n width,\n height,\n transform: `translate3d(${x}px, ${y}px, 0)`,\n }),\n // Same visually-hidden recipe as TagGroup's live region.\n liveRegion: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {isNative} from '../../platform'\n\n// ---------------------------------------------------------------------------\n// DragDrop — move items between zones with one pointer, on mouse, pen and\n// touch alike.\n//\n// Pointer events are the single input path: a press arms a drag, movement\n// past a small threshold (or, on touch, a short hold) starts it, pointer\n// capture keeps the stream on the item, and release resolves the zone under\n// the pointer. The dragged item stays in the DOM (faded) while a ghost copy\n// follows the pointer, so layout never shifts mid-drag and a cancelled drag\n// costs nothing.\n//\n// Dragging is a pointer gesture only. Every consumer MUST keep a non-drag way\n// to do the same thing (a button that adds, a remove affordance) — that is\n// the keyboard and assistive path, and WCAG 2.5.7 requires it. The Root's\n// live region announces picks and drops so screen readers follow along.\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\ninterface ZoneRecord {\n readonly el: HTMLElement\n readonly orientation: 'horizontal' | 'vertical'\n readonly accepts?: (item: DragDropItemData) => boolean\n readonly label: string\n}\n\ninterface ItemRecord {\n readonly el: HTMLElement\n readonly zone: string\n readonly data: unknown\n readonly label: string\n readonly preview: ReactNode\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\ninterface DragState {\n readonly id: string\n readonly preview: ReactNode\n readonly width: number\n readonly height: number\n readonly x: number\n readonly y: number\n readonly over: DragDropTarget | null\n}\n\ninterface RootContextValue {\n registerZone: (id: string, record: ZoneRecord) => () => void\n registerItem: (id: string, record: ItemRecord) => () => void\n begin: (id: string, e: React.PointerEvent) => void\n drag: DragState | null\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\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\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport interface DragDropRootProps<T = unknown> {\n /** Called when an item is released over a zone that accepts it. Reordering\n * inside the item's own zone arrives here too, with the new index. */\n onDrop: (event: DragDropEvent<T>) => void\n /** Overrides the default screen-reader announcements. */\n announce?: (event: {kind: 'pick' | 'drop' | 'cancel'; item: string; zone?: string}) => string\n children: ReactNode\n}\n\nfunction Root<T = unknown>({onDrop, announce, children}: DragDropRootProps<T>) {\n const zones = useRef(new Map<string, ZoneRecord>())\n const items = useRef(new Map<string, ItemRecord>())\n const session = useRef<DragSession | null>(null)\n const frame = useRef<number | null>(null)\n const [drag, setDrag] = useState<DragState | null>(null)\n const [announcement, setAnnouncement] = useState('')\n\n const say = useCallback(\n (kind: 'pick' | 'drop' | 'cancel', itemId: string, zoneId?: string) => {\n const item = items.current.get(itemId)?.label ?? itemId\n const zone = zoneId ? (zones.current.get(zoneId)?.label ?? zoneId) : undefined\n const text = announce\n ? announce({kind, item, zone})\n : kind === 'pick'\n ? `Picked up ${item}.`\n : kind === 'drop'\n ? `Dropped ${item} in ${zone ?? 'place'}.`\n : `Cancelled moving ${item}.`\n setAnnouncement(text)\n },\n [announce],\n )\n\n const registerZone = useCallback((id: string, record: ZoneRecord) => {\n zones.current.set(id, record)\n return () => {\n zones.current.delete(id)\n }\n }, [])\n\n const registerItem = useCallback((id: string, record: ItemRecord) => {\n items.current.set(id, record)\n return () => {\n items.current.delete(id)\n }\n }, [])\n\n /** The zone under the pointer that accepts the dragged item, and where in\n * it the item would land. */\n const locate = useCallback((itemId: string, x: number, y: number): DragDropTarget | null => {\n const item = items.current.get(itemId)\n if (!item) return null\n const payload: DragDropItemData = {id: itemId, zone: item.zone, data: item.data}\n for (const [zoneId, zone] of zones.current) {\n const r = zone.el.getBoundingClientRect()\n if (x < r.left || x > r.right || y < r.top || y > r.bottom) continue\n if (zone.accepts && !zone.accepts(payload)) return null\n const horizontal = zone.orientation === 'horizontal'\n let index = 0\n for (const [otherId, other] of items.current) {\n if (otherId === itemId || other.zone !== zoneId) continue\n const or = other.el.getBoundingClientRect()\n const mid = horizontal ? (or.left + or.right) / 2 : (or.top + or.bottom) / 2\n if ((horizontal ? x : y) > mid) index += 1\n }\n return {zone: zoneId, index}\n }\n return null\n }, [])\n\n // `target` is the resolved drop target (null cancels). The consumer's\n // onDrop runs here, in the event handler, never inside a state updater:\n // React may call an updater more than once and forbids updating another\n // component from it.\n const finish = useCallback(\n (target: DragDropTarget | null) => {\n const s = session.current\n if (!s) return\n if (s.holdTimer) clearTimeout(s.holdTimer)\n if (frame.current !== null) cancelAnimationFrame(frame.current)\n frame.current = null\n session.current = null\n try {\n if (s.source.hasPointerCapture(s.pointerId)) s.source.releasePointerCapture(s.pointerId)\n } catch {\n // already released\n }\n if (!s.active) return\n const item = items.current.get(s.id)\n setDrag(null)\n if (target && item) {\n onDrop({item: {id: s.id, zone: item.zone, data: item.data as T}, target})\n say('drop', s.id, target.zone)\n } else {\n say('cancel', s.id)\n }\n },\n [onDrop, say],\n )\n\n const activate = useCallback(\n (s: DragSession, x: number, y: number) => {\n s.active = true\n const item = items.current.get(s.id)\n setDrag({\n id: s.id,\n preview: item?.preview ?? null,\n width: s.width,\n height: s.height,\n x: x - s.offsetX,\n y: y - s.offsetY,\n over: locate(s.id, x, y),\n })\n say('pick', s.id)\n },\n [locate, say],\n )\n\n const begin = useCallback(\n (id: string, e: React.PointerEvent) => {\n if (session.current || e.button !== 0) 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 session.current = s\n // Capture keeps the stream on the item if the pointer leaves the window;\n // the document listeners below carry the drag either way, so a browser\n // (or a synthetic event) without an active pointer is not an error.\n try {\n source.setPointerCapture(e.pointerId)\n } catch {\n // no active pointer to capture\n }\n if (e.pointerType === 'touch') {\n s.holdTimer = setTimeout(() => {\n s.holdTimer = null\n if (session.current === s && !s.active) activate(s, s.startX, s.startY)\n }, TOUCH_HOLD_MS)\n }\n },\n [activate],\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 useEffect(() => {\n const onMove = (e: PointerEvent) => {\n const s = session.current\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 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) finish(null)\n return\n }\n } else {\n if (moved < MOVE_THRESHOLD_PX) return\n activate(s, e.clientX, e.clientY)\n }\n }\n if (frame.current !== null) return\n frame.current = requestAnimationFrame(() => {\n frame.current = null\n const x = e.clientX\n const y = e.clientY\n setDrag((current) =>\n current\n ? {...current, x: x - s.offsetX, y: y - s.offsetY, over: locate(s.id, x, y)}\n : current,\n )\n })\n }\n const onUp = (e: PointerEvent) => {\n const s = session.current\n if (!s || e.pointerId !== s.pointerId) return\n // Resolve the target from the release point, not the last frame.\n finish(s.active ? locate(s.id, e.clientX, e.clientY) : null)\n }\n const onCancel = (e: PointerEvent) => {\n const s = session.current\n if (!s || e.pointerId !== s.pointerId) return\n finish(null)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && session.current) finish(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 }\n }, [activate, finish, locate])\n\n const value = useMemo<RootContextValue>(\n () => ({registerZone, registerItem, begin, drag}),\n [registerZone, registerItem, begin, drag],\n )\n\n return (\n <RootContext.Provider value={value}>\n {children}\n {drag && (\n <html.div\n aria-hidden\n style={[styles.ghost, styles.ghostAt(drag.x, drag.y, drag.width, drag.height)]}\n >\n {drag.preview}\n </html.div>\n )}\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={styles.liveRegion}>\n {announcement}\n </html.div>\n </RootContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Zone\n// ---------------------------------------------------------------------------\n\nexport interface DragDropZoneProps<T = unknown> {\n id: string\n /** Read to screen readers when an item is dropped here. */\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 /** Refuse an item; the zone then never lights up for it. */\n accepts?: (item: DragDropItemData<T>) => boolean\n children: ReactNode\n}\n\nfunction Zone<T = unknown>({\n id,\n label,\n orientation = 'horizontal',\n accepts,\n children,\n}: DragDropZoneProps<T>) {\n const {registerZone, drag} = useRoot('Zone')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n return registerZone(id, {\n el,\n orientation,\n label,\n accepts: accepts as ZoneRecord['accepts'],\n })\n }, [id, label, orientation, accepts, registerZone])\n\n const over = drag?.over?.zone === id\n const dragging = drag !== null\n\n return (\n <html.div\n ref={ref}\n style={[styles.zone, dragging && styles.zoneReady, over && styles.zoneOver]}\n >\n {children}\n </html.div>\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. */\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 {registerItem, begin, drag} = useRoot('Item')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n return registerItem(id, {el, zone, data, label, preview: preview ?? children})\n }, [id, zone, data, label, preview, children, registerItem])\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 begin(id, e)\n },\n [begin, disabled, id],\n )\n\n if (isNative) return <>{children}</>\n\n const lifted = drag?.id === id\n return (\n <html.div\n ref={ref}\n onPointerDown={onPointerDown}\n style={[styles.item, disabled && styles.itemDisabled, lifted && styles.itemLifted]}\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} {\n const ctx = useContext(RootContext)\n return {dragging: ctx?.drag?.id ?? null, over: ctx?.drag?.over ?? null}\n}\n\nexport const DragDrop = {Root, Zone, Item}\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 {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.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: 1,\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: 360},\n contentMd: {width: 480},\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 closeDurationFast: {animationDuration: duration.fast},\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: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n // --- Title ---\n title: {\n fontSize: 18,\n fontWeight: 600,\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: 1,\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: 32,\n height: 32,\n borderRadius: 8,\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 fast: styles.closeDurationFast,\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'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\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: 1001,\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: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n panelVertical: {\n width: '100%',\n borderTopWidth: 1,\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: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n\n // --- Panel widths (horizontal anchors) ---\n sm: {maxWidth: 360},\n md: {maxWidth: 480},\n lg: {maxWidth: 640},\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 closeDurationFast: {animationDuration: duration.fast},\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: 1,\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: 32,\n height: 32,\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 panelRef: React.RefObject<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}\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, panelRef}: 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 })\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) return\n const panel = panelRef.current\n if (!panel) return\n\n function handlePointerDown(e: PointerEvent) {\n if (e.button !== 0) return\n const target = e.target as HTMLElement\n if (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 panel!.dataset.panelSize = String(state.panelSize)\n panel!.setPointerCapture(e.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 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 return\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\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 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 panelRef,\n anchor,\n isHorizontal,\n getMovement,\n applyTransform,\n resetStyles,\n animateSnapBack,\n animateDismiss,\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'\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 fast: styles.closeDurationFast,\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\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 panelRef,\n })\n\n if (!open) return null\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n return (\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={panelRef}\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 {children}\n </html.div>\n </html.div>\n </>\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} = 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 {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 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: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: '120ms',\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: 2,\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 {type ReactNode, useCallback, useEffect, useMemo, useRef} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {\n useForm,\n FormProvider,\n type UseFormReturn,\n type DefaultValues,\n type FieldValues,\n type FieldErrors,\n type Path,\n} from 'react-hook-form'\nimport {effectTsResolver} from '@hookform/resolvers/effect-ts'\nimport type {Schema} from 'effect'\nimport {FormContext, type LabelPosition, type NecessityIndicator} from './FormContext'\n\nexport interface FormProps<T extends FieldValues> {\n schema: Schema.Schema<T>\n defaultValues: DefaultValues<T>\n onSubmit: (data: T) => void | Promise<void>\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n validationErrors?: Partial<Record<Path<T>, string>>\n children: ReactNode | ((methods: UseFormReturn<T>) => ReactNode)\n}\n\nconst formStyles = css.create({\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n\nexport function Form<T extends FieldValues>({\n schema,\n defaultValues,\n onSubmit,\n disabled = false,\n labelPosition = 'top',\n necessityIndicator = false,\n validationErrors,\n children,\n}: FormProps<T>) {\n const methods = useForm<T>({\n resolver: effectTsResolver(schema),\n defaultValues,\n mode: 'onTouched',\n reValidateMode: 'onChange',\n })\n\n // Sync server-side validation errors into RHF\n const prevErrorKeysRef = useRef<string[]>([])\n useEffect(() => {\n const prevKeys = prevErrorKeysRef.current\n const nextKeys = validationErrors ? Object.keys(validationErrors) : []\n\n // Clear errors that were removed\n for (const key of prevKeys) {\n if (!nextKeys.includes(key)) {\n methods.clearErrors(key as Path<T>)\n }\n }\n\n // Set new errors\n if (validationErrors) {\n for (const [key, message] of Object.entries(validationErrors)) {\n if (message) {\n methods.setError(key as Path<T>, {type: 'server', message: message as string})\n }\n }\n }\n\n prevErrorKeysRef.current = nextKeys\n }, [validationErrors, methods])\n\n const formRef = useRef<HTMLFormElement>(null)\n\n const onInvalid = useCallback(\n (errors: FieldErrors<T>) => {\n const firstField = Object.keys(errors)[0]\n if (firstField) {\n methods.setFocus(firstField as Path<T>)\n }\n },\n [methods],\n )\n\n const handleSubmit = useCallback(\n (e: Event) => {\n e.preventDefault()\n void methods.handleSubmit(onSubmit, onInvalid)()\n },\n [methods, onSubmit, onInvalid],\n )\n\n useEffect(() => {\n const el = formRef.current\n if (!el) return\n el.addEventListener('submit', handleSubmit)\n return () => el.removeEventListener('submit', handleSubmit)\n }, [handleSubmit])\n\n const formCtx = useMemo(\n () => ({disabled, labelPosition, necessityIndicator}),\n [disabled, labelPosition, necessityIndicator],\n )\n\n return (\n <FormProvider {...methods}>\n <FormContext.Provider value={formCtx}>\n <html.form\n ref={formRef}\n aria-disabled={disabled || undefined}\n style={disabled && formStyles.disabled}\n >\n {typeof children === 'function' ? children(methods) : children}\n </html.form>\n </FormContext.Provider>\n </FormProvider>\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'\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'\n\nexport const styles = css.create({\n wrapper: {\n display: 'flex',\n alignItems: 'stretch',\n borderWidth: 1,\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: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n addonEnd: {\n borderLeftWidth: 1,\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'\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!) */\n minWidth?: number | string\n children: ReactNode\n}\n\nfunction Addon({position = 'end', onClick, disabled, minWidth, children}: 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(minWidth),\n ]\n\n if (onClick) {\n return (\n <html.button type=\"button\" onClick={onClick} disabled={disabled} style={style}>\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'\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 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: 1,\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'\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 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 children,\n}: LinkButtonProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel}\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 {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n },\n bordered: {\n borderWidth: 1,\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: 1,\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: 1,\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'\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: 18,\n height: 18,\n borderWidth: 1,\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: 8,\n height: 8,\n borderRadius: radii.full,\n backgroundColor: colors.accent,\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\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'\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={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 {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.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: 1,\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: 8,\n flexDirection: 'column',\n paddingTop: 2,\n paddingBottom: 2,\n paddingRight: 2,\n },\n scrollbarHorizontal: {\n left: 0,\n right: 0,\n bottom: 0,\n height: 8,\n flexDirection: 'row',\n paddingLeft: 2,\n paddingRight: 2,\n paddingBottom: 2,\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 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'\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?: number | string\n}\n\nfunction Viewport({children, maxHeight}: ViewportProps) {\n const {viewportRef, viewportId} = useScrollArea()\n\n return (\n <html.div\n ref={viewportRef}\n id={viewportId}\n tabIndex={0}\n role=\"region\"\n aria-label=\"Scrollable content\"\n style={[styles.viewport, maxHeight != null && styles.viewportMaxHeight(maxHeight)]}\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 {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.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: 1,\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 backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 49,\n },\n popup: {\n // Position is `fixed` and the top/left/width are applied inline by Popup\n // (computed from the root's bounding rect) so the dropdown can escape any\n // ancestor with `overflow: hidden` or `transform` (e.g. inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n maxHeight: 200,\n overflowY: 'auto',\n // Re-enable pointer events: the portal mount is pointer-events: none so\n // clicks fall through except on the popup itself.\n pointerEvents: 'auto',\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 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 itemHidden: {\n display: 'none',\n },\n empty: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n hidden: {\n display: 'none',\n },\n // Dynamic position — applied at runtime from the input's bounding rect.\n popupPosition: (top: number, left: number, width: number) => ({\n top,\n left,\n width,\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 '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const lightTheme = css.createTheme(colors, {\n bg: '#ffffff',\n bgCard: '#f5f5f5',\n bgCardHover: '#ebebeb',\n text: '#1a1a1a',\n textMuted: '#4a4a4a',\n accent: '#1e40af',\n accentHover: '#1a3799',\n accentContrast: '#ffffff',\n border: '#d4d4d4',\n error: '#991b1b',\n errorHover: '#7f1d1d',\n errorBg: 'rgba(153, 27, 27, 0.08)',\n errorBorder: 'rgba(153, 27, 27, 0.3)',\n errorText: '#7f1d1d',\n errorContrast: '#ffffff',\n success: '#166534',\n successBg: 'rgba(22, 101, 52, 0.08)',\n successBorder: 'rgba(22, 101, 52, 0.3)',\n successText: '#14532d',\n warning: '#92400e',\n warningBg: 'rgba(146, 64, 14, 0.08)',\n warningBorder: 'rgba(146, 64, 14, 0.3)',\n warningText: '#78350f',\n info: '#1e40af',\n infoBg: 'rgba(30, 64, 175, 0.08)',\n infoBorder: 'rgba(30, 64, 175, 0.3)',\n infoText: '#1e40af',\n})\n\nexport const lightShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.08)',\n md: '0 4px 12px rgba(0, 0, 0, 0.12)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.16)',\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const highContrastTheme = css.createTheme(colors, {\n bg: '#000000',\n bgCard: '#111111',\n bgCardHover: '#1a1a1a',\n text: '#ffffff',\n textMuted: '#b0b0b0',\n accent: '#60a5fa',\n accentHover: '#93c5fd',\n accentContrast: '#000000',\n border: '#555555',\n error: '#f87171',\n errorHover: '#fca5a5',\n errorBg: 'rgba(248, 113, 113, 0.15)',\n errorBorder: 'rgba(248, 113, 113, 0.5)',\n errorText: '#fca5a5',\n errorContrast: '#000000',\n success: '#4ade80',\n successBg: 'rgba(74, 222, 128, 0.15)',\n successBorder: 'rgba(74, 222, 128, 0.5)',\n successText: '#86efac',\n warning: '#fcd34d',\n warningBg: 'rgba(252, 211, 77, 0.15)',\n warningBorder: 'rgba(252, 211, 77, 0.5)',\n warningText: '#fef08a',\n info: '#60a5fa',\n infoBg: 'rgba(96, 165, 250, 0.15)',\n infoBorder: 'rgba(96, 165, 250, 0.5)',\n infoText: '#bfdbfe',\n})\n\nexport const highContrastShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.6)',\n md: '0 4px 12px rgba(0, 0, 0, 0.7)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.8)',\n})\n","import {createContext, type ReactNode, useContext, useState} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {lightTheme, lightShadows} from '@duro-app/tokens/themes/light.css'\nimport {highContrastTheme, highContrastShadows} from '@duro-app/tokens/themes/high-contrast.css'\n\nexport type ThemeName = 'dark' | 'light' | 'high-contrast'\n\ninterface ThemeProviderProps {\n theme?: ThemeName\n children: ReactNode\n}\n\nconst themeMap: Partial<Record<ThemeName, readonly [typeof lightTheme, typeof lightShadows]>> = {\n light: [lightTheme, lightShadows],\n 'high-contrast': [highContrastTheme, highContrastShadows],\n}\n\nconst styles = css.create({\n root: {\n display: 'contents',\n color: colors.text,\n },\n // Sibling overlay where floating popups (Combobox, Menu, Tooltip) portal to.\n // Lives inside ThemeProvider so theme tokens cascade. Fixed + inset 0 so\n // popups can position freely with viewport coords; pointer-events: none lets\n // clicks fall through except where children re-enable them.\n portalMount: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n // Above Dialog (1001) so popups inside dialogs render on top.\n zIndex: 1100,\n },\n})\n\n// react-strict-dom's style prop rejects Theme<VarGroup<{named keys}>> because the\n// concrete VarGroup lacks the generic index signature. This is a known typing gap.\ntype DivStyle = Parameters<typeof html.div>[0]['style']\n\nconst PortalMountContext = createContext<HTMLElement | null>(null)\n\nexport function usePortalMount(): HTMLElement | null {\n return useContext(PortalMountContext)\n}\n\nexport function ThemeProvider({theme = 'dark', children}: ThemeProviderProps) {\n const overrides = themeMap[theme]\n const themeStyles = [overrides?.[0], overrides?.[1], styles.root] as DivStyle\n const [mount, setMount] = useState<HTMLElement | null>(null)\n\n return (\n <html.div data-theme={theme} style={themeStyles}>\n <PortalMountContext.Provider value={mount}>{children}</PortalMountContext.Provider>\n <html.div ref={setMount} data-portal-mount style={styles.portalMount} />\n </html.div>\n )\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 {ComboboxContext, useCombobox} from './ComboboxContext'\nimport {useComboboxRoot} from './useComboboxRoot'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\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\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={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\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// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates so it escapes ancestor `overflow: hidden` / `transform`\n// containing blocks (notably Dialog and Drawer).\nfunction Popup({children}: {children: ReactNode}) {\n const {open, listboxId, rootRef} = useCombobox()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the root each time the popup opens, and re-measure on scroll/resize\n // so the dropdown follows the input. Capture-phase scroll listener catches\n // scroll on any ancestor (e.g. Dialog body).\n useLayoutEffect(() => {\n if (!open) {\n setCoords(null)\n return\n }\n const update = () => {\n const el = rootRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // Position immediately below the input with a small gap. `xs` token = 4px.\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, rootRef])\n\n if (!open || !coords) return null\n\n const node = (\n <html.div\n id={listboxId}\n role=\"listbox\"\n style={[styles.popup, styles.popupPosition(coords.top, coords.left, coords.width)]}\n >\n {children}\n </html.div>\n )\n\n // SSR / pre-mount fallback: render inline (will be invisible under\n // overflow:hidden parents but won't crash). Once the mount is available,\n // 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 inputValue,\n labels,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useCombobox()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\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 <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => setValue(itemValue)}\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\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 <html.div style={styles.empty}>{children}</html.div>\n}\n\nexport const Combobox = {\n Root,\n Input,\n Trigger,\n Popup,\n Item,\n ItemText,\n Empty,\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'\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: 1,\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 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 zIndex: 49,\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: 1,\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: 120,\n maxHeight: 280,\n overflowY: 'auto',\n zIndex: 50,\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 // 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 (order.length === 0) 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 'Escape':\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'\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}: {\n children: ReactNode\n 'aria-label'?: string\n}) {\n const {open, toggle, listboxId, highlightedId, triggerRef} = useSelect()\n const localRef = useRef<HTMLButtonElement>(null)\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={localRef}\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}\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 node = (\n <>\n {open && <html.div style={styles.backdrop} onClick={close} />}\n <html.div\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 {children}\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 {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'\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: '6px',\n paddingBottom: '6px',\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': 2,\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: '3px',\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: '18px',\n },\n itemIcon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: '18px',\n height: '18px',\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'\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: 'linear',\n animationIterationCount: 'infinite',\n },\n sm: {\n width: 16,\n height: 16,\n borderWidth: 2,\n },\n md: {\n width: 24,\n height: 24,\n borderWidth: 2,\n },\n lg: {\n width: 40,\n height: 40,\n borderWidth: 3,\n },\n srOnly: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n },\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.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={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 {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 {easing} from '@duro-app/tokens/tokens/motion.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 },\n toast: {\n pointerEvents: 'auto',\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: 440,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderLeftWidth: 3,\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: '160ms',\n animationTimingFunction: easing.easeOut,\n },\n success: {borderLeftColor: colors.successBorder},\n error: {borderLeftColor: colors.errorBorder},\n info: {borderLeftColor: colors.infoBorder},\n\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 1,\n },\n iconSuccess: {color: colors.successText},\n iconError: {color: colors.errorText},\n iconInfo: {color: colors.infoText},\n\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n },\n message: {\n color: colors.text,\n },\n action: {\n alignSelf: 'flex-start',\n marginTop: 2,\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: 2,\n outlineColor: colors.accent,\n outlineOffset: 2,\n borderRadius: radii.sm,\n },\n closeBtn: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 2,\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: 2,\n outlineColor: colors.accent,\n outlineOffset: 1,\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\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'\n\nexport interface ToastAction {\n label: string\n onClick: () => void\n}\n\nexport interface ToastOptions {\n /** Visual + semantic tone. Errors announce assertively and 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 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}\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}\nconst variantIconStyle = {\n success: styles.iconSuccess,\n error: styles.iconError,\n info: styles.iconInfo,\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({entry, onDismiss}: {entry: ToastEntry; onDismiss: (id: string) => void}) {\n const {id, variant, message, action, duration} = entry\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => onDismiss(id), duration)\n return () => clearTimeout(timer)\n }, [id, duration, 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 >\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=\"Dismiss\"\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 function ToastProvider({children}: {children: ReactNode}) {\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} />\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 {spacing, radii} 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 gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightNormal,\n lineHeight: 1,\n borderRadius: 4,\n whiteSpace: 'nowrap',\n minWidth: 0,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\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': 1,\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'\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: 1,\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: 40,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus': 2,\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': 1,\n },\n boxSizing: 'border-box',\n },\n inputError: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n liveRegion: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\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'\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={styles.liveRegion}>\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 {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'\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: 1,\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: 1,\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: 2,\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': 2,\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': -2,\n },\n },\n tabVertical: {\n justifyContent: 'flex-start',\n borderBottomWidth: 0,\n borderRightWidth: 2,\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: 2,\n },\n indicatorVertical: {\n right: -1,\n top: 0,\n width: 2,\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 {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'\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: 1,\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': 2,\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': 1,\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 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 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 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'\n\nexport const styles = css.create({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.sm,\n borderWidth: 1,\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': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\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}\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'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1,\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': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\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 },\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: 1,\n borderRightStyle: 'solid',\n // Override any borderColor set by pressed state — dividers always use border token\n borderColor: colors.border,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n})\n","import {type ReactNode, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useToggleGroup} from '../ToggleGroup/ToggleGroupContext'\nimport {styles} from './styles.css'\n\nexport type ToggleSize = 'default' | 'small'\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 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 [standalonePressed, setStandalonePressed] = useControllableValue(\n controlledPressed,\n defaultPressed,\n onPressedChange,\n )\n\n const pressed = groupPressed ?? standalonePressed\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 type=\"button\"\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 isGrouped && styles.grouped,\n disabled && styles.disabled,\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 {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n overflow: 'hidden',\n },\n vertical: {\n flexDirection: 'column',\n },\n})\n","import {type ReactNode, useCallback} 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 {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 /** 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 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 return (\n <ToggleGroupContext.Provider value={{value, toggle, disabled, orientation, size}}>\n <html.div\n role=\"toolbar\"\n aria-orientation={orientation}\n {...a11y}\n style={[styles.root, orientation === 'vertical' && styles.vertical]}\n >\n {children}\n </html.div>\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'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n popup: {\n position: 'absolute',\n zIndex: 50,\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: 1,\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 {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'\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: 36,\n height: 20,\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': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\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: 2,\n left: 2,\n width: 16,\n height: 16,\n borderRadius: radii.full,\n backgroundColor: '#fff',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n thumbChecked: {\n transform: 'translateX(16px)',\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\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'\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={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'\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) => ({\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(240px, 1fr) minmax(0, 2fr)',\n },\n },\n splitWide: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_WIDE_BP})`]: 'minmax(280px, 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) => ({\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'\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.\n * Wins over `columns` when both are set. On native this approximates to\n * cells of that minimum width that grow and wrap. */\n minColumnWidth?: string\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 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, children}: GridProps) {\n if (isNative) {\n return (\n <NativeGrid\n gap={gap}\n columns={layout ? layoutWeights[layout] : columns}\n minColumnWidth={layout ? undefined : minColumnWidth}\n >\n {children}\n </NativeGrid>\n )\n }\n\n const columnStyle = layout\n ? layoutMap[layout]\n : minColumnWidth\n ? styles.autoFit(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(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'\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: 600},\n maxMd: {maxWidth: 800},\n maxLg: {maxWidth: 1200},\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":["SPACING_PX","xs","sm","ms","md","lg","xl","xxl","xxxl","DURATION_MS","instant","fast","base","slow","ICON_SIZES","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","styles","overlay","$$css","overlayOffset","bottom","val","undefined","overlayEmphasized","selectedCount","selectedCountEmphasized","actions","closeButton","closeButtonEmphasized","separator","separatorEmphasized","ActionBarContent","selectedItemCount","selectedLabel","isEmphasized","onClearSelection","dismissible","bottomOffset","countStr","label","t5","t6","t7","t8","t9","jsx","_rsdMerge","_rsdDefaultStyles","span","t10","t11","div","t12","t13","button","t14","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","sun","moon","monitor","contrast","filledIcons","Icon","name","size","filled","iconWrap","content","error","success","warning","info","defaultIcons","resolveIcon","icon","variant","Alert","resolvedIcon","isNative","sizeMd","sizeSm","default","nativeFlex","sizeMap","Badge","sizeDefault","sizeSmall","primary","secondary","link","inverseSecondary","danger","fullWidth","disabled","small","Button","type","onClick","ariaLabel","horizontal","vertical","alignStart","alignCenter","alignEnd","verticalAlignStart","verticalAlignCenter","verticalAlignEnd","gapXs","gapSm","gapMd","gapMap","horizontalAlignMap","start","center","end","verticalAlignMap","ButtonGroup","orientation","align","gap","isVertical","alignStyle","Callout","elevated","outlined","interactive","sizeCompact","sizeFull","header","compact","full","Card","root","rootDisabled","boxUnchecked","boxChecked","input","Checkbox","value","checked","controlledChecked","defaultChecked","onChange","isControlled","internalChecked","setInternalChecked","useState","isChecked","target","handleChange","next","opacity","t15","Symbol","for","t16","t17","t18","t19","useControllableValue","controlledValue","defaultValue","internal","setInternal","v","setValue","rootHorizontal","FieldContext","useFieldContext","useFieldGroupLabelling","own","ctx","descriptionId","invalid","errorId","trim","describedBy","labelId","CheckboxGroupContext","useCheckboxGroup","Error","Root","labelling","onValueChange","a11y","itemValue","onToggle","Item","itemDisabled","groupValue","groupDisabled","includes","isDisabled","isFieldGroup","CheckboxGroup","ColorInput","required","onBlur","ref","fieldCtx","field","effectiveName","effectiveValue","String","effectiveOnChange","effectiveOnBlur","effectiveRef","effectiveDisabled","controlId","backdrop","backdropOpen","backdropClosing","viewport","popup","popupOpen","popupClosing","closeDurationInstant","closeDurationFast","closeDurationBase","closeDurationSlow","title","description","body","footer","inlineWrapper","reducedMotion","closeDurationMap","DialogContext","useDialog","open","controlledOpen","defaultOpen","onOpenChange","dismissable","closeAnimationDuration","internalOpen","setInternalOpen","closing","setClosing","closingTimerRef","popupRef","isOpen","titleId","clearTimeout","requestOpen","setTimeout","requestClose","onKeyDown","stopPropagation","document","addEventListener","removeEventListener","prev","style","overflow","closeDuration","Trigger","Portal","handleBackdropClick","Header","Title","h2","Description","p","Body","Footer","Close","Dialog","InputGroupContext","useInputGroupContext","inGroup","mono","Input","font","placeholder","readOnly","minLength","maxLength","min","max","step","inputMode","list","pattern","autoComplete","autoFocus","ariaDescribedby","groupCtx","effectiveVariant","extraProps","FormContext","useFormContext","rootSide","labelSide","fieldContent","necessityIcon","necessityLabel","holdsGroup","found","Children","child","isValidElement","group","formCtx","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","_temp","item","itemLifted","zone","zoneReady","zoneOver","ghost","ghostAt","x","y","width","height","liveRegion","RootContext","useRoot","part","MOVE_THRESHOLD_PX","TOUCH_HOLD_MS","onDrop","announce","Map","zones","items","session","frame","drag","setDrag","announcement","setAnnouncement","kind","itemId","zoneId","get","text","say","record","set","registerZone","id_0","record_0","registerItem","itemId_0","item_0","payload","data","zoneId_0","zone_0","r","el","getBoundingClientRect","left","right","top","accepts","index","otherId","other","or","mid","locate","s","holdTimer","cancelAnimationFrame","source","hasPointerCapture","pointerId","releasePointerCapture","active","item_1","finish","s_0","x_0","y_0","item_2","preview","offsetX","offsetY","over","activate","id_1","currentTarget","rect","s_1","downAt","timeStamp","startX","clientX","startY","clientY","setPointerCapture","pointerType","begin","onMove","e_0","s_2","moved","Math","hypot","requestAnimationFrame","x_1","y_1","onUp","e_1","s_3","onCancel","e_2","s_4","onKey","e_3","Zone","el_0","webkitUserSelect","webkitTouchCallout","onPointerDown","lifted","useDragDrop","dragging","DragDrop","wrapper","wrapperOpenSm","wrapperCloseSm","wrapperOpenMd","wrapperCloseMd","contentSm","contentMd","slideIn","slideOut","bodyPadded","DetailPanelContext","useDetailPanel","present","setPresent","panelRef","previousFocusRef","setLabelId","activeElement","focus","useCallback","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","stateRef","isHorizontal","state","dx","getMovement","movement","panelEl","Number","dataset","progress","sign","transform","closest","previousElementSibling","absMovement","abs","overscroll","shadowSpread","round","boxShadow","applyTransform","resetStyles","panelEl_1","dismissTransform","transition","backdrop_1","dismissed","done","once","animateDismiss","animateSnapBack","_temp2","handlePointerDown","state_0","Date","now","animation","handlePointerMove","state_1","dx_0","dy","sqrt","preventDefault","movement_0","handlePointerUp","_e","state_2","movement_1","elapsed","velocity","handlePointerCancel","state_3","handleTouchMove","passive","panelEl_2","backdrop_2","cleanup","panelEl_0","backdrop_0","DrawerContext","useDrawer","swipeDismiss","requestCloseImmediate","slideInMap","slideOutMap","viewportAnchorMap","swipeEnabled","t20","t21","t22","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","formStyles","Form","schema","defaultValues","onSubmit","validationErrors","effectTsResolver","resolver","mode","reValidateMode","methods","useForm","prevErrorKeysRef","prevKeys","nextKeys","Object","keys","clearErrors","key_0","setError","formRef","errors","firstField","setFocus","onInvalid","handleSubmit","form","FormProvider","legend","gapMs","gapLg","gapXl","LegendIdContext","legendId","hasLegend","Legend","Fieldset","addon","addonStart","addonEnd","addonClickable","addonDisabled","dynamicStyles","minWidth","Addon","position","positionStyle","InputGroup","LinkButton","href","rel","a","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","scrollTop","setScrollTop","scrollLeft","setScrollLeft","scrollHeight","setScrollHeight","scrollWidth","setScrollWidth","clientHeight","setClientHeight","clientWidth","setClientWidth","scrolling","setScrolling","scrollTimerRef","vp","handleScroll","vp_0","observer","ResizeObserver","observe","disconnect","vp_1","Viewport","Scrollbar","maxScroll","scrollOffset","valueNow","Thumb","draggingRef","startPosRef","startScrollRef","thumbSizePercent","trackSize","thumbPixelSize","thumbOffset","thumbStyle","delta","scrollRatio","scrollDelta","ScrollArea","inputWrapper","inputWrapperFocused","trigger","itemHighlighted","itemHidden","hidden","popupPosition","ComboboxContext","useCombobox","useComboboxRoot","inputValue","controlledInputValue","onInputChange","initialLabels","initial","internalInputValue","setInternalInputValue","setInputValue","setOpen","labels","setLabels","highlightedId","setHighlightedId","listboxId","rootRef","inputRef","itemsRef","orderRef","close","order","openPopup","selectValue","v_0","label_0","registerLabel","itemValue_0","element","ids","sort","b","elA","elB","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","i","query","toLowerCase","getVisibleOrder","handleKeyDown","visibleOrder","bb137","prev_2","idx_0","indexOf","idx","prev_1","prev_0","scrollIntoView","block","lightTheme","xjvd03b","lightShadows","x13v825q","highContrastTheme","highContrastShadows","themeMap","light","portalMount","PortalMountContext","usePortalMount","ThemeProvider","theme","overrides","themeStyles","mount","setMount","localRef","focused","setFocused","Popup","coords","setCoords","window","useLayoutEffect","node","createPortal","selectedValue","isSelected","isHighlighted","isVisible","textContent","values","Combobox","SelectContext","useSelect","useSelectRoot","triggerRef","toggle","order_0","items_0","bb86","prev_3","Value","display","Select","groupTrigger","groupTriggerActive","chevron","chevronOpen","section","sectionLabel","itemActive","marker","markerActive","itemIcon","itemLabel","SideNavContext","useSideNav","activeValue","expandedGroups","setExpandedGroups","has","toggleGroup","group_0","next_0","expandGroup","nav","Group","groupKey","defaultExpanded","isExpanded","groupRef","triggerId","panelId","querySelector","hasActiveChild","Section","SideNav","spinner","srOnly","Spinner","region","toast","iconSuccess","iconError","iconInfo","closeBtn","DEFAULT_DURATION","createToastStore","seq","opts","duration","variantIcon","variantIconStyle","ToastContext","useToast","ToastItem","entry","timer","ToastProvider","useMemo","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","isInvalid","trimmed","addTag","value_0","getElementById","querySelectorAll","validate","commitValueRef","raw","selectionStart","handlePaste","clipboardData","getData","split","Boolean","handleFocus","TagGroup","rootVertical","listVertical","tab","tabVertical","tabActiveHorizontal","tabActiveVertical","tabIndicatorActive","indicatorHorizontal","indicatorVertical","indicatorOffsetH","offset","indicatorOffsetV","tabDisabled","TabsContext","useTabs","useTabsRoot","tabsRef","indicatorActive","setIndicatorActive","registerTab","listRef","setIndicator","CSS","escape","measure","offsetLeft","offsetWidth","offsetTop","offsetHeight","ro","listEl","tabs","prevKey","nextKey","targetValue","bb36","currentIdx_0","i_1","currentIdx","val_1","i_0","val_0","Tab","tabId","Tabs","Textarea","rows","textarea","PREFERENCES","ICON","system","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","matches","cycle","ColorModeToggle","weightNormal","weightMedium","weightSemibold","weightBold","truncate","weightMap","normal","medium","semibold","bold","weight","as","ToggleGroupContext","useToggleGroup","unpressed","pressed","grouped","Toggle","controlledPressed","defaultPressed","onPressedChange","sizeProp","groupPressed","standalonePressed","setStandalonePressed","ToggleGroup","multiple","nextPressed","TooltipContext","useTooltip","placement","delay","tooltipId","timerRef","show","hide","Tooltip","track","trackUnchecked","trackChecked","thumbChecked","Switch","onCheckedChange","setChecked","alignStretch","gapXxl","gapXxxl","stretch","Stack","alignBaseline","justifyStart","justifyCenter","justifyEnd","justifyBetween","baseline","justifyMap","between","Inline","justify","Cluster","_temp3","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","Array","from","every","w","isFinite","process","env","NODE_ENV","console","JSON","stringify","gridTemplate","weights","join","columnsMap","layoutMap","Grid","minColumnWidth","layout","columnStyle","grid","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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"}
|