@duro-app/ui 3.4.2 → 3.5.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/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/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","../../tokens/src/themes/light.css.ts","../../tokens/src/themes/high-contrast.css.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../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","../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 // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (centering container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 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 {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 {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\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 const mount = usePortalMount()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport (centering container, pointer-events: none) */}\n <html.div style={styles.viewport}>\n <html.div\n ref={popupRef}\n role=\"dialog\"\n aria-modal={true}\n 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 // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDialog()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDialog()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = 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 // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (positioning container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 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 {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {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 const mount = usePortalMount()\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 const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport */}\n <html.div style={[styles.viewport, viewportAnchorMap[anchor]]} data-drawer-viewport=\"\">\n <html.div\n ref={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 // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDrawer()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDrawer()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDrawer()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center',\n },\n message: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n lineHeight: typography.lineHeight,\n },\n action: {\n marginTop: spacing.sm,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\ninterface EmptyStateProps {\n message: string\n icon?: ReactNode\n action?: ReactNode\n}\n\nexport function EmptyState({message, icon, action}: EmptyStateProps) {\n return (\n <html.div style={styles.root}>\n {icon}\n <html.p style={styles.message}>{message}</html.p>\n {action && <html.div style={styles.action}>{action}</html.div>}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {typography, typeScale} from './typography.css'\n\nexport const typePresets = css.create({\n // Body\n bodySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize4,\n lineHeight: typeScale.lineHeight4,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize5,\n lineHeight: typeScale.lineHeight5,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n\n // UI\n caption: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingWide,\n },\n label: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n code: {\n fontFamily: typography.fontFamilyMono,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n overline: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase' as const,\n },\n\n // Heading\n headingSm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize6,\n lineHeight: typeScale.lineHeight6,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize7,\n lineHeight: typeScale.lineHeight7,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize8,\n lineHeight: typeScale.lineHeight8,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingXl: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize9,\n lineHeight: typeScale.lineHeight9,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n\n // Display (fluid)\n displaySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displaySm,\n lineHeight: 1.2,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayMd,\n lineHeight: 1.15,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayLg,\n lineHeight: 1.1,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type HeadingVariant =\n | 'displayLg'\n | 'displayMd'\n | 'displaySm'\n | 'headingXl'\n | 'headingLg'\n | 'headingMd'\n | 'headingSm'\n\ninterface HeadingProps {\n level: 1 | 2 | 3 | 4 | 5 | 6\n variant?: HeadingVariant\n color?: 'default' | 'muted' | 'accent'\n align?: 'start' | 'center' | 'end'\n children: ReactNode\n}\n\nconst defaultVariantMap: Record<number, HeadingVariant> = {\n 1: 'headingXl',\n 2: 'headingLg',\n 3: 'headingMd',\n 4: 'headingSm',\n 5: 'headingSm',\n 6: 'headingSm',\n}\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Heading({level, variant, color = 'default', align, children}: HeadingProps) {\n const resolvedVariant = variant ?? defaultVariantMap[level]\n const style = [typePresets[resolvedVariant], styles[color], align && alignMap[align]]\n\n if (level === 1) return <html.h1 style={style}>{children}</html.h1>\n if (level === 2) return <html.h2 style={style}>{children}</html.h2>\n if (level === 3) return <html.h3 style={style}>{children}</html.h3>\n if (level === 4) return <html.h4 style={style}>{children}</html.h4>\n if (level === 5) return <html.h5 style={style}>{children}</html.h5>\n return <html.h6 style={style}>{children}</html.h6>\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {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 // Above Dialog/Drawer (1000/1001): they portal into the same mount, so a\n // popup opened from inside a dialog must out-rank the dialog itself.\n zIndex: 1049,\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 zIndex: 1050,\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 {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 // Above Dialog/Drawer (1000/1001): they portal into the same mount, so a\n // popup opened from inside a dialog must out-rank the dialog itself.\n zIndex: 1049,\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: 1050,\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","lightTheme","xjvd03b","lightShadows","x13v825q","highContrastTheme","highContrastShadows","themeMap","light","portalMount","PortalMountContext","usePortalMount","ThemeProvider","theme","overrides","themeStyles","mount","setMount","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","node","createPortal","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","t23","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","localRef","focused","setFocused","Popup","coords","setCoords","window","useLayoutEffect","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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"}
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","../../tokens/src/themes/light.css.ts","../../tokens/src/themes/high-contrast.css.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../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","../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 // Input / action glyphs\n | 'search'\n | 'mic'\n // Color-mode glyphs\n | 'sun'\n | 'moon'\n | 'monitor'\n | 'contrast'\n // Filled variants (solid shape with cutout symbol)\n | 'info-circle-filled'\n | 'alert-triangle-filled'\n | 'check-circle-filled'\n | 'x-circle-filled'\n | 'shield-filled'\n | 'lock-filled'\n\n/** Stroke-based icons (Feather/Lucide style) */\nconst strokeIcons: Partial<Record<IconName, ReactNode>> = {\n 'x-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </>\n ),\n 'check-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"16 10 11 15 8 12\" />\n </>\n ),\n 'check-done': (\n <>\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </>\n ),\n forbidden: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\" />\n </>\n ),\n 'info-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </>\n ),\n 'alert-triangle': (\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </>\n ),\n shield: <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />,\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n key: (\n <>\n <path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.78 7.78 5.5 5.5 0 0 1 7.78-7.78zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n </>\n ),\n // ---- navigation / wayfinding ----\n map: (\n <>\n <polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\" />\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\" />\n </>\n ),\n layers: (\n <>\n <polygon points=\"12 2 2 7 12 12 22 7 12 2\" />\n <polyline points=\"2 17 12 22 22 17\" />\n <polyline points=\"2 12 12 17 22 12\" />\n </>\n ),\n // Two crossing arrows — exchange / interface flows.\n repeat: (\n <>\n <polyline points=\"17 1 21 5 17 9\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <polyline points=\"7 23 3 19 7 15\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </>\n ),\n database: (\n <>\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\" />\n <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\" />\n </>\n ),\n 'shield-check': (\n <>\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <polyline points=\"9 12 11 14 15 10\" />\n </>\n ),\n // Milestone path — roadmap / itinerary.\n route: (\n <>\n <circle cx=\"6\" cy=\"19\" r=\"3\" />\n <path d=\"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15\" />\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n </>\n ),\n 'git-branch': (\n <>\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </>\n ),\n menu: (\n <>\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </>\n ),\n // ---- infrastructure / inventory ----\n // Two stacked rack units — hosts, nodes, machines.\n server: (\n <>\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </>\n ),\n // Disk enclosure — volumes, persistent storage.\n 'hard-drive': (\n <>\n <line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\" />\n <path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />\n <line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\" />\n <line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\" />\n </>\n ),\n // Isometric crate — a deployable unit of work.\n box: (\n <>\n <path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\" />\n <polyline points=\"3.27 6.96 12 12.01 20.73 6.96\" />\n <line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\" />\n </>\n ),\n // Picture frame — container images, artefacts.\n image: (\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </>\n ),\n // Luggage tag — labels, annotations, metadata.\n tag: (\n <>\n <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\" />\n <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\n </>\n ),\n // Share of a whole — quotas, budgets, utilisation.\n 'pie-chart': (\n <>\n <path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\" />\n <path d=\"M22 12A10 10 0 0 0 12 2v10z\" />\n </>\n ),\n // ---- people / access / admin ----\n users: (\n <>\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n 'user-plus': (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"8.5\" cy=\"7\" r=\"4\" />\n <line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\" />\n <line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\" />\n </>\n ),\n mail: (\n <>\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" />\n <polyline points=\"22,6 12,13 2,6\" />\n </>\n ),\n 'file-text': (\n <>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </>\n ),\n plug: (\n <>\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2\" />\n <path d=\"M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\" />\n </>\n ),\n pin: (\n <>\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"22\" />\n <path d=\"M9 10.76V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v6.76a2 2 0 0 0 .55 1.38l1.68 1.78A1 1 0 0 1 16.5 16h-9a1 1 0 0 1-.73-1.68l1.68-1.78A2 2 0 0 0 9 10.76z\" />\n </>\n ),\n // ---- input / action ----\n // Magnifying glass — search fields, find actions.\n search: (\n <>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </>\n ),\n // Microphone — voice input, dictation.\n mic: (\n <>\n <path d=\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"23\" />\n <line x1=\"8\" y1=\"23\" x2=\"16\" y2=\"23\" />\n </>\n ),\n // ---- color mode ----\n sun: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </>\n ),\n moon: <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />,\n monitor: (\n <>\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </>\n ),\n // Circle, half solid — high-contrast / mode indicator.\n contrast: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 0 20z\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n}\n\n/**\n * Filled icons — solid shape with evenodd cutout for the inner symbol.\n * The cutout reveals the background color, so they work on any theme.\n * Uses fill=\"currentColor\" only, no stroke.\n */\nconst filledIcons: Partial<Record<IconName, ReactNode>> = {\n // Filled circle with \"i\" cutout (dot + line)\n 'info-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-.75 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0zM11 11a1 1 0 1 1 2 0v5a1 1 0 1 1-2 0v-5z\"\n />\n ),\n // Filled triangle with \"!\" cutout\n 'alert-triangle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0zM11 10a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0v-3zm.25 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0z\"\n />\n ),\n // Filled circle with checkmark cutout\n 'check-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707a1 1 0 0 0-1.414-1.414L11 13.586l-2.293-2.293a1 1 0 0 0-1.414 1.414l3 3a1 1 0 0 0 1.414 0l5-5z\"\n />\n ),\n // Filled circle with X cutout\n 'x-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM9.707 8.293a1 1 0 0 0-1.414 1.414L10.586 12l-2.293 2.293a1 1 0 1 0 1.414 1.414L12 13.414l2.293 2.293a1 1 0 0 0 1.414-1.414L13.414 12l2.293-2.293a1 1 0 0 0-1.414-1.414L12 10.586 9.707 8.293z\"\n />\n ),\n // Filled shield with checkmark cutout\n 'shield-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 1L3 5v7c0 6.5 8.5 10.5 9 10.73.5-.23 9-4.23 9-10.73V5l-9-4zm3.707 8.707a1 1 0 0 0-1.414-1.414L11 11.586l-1.293-1.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4z\"\n />\n ),\n // Filled lock body with stroke shackle\n 'lock-filled': (\n <>\n <path\n d=\"M7 11V7a5 5 0 0 1 10 0v4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n </>\n ),\n}\n\ninterface IconProps {\n name: IconName\n /** Token from the icon size scale: sm 16, md 18, lg 24, xl 36, xxl 48. */\n size?: IconSize\n}\n\nexport function Icon({name, size: sizeToken = 'lg'}: IconProps) {\n const size = ICON_SIZES[sizeToken]\n const filled = filledIcons[name]\n if (filled) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width={size} height={size}>\n {filled}\n </svg>\n )\n }\n\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={size}\n height={size}\n >\n {strokeIcons[name]}\n </svg>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {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 // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (centering container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 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 {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 {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\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 const mount = usePortalMount()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport (centering container, pointer-events: none) */}\n <html.div style={styles.viewport}>\n <html.div\n ref={popupRef}\n role=\"dialog\"\n aria-modal={true}\n 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 // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDialog()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDialog()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = 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 // Portaled into the ThemeProvider mount, which is pointer-events: none:\n // the backdrop must take clicks back (outside click dismisses).\n pointerEvents: 'auto',\n },\n backdropOpen: {\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (positioning container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 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 {createPortal} from 'react-dom'\nimport {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {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 const mount = usePortalMount()\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 const node = (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport */}\n <html.div style={[styles.viewport, viewportAnchorMap[anchor]]} data-drawer-viewport=\"\">\n <html.div\n ref={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 // Out of the tree into the ThemeProvider mount (like Select and Combobox):\n // a fixed overlay inside an ancestor with transform / filter /\n // backdrop-filter is positioned against THAT ancestor, not the viewport —\n // a dialog opened from a sticky blurred top bar centred on the bar. Without\n // a mount (SSR, no ThemeProvider) it renders in place.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDrawer()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDrawer()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDrawer()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center',\n },\n message: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n lineHeight: typography.lineHeight,\n },\n action: {\n marginTop: spacing.sm,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\ninterface EmptyStateProps {\n message: string\n icon?: ReactNode\n action?: ReactNode\n}\n\nexport function EmptyState({message, icon, action}: EmptyStateProps) {\n return (\n <html.div style={styles.root}>\n {icon}\n <html.p style={styles.message}>{message}</html.p>\n {action && <html.div style={styles.action}>{action}</html.div>}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {typography, typeScale} from './typography.css'\n\nexport const typePresets = css.create({\n // Body\n bodySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize4,\n lineHeight: typeScale.lineHeight4,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize5,\n lineHeight: typeScale.lineHeight5,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n\n // UI\n caption: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingWide,\n },\n label: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n code: {\n fontFamily: typography.fontFamilyMono,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n overline: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase' as const,\n },\n\n // Heading\n headingSm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize6,\n lineHeight: typeScale.lineHeight6,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize7,\n lineHeight: typeScale.lineHeight7,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize8,\n lineHeight: typeScale.lineHeight8,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingXl: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize9,\n lineHeight: typeScale.lineHeight9,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n\n // Display (fluid)\n displaySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displaySm,\n lineHeight: 1.2,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayMd,\n lineHeight: 1.15,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayLg,\n lineHeight: 1.1,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type HeadingVariant =\n | 'displayLg'\n | 'displayMd'\n | 'displaySm'\n | 'headingXl'\n | 'headingLg'\n | 'headingMd'\n | 'headingSm'\n\ninterface HeadingProps {\n level: 1 | 2 | 3 | 4 | 5 | 6\n variant?: HeadingVariant\n color?: 'default' | 'muted' | 'accent'\n align?: 'start' | 'center' | 'end'\n children: ReactNode\n}\n\nconst defaultVariantMap: Record<number, HeadingVariant> = {\n 1: 'headingXl',\n 2: 'headingLg',\n 3: 'headingMd',\n 4: 'headingSm',\n 5: 'headingSm',\n 6: 'headingSm',\n}\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Heading({level, variant, color = 'default', align, children}: HeadingProps) {\n const resolvedVariant = variant ?? defaultVariantMap[level]\n const style = [typePresets[resolvedVariant], styles[color], align && alignMap[align]]\n\n if (level === 1) return <html.h1 style={style}>{children}</html.h1>\n if (level === 2) return <html.h2 style={style}>{children}</html.h2>\n if (level === 3) return <html.h3 style={style}>{children}</html.h3>\n if (level === 4) return <html.h4 style={style}>{children}</html.h4>\n if (level === 5) return <html.h5 style={style}>{children}</html.h5>\n return <html.h6 style={style}>{children}</html.h6>\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {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 // Above Dialog/Drawer (1000/1001): they portal into the same mount, so a\n // popup opened from inside a dialog must out-rank the dialog itself.\n zIndex: 1049,\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 zIndex: 1050,\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 {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 // Above Dialog/Drawer (1000/1001): they portal into the same mount, so a\n // popup opened from inside a dialog must out-rank the dialog itself.\n zIndex: 1049,\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: 1050,\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","search","mic","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","lightTheme","xjvd03b","lightShadows","x13v825q","highContrastTheme","highContrastShadows","themeMap","light","portalMount","PortalMountContext","usePortalMount","ThemeProvider","theme","overrides","themeStyles","mount","setMount","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","node","createPortal","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","t23","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","localRef","focused","setFocused","Popup","coords","setCoords","window","useLayoutEffect","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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"}