@duro-app/ui 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../tokens/src/keys.ts","../src/components/ActionBar/ActionBarProvider.tsx","../src/components/ActionBar/styles.css.ts","../src/components/ActionBar/ActionBar.tsx","../src/components/Icon/Icon.tsx","../src/components/Alert/styles.css.ts","../src/components/Alert/Alert.tsx","../src/platform.ts","../src/components/Badge/styles.css.ts","../src/components/Badge/Badge.tsx","../src/components/Button/styles.css.ts","../src/components/Button/Button.tsx","../src/components/ButtonGroup/styles.css.ts","../src/components/ButtonGroup/ButtonGroup.tsx","../src/components/Callout/styles.css.ts","../src/components/Callout/Callout.tsx","../src/components/Card/styles.css.ts","../src/components/Card/Card.tsx","../src/components/Checkbox/styles.css.ts","../src/components/Checkbox/Checkbox.tsx","../src/hooks/useControllableValue.ts","../src/components/CheckboxGroup/styles.css.ts","../src/components/CheckboxGroup/CheckboxGroup.tsx","../src/components/Field/FieldContext.ts","../src/components/ColorInput/styles.css.ts","../src/components/ColorInput/ColorInput.tsx","../src/components/Dialog/styles.css.ts","../src/components/Dialog/Dialog.tsx","../src/components/InputGroup/InputGroupContext.ts","../src/components/Input/styles.css.ts","../src/components/Input/Input.tsx","../src/components/Form/FormContext.ts","../src/components/Field/styles.css.ts","../src/components/Field/Field.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/DetailPanel/styles.css.ts","../src/components/DetailPanel/DetailPanel.tsx","../src/components/Drawer/styles.css.ts","../src/components/Drawer/useSwipeDismiss.ts","../src/components/Drawer/Drawer.tsx","../src/components/EmptyState/styles.css.ts","../src/components/EmptyState/EmptyState.tsx","../../tokens/src/tokens/type-presets.css.ts","../src/components/Heading/styles.css.ts","../src/components/Heading/Heading.tsx","../src/components/List/styles.css.ts","../src/components/List/List.tsx","../src/components/Form/Form.tsx","../src/components/Fieldset/styles.css.ts","../src/components/Fieldset/Fieldset.tsx","../src/components/InputGroup/styles.css.ts","../src/components/InputGroup/InputGroup.tsx","../src/components/LinkButton/styles.css.ts","../src/components/LinkButton/LinkButton.tsx","../src/components/Panel/styles.css.ts","../src/components/Panel/Panel.tsx","../src/components/RadioGroup/styles.css.ts","../src/components/RadioGroup/RadioGroup.tsx","../src/components/ScrollArea/styles.css.ts","../src/components/ScrollArea/ScrollAreaContext.ts","../src/components/ScrollArea/useScrollAreaRoot.ts","../src/components/ScrollArea/ScrollArea.tsx","../src/components/Combobox/styles.css.ts","../src/components/Combobox/ComboboxContext.ts","../src/components/Combobox/useComboboxRoot.ts","../../tokens/src/themes/light.css.ts","../../tokens/src/themes/high-contrast.css.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/Combobox/Combobox.tsx","../src/components/Select/styles.css.ts","../src/components/Select/SelectContext.ts","../src/components/Select/useSelectRoot.ts","../src/components/Select/Select.tsx","../src/components/SideNav/styles.css.ts","../src/components/SideNav/SideNavContext.ts","../src/components/SideNav/SideNav.tsx","../src/components/Spinner/styles.css.ts","../src/components/Spinner/Spinner.tsx","../src/components/Toast/styles.css.ts","../src/components/Toast/ToastProvider.tsx","../src/components/StatusIcon/styles.css.ts","../src/components/StatusIcon/StatusIcon.tsx","../src/components/TagGroup/TagGroupContext.ts","../src/components/Tag/styles.css.ts","../src/components/Tag/Tag.tsx","../src/components/TagGroup/styles.css.ts","../src/components/TagGroup/TagGroup.tsx","../src/components/Tabs/styles.css.ts","../src/components/Tabs/TabsContext.ts","../src/components/Tabs/useTabsRoot.ts","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/styles.css.ts","../src/components/Textarea/Textarea.tsx","../src/components/ColorMode/styles.css.ts","../src/components/ColorMode/ColorMode.tsx","../src/components/Text/styles.css.ts","../src/components/Text/Text.tsx","../src/components/ToggleGroup/ToggleGroupContext.ts","../src/components/Toggle/styles.css.ts","../src/components/Toggle/Toggle.tsx","../src/components/ToggleGroup/styles.css.ts","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tooltip/styles.css.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Switch/styles.css.ts","../src/components/Switch/Switch.tsx","../src/components/Stack/styles.css.ts","../src/components/Stack/Stack.tsx","../src/components/Inline/styles.css.ts","../src/components/Inline/Inline.tsx","../src/components/Cluster/styles.css.ts","../src/components/Cluster/Cluster.tsx","../src/components/Grid/styles.css.ts","../src/components/Grid/columns.ts","../src/components/Grid/Grid.tsx","../src/components/PageShell/styles.css.ts","../src/components/PageShell/PageShell.tsx","../src/hooks/useContainerQuery.ts"],"sourcesContent":["// Token key unions and raw numeric values, as plain TypeScript.\n//\n// The css.ts files can't export these: StyleX requires inline object literals,\n// and `css.defineVars` returns an opaque VarGroup whose keyof includes phantom\n// members (`__opaqueId`, `__tokens`). So the scales are duplicated here as the\n// typed source of truth for component props, Storybook argTypes, and tooling —\n// with zero StyleX/react-strict-dom imports, so this module is safe to load in\n// Node (tests, scripts, the ESLint plugin's drift test).\n//\n// `scripts/check-token-drift.mjs` runs in `prebuild` and fails the build if any\n// value here diverges from the corresponding css.ts literal.\n\n// Explicit .js extensions: this module is also typechecked under NodeNext\n// resolution (the ESLint plugin's tests import it via the `types` condition),\n// which rejects extensionless relative imports. Both are type-only, so they\n// are erased at build time.\nimport type {RawColors} from './raw.js'\n\nexport const SPACING_KEYS = ['xs', 'sm', 'ms', 'md', 'lg', 'xl', 'xxl', 'xxxl'] as const\nexport type SpacingToken = (typeof SPACING_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `spacing` (px).\nexport const SPACING_PX = {\n xs: 4,\n sm: 8,\n ms: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n xxxl: 64,\n} as const\n\nexport const RADIUS_KEYS = ['xs', 'sm', 'md', 'lg', 'full'] as const\nexport type RadiusToken = (typeof RADIUS_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `radii` (px).\nexport const RADII_PX = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n full: 9999,\n} as const\n\nexport const SHADOW_KEYS = ['sm', 'md', 'lg'] as const\nexport type ShadowToken = (typeof SHADOW_KEYS)[number]\n\n// Mirrors tokens/motion.css.ts `duration`, as numbers for setTimeout use.\nexport const DURATION_MS = {\n instant: 0,\n fast: 150,\n base: 200,\n slow: 280,\n} as const\nexport type DurationToken = keyof typeof DURATION_MS\n\n// Icon rendering sizes (SVG width/height, px). Not a css.defineVars scale —\n// icons size via attributes, not CSS custom properties.\nexport const ICON_SIZES = {\n sm: 16,\n md: 18,\n lg: 24,\n xl: 36,\n xxl: 48,\n} as const\nexport type IconSize = keyof typeof ICON_SIZES\n\n// Mirrors tokens/breakpoints.css.ts `breakpoints` (css.defineConsts), as\n// numbers. The css.ts file also exports `breakpointsPx`, but importing it\n// pulls react-strict-dom; tooling that only needs the numbers reads here.\nexport const BREAKPOINT_KEYS = ['xs', 'sm', 'md', 'lg', 'xl'] as const\nexport const BREAKPOINTS_PX = {\n xs: 480,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font sizes, in rem.\nexport const FONT_SIZE_REM = {\n fontSizeXs: 0.75,\n fontSizeSm: 0.875,\n fontSizeMd: 1,\n fontSizeLg: 1.125,\n fontSizeXl: 1.25,\n fontSizeHeading: 1.5,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font weights, as numbers.\nexport const FONT_WEIGHTS = {\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n} as const\n\n// Mirrors tokens/typography.css.ts `typeScale` fontSize1..9, in rem.\nexport const TYPE_SCALE_FONT_SIZE_REM = {\n fontSize1: 0.75,\n fontSize2: 0.8125,\n fontSize3: 0.875,\n fontSize4: 1,\n fontSize5: 1.125,\n fontSize6: 1.25,\n fontSize7: 1.5,\n fontSize8: 1.875,\n fontSize9: 2.25,\n} as const\n\n// Mirrors tokens/shadows.css.ts `shadows` (the base, dark palette) verbatim.\nexport const SHADOWS = {\n sm: '0 2px 4px rgba(0, 0, 0, 0.3)',\n md: '0 4px 12px rgba(0, 0, 0, 0.4)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.5)',\n} as const\n\n// Mirrors tokens/motion.css.ts `easing` verbatim.\nexport const EASINGS = {\n standard: 'ease',\n easeOut: 'cubic-bezier(0.32, 0.72, 0, 1)',\n easeIn: 'cubic-bezier(0.72, 0, 0.68, 0.28)',\n} as const\n\nexport type ColorToken = keyof RawColors\n\nexport type {Breakpoint} from './tokens/breakpoints.css.js'\n","import {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\n\ninterface ActionBarEntry {\n id: string\n render: () => ReactNode\n}\n\ninterface ActionBarStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ActionBarEntry[]\n push: (id: string, render: () => ReactNode) => void\n update: (id: string, render: () => ReactNode) => void\n remove: (id: string) => void\n}\n\nfunction createActionBarStore(): ActionBarStore {\n let entries: ActionBarEntry[] = []\n const listeners = new Set<() => void>()\n\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n push: (id, render) => {\n entries = [...entries, {id, render}]\n notify()\n },\n update: (id, render) => {\n entries = entries.map((e) => (e.id === id ? {id, render} : e))\n notify()\n },\n remove: (id) => {\n entries = entries.filter((e) => e.id !== id)\n notify()\n },\n }\n}\n\nconst ActionBarContext = createContext<ActionBarStore | null>(null)\n\nexport function ActionBarProvider({children}: {children: ReactNode}) {\n const storeRef = useRef<ActionBarStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createActionBarStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const topEntry = entries.length > 0 ? entries[entries.length - 1] : null\n\n return (\n <ActionBarContext.Provider value={store}>\n {children}\n {topEntry?.render()}\n </ActionBarContext.Provider>\n )\n}\n\nexport function useActionBarStack() {\n const store = useContext(ActionBarContext)\n const id = useId()\n\n const register = useCallback(\n (render: () => ReactNode) => {\n if (!store) return\n const entries = store.getSnapshot()\n if (entries.some((e) => e.id === id)) {\n store.update(id, render)\n } else {\n store.push(id, render)\n }\n },\n [store, id],\n )\n\n const unregister = useCallback(() => {\n store?.remove(id)\n }, [store, id])\n\n const isTop = useMemo(() => {\n if (!store) return false\n const entries = store.getSnapshot()\n return entries.length > 0 && entries[entries.length - 1].id === id\n }, [store, id])\n\n return {id, register, unregister, managed: store !== null, isTop}\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n overlay: {\n position: 'fixed',\n bottom: spacing.lg,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.md,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n boxShadow: shadows.lg,\n zIndex: 50,\n maxWidth: 'calc(100vw - 48px)',\n },\n overlayOffset: (bottom: number) => ({\n bottom,\n }),\n overlayEmphasized: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n selectedCount: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n fontFamily: typography.fontFamily,\n color: colors.text,\n whiteSpace: 'nowrap',\n },\n selectedCountEmphasized: {\n color: colors.accentContrast,\n },\n actions: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.sm,\n },\n closeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n padding: 0,\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderRadius: radii.sm,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 2,\n },\n },\n closeButtonEmphasized: {\n color: {\n default: colors.accentContrast,\n ':hover': colors.accentContrast,\n },\n opacity: {\n default: 0.7,\n ':hover': 1,\n },\n },\n separator: {\n width: 1,\n alignSelf: 'stretch',\n backgroundColor: colors.border,\n marginTop: spacing.xs,\n marginBottom: spacing.xs,\n },\n separatorEmphasized: {\n backgroundColor: colors.accentContrast,\n opacity: 0.3,\n },\n})\n","import {useEffect, useCallback, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {SPACING_PX, type SpacingToken} from '@duro-app/tokens/keys'\nimport {useActionBarStack} from './ActionBarProvider'\nimport {styles} from './styles.css'\n\nexport interface ActionBarProps {\n /** Number of selected items, or 'all'. Hidden when 0. */\n selectedItemCount: number | 'all'\n /** Label for the selection count. Receives the count string. */\n selectedLabel?: (count: string) => string\n /** Whether to use emphasized (accent) styling. */\n isEmphasized?: boolean\n /** Called when the clear/close button is pressed. */\n onClearSelection: () => void\n /** Whether the bar can be dismissed. When false, the close button is hidden. @default true */\n dismissible?: boolean\n /**\n * Distance between the bar and the bottom of the viewport, for hosts with\n * their own bottom chrome (zoom controls, players) the bar must clear.\n * A spacing token, or a raw px number when clearing chrome of arbitrary\n * height. Defaults to the spacing.lg token.\n */\n bottomOffset?: SpacingToken | number\n /** Action buttons to display. */\n children: ReactNode\n}\n\nfunction ActionBarContent({\n selectedItemCount,\n selectedLabel,\n isEmphasized = false,\n onClearSelection,\n dismissible = true,\n bottomOffset,\n children,\n}: ActionBarProps) {\n const countStr = selectedItemCount === 'all' ? 'All' : `${selectedItemCount}`\n const label = selectedLabel ? selectedLabel(countStr) : `${countStr} selected`\n\n return (\n <html.div\n role=\"toolbar\"\n aria-label={label}\n style={[\n styles.overlay,\n bottomOffset != null &&\n styles.overlayOffset(\n typeof bottomOffset === 'number' ? bottomOffset : SPACING_PX[bottomOffset],\n ),\n isEmphasized && styles.overlayEmphasized,\n ]}\n >\n <html.span style={[styles.selectedCount, isEmphasized && styles.selectedCountEmphasized]}>\n {label}\n </html.span>\n <html.div style={[styles.separator, isEmphasized && styles.separatorEmphasized]} />\n <html.div style={styles.actions}>{children}</html.div>\n {dismissible && (\n <html.button\n type=\"button\"\n aria-label=\"Clear selection\"\n onClick={onClearSelection}\n style={[styles.closeButton, isEmphasized && styles.closeButtonEmphasized]}\n >\n <svg width={10} height={10} viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M1 1l8 8M9 1l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )}\n </html.div>\n )\n}\n\nfunction ActionBarInner(props: ActionBarProps) {\n const {selectedItemCount} = props\n const stack = useActionBarStack()\n const isActive = selectedItemCount !== 0\n\n const renderBar = useCallback(() => <ActionBarContent {...props} />, [props])\n\n useEffect(() => {\n if (!stack.managed) return\n if (isActive) {\n stack.register(renderBar)\n } else {\n stack.unregister()\n }\n return () => stack.unregister()\n }, [stack, isActive, renderBar])\n\n // If no provider, fall back to standalone rendering\n if (!stack.managed) {\n if (!isActive) return null\n return <ActionBarContent {...props} />\n }\n\n // Managed by provider — rendering happens there\n return null\n}\n\nexport const ActionBar = ActionBarInner\n","import type {ReactNode} from 'react'\nimport {ICON_SIZES, type IconSize} from '@duro-app/tokens/keys'\n\nexport type {IconSize}\n\nexport type IconName =\n | 'x-circle'\n | 'check-circle'\n | 'check-done'\n | 'clock'\n | 'forbidden'\n | 'info-circle'\n | 'alert-triangle'\n | 'shield'\n | 'lock'\n | 'key'\n // Navigation / wayfinding glyphs\n | 'map'\n | 'layers'\n | 'repeat'\n | 'database'\n | 'shield-check'\n | 'route'\n | 'git-branch'\n | 'menu'\n | 'pin'\n // Infrastructure / inventory glyphs\n | 'server'\n | 'hard-drive'\n | 'box'\n | 'image'\n | 'tag'\n | 'pie-chart'\n // People / access / admin glyphs\n | 'users'\n | 'user-plus'\n | 'mail'\n | 'file-text'\n | 'plug'\n // Color-mode glyphs\n | 'sun'\n | 'moon'\n | 'monitor'\n | 'contrast'\n // Filled variants (solid shape with cutout symbol)\n | 'info-circle-filled'\n | 'alert-triangle-filled'\n | 'check-circle-filled'\n | 'x-circle-filled'\n | 'shield-filled'\n | 'lock-filled'\n\n/** Stroke-based icons (Feather/Lucide style) */\nconst strokeIcons: Partial<Record<IconName, ReactNode>> = {\n 'x-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </>\n ),\n 'check-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"16 10 11 15 8 12\" />\n </>\n ),\n 'check-done': (\n <>\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </>\n ),\n forbidden: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\" />\n </>\n ),\n 'info-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </>\n ),\n 'alert-triangle': (\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </>\n ),\n shield: <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />,\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n key: (\n <>\n <path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.78 7.78 5.5 5.5 0 0 1 7.78-7.78zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n </>\n ),\n // ---- navigation / wayfinding ----\n map: (\n <>\n <polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\" />\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\" />\n </>\n ),\n layers: (\n <>\n <polygon points=\"12 2 2 7 12 12 22 7 12 2\" />\n <polyline points=\"2 17 12 22 22 17\" />\n <polyline points=\"2 12 12 17 22 12\" />\n </>\n ),\n // Two crossing arrows — exchange / interface flows.\n repeat: (\n <>\n <polyline points=\"17 1 21 5 17 9\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <polyline points=\"7 23 3 19 7 15\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </>\n ),\n database: (\n <>\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\" />\n <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\" />\n </>\n ),\n 'shield-check': (\n <>\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <polyline points=\"9 12 11 14 15 10\" />\n </>\n ),\n // Milestone path — roadmap / itinerary.\n route: (\n <>\n <circle cx=\"6\" cy=\"19\" r=\"3\" />\n <path d=\"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15\" />\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n </>\n ),\n 'git-branch': (\n <>\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </>\n ),\n menu: (\n <>\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </>\n ),\n // ---- infrastructure / inventory ----\n // Two stacked rack units — hosts, nodes, machines.\n server: (\n <>\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </>\n ),\n // Disk enclosure — volumes, persistent storage.\n 'hard-drive': (\n <>\n <line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\" />\n <path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />\n <line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\" />\n <line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\" />\n </>\n ),\n // Isometric crate — a deployable unit of work.\n box: (\n <>\n <path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\" />\n <polyline points=\"3.27 6.96 12 12.01 20.73 6.96\" />\n <line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\" />\n </>\n ),\n // Picture frame — container images, artefacts.\n image: (\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </>\n ),\n // Luggage tag — labels, annotations, metadata.\n tag: (\n <>\n <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\" />\n <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\n </>\n ),\n // Share of a whole — quotas, budgets, utilisation.\n 'pie-chart': (\n <>\n <path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\" />\n <path d=\"M22 12A10 10 0 0 0 12 2v10z\" />\n </>\n ),\n // ---- people / access / admin ----\n users: (\n <>\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n 'user-plus': (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"8.5\" cy=\"7\" r=\"4\" />\n <line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\" />\n <line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\" />\n </>\n ),\n mail: (\n <>\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" />\n <polyline points=\"22,6 12,13 2,6\" />\n </>\n ),\n 'file-text': (\n <>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </>\n ),\n plug: (\n <>\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2\" />\n <path d=\"M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\" />\n </>\n ),\n pin: (\n <>\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"22\" />\n <path d=\"M9 10.76V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v6.76a2 2 0 0 0 .55 1.38l1.68 1.78A1 1 0 0 1 16.5 16h-9a1 1 0 0 1-.73-1.68l1.68-1.78A2 2 0 0 0 9 10.76z\" />\n </>\n ),\n // ---- color mode ----\n sun: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </>\n ),\n moon: <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />,\n monitor: (\n <>\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </>\n ),\n // Circle, half solid — high-contrast / mode indicator.\n contrast: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 0 20z\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n}\n\n/**\n * Filled icons — solid shape with evenodd cutout for the inner symbol.\n * The cutout reveals the background color, so they work on any theme.\n * Uses fill=\"currentColor\" only, no stroke.\n */\nconst filledIcons: Partial<Record<IconName, ReactNode>> = {\n // Filled circle with \"i\" cutout (dot + line)\n 'info-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-.75 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0zM11 11a1 1 0 1 1 2 0v5a1 1 0 1 1-2 0v-5z\"\n />\n ),\n // Filled triangle with \"!\" cutout\n 'alert-triangle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0zM11 10a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0v-3zm.25 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0z\"\n />\n ),\n // Filled circle with checkmark cutout\n 'check-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707a1 1 0 0 0-1.414-1.414L11 13.586l-2.293-2.293a1 1 0 0 0-1.414 1.414l3 3a1 1 0 0 0 1.414 0l5-5z\"\n />\n ),\n // Filled circle with X cutout\n 'x-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM9.707 8.293a1 1 0 0 0-1.414 1.414L10.586 12l-2.293 2.293a1 1 0 1 0 1.414 1.414L12 13.414l2.293 2.293a1 1 0 0 0 1.414-1.414L13.414 12l2.293-2.293a1 1 0 0 0-1.414-1.414L12 10.586 9.707 8.293z\"\n />\n ),\n // Filled shield with checkmark cutout\n 'shield-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 1L3 5v7c0 6.5 8.5 10.5 9 10.73.5-.23 9-4.23 9-10.73V5l-9-4zm3.707 8.707a1 1 0 0 0-1.414-1.414L11 11.586l-1.293-1.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4z\"\n />\n ),\n // Filled lock body with stroke shackle\n 'lock-filled': (\n <>\n <path\n d=\"M7 11V7a5 5 0 0 1 10 0v4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n </>\n ),\n}\n\ninterface IconProps {\n name: IconName\n /** Token from the icon size scale: sm 16, md 18, lg 24, xl 36, xxl 48. */\n size?: IconSize\n}\n\nexport function Icon({name, size: sizeToken = 'lg'}: IconProps) {\n const size = ICON_SIZES[sizeToken]\n const filled = filledIcons[name]\n if (filled) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width={size} height={size}>\n {filled}\n </svg>\n )\n }\n\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={size}\n height={size}\n >\n {strokeIcons[name]}\n </svg>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 1,\n },\n content: {\n flex: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type AlertVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<AlertVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface AlertProps {\n variant?: AlertVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n children: ReactNode\n}\n\nfunction resolveIcon(icon: AlertProps['icon'], variant: AlertVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"md\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"md\" />\n return icon\n}\n\nexport function Alert({variant = 'info', icon, children}: AlertProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div role=\"alert\" style={[styles.base, styles[variant]]}>\n {resolvedIcon ? (\n <>\n <html.div style={styles.iconWrap}>{resolvedIcon}</html.div>\n <html.div style={styles.content}>{children}</html.div>\n </>\n ) : (\n children\n )}\n </html.div>\n )\n}\n","/**\n * Platform flag resolved by the bundler's platform extensions: web bundlers\n * (Vite/Rollup) read THIS file (`isNative = false`); Metro reads\n * `platform.native.ts` (`isNative = true`) on React Native / Expo.\n *\n * It lets shared components layer a native-only style override without\n * importing `react-native` on web (the DS web build has no react-native).\n * Typed `boolean` (not the `false` literal) so `isNative && styles.x` stays a\n * `false | Style` union in style arrays rather than narrowing to `false`.\n */\nexport const isNative: boolean = false\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n lineHeight: 1,\n borderRadius: radii.full,\n whiteSpace: 'nowrap',\n },\n sizeMd: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n sizeSm: {\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n fontSize: '0.625rem',\n },\n default: {\n backgroundColor: colors.bgCardHover,\n color: colors.textMuted,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info'\nexport type BadgeSize = 'sm' | 'md'\n\ninterface BadgeProps {\n variant?: BadgeVariant\n size?: BadgeSize\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nexport function Badge({variant = 'default', size = 'md', children}: BadgeProps) {\n return (\n <html.span style={[styles.base, isNative && styles.nativeFlex, sizeMap[size], styles[variant]]}>\n {children}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color, opacity, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n // Tactile press feedback. The scale is suppressed under reduced motion (and\n // duration.fast collapses to 0ms there too), so it's inert for those users.\n transform: {\n default: 'scale(1)',\n ':active': {\n default: 'scale(0.97)',\n '@media (prefers-reduced-motion: reduce)': 'scale(1)',\n },\n },\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 2,\n },\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n ':active': colors.accentHover,\n },\n borderColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: colors.border,\n color: colors.textMuted,\n },\n link: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecoration: {\n default: 'none',\n ':hover': 'underline',\n },\n paddingLeft: 0,\n paddingRight: 0,\n },\n inverseSecondary: {\n backgroundColor: {\n default: 'rgba(0, 0, 0, 0.10)',\n ':hover': 'rgba(0, 0, 0, 0.18)',\n },\n borderColor: {\n default: 'rgba(0, 0, 0, 0.55)',\n ':hover': 'rgba(0, 0, 0, 0.70)',\n },\n color: colors.accentContrast,\n },\n danger: {\n backgroundColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n ':active': colors.errorHover,\n },\n borderColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n },\n color: colors.errorContrast,\n },\n fullWidth: {\n width: '100%',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'inverseSecondary' | 'link' | 'danger'\nexport type ButtonSize = 'default' | 'small'\n\ninterface ButtonProps {\n variant?: ButtonVariant\n size?: ButtonSize\n fullWidth?: boolean\n disabled?: boolean\n type?: 'button' | 'submit'\n onClick?: () => void\n /** Accessible name override — e.g. for buttons whose visible text isn't unique. */\n 'aria-label'?: string\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Button({\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n disabled = false,\n type = 'button',\n onClick,\n 'aria-label': ariaLabel,\n children,\n}: ButtonProps) {\n return (\n <html.button\n type={type}\n disabled={disabled}\n onClick={onClick}\n aria-label={ariaLabel}\n style={[\n styles.base,\n isNative && styles.nativeFlex,\n sizeMap[size],\n styles[variant],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n },\n horizontal: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n vertical: {\n flexDirection: 'column',\n },\n alignStart: {justifyContent: 'flex-start'},\n alignCenter: {justifyContent: 'center'},\n alignEnd: {justifyContent: 'flex-end'},\n verticalAlignStart: {alignItems: 'flex-start'},\n verticalAlignCenter: {alignItems: 'center'},\n verticalAlignEnd: {alignItems: 'flex-end'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMd: {gap: spacing.md},\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type ButtonGroupGap = Extract<SpacingToken, 'xs' | 'sm' | 'md'>\n\nexport interface ButtonGroupProps {\n children: ReactNode\n /** Layout direction. Default: 'horizontal' */\n orientation?: 'horizontal' | 'vertical'\n /** Alignment within container. Default: 'start' */\n align?: 'start' | 'end' | 'center'\n /** Disable all buttons in group */\n disabled?: boolean\n /** Gap between buttons. Default: 'sm' */\n gap?: ButtonGroupGap\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n md: styles.gapMd,\n} as const satisfies Record<ButtonGroupGap, unknown>\n\nconst horizontalAlignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst verticalAlignMap = {\n start: styles.verticalAlignStart,\n center: styles.verticalAlignCenter,\n end: styles.verticalAlignEnd,\n} as const\n\nexport function ButtonGroup({\n children,\n orientation = 'horizontal',\n align = 'start',\n disabled = false,\n gap = 'sm',\n}: ButtonGroupProps) {\n const isVertical = orientation === 'vertical'\n const alignStyle = isVertical ? verticalAlignMap[align] : horizontalAlignMap[align]\n\n return (\n <html.div\n role=\"group\"\n style={[\n styles.base,\n isVertical ? styles.vertical : styles.horizontal,\n gapMap[gap],\n alignStyle,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n // Vertically centres the icon with the message — the right default for the\n // short, single/two-line messages callouts usually carry.\n alignCenter: {\n alignItems: 'center',\n },\n // Aligns the icon to the first line — for long, multi-paragraph messages.\n alignStart: {\n alignItems: 'flex-start',\n },\n icon: {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n content: {\n flexGrow: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type CalloutVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<CalloutVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface CalloutProps {\n variant?: CalloutVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n /**\n * Vertical alignment of the icon against the message. `center` (default)\n * suits short single/two-line messages; `start` aligns the icon to the first\n * line for long multi-paragraph content.\n */\n align?: 'center' | 'start'\n children: ReactNode\n}\n\nfunction resolveIcon(icon: CalloutProps['icon'], variant: CalloutVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"xl\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"xl\" />\n return icon\n}\n\nexport function Callout({variant = 'info', icon, align = 'center', children}: CalloutProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div\n role=\"note\"\n style={[\n styles.base,\n styles[variant],\n align === 'center' ? styles.alignCenter : styles.alignStart,\n ]}\n >\n {resolvedIcon && <html.span style={styles.icon}>{resolvedIcon}</html.span>}\n <html.div style={styles.content}>{children}</html.div>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n },\n // Variants\n elevated: {\n borderRadius: radii.lg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n },\n outlined: {\n borderRadius: radii.md,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n filled: {\n borderRadius: radii.md,\n },\n interactive: {\n borderRadius: radii.md,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n backgroundColor: {\n default: colors.bgCard,\n ':hover': colors.bgCardHover,\n },\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n // Lift on hover; suppressed under reduced motion so there's no positional\n // shift (the token duration also collapses to 0ms there).\n transform: {\n default: 'translateY(0)',\n ':hover': {\n default: 'translateY(-2px)',\n '@media (prefers-reduced-motion: reduce)': 'translateY(0)',\n },\n },\n },\n // Sizes (padding)\n sizeDefault: {\n padding: spacing.lg,\n },\n sizeCompact: {\n padding: spacing.md,\n },\n sizeFull: {\n padding: spacing.xl,\n },\n // Header\n header: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n marginBottom: spacing.md,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'interactive'\nexport type CardSize = 'default' | 'compact' | 'full'\n\ninterface CardProps {\n variant?: CardVariant\n size?: CardSize\n header?: string\n onClick?: () => void\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n compact: styles.sizeCompact,\n full: styles.sizeFull,\n} as const\n\nexport function Card({\n variant = 'outlined',\n size = 'default',\n header,\n onClick,\n children,\n}: CardProps) {\n return (\n <html.div onClick={onClick} style={[styles.base, styles[variant], sizeMap[size]]}>\n {header && <html.div style={styles.header}>{header}</html.div>}\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n box: {\n width: 18,\n height: 18,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.xs,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n boxUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n boxChecked: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n // Native-only checkmark: a small box showing just its right + bottom border,\n // rotated 45° into a tick. Pure CSS (RSD translates the transform string to\n // an RN transform), so no SVG / react-native-svg weight reaches web.\n checkmark: {\n width: 5,\n height: 9,\n borderRightWidth: 2,\n borderRightStyle: 'solid',\n borderRightColor: colors.accentContrast,\n borderBottomWidth: 2,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.accentContrast,\n transform: 'rotate(45deg)',\n marginTop: -2,\n },\n checkmarkVisible: {\n opacity: 1,\n },\n checkmarkHidden: {\n opacity: 0,\n },\n // Native label text — RN <Text> doesn't inherit color/size from the button\n // ancestor the way web inherits from <label>, so set it explicitly.\n labelText: {\n fontSize: typography.fontSizeSm,\n color: colors.text,\n },\n // Strip the default button chrome RSD gives <button> on native (border/bg/\n // padding mimic the browser default) so the row matches the web checkbox.\n nativeButton: {\n borderWidth: 0,\n backgroundColor: 'transparent',\n padding: 0,\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` (on both .root and .box); web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {type ReactNode, useState, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\ninterface CheckboxProps {\n name?: string\n value?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n /** Accessible label when no visible label (children) is provided. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n children?: ReactNode\n}\n\nexport function Checkbox({\n name,\n value,\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n 'aria-label': ariaLabel,\n onChange,\n children,\n}: CheckboxProps) {\n const isControlled = controlledChecked !== undefined\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n // Web: the real <input type=checkbox> drives toggling, a11y and form submit.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked)\n }\n onChange?.(e)\n },\n [isControlled, onChange],\n )\n\n // Native: RSD only makes <button> pressable and has no <input type=checkbox>,\n // so the whole row is a button and we synthesize the change payload that\n // consumers read (e.target.checked).\n const handlePress = useCallback(() => {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) {\n setInternalChecked(next)\n }\n onChange?.({\n target: {checked: next, name, value},\n } as unknown as React.ChangeEvent<HTMLInputElement>)\n }, [disabled, isChecked, isControlled, onChange, name, value])\n\n if (isNative) {\n return (\n <html.button\n type=\"button\"\n onClick={handlePress}\n disabled={disabled}\n role=\"checkbox\"\n aria-checked={isChecked}\n aria-label={!children ? ariaLabel : undefined}\n style={[\n styles.root,\n styles.nativeFlex,\n styles.nativeButton,\n disabled && styles.rootDisabled,\n ]}\n >\n <html.div\n style={[\n styles.box,\n styles.nativeFlex,\n isChecked ? styles.boxChecked : styles.boxUnchecked,\n ]}\n >\n {/* CSS-border checkmark (rotated right+bottom borders) — no SVG, no\n react-native-svg dep, so nothing is added to the web bundle. */}\n <html.div\n style={[styles.checkmark, isChecked ? styles.checkmarkVisible : styles.checkmarkHidden]}\n />\n </html.div>\n {children && <html.span style={styles.labelText}>{children}</html.span>}\n </html.button>\n )\n }\n\n return (\n <html.label style={[styles.root, disabled && styles.rootDisabled]}>\n <html.input\n type=\"checkbox\"\n name={name}\n value={value}\n checked={isControlled ? controlledChecked : undefined}\n defaultChecked={!isControlled ? defaultChecked : undefined}\n disabled={disabled}\n aria-label={!children ? ariaLabel : undefined}\n onChange={handleChange}\n style={styles.input}\n />\n <html.span\n style={[styles.box, isChecked ? styles.boxChecked : styles.boxUnchecked]}\n aria-hidden\n >\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n style={{opacity: isChecked ? 1 : 0}}\n >\n <polyline\n points=\"2.5 6 5 8.5 9.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import {useState, useCallback} from 'react'\n\nexport function useControllableValue<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void,\n) {\n const [internal, setInternal] = useState(defaultValue)\n const value = controlledValue !== undefined ? controlledValue : internal\n const setValue = useCallback(\n (v: T) => {\n if (controlledValue === undefined) setInternal(v)\n onChange?.(v)\n },\n [controlledValue, onChange],\n )\n return [value, setValue] as const\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n})\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {Checkbox} from '../Checkbox/Checkbox'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ninterface CheckboxGroupContextValue {\n value: string[]\n onToggle: (itemValue: string, checked: boolean) => void\n disabled: boolean\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null)\n\nfunction useCheckboxGroup() {\n const ctx = useContext(CheckboxGroupContext)\n if (!ctx) {\n throw new Error('CheckboxGroup.Item must be used within CheckboxGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (value: string[]) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n}: RootProps) {\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onToggle = useCallback(\n (itemValue: string, checked: boolean) => {\n if (disabled) return\n const next = checked ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n setValue(next)\n },\n [disabled, value, setValue],\n )\n\n return (\n <CheckboxGroupContext.Provider value={{value, onToggle, disabled}}>\n <html.div\n role=\"group\"\n aria-orientation={orientation}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </CheckboxGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onToggle, disabled: groupDisabled} = useCheckboxGroup()\n const isChecked = groupValue.includes(value)\n const isDisabled = groupDisabled || itemDisabled\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onToggle(value, e.target.checked)\n },\n [value, onToggle],\n )\n\n return (\n <Checkbox value={value} checked={isChecked} disabled={isDisabled} onChange={handleChange}>\n {children}\n </Checkbox>\n )\n}\n\nexport const CheckboxGroup = {\n Root,\n Item,\n}\n","import {createContext, useContext} from 'react'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\n\ninterface FieldContextValue {\n controlId: string\n descriptionId: string\n errorId: string\n invalid: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n field?: {\n value: unknown\n onChange: (...event: unknown[]) => void\n onBlur: () => void\n ref: React.RefCallback<unknown>\n name: string\n }\n errorMessage?: string\n}\n\nexport type {FieldContextValue}\n\nexport const FieldContext = createContext<FieldContextValue | null>(null)\n\nexport function useFieldContext() {\n return useContext(FieldContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n width: 44,\n height: 34,\n padding: 2,\n backgroundColor: colors.bg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: 1,\n },\n invalid: {\n borderColor: colors.error,\n },\n disabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ninterface ColorInputProps {\n /** Hex color, controlled (e.g. \"#cfc8ba\"). */\n value?: string\n defaultValue?: string\n name?: string\n /** Explicit id — overrides the Field-context controlId when set. */\n id?: string\n disabled?: boolean\n required?: boolean\n /** Accessible name when there is no associated <Field.Label>. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLInputElement>\n}\n\n/**\n * A styled native `<input type=\"color\">` swatch. Mirrors <Input>'s native\n * surface (value/defaultValue/name/onChange/ref/disabled/required) and adopts\n * the parent <Field.Root> context (controlId for label association, value/\n * onChange when bound to a Form, invalid border, disabled) — so it drops into a\n * <Field> exactly like <Input>. The text <Input> can't render type=color, hence\n * a dedicated leaf.\n */\nexport function ColorInput({\n value,\n defaultValue,\n name,\n id,\n disabled,\n required,\n 'aria-label': ariaLabel,\n onChange,\n onBlur,\n ref,\n}: ColorInputProps) {\n const ctx = useFieldContext()\n const fieldCtx = ctx?.field\n\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n\n return (\n <html.input\n type=\"color\"\n id={id ?? ctx?.controlId}\n name={effectiveName}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n required={required}\n aria-label={ariaLabel}\n aria-invalid={ctx?.invalid || undefined}\n aria-describedby={\n ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() || undefined\n : undefined\n }\n onChange={effectiveOnChange as React.ComponentProps<typeof html.input>['onChange']}\n onBlur={effectiveOnBlur as React.ComponentProps<typeof html.input>['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[styles.base, ctx?.invalid && styles.invalid, effectiveDisabled && styles.disabled]}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\n },\n backdropOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (centering container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 1001,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.lg,\n // Allow clicking backdrop through viewport when clicking outside popup\n pointerEvents: 'none',\n },\n\n // --- Popup ---\n popup: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n borderRadius: radii.lg,\n boxShadow: shadows.lg,\n width: '100%',\n maxHeight: '85vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n popupOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n to: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n popupClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n to: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Sizes ---\n sm: {maxWidth: 400},\n md: {maxWidth: 520},\n lg: {maxWidth: 680},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper (for Trigger / Close children) ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n\n // --- Reduced motion ---\n reducedMotion: {\n animationDuration: '1ms',\n },\n})\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nexport type DialogSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DialogContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n dismissable: boolean\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n descriptionId: string\n popupRef: RefObject<HTMLDivElement | null>\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null)\n\nfunction useDialog() {\n const ctx = useContext(DialogContext)\n if (!ctx) throw new Error('Dialog compound components must be used within Dialog.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when dialog open state changes */\n onOpenChange?: (open: boolean) => void\n /** Whether clicking backdrop closes the dialog. Default: true */\n dismissable?: boolean\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n dismissable = true,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const popupRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n // If controlled open goes false externally, trigger close animation\n useEffect(() => {\n if (isControlled && !controlledOpen && !closing) {\n // Already closed, nothing to animate\n }\n }, [isControlled, controlledOpen, closing])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!dismissable) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, dismissable, requestClose])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DialogContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n dismissable,\n requestOpen,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n }}\n >\n {children}\n </DialogContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {requestOpen} = useDialog()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal (renders backdrop + viewport + popup) ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DialogSize\n}\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n dismissable,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n } = useDialog()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n return (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport (centering container, pointer-events: none) */}\n <html.div style={styles.viewport}>\n <html.div\n ref={popupRef}\n role=\"dialog\"\n aria-modal={true}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.popup,\n styles[size],\n closing && styles.popupClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.popupOpen,\n ]}\n >\n {children}\n </html.div>\n </html.div>\n </>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDialog()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDialog()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDialog()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Dialog = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {createContext, useContext} from 'react'\n\ninterface InputGroupContextValue {\n inGroup: boolean\n}\n\nexport const InputGroupContext = createContext<InputGroupContextValue | null>(null)\n\nexport function useInputGroupContext() {\n return useContext(InputGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 1,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n inGroup: {\n borderWidth: 0,\n borderRadius: 0,\n outlineWidth: 0,\n },\n // orthogonal to variant (default/error) — composes on top so a mono field\n // still shows its error border. For slugs, identifiers, hashes.\n mono: {\n fontFamily: typography.fontFamilyMono,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {useInputGroupContext} from '../InputGroup/InputGroupContext'\nimport {styles} from './styles.css'\n\ntype StrictInputProps = React.ComponentProps<typeof html.input>\nexport type InputType = NonNullable<StrictInputProps['type']>\n\nexport type InputVariant = 'default' | 'error'\n\ninterface InputProps {\n variant?: InputVariant\n /** Orthogonal to variant — `mono` keeps the error border but uses the\n * monospace family (slugs, identifiers, hashes). */\n font?: 'mono'\n type?: InputType\n /** Explicit id — overrides the Field-context controlId when set (e.g. a\n * control used outside a Field that still needs a stable id). */\n id?: string\n name?: string\n placeholder?: string\n required?: boolean\n readOnly?: boolean\n minLength?: number\n maxLength?: number\n /** Numeric/range hints — forwarded to the native input (date/number/etc). */\n min?: string | number\n max?: string | number\n step?: string | number\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n /** id of a <datalist> for native typeahead. */\n list?: string\n pattern?: string\n autoComplete?:\n | 'on'\n | 'off'\n | 'email'\n | 'username'\n | 'current-password'\n | 'new-password'\n | 'name'\n | 'tel'\n | 'url'\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n /** Accessible name when there's no associated <Field.Label>. */\n 'aria-label'?: string\n /** Extra describedby ids (merged with the Field context's, if any). */\n 'aria-describedby'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLInputElement>\n}\n\nexport function Input({\n variant = 'default',\n font,\n type = 'text',\n id,\n name,\n placeholder,\n required,\n readOnly,\n minLength,\n maxLength,\n min,\n max,\n step,\n inputMode,\n list,\n pattern,\n autoComplete,\n value,\n defaultValue,\n disabled,\n autoFocus,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedby,\n onChange,\n onBlur,\n ref,\n}: InputProps) {\n const ctx = useFieldContext()\n const groupCtx = useInputGroupContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const effectiveVariant = ctx?.invalid ? 'error' : variant\n // Field context owns describedby (description + error); fall back to the\n // explicit prop only when standalone.\n const describedBy = ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim()\n : ariaDescribedby\n\n // react-strict-dom omits some web-only props from its types, but the\n // underlying DOM element supports them. Type-assert to pass them through.\n const extraProps: Record<string, unknown> = {}\n if (pattern !== undefined) extraProps.pattern = pattern\n if (autoFocus) extraProps.autoFocus = true\n if (readOnly) extraProps.readOnly = true\n if (maxLength !== undefined) extraProps.maxLength = maxLength\n if (min !== undefined) extraProps.min = min\n if (max !== undefined) extraProps.max = max\n if (step !== undefined) extraProps.step = step\n if (inputMode !== undefined) extraProps.inputMode = inputMode\n if (list !== undefined) extraProps.list = list\n if (ariaLabel !== undefined) extraProps['aria-label'] = ariaLabel\n\n return (\n <html.input\n id={id ?? ctx?.controlId}\n type={type}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n minLength={minLength}\n autoComplete={autoComplete}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={describedBy || undefined}\n aria-invalid={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictInputProps['onChange']}\n onBlur={effectiveOnBlur as StrictInputProps['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[\n styles.base,\n styles[effectiveVariant],\n font === 'mono' && styles.mono,\n groupCtx?.inGroup && styles.inGroup,\n ]}\n {...extraProps}\n />\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport type LabelPosition = 'top' | 'side'\nexport type NecessityIndicator = 'icon' | 'label' | false\n\nexport interface FormContextValue {\n disabled: boolean\n labelPosition: LabelPosition\n necessityIndicator: NecessityIndicator\n}\n\nexport const FormContext = createContext<FormContextValue | null>(null)\n\nexport function useFormContext() {\n return useContext(FormContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n },\n rootSide: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.md,\n },\n label: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n labelSide: {\n minWidth: 120,\n paddingTop: spacing.sm,\n flexShrink: 0,\n },\n description: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n error: {\n fontSize: typography.fontSizeXs,\n color: colors.errorText,\n },\n fieldContent: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n flex: 1,\n minWidth: 0,\n },\n necessityIcon: {\n color: colors.error,\n },\n necessityLabel: {\n color: colors.textMuted,\n fontWeight: typography.fontWeightNormal,\n fontSize: typography.fontSizeXs,\n },\n})\n","import {type ReactNode, Children, isValidElement, useId, useMemo} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useFormContext as useRHFFormContext, useController} from 'react-hook-form'\nimport {FieldContext, useFieldContext} from './FieldContext'\nimport {useFormContext} from '../Form/FormContext'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\nimport {styles} from './styles.css'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}\n\nfunction Root({name, ...props}: RootProps) {\n const formCtx = useFormContext()\n if (name && formCtx) {\n return <ControlledRoot name={name} formCtx={formCtx} {...props} />\n }\n return <StaticRoot {...props} />\n}\n\n// Always calls useController — no conditional hooks\nfunction ControlledRoot({\n name,\n formCtx,\n invalid: invalidProp = false,\n required,\n disabled,\n labelPosition,\n children,\n}: {\n name: string\n formCtx: NonNullable<ReturnType<typeof useFormContext>>\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const {control} = useRHFFormContext()\n const {field, fieldState} = useController({control, name})\n const invalid = invalidProp || !!fieldState.error\n\n const effectiveDisabled = disabled ?? formCtx.disabled\n const effectiveLabelPosition = labelPosition ?? formCtx.labelPosition\n const effectiveNecessityIndicator = formCtx.necessityIndicator\n\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled: effectiveDisabled,\n labelPosition: effectiveLabelPosition,\n necessityIndicator: effectiveNecessityIndicator,\n field: {\n value: field.value,\n onChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n name: field.name,\n },\n errorMessage: fieldState.error?.message,\n }),\n [\n id,\n invalid,\n required,\n effectiveDisabled,\n effectiveLabelPosition,\n effectiveNecessityIndicator,\n field.value,\n field.onChange,\n field.onBlur,\n field.ref,\n field.name,\n fieldState.error,\n ],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={effectiveLabelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// Current behavior, no RHF dependency\nfunction StaticRoot({\n invalid = false,\n required,\n disabled,\n labelPosition = 'top',\n children,\n}: {\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled,\n labelPosition,\n }),\n [id, invalid, required, disabled, labelPosition],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={labelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// --- FieldLayout ---\n// When labelPosition is 'side', separates Label from other children\n// and wraps the non-label children in a content column.\nfunction FieldLayout({\n labelPosition,\n children,\n}: {\n labelPosition: LabelPosition\n children: ReactNode\n}) {\n if (labelPosition !== 'side') {\n return <html.div style={styles.root}>{children}</html.div>\n }\n\n let labelNode: ReactNode = null\n const rest: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === Label && !labelNode) {\n labelNode = child\n } else {\n rest.push(child)\n }\n })\n\n return (\n <html.div style={styles.rootSide}>\n {labelNode}\n <html.div style={styles.fieldContent}>{rest}</html.div>\n </html.div>\n )\n}\n\n// --- Label ---\ninterface LabelProps {\n children: ReactNode\n}\n\nfunction Label({children}: LabelProps) {\n const ctx = useFieldContext()\n const isSide = ctx?.labelPosition === 'side'\n const indicator = ctx?.necessityIndicator\n\n return (\n <html.label for={ctx?.controlId} style={[styles.label, isSide && styles.labelSide]}>\n {children}\n {indicator === 'icon' && ctx?.required && (\n <html.span style={styles.necessityIcon} aria-hidden={true}>\n {' *'}\n </html.span>\n )}\n {indicator === 'label' && (\n <html.span style={styles.necessityLabel}>\n {ctx?.required ? ' (required)' : ' (optional)'}\n </html.span>\n )}\n </html.label>\n )\n}\n\n// --- Description ---\ninterface DescriptionProps {\n children: ReactNode\n}\n\nfunction Description({children}: DescriptionProps) {\n const ctx = useFieldContext()\n return (\n <html.span id={ctx?.descriptionId} style={styles.description}>\n {children}\n </html.span>\n )\n}\n\n// --- Error ---\ninterface ErrorProps {\n children?: ReactNode\n}\n\nfunction Error({children}: ErrorProps) {\n const ctx = useFieldContext()\n const content = children ?? ctx?.errorMessage\n if (!ctx?.invalid && !content) return null\n\n return (\n <html.span id={ctx?.errorId} role=\"alert\" style={styles.error}>\n {content}\n </html.span>\n )\n}\n\nexport const Field = {\n Root,\n Label,\n Description,\n Error,\n}\n","import {type ReactNode, useState} from 'react'\nimport {Dialog, type DialogSize} from '../Dialog/Dialog'\nimport {Button} from '../Button/Button'\nimport {Input} from '../Input/Input'\nimport {Field} from '../Field/Field'\n\ninterface ConfirmDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: ReactNode\n /** Warning / cascade body. */\n children?: ReactNode\n /** When set, the confirm action stays DISABLED until the user types this\n * exact phrase (org name, slug…). The typed value is a client-side gate\n * only — it is never submitted. */\n confirmPhrase?: string\n /** Prompt shown above the phrase input. */\n promptLabel?: ReactNode\n cancelLabel?: ReactNode\n /**\n * App-owned confirm control. Receives whether the phrase gate is satisfied,\n * so the app can render its OWN <Button type=\"submit\"> INSIDE its form\n * (e.g. a react-router fetcher.Form with hidden intent fields) — the DS does\n * NOT own the submit, avoiding a fight with the app's form flow. Takes\n * precedence over onConfirm/confirmLabel.\n */\n confirmSlot?: (gate: {satisfied: boolean}) => ReactNode\n /** Simple case (no app form): the DS renders a danger Button calling this. */\n onConfirm?: () => void\n confirmLabel?: ReactNode\n size?: DialogSize\n}\n\n/**\n * Generic destructive-confirmation dialog: layout + an optional type-a-phrase\n * gate. The DS owns the shell and the gate; the APP owns the actual submit\n * (via `confirmSlot`) so it composes with form libraries instead of forcing a\n * callback. Domain warning text goes in `children`.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n children,\n confirmPhrase,\n promptLabel,\n cancelLabel = 'Cancel',\n confirmSlot,\n onConfirm,\n confirmLabel = 'Confirm',\n size = 'sm',\n}: ConfirmDialogProps) {\n const [typed, setTyped] = useState('')\n const satisfied = !confirmPhrase || typed.trim() === confirmPhrase\n\n const handleOpenChange = (next: boolean) => {\n if (!next) setTyped('') // reset the gate when the dialog closes\n onOpenChange(next)\n }\n\n return (\n <Dialog.Root open={open} onOpenChange={handleOpenChange}>\n <Dialog.Portal size={size}>\n <Dialog.Header>\n <Dialog.Title>{title}</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n {children}\n {confirmPhrase ? (\n <Field.Root>\n {promptLabel ? <Field.Label>{promptLabel}</Field.Label> : null}\n <Input\n font=\"mono\"\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoFocus\n aria-label=\"confirmation phrase\"\n />\n </Field.Root>\n ) : null}\n </Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"secondary\" onClick={() => handleOpenChange(false)}>\n {cancelLabel}\n </Button>\n {confirmSlot ? (\n confirmSlot({satisfied})\n ) : onConfirm ? (\n <Button variant=\"danger\" disabled={!satisfied} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n ) : null}\n </Dialog.Footer>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// The \"Apple ease\" curves and the 280ms open live in the shared motion tokens\n// (easing.easeOut/easeIn, duration.slow). The close is duration.base, and the\n// closeAnimationDuration prop can override it via the closeDuration* styles.\n\nexport const styles = css.create({\n // --- Outer wrapper: animates width from 0 → target ---\n wrapper: {\n overflow: 'hidden',\n flexShrink: 0,\n position: 'relative',\n },\n\n // --- Wrapper open/close: SM (360px) ---\n wrapperOpenSm: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 360},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseSm: {\n animationName: css.keyframes({\n from: {width: 360},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Wrapper open/close: MD (480px) ---\n wrapperOpenMd: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 480},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseMd: {\n animationName: css.keyframes({\n from: {width: 480},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Content panel ---\n content: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n borderLeftWidth: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n boxShadow: shadows.sm,\n position: 'relative',\n },\n\n // Content must maintain its target width even while wrapper is narrower\n contentSm: {width: 360},\n contentMd: {width: 480},\n\n // --- Content slide + fade animations ---\n slideIn: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n to: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOut: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n to: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n // --- Title ---\n title: {\n fontSize: 18,\n fontWeight: 600,\n lineHeight: 1.4,\n color: colors.text,\n margin: 0,\n flex: 1,\n minWidth: 0,\n },\n\n // --- Body ---\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 8,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\nexport type DetailPanelSize = 'sm' | 'md'\n\n// --- Context ---\n\ninterface DetailPanelContextValue {\n present: boolean\n closing: boolean\n closeDuration: DurationToken\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n labelId: string | undefined\n registerTitle: (id: string) => void\n unregisterTitle: () => void\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DetailPanelContext = createContext<DetailPanelContextValue | null>(null)\n\nfunction useDetailPanel() {\n const ctx = useContext(DetailPanelContext)\n if (!ctx) throw new Error('DetailPanel compound components must be used within DetailPanel.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Motion token for the close animation. Default: 'base' (200ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n closeAnimationDuration = 'base',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [present, setPresent] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<Element | null>(null)\n\n const titleId = useId()\n const [labelId, setLabelId] = useState<string | undefined>(undefined)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n // Sync presence with open state\n useEffect(() => {\n if (isOpen && !present) {\n setPresent(true)\n setClosing(false)\n } else if (!isOpen && present && !closing) {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n setPresent(false)\n closingTimerRef.current = null\n }, DURATION_MS[closeAnimationDuration])\n }\n }, [isOpen, present, closing, closeAnimationDuration])\n\n // Focus management: move focus on open, restore on close\n useEffect(() => {\n if (present && !closing) {\n previousFocusRef.current = document.activeElement\n panelRef.current?.focus()\n }\n }, [present]) // eslint-disable-line react-hooks/exhaustive-deps -- only on present change\n\n useEffect(() => {\n if (!present && previousFocusRef.current) {\n const el = previousFocusRef.current as HTMLElement\n if (typeof el.focus === 'function') {\n el.focus()\n }\n previousFocusRef.current = null\n }\n }, [present])\n\n // ESC handler\n useEffect(() => {\n if (!present || closing) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [present, closing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n setClosing(false)\n }\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n const registerTitle = useCallback((id: string) => {\n setLabelId(id)\n }, [])\n\n const unregisterTitle = useCallback(() => {\n setLabelId(undefined)\n }, [])\n\n return (\n <DetailPanelContext.Provider\n value={{\n present,\n closing,\n closeDuration: closeAnimationDuration,\n requestOpen,\n requestClose,\n titleId,\n labelId,\n registerTitle,\n unregisterTitle,\n panelRef,\n }}\n >\n {children}\n </DetailPanelContext.Provider>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n /** Width of the panel. Default: 'sm' (360px) */\n size?: DetailPanelSize\n /** Accessible name for the complementary landmark */\n label: string\n}\n\nconst wrapperOpenMap = {\n sm: styles.wrapperOpenSm,\n md: styles.wrapperOpenMd,\n} as const\n\nconst wrapperCloseMap = {\n sm: styles.wrapperCloseSm,\n md: styles.wrapperCloseMd,\n} as const\n\nfunction Content({children, size = 'sm', label}: ContentProps) {\n const {present, closing, closeDuration, labelId, panelRef} = useDetailPanel()\n\n if (!present) return null\n\n return (\n <html.div\n style={[\n styles.wrapper,\n closing ? wrapperCloseMap[size] : wrapperOpenMap[size],\n closing && closeDurationMap[closeDuration],\n ]}\n >\n <html.div\n ref={panelRef}\n role=\"complementary\"\n aria-label={!labelId ? label : undefined}\n aria-labelledby={labelId || undefined}\n tabIndex={-1}\n style={[\n styles.content,\n size === 'sm' ? styles.contentSm : styles.contentMd,\n closing ? styles.slideOut : styles.slideIn,\n closing && closeDurationMap[closeDuration],\n ]}\n >\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId, registerTitle, unregisterTitle} = useDetailPanel()\n\n useEffect(() => {\n registerTitle(titleId)\n return () => unregisterTitle()\n }, [titleId, registerTitle, unregisterTitle])\n\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDetailPanel()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const DetailPanel = {\n Root,\n Content,\n Header,\n Title,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\n },\n backdropOpen: {\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (positioning container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 1001,\n display: 'flex',\n pointerEvents: 'none',\n },\n\n // Right anchor (desktop default)\n viewportRight: {\n justifyContent: 'flex-end',\n alignItems: 'stretch',\n },\n // Left anchor\n viewportLeft: {\n justifyContent: 'flex-start',\n alignItems: 'stretch',\n },\n // Bottom anchor (mobile default)\n viewportBottom: {\n justifyContent: 'stretch',\n alignItems: 'flex-end',\n },\n\n // --- Panel ---\n panel: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n borderWidth: 0,\n touchAction: 'none',\n },\n\n // Panel sizing per anchor\n panelHorizontal: {\n width: '100%',\n height: '100%',\n borderLeftWidth: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n panelVertical: {\n width: '100%',\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n borderTopLeftRadius: radii.lg,\n borderTopRightRadius: radii.lg,\n maxHeight: '85vh',\n },\n panelLeftBorder: {\n borderLeftWidth: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n\n // --- Panel widths (horizontal anchors) ---\n sm: {maxWidth: 360},\n md: {maxWidth: 480},\n lg: {maxWidth: 640},\n\n // --- Slide animations: Right ---\n slideInRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Left ---\n slideInLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(-100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(-100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Bottom ---\n slideInBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(100%)'},\n to: {transform: 'translateY(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(0)'},\n to: {transform: 'translateY(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {useRef, useCallback, useEffect} from 'react'\nimport type {DrawerAnchor} from './Drawer'\n\n/** Threshold: fraction of panel size the user must drag to dismiss */\nconst DISMISS_THRESHOLD = 0.3\n\n/** Minimum velocity (px/ms) to dismiss even below threshold */\nconst VELOCITY_THRESHOLD = 0.5\n\n/** Duration for the dismiss slide-out animation (ms) */\nconst DISMISS_DURATION = 160\n\n/**\n * Max pixels the panel visually \"grows\" when dragged in the opposite direction.\n * iOS-style: panel stays anchored to its edge, doesn't translate.\n * Instead we show a subtle shadow/scale hint capped at this value.\n */\nconst OPPOSITE_MAX_OVERSCROLL = 12\n\ninterface UseSwipeDismissOptions {\n anchor: DrawerAnchor\n enabled: boolean\n onDismiss: () => void\n panelRef: React.RefObject<HTMLDivElement | null>\n}\n\ninterface SwipeState {\n startX: number\n startY: number\n currentX: number\n currentY: number\n startTime: number\n swiping: boolean\n panelSize: number\n}\n\n/**\n * Hook that adds swipe-to-dismiss gesture to a drawer panel.\n *\n * Dismiss direction: panel follows finger 1:1, backdrop fades.\n * Opposite direction: iOS-style — panel stays anchored, shows subtle\n * overscroll feedback (box-shadow intensifies), then snaps back.\n */\nexport function useSwipeDismiss({anchor, enabled, onDismiss, panelRef}: UseSwipeDismissOptions) {\n const stateRef = useRef<SwipeState>({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n startTime: 0,\n swiping: false,\n panelSize: 0,\n })\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n /** Returns positive = dismiss direction, negative = opposite */\n const getMovement = useCallback(\n (state: SwipeState) => {\n if (isHorizontal) {\n const dx = state.currentX - state.startX\n return anchor === 'right' ? dx : -dx\n }\n return state.currentY - state.startY\n },\n [anchor, isHorizontal],\n )\n\n const applyTransform = useCallback(\n (movement: number, panelEl: HTMLDivElement) => {\n const size = Number(panelEl.dataset.panelSize) || 1\n\n if (movement >= 0) {\n // Dismiss direction — 1:1 tracking\n const progress = movement / size\n\n if (isHorizontal) {\n const sign = anchor === 'right' ? 1 : -1\n panelEl.style.transform = `translateX(${sign * movement}px)`\n } else {\n panelEl.style.transform = `translateY(${movement}px)`\n }\n\n // Fade backdrop proportionally\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = String(Math.max(0, 1 - progress))\n }\n } else {\n // Opposite direction — iOS behavior:\n // Panel stays anchored (no translate). Show subtle overscroll via box-shadow.\n // Diminishing resistance: asymptotically approaches OPPOSITE_MAX_OVERSCROLL.\n const absMovement = Math.abs(movement)\n const overscroll = (absMovement / (absMovement + size * 0.5)) * OPPOSITE_MAX_OVERSCROLL\n const shadowSpread = Math.round(overscroll)\n\n panelEl.style.transform = ''\n panelEl.style.boxShadow =\n shadowSpread > 0 ? `0 0 ${shadowSpread * 2}px ${shadowSpread}px rgba(0, 0, 0, 0.15)` : ''\n }\n },\n [anchor, isHorizontal],\n )\n\n /** Reset all inline styles (snap back) */\n const resetStyles = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transform = ''\n panelEl.style.boxShadow = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = ''\n }\n }, [])\n\n /** Animate to fully dismissed position, then call onDismiss */\n const animateDismiss = useCallback(\n (panelEl: HTMLDivElement) => {\n const dismissTransform = isHorizontal\n ? `translateX(${anchor === 'right' ? '100%' : '-100%'})`\n : 'translateY(100%)'\n\n panelEl.style.transition = `transform ${DISMISS_DURATION}ms ease-in`\n panelEl.style.transform = dismissTransform\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = `opacity ${DISMISS_DURATION}ms ease-in`\n backdrop.style.opacity = '0'\n }\n\n // When the slide-out transition finishes, just call onDismiss.\n // Do NOT reset inline styles before unmount — that causes a 1-frame flash\n // where the panel appears at its original position. React will unmount the\n // DOM node entirely, so the inline styles don't need cleanup.\n let dismissed = false\n const done = () => {\n if (dismissed) return\n dismissed = true\n onDismiss()\n }\n panelEl.addEventListener('transitionend', done, {once: true})\n setTimeout(done, DISMISS_DURATION + 50)\n },\n [anchor, isHorizontal, onDismiss],\n )\n\n /** Animate snap-back for dismiss-direction undershoot */\n const animateSnapBack = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transition = 'transform 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n panelEl.style.transform = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = 'opacity 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n backdrop.style.opacity = ''\n }\n\n const cleanup = () => {\n panelEl.style.transition = ''\n if (backdrop) backdrop.style.transition = ''\n }\n panelEl.addEventListener('transitionend', cleanup, {once: true})\n setTimeout(cleanup, 250)\n }, [])\n\n useEffect(() => {\n if (!enabled) return\n const panel = panelRef.current\n if (!panel) return\n\n function handlePointerDown(e: PointerEvent) {\n if (e.button !== 0) return\n const target = e.target as HTMLElement\n if (target.closest('button, a, input, textarea, select, [role=\"button\"]')) {\n return\n }\n\n const rect = panel!.getBoundingClientRect()\n const state = stateRef.current\n state.startX = e.clientX\n state.startY = e.clientY\n state.currentX = e.clientX\n state.currentY = e.clientY\n state.startTime = Date.now()\n state.swiping = false\n state.panelSize = isHorizontal ? rect.width : rect.height\n\n panel!.dataset.panelSize = String(state.panelSize)\n panel!.setPointerCapture(e.pointerId)\n\n // Freeze CSS animation — we take over positioning.\n // Never restore it; the panel is already at its final resting position.\n panel!.style.animation = 'none'\n }\n\n function handlePointerMove(e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n state.currentX = e.clientX\n state.currentY = e.clientY\n\n const dx = Math.abs(state.currentX - state.startX)\n const dy = Math.abs(state.currentY - state.startY)\n\n if (!state.swiping) {\n const totalMovement = Math.sqrt(dx * dx + dy * dy)\n if (totalMovement < 8) return\n\n if (isHorizontal && dx > dy) {\n state.swiping = true\n } else if (!isHorizontal && dy > dx) {\n state.swiping = true\n } else {\n // Wrong axis — abort gesture\n state.startTime = 0\n return\n }\n }\n\n if (state.swiping) {\n e.preventDefault()\n const movement = getMovement(state)\n applyTransform(movement, panel!)\n }\n }\n\n function handlePointerUp(_e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n const movement = getMovement(state)\n const elapsed = Date.now() - state.startTime\n const velocity = movement / elapsed\n\n state.startTime = 0\n\n if (!state.swiping) {\n return\n }\n\n state.swiping = false\n\n if (movement <= 0) {\n // Was dragging in opposite direction — just reset (no translate was applied)\n resetStyles(panel!)\n return\n }\n\n const fraction = movement / state.panelSize\n const shouldDismiss = fraction > DISMISS_THRESHOLD || velocity > VELOCITY_THRESHOLD\n\n if (shouldDismiss) {\n animateDismiss(panel!)\n } else {\n animateSnapBack(panel!)\n }\n }\n\n function handlePointerCancel() {\n const state = stateRef.current\n state.startTime = 0\n state.swiping = false\n resetStyles(panel!)\n }\n\n panel.addEventListener('pointerdown', handlePointerDown)\n panel.addEventListener('pointermove', handlePointerMove)\n panel.addEventListener('pointerup', handlePointerUp)\n panel.addEventListener('pointercancel', handlePointerCancel)\n\n function handleTouchMove(e: TouchEvent) {\n if (stateRef.current.swiping) {\n e.preventDefault()\n }\n }\n panel.addEventListener('touchmove', handleTouchMove, {passive: false})\n\n return () => {\n panel.removeEventListener('pointerdown', handlePointerDown)\n panel.removeEventListener('pointermove', handlePointerMove)\n panel.removeEventListener('pointerup', handlePointerUp)\n panel.removeEventListener('pointercancel', handlePointerCancel)\n panel.removeEventListener('touchmove', handleTouchMove)\n }\n }, [\n enabled,\n panelRef,\n anchor,\n isHorizontal,\n getMovement,\n applyTransform,\n resetStyles,\n animateSnapBack,\n animateDismiss,\n ])\n}\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {useSwipeDismiss} from './useSwipeDismiss'\n\n// --- Types ---\n\nexport type DrawerAnchor = 'right' | 'left' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DrawerContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n anchor: DrawerAnchor\n dismissable: boolean\n swipeDismiss: boolean\n requestOpen: () => void\n requestClose: () => void\n /** Close immediately without CSS animation (used by swipe dismiss which handles its own exit animation) */\n requestCloseImmediate: () => void\n titleId: string\n descriptionId: string\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null)\n\nfunction useDrawer() {\n const ctx = useContext(DrawerContext)\n if (!ctx) throw new Error('Drawer compound components must be used within Drawer.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when drawer open state changes */\n onOpenChange?: (open: boolean) => void\n /** Which edge the drawer slides from. Default: 'right' */\n anchor?: DrawerAnchor\n /** Whether clicking backdrop or pressing Escape closes the drawer. Default: true */\n dismissable?: boolean\n /** Whether swipe gesture dismisses the drawer. Default: true */\n swipeDismiss?: boolean\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n anchor = 'right',\n dismissable = true,\n swipeDismiss = true,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n const requestCloseImmediate = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!dismissable) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, dismissable, requestClose])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DrawerContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n anchor,\n dismissable,\n swipeDismiss,\n requestOpen,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n }}\n >\n {children}\n </DrawerContext.Provider>\n )\n}\n\n// --- Trigger ---\n\nfunction Trigger({children}: {children: ReactNode}) {\n const {requestOpen} = useDrawer()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DrawerSize\n}\n\n// Slide animation maps\nconst slideInMap = {\n right: styles.slideInRight,\n left: styles.slideInLeft,\n bottom: styles.slideInBottom,\n} as const\n\nconst slideOutMap = {\n right: styles.slideOutRight,\n left: styles.slideOutLeft,\n bottom: styles.slideOutBottom,\n} as const\n\nconst viewportAnchorMap = {\n right: styles.viewportRight,\n left: styles.viewportLeft,\n bottom: styles.viewportBottom,\n} as const\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n anchor,\n dismissable,\n swipeDismiss: swipeEnabled,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n } = useDrawer()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n // Swipe-to-dismiss — uses immediate close since the hook handles its own exit animation\n useSwipeDismiss({\n anchor,\n enabled: swipeEnabled && open && !closing,\n onDismiss: requestCloseImmediate,\n panelRef,\n })\n\n if (!open) return null\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n return (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport */}\n <html.div style={[styles.viewport, viewportAnchorMap[anchor]]} data-drawer-viewport=\"\">\n <html.div\n ref={panelRef}\n role=\"dialog\"\n aria-modal={true}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.panel,\n isHorizontal && styles.panelHorizontal,\n isHorizontal && styles[size],\n !isHorizontal && styles.panelVertical,\n anchor === 'left' && styles.panelLeftBorder,\n closing && slideOutMap[anchor],\n closing && closeDurationMap[closeDuration],\n !closing && slideInMap[anchor],\n ]}\n >\n {children}\n </html.div>\n </html.div>\n </>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDrawer()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDrawer()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDrawer()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center',\n },\n message: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n lineHeight: typography.lineHeight,\n },\n action: {\n marginTop: spacing.sm,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\ninterface EmptyStateProps {\n message: string\n icon?: ReactNode\n action?: ReactNode\n}\n\nexport function EmptyState({message, icon, action}: EmptyStateProps) {\n return (\n <html.div style={styles.root}>\n {icon}\n <html.p style={styles.message}>{message}</html.p>\n {action && <html.div style={styles.action}>{action}</html.div>}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {typography, typeScale} from './typography.css'\n\nexport const typePresets = css.create({\n // Body\n bodySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize4,\n lineHeight: typeScale.lineHeight4,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize5,\n lineHeight: typeScale.lineHeight5,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n\n // UI\n caption: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingWide,\n },\n label: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n code: {\n fontFamily: typography.fontFamilyMono,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n overline: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase' as const,\n },\n\n // Heading\n headingSm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize6,\n lineHeight: typeScale.lineHeight6,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize7,\n lineHeight: typeScale.lineHeight7,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize8,\n lineHeight: typeScale.lineHeight8,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingXl: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize9,\n lineHeight: typeScale.lineHeight9,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n\n // Display (fluid)\n displaySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displaySm,\n lineHeight: 1.2,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayMd,\n lineHeight: 1.15,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayLg,\n lineHeight: 1.1,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type HeadingVariant =\n | 'displayLg'\n | 'displayMd'\n | 'displaySm'\n | 'headingXl'\n | 'headingLg'\n | 'headingMd'\n | 'headingSm'\n\ninterface HeadingProps {\n level: 1 | 2 | 3 | 4 | 5 | 6\n variant?: HeadingVariant\n color?: 'default' | 'muted' | 'accent'\n align?: 'start' | 'center' | 'end'\n children: ReactNode\n}\n\nconst defaultVariantMap: Record<number, HeadingVariant> = {\n 1: 'headingXl',\n 2: 'headingLg',\n 3: 'headingMd',\n 4: 'headingSm',\n 5: 'headingSm',\n 6: 'headingSm',\n}\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Heading({level, variant, color = 'default', align, children}: HeadingProps) {\n const resolvedVariant = variant ?? defaultVariantMap[level]\n const style = [typePresets[resolvedVariant], styles[color], align && alignMap[align]]\n\n if (level === 1) return <html.h1 style={style}>{children}</html.h1>\n if (level === 2) return <html.h2 style={style}>{children}</html.h2>\n if (level === 3) return <html.h3 style={style}>{children}</html.h3>\n if (level === 4) return <html.h4 style={style}>{children}</html.h4>\n if (level === 5) return <html.h5 style={style}>{children}</html.h5>\n return <html.h6 style={style}>{children}</html.h6>\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // --- Root ---\n root: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n },\n\n // --- Item ---\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: '120ms',\n cursor: 'default',\n },\n itemSelected: {\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCardHover,\n },\n },\n itemDisabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n itemLast: {\n borderBottomWidth: 0,\n },\n\n // --- Item content area (text + description) ---\n content: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n },\n\n // --- Primary text ---\n text: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Description text ---\n description: {\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Actions slot ---\n actions: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n flexShrink: 0,\n },\n\n // --- Empty state ---\n empty: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n color: colors.textMuted,\n fontSize: typography.fontSizeSm,\n },\n})\n","import {type ReactNode, createContext, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nexport type ListSelectionMode = 'none' | 'single' | 'multiple'\n\n// --- Context ---\n\ninterface ListContextValue {\n selectionMode: ListSelectionMode\n}\n\nconst ListContext = createContext<ListContextValue>({selectionMode: 'none'})\n\nfunction useList() {\n return useContext(ListContext)\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Selection mode: 'none' (default), 'single', or 'multiple' */\n selectionMode?: ListSelectionMode\n /** Accessible label for the list */\n 'aria-label'?: string\n}\n\nfunction Root({children, selectionMode = 'none', 'aria-label': ariaLabel}: RootProps) {\n return (\n <ListContext.Provider value={{selectionMode}}>\n <html.div role=\"list\" aria-label={ariaLabel} style={styles.root}>\n {children}\n </html.div>\n </ListContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n children: ReactNode\n /** Whether this item is selected */\n selected?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Click handler for the item */\n onClick?: () => void\n}\n\nfunction Item({children, selected, disabled, onClick}: ItemProps) {\n const {selectionMode} = useList()\n const isSelectable = selectionMode !== 'none'\n\n return (\n <html.div\n role=\"listitem\"\n aria-selected={isSelectable ? selected : undefined}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : onClick}\n style={[styles.item, selected && styles.itemSelected, disabled && styles.itemDisabled]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content: wraps primary text + description ---\n\nfunction Content({children}: {children: ReactNode}) {\n return <html.div style={styles.content}>{children}</html.div>\n}\n\n// --- Text: primary label ---\n\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.p style={styles.text}>{children}</html.p>\n}\n\n// --- Description: secondary text ---\n\nfunction Description({children}: {children: ReactNode}) {\n return <html.p style={styles.description}>{children}</html.p>\n}\n\n// --- Actions: slot for buttons, badges, etc. ---\n\nfunction Actions({children}: {children: ReactNode}) {\n return <html.div style={styles.actions}>{children}</html.div>\n}\n\n// --- Empty: placeholder when list has no items ---\n\nfunction Empty({children}: {children: ReactNode}) {\n return (\n <html.div role=\"listitem\" style={styles.empty}>\n {children}\n </html.div>\n )\n}\n\n// --- Export ---\n\nexport const List = {\n Root,\n Item,\n Content,\n Text: ItemText,\n Description,\n Actions,\n Empty,\n}\n","import {type ReactNode, useCallback, useEffect, useMemo, useRef} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {\n useForm,\n FormProvider,\n type UseFormReturn,\n type DefaultValues,\n type FieldValues,\n type FieldErrors,\n type Path,\n} from 'react-hook-form'\nimport {effectTsResolver} from '@hookform/resolvers/effect-ts'\nimport type {Schema} from 'effect'\nimport {FormContext, type LabelPosition, type NecessityIndicator} from './FormContext'\n\nexport interface FormProps<T extends FieldValues> {\n schema: Schema.Schema<T>\n defaultValues: DefaultValues<T>\n onSubmit: (data: T) => void | Promise<void>\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n validationErrors?: Partial<Record<Path<T>, string>>\n children: ReactNode | ((methods: UseFormReturn<T>) => ReactNode)\n}\n\nconst formStyles = css.create({\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n\nexport function Form<T extends FieldValues>({\n schema,\n defaultValues,\n onSubmit,\n disabled = false,\n labelPosition = 'top',\n necessityIndicator = false,\n validationErrors,\n children,\n}: FormProps<T>) {\n const methods = useForm<T>({\n resolver: effectTsResolver(schema),\n defaultValues,\n mode: 'onTouched',\n reValidateMode: 'onChange',\n })\n\n // Sync server-side validation errors into RHF\n const prevErrorKeysRef = useRef<string[]>([])\n useEffect(() => {\n const prevKeys = prevErrorKeysRef.current\n const nextKeys = validationErrors ? Object.keys(validationErrors) : []\n\n // Clear errors that were removed\n for (const key of prevKeys) {\n if (!nextKeys.includes(key)) {\n methods.clearErrors(key as Path<T>)\n }\n }\n\n // Set new errors\n if (validationErrors) {\n for (const [key, message] of Object.entries(validationErrors)) {\n if (message) {\n methods.setError(key as Path<T>, {type: 'server', message: message as string})\n }\n }\n }\n\n prevErrorKeysRef.current = nextKeys\n }, [validationErrors, methods])\n\n const formRef = useRef<HTMLFormElement>(null)\n\n const onInvalid = useCallback(\n (errors: FieldErrors<T>) => {\n const firstField = Object.keys(errors)[0]\n if (firstField) {\n methods.setFocus(firstField as Path<T>)\n }\n },\n [methods],\n )\n\n const handleSubmit = useCallback(\n (e: Event) => {\n e.preventDefault()\n void methods.handleSubmit(onSubmit, onInvalid)()\n },\n [methods, onSubmit, onInvalid],\n )\n\n useEffect(() => {\n const el = formRef.current\n if (!el) return\n el.addEventListener('submit', handleSubmit)\n return () => el.removeEventListener('submit', handleSubmit)\n }, [handleSubmit])\n\n const formCtx = useMemo(\n () => ({disabled, labelPosition, necessityIndicator}),\n [disabled, labelPosition, necessityIndicator],\n )\n\n return (\n <FormProvider {...methods}>\n <FormContext.Provider value={formCtx}>\n <html.form\n ref={formRef}\n aria-disabled={disabled || undefined}\n style={disabled && formStyles.disabled}\n >\n {typeof children === 'function' ? children(methods) : children}\n </html.form>\n </FormContext.Provider>\n </FormProvider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n // Reset native fieldset chrome\n borderWidth: 0,\n margin: 0,\n padding: 0,\n minWidth: 0,\n },\n legend: {\n // Reset native legend quirks\n padding: 0,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type FieldsetGap = Exclude<SpacingToken, 'xxl' | 'xxxl'>\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n} as const satisfies Record<FieldsetGap, unknown>\n\n// --- Root ---\ninterface RootProps {\n /** Disables all form controls within the fieldset */\n disabled?: boolean\n /** Gap between child elements */\n gap?: FieldsetGap\n children: ReactNode\n}\n\nfunction Root({disabled = false, gap = 'md', children}: RootProps) {\n return (\n <html.div\n role=\"group\"\n aria-disabled={disabled || undefined}\n style={[styles.root, gapMap[gap], disabled && styles.disabled]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Legend ---\ninterface LegendProps {\n children: ReactNode\n}\n\nfunction Legend({children}: LegendProps) {\n return <html.span style={styles.legend}>{children}</html.span>\n}\n\nexport const Fieldset = {\n Root,\n Legend,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n wrapper: {\n display: 'flex',\n alignItems: 'stretch',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus-within': colors.accent,\n },\n borderRadius: radii.sm,\n overflow: 'hidden',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCardHover,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n userSelect: 'none',\n borderWidth: 0,\n },\n addonStart: {\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n addonEnd: {\n borderLeftWidth: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n addonClickable: {\n cursor: 'pointer',\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCard,\n ':active': colors.bg,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addonDisabled: {\n opacity: 0.4,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {useMemo} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {InputGroupContext} from './InputGroupContext'\nimport {styles} from './styles.css'\n\n// --- Root ---\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useMemo(() => ({inGroup: true}), [])\n\n return (\n <InputGroupContext.Provider value={ctx}>\n <html.div style={styles.wrapper}>{children}</html.div>\n </InputGroupContext.Provider>\n )\n}\n\n// --- Addon ---\nconst dynamicStyles = css.create({\n minWidth: (value: number | string) => ({minWidth: value}),\n})\n\ninterface AddonProps {\n position?: 'start' | 'end'\n onClick?: () => void\n disabled?: boolean\n /** Optional minimum width to prevent layout shift (e.g. Copy → Copied!) */\n minWidth?: number | string\n children: ReactNode\n}\n\nfunction Addon({position = 'end', onClick, disabled, minWidth, children}: AddonProps) {\n const positionStyle = position === 'start' ? styles.addonStart : styles.addonEnd\n const style = [\n styles.addon,\n isNative && styles.nativeFlex,\n positionStyle,\n onClick && !disabled && styles.addonClickable,\n disabled && styles.addonDisabled,\n minWidth != null && dynamicStyles.minWidth(minWidth),\n ]\n\n if (onClick) {\n return (\n <html.button type=\"button\" onClick={onClick} disabled={disabled} style={style}>\n {children}\n </html.button>\n )\n }\n\n return <html.span style={style}>{children}</html.span>\n}\n\nexport const InputGroup = {\n Root,\n Addon,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n cursor: 'pointer',\n textDecoration: 'none',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n color: colors.textMuted,\n },\n fullWidth: {\n width: '100%',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type LinkButtonVariant = 'primary' | 'secondary'\nexport type LinkButtonSize = 'default' | 'small'\n\ninterface LinkButtonProps {\n href: string\n variant?: LinkButtonVariant\n size?: LinkButtonSize\n fullWidth?: boolean\n target?: '_blank' | '_self'\n rel?: string\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function LinkButton({\n href,\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n target,\n rel,\n children,\n}: LinkButtonProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel}\n style={[styles.base, sizeMap[size], styles[variant], fullWidth && styles.fullWidth]}\n >\n {children}\n </html.a>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n },\n bordered: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Adds an outer border. Default: false */\n bordered?: boolean\n}\n\nfunction Root({children, bordered = false}: RootProps) {\n return <html.div style={[styles.root, bordered && styles.bordered]}>{children}</html.div>\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Export ---\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n item: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n itemDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n circle: {\n width: 18,\n height: 18,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.full,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n circleUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n circleChecked: {\n backgroundColor: colors.bg,\n borderColor: colors.accent,\n },\n dot: {\n width: 8,\n height: 8,\n borderRadius: radii.full,\n backgroundColor: colors.accent,\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\n },\n})\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ninterface RadioGroupContextValue {\n value: string\n onSelect: (value: string) => void\n disabled: boolean\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction useRadioGroup() {\n const ctx = useContext(RadioGroupContext)\n if (!ctx) {\n throw new Error('RadioGroup.Item must be used within RadioGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n}: RootProps) {\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onSelect = useCallback(\n (itemValue: string) => {\n if (!disabled) {\n setValue(itemValue)\n }\n },\n [disabled, setValue],\n )\n\n return (\n <RadioGroupContext.Provider value={{value, onSelect, disabled}}>\n <html.div\n role=\"radiogroup\"\n aria-orientation={orientation}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </RadioGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onSelect, disabled: groupDisabled} = useRadioGroup()\n const isChecked = groupValue === value\n const isDisabled = groupDisabled || itemDisabled\n\n const handleClick = () => {\n if (!isDisabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.label style={[styles.item, isDisabled && styles.itemDisabled]} onClick={handleClick}>\n <html.input\n type=\"radio\"\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => onSelect(value)}\n style={styles.input}\n />\n <html.span\n style={[styles.circle, isChecked ? styles.circleChecked : styles.circleUnchecked]}\n aria-hidden\n >\n {isChecked && <html.span style={styles.dot} />}\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n\nexport const RadioGroup = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n overflow: 'hidden',\n },\n viewport: {\n width: '100%',\n height: '100%',\n overflowX: 'auto',\n overflowY: 'auto',\n // Hide native scrollbar\n scrollbarWidth: 'none',\n },\n content: {\n minWidth: '100%',\n minHeight: '100%',\n },\n scrollbar: {\n position: 'absolute',\n zIndex: 1,\n display: 'flex',\n touchAction: 'none',\n userSelect: 'none',\n transitionProperty: 'opacity',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.standard,\n },\n scrollbarVertical: {\n top: 0,\n right: 0,\n bottom: 0,\n width: 8,\n flexDirection: 'column',\n paddingTop: 2,\n paddingBottom: 2,\n paddingRight: 2,\n },\n scrollbarHorizontal: {\n left: 0,\n right: 0,\n bottom: 0,\n height: 8,\n flexDirection: 'row',\n paddingLeft: 2,\n paddingRight: 2,\n paddingBottom: 2,\n },\n scrollbarHidden: {\n opacity: 0,\n },\n scrollbarVisible: {\n opacity: 1,\n },\n thumb: {\n position: 'relative',\n flex: 1,\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.full,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n // Dynamic styles — simple identifier params only (StyleX constraint)\n viewportMaxHeight: (maxHeight: number | string) => ({\n maxHeight,\n }),\n thumbVertical: (height: string, transform: string) => ({\n height,\n transform,\n }),\n thumbHorizontal: (width: string, transform: string) => ({\n width,\n transform,\n }),\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ScrollAreaContextValue {\n viewportRef: React.RefObject<HTMLDivElement | null>\n contentRef: React.RefObject<HTMLDivElement | null>\n viewportId: string\n scrollTop: number\n scrollLeft: number\n scrollHeight: number\n scrollWidth: number\n clientHeight: number\n clientWidth: number\n scrolling: boolean\n}\n\nexport const ScrollAreaContext = createContext<ScrollAreaContextValue | null>(null)\n\nexport function useScrollArea() {\n const ctx = useContext(ScrollAreaContext)\n if (!ctx) throw new Error('ScrollArea compound components must be used within ScrollArea.Root')\n return ctx\n}\n","import {useState, useCallback, useRef, useEffect, useId} from 'react'\nimport type {ScrollAreaContextValue} from './ScrollAreaContext'\n\nexport function useScrollAreaRoot(): ScrollAreaContextValue {\n const viewportId = useId()\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const [scrollTop, setScrollTop] = useState(0)\n const [scrollLeft, setScrollLeft] = useState(0)\n const [scrollHeight, setScrollHeight] = useState(0)\n const [scrollWidth, setScrollWidth] = useState(0)\n const [clientHeight, setClientHeight] = useState(0)\n const [clientWidth, setClientWidth] = useState(0)\n const [scrolling, setScrolling] = useState(false)\n const scrollTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleScroll = useCallback(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n setScrollTop(vp.scrollTop)\n setScrollLeft(vp.scrollLeft)\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n setScrolling(true)\n\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current)\n scrollTimerRef.current = setTimeout(() => setScrolling(false), 1000)\n }, [])\n\n // Observe viewport size changes\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n const observer = new ResizeObserver(() => {\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n })\n observer.observe(vp)\n // Initial measurement\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n\n return () => observer.disconnect()\n }, [])\n\n // Attach scroll listener directly to ensure we capture it\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n vp.addEventListener('scroll', handleScroll, {passive: true})\n return () => vp.removeEventListener('scroll', handleScroll)\n }, [handleScroll])\n\n return {\n viewportRef,\n contentRef,\n viewportId,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n scrolling,\n }\n}\n","import {type ReactNode, useRef, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ScrollAreaContext, useScrollArea} from './ScrollAreaContext'\nimport {useScrollAreaRoot} from './useScrollAreaRoot'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useScrollAreaRoot()\n\n return (\n <ScrollAreaContext.Provider value={ctx}>\n <html.div style={styles.root}>{children}</html.div>\n </ScrollAreaContext.Provider>\n )\n}\n\n// --- Viewport ---\n\ninterface ViewportProps {\n children: ReactNode\n maxHeight?: number | string\n}\n\nfunction Viewport({children, maxHeight}: ViewportProps) {\n const {viewportRef, viewportId} = useScrollArea()\n\n return (\n <html.div\n ref={viewportRef}\n id={viewportId}\n tabIndex={0}\n role=\"region\"\n aria-label=\"Scrollable content\"\n style={[styles.viewport, maxHeight != null && styles.viewportMaxHeight(maxHeight)]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n}\n\nfunction Content({children}: ContentProps) {\n const {contentRef} = useScrollArea()\n return (\n <html.div ref={contentRef} style={styles.content}>\n {children}\n </html.div>\n )\n}\n\n// --- Scrollbar ---\n\ntype ScrollbarOrientation = 'vertical' | 'horizontal'\n\ninterface ScrollbarProps {\n orientation?: ScrollbarOrientation\n children: ReactNode\n}\n\nfunction Scrollbar({orientation = 'vertical', children}: ScrollbarProps) {\n const {\n viewportId,\n scrolling,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n } = useScrollArea()\n\n // Hide scrollbar when content fits\n const hasOverflow =\n orientation === 'vertical' ? scrollHeight > clientHeight : scrollWidth > clientWidth\n\n if (!hasOverflow) return null\n\n const isVertical = orientation === 'vertical'\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const valueNow = maxScroll > 0 ? Math.round((scrollOffset / maxScroll) * 100) : 0\n\n return (\n <html.div\n role=\"scrollbar\"\n aria-controls={viewportId}\n aria-orientation={orientation}\n aria-valuenow={valueNow}\n aria-valuemin={0}\n aria-valuemax={100}\n style={[\n styles.scrollbar,\n isVertical ? styles.scrollbarVertical : styles.scrollbarHorizontal,\n scrolling ? styles.scrollbarVisible : styles.scrollbarHidden,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Thumb ---\n\ninterface ThumbProps {\n orientation?: ScrollbarOrientation\n}\n\nfunction Thumb({orientation = 'vertical'}: ThumbProps) {\n const {viewportRef, scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth} =\n useScrollArea()\n const draggingRef = useRef(false)\n const startPosRef = useRef(0)\n const startScrollRef = useRef(0)\n\n const isVertical = orientation === 'vertical'\n\n const thumbSizePercent = isVertical\n ? Math.max((clientHeight / scrollHeight) * 100, 10)\n : Math.max((clientWidth / scrollWidth) * 100, 10)\n\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const trackSize = isVertical ? clientHeight : clientWidth\n const thumbPixelSize = (thumbSizePercent / 100) * trackSize\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const thumbOffset = maxScroll > 0 ? (scrollOffset / maxScroll) * (trackSize - thumbPixelSize) : 0\n\n const thumbStyle = isVertical\n ? styles.thumbVertical(`${thumbSizePercent}%`, `translateY(${thumbOffset}px)`)\n : styles.thumbHorizontal(`${thumbSizePercent}%`, `translateX(${thumbOffset}px)`)\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n draggingRef.current = true\n startPosRef.current = isVertical ? e.clientY : e.clientX\n startScrollRef.current = isVertical\n ? (viewportRef.current?.scrollTop ?? 0)\n : (viewportRef.current?.scrollLeft ?? 0)\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n },\n [isVertical, viewportRef],\n )\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!draggingRef.current) return\n const vp = viewportRef.current\n if (!vp) return\n\n const delta = (isVertical ? e.clientY : e.clientX) - startPosRef.current\n const scrollRatio = maxScroll / (trackSize - thumbPixelSize)\n const scrollDelta = delta * scrollRatio\n\n if (isVertical) {\n vp.scrollTop = startScrollRef.current + scrollDelta\n } else {\n vp.scrollLeft = startScrollRef.current + scrollDelta\n }\n },\n [isVertical, maxScroll, trackSize, thumbPixelSize, viewportRef],\n )\n\n const handlePointerUp = useCallback(() => {\n draggingRef.current = false\n }, [])\n\n return (\n <html.div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={[styles.thumb, thumbStyle]}\n />\n )\n}\n\nexport const ScrollArea = {\n Root,\n Viewport,\n Content,\n Scrollbar,\n Thumb,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n inputWrapper: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.xs,\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n inputWrapperFocused: {\n borderColor: colors.accent,\n },\n input: {\n flex: 1,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: 'transparent',\n borderWidth: 0,\n outline: 'none',\n minWidth: 0,\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n backgroundColor: 'transparent',\n borderWidth: 0,\n color: colors.textMuted,\n cursor: 'pointer',\n },\n backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 49,\n },\n popup: {\n // Position is `fixed` and the top/left/width are applied inline by Popup\n // (computed from the root's bounding rect) so the dropdown can escape any\n // ancestor with `overflow: hidden` or `transform` (e.g. inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n maxHeight: 200,\n overflowY: 'auto',\n // Re-enable pointer events: the portal mount is pointer-events: none so\n // clicks fall through except on the popup itself.\n pointerEvents: 'auto',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n itemSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n itemHighlighted: {\n backgroundColor: colors.bgCardHover,\n },\n itemHidden: {\n display: 'none',\n },\n empty: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n hidden: {\n display: 'none',\n },\n // Dynamic position — applied at runtime from the input's bounding rect.\n popupPosition: (top: number, left: number, width: number) => ({\n top,\n left,\n width,\n }),\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ComboboxContextValue {\n open: boolean\n openPopup: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n inputValue: string\n setInputValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n inputRef: React.RefObject<HTMLInputElement | null>\n rootRef: React.RefObject<HTMLDivElement | null>\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null)\n\nexport function useCombobox() {\n const ctx = useContext(ComboboxContext)\n if (!ctx) throw new Error('Combobox compound components must be used within Combobox.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ComboboxContextValue} from './ComboboxContext'\n\ninterface UseComboboxRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useComboboxRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n inputValue: controlledInputValue,\n onInputChange,\n initialLabels,\n}: UseComboboxRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n // Seed the visible text from the initially-selected value's label, so a\n // defaultValue/value shows its label on mount — and so the reconcile effect\n // below doesn't see \"value set but input empty\" and wipe the selection.\n const [internalInputValue, setInternalInputValue] = useState<string>(() => {\n const initial = controlledValue ?? defaultValue\n return initial ? (initialLabels?.[initial] ?? '') : ''\n })\n const inputValue = controlledInputValue !== undefined ? controlledInputValue : internalInputValue\n const setInputValue = useCallback(\n (v: string) => {\n if (controlledInputValue === undefined) setInternalInputValue(v)\n onInputChange?.(v)\n },\n [controlledInputValue, onInputChange],\n )\n\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n }, [])\n\n const openPopup = useCallback(() => {\n setOpen(true)\n // Highlight the selected item or first visible item\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n }, [value])\n\n const selectValue = useCallback(\n (itemValue: string) => {\n setValue(itemValue)\n // Set input to show the selected label\n const label = labels[itemValue] ?? itemValue\n setInputValue(label)\n close()\n inputRef.current?.focus()\n },\n [setValue, labels, setInputValue, close],\n )\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Get visible items (those matching the filter)\n const getVisibleOrder = useCallback(() => {\n const query = inputValue.toLowerCase()\n if (!query) return orderRef.current\n return orderRef.current.filter((id) => {\n const item = itemsRef.current.get(id)\n if (!item) return false\n const label = labels[item.value] ?? item.value\n return label.toLowerCase().includes(query)\n })\n }, [inputValue, labels])\n\n // Keyboard navigation\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const visibleOrder = getVisibleOrder()\n if (visibleOrder.length === 0 && e.key !== 'Escape' && e.key !== 'Tab') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (!open) {\n setOpen(true)\n return\n }\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : -1\n return visibleOrder[(idx + 1) % visibleOrder.length] ?? null\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : 0\n return visibleOrder[(idx - 1 + visibleOrder.length) % visibleOrder.length] ?? null\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(visibleOrder[0] ?? null)\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(visibleOrder[visibleOrder.length - 1] ?? null)\n break\n }\n case 'Enter': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = itemsRef.current.get(prev)\n if (item) selectValue(item.value)\n } else if (!inputValue.trim()) {\n // Empty input + Enter = clear selection (reset to \"All\")\n selectValue('')\n }\n return prev\n })\n break\n }\n case 'Escape': {\n e.preventDefault()\n close()\n inputRef.current?.focus()\n break\n }\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, selectValue, getVisibleOrder])\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (!highlightedId) return\n const item = itemsRef.current.get(highlightedId)\n item?.element.scrollIntoView({block: 'nearest'})\n }, [highlightedId])\n\n // Reconcile input text with the committed value once the popup closes.\n // Three cases when transitioning from open → closed:\n // - inputValue is empty: user cleared the field, treat that as\n // \"remove the selection\" so the consumer's onValueChange fires\n // with null and downstream UI (e.g. dependent fields) can reset.\n // - inputValue doesn't match the selected label: user typed something\n // but didn't pick anything; restore the label so the visible text\n // and the committed value stay consistent.\n // - inputValue equals the selected label: nothing to do.\n useEffect(() => {\n if (open) return\n // Treat an empty value (null OR '') as \"no selection\" — nothing to\n // reconcile. Without this, a controlled value=\"\" (e.g. a table column\n // filter) fires setValue(null) every render → inline onValueChange →\n // parent state change → re-render → infinite \"Maximum update depth\" loop.\n if (!value) return\n if (inputValue === '') {\n setValue(null)\n return\n }\n if (labels[value] && inputValue !== labels[value]) {\n setInputValue(labels[value])\n }\n }, [open, value, labels, inputValue, setInputValue, setValue])\n\n const ctx: ComboboxContextValue = useMemo(\n () => ({\n open,\n openPopup,\n close,\n value,\n setValue: selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n inputRef,\n rootRef,\n }),\n [\n open,\n openPopup,\n close,\n value,\n selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const lightTheme = css.createTheme(colors, {\n bg: '#ffffff',\n bgCard: '#f5f5f5',\n bgCardHover: '#ebebeb',\n text: '#1a1a1a',\n textMuted: '#4a4a4a',\n accent: '#1e40af',\n accentHover: '#1a3799',\n accentContrast: '#ffffff',\n border: '#d4d4d4',\n error: '#991b1b',\n errorHover: '#7f1d1d',\n errorBg: 'rgba(153, 27, 27, 0.08)',\n errorBorder: 'rgba(153, 27, 27, 0.3)',\n errorText: '#7f1d1d',\n errorContrast: '#ffffff',\n success: '#166534',\n successBg: 'rgba(22, 101, 52, 0.08)',\n successBorder: 'rgba(22, 101, 52, 0.3)',\n successText: '#14532d',\n warning: '#92400e',\n warningBg: 'rgba(146, 64, 14, 0.08)',\n warningBorder: 'rgba(146, 64, 14, 0.3)',\n warningText: '#78350f',\n info: '#1e40af',\n infoBg: 'rgba(30, 64, 175, 0.08)',\n infoBorder: 'rgba(30, 64, 175, 0.3)',\n infoText: '#1e40af',\n})\n\nexport const lightShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.08)',\n md: '0 4px 12px rgba(0, 0, 0, 0.12)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.16)',\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const highContrastTheme = css.createTheme(colors, {\n bg: '#000000',\n bgCard: '#111111',\n bgCardHover: '#1a1a1a',\n text: '#ffffff',\n textMuted: '#b0b0b0',\n accent: '#60a5fa',\n accentHover: '#93c5fd',\n accentContrast: '#000000',\n border: '#555555',\n error: '#f87171',\n errorHover: '#fca5a5',\n errorBg: 'rgba(248, 113, 113, 0.15)',\n errorBorder: 'rgba(248, 113, 113, 0.5)',\n errorText: '#fca5a5',\n errorContrast: '#000000',\n success: '#4ade80',\n successBg: 'rgba(74, 222, 128, 0.15)',\n successBorder: 'rgba(74, 222, 128, 0.5)',\n successText: '#86efac',\n warning: '#fcd34d',\n warningBg: 'rgba(252, 211, 77, 0.15)',\n warningBorder: 'rgba(252, 211, 77, 0.5)',\n warningText: '#fef08a',\n info: '#60a5fa',\n infoBg: 'rgba(96, 165, 250, 0.15)',\n infoBorder: 'rgba(96, 165, 250, 0.5)',\n infoText: '#bfdbfe',\n})\n\nexport const highContrastShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.6)',\n md: '0 4px 12px rgba(0, 0, 0, 0.7)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.8)',\n})\n","import {createContext, type ReactNode, useContext, useState} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {lightTheme, lightShadows} from '@duro-app/tokens/themes/light.css'\nimport {highContrastTheme, highContrastShadows} from '@duro-app/tokens/themes/high-contrast.css'\n\nexport type ThemeName = 'dark' | 'light' | 'high-contrast'\n\ninterface ThemeProviderProps {\n theme?: ThemeName\n children: ReactNode\n}\n\nconst themeMap: Partial<Record<ThemeName, readonly [typeof lightTheme, typeof lightShadows]>> = {\n light: [lightTheme, lightShadows],\n 'high-contrast': [highContrastTheme, highContrastShadows],\n}\n\nconst styles = css.create({\n root: {\n display: 'contents',\n color: colors.text,\n },\n // Sibling overlay where floating popups (Combobox, Menu, Tooltip) portal to.\n // Lives inside ThemeProvider so theme tokens cascade. Fixed + inset 0 so\n // popups can position freely with viewport coords; pointer-events: none lets\n // clicks fall through except where children re-enable them.\n portalMount: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n // Above Dialog (1001) so popups inside dialogs render on top.\n zIndex: 1100,\n },\n})\n\n// react-strict-dom's style prop rejects Theme<VarGroup<{named keys}>> because the\n// concrete VarGroup lacks the generic index signature. This is a known typing gap.\ntype DivStyle = Parameters<typeof html.div>[0]['style']\n\nconst PortalMountContext = createContext<HTMLElement | null>(null)\n\nexport function usePortalMount(): HTMLElement | null {\n return useContext(PortalMountContext)\n}\n\nexport function ThemeProvider({theme = 'dark', children}: ThemeProviderProps) {\n const overrides = themeMap[theme]\n const themeStyles = [overrides?.[0], overrides?.[1], styles.root] as DivStyle\n const [mount, setMount] = useState<HTMLElement | null>(null)\n\n return (\n <html.div data-theme={theme} style={themeStyles}>\n <PortalMountContext.Provider value={mount}>{children}</PortalMountContext.Provider>\n <html.div ref={setMount} data-portal-mount style={styles.portalMount} />\n </html.div>\n )\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ComboboxContext, useCombobox} from './ComboboxContext'\nimport {useComboboxRoot} from './useComboboxRoot'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({\n name,\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n children,\n}: RootProps) {\n const {ctx, rootRef} = useComboboxRoot({\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n })\n\n return (\n <ComboboxContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </ComboboxContext.Provider>\n )\n}\n\n// --- Input ---\nfunction Input({placeholder, children}: {placeholder?: string; children?: ReactNode}) {\n const {open, openPopup, close, inputValue, setInputValue, listboxId, highlightedId, inputRef} =\n useCombobox()\n const localRef = useRef<HTMLInputElement>(null)\n const [focused, setFocused] = useState(false)\n\n useEffect(() => {\n inputRef.current = localRef.current\n })\n\n return (\n <html.div style={[styles.inputWrapper, focused && styles.inputWrapperFocused]}>\n <html.input\n ref={localRef}\n type=\"text\"\n role={'combobox' as 'listbox'}\n value={inputValue}\n placeholder={placeholder}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\n aria-autocomplete={'list' as 'none'}\n autoComplete=\"off\"\n style={styles.input}\n onFocus={() => {\n setFocused(true)\n openPopup()\n }}\n onBlur={() => {\n setFocused(false)\n // Delay close to allow item click to register\n setTimeout(close, 150)\n }}\n onChange={(e: any) => {\n setInputValue(e.target.value)\n if (!open) openPopup()\n }}\n />\n {children}\n </html.div>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({children}: {children?: ReactNode}) {\n const {open, openPopup, close, inputRef} = useCombobox()\n\n return (\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-label={open ? 'Close' : 'Open'}\n onClick={() => {\n if (open) {\n close()\n } else {\n openPopup()\n }\n inputRef.current?.focus()\n }}\n style={styles.trigger}\n >\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.button>\n )\n}\n\n// --- Popup ---\n// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates so it escapes ancestor `overflow: hidden` / `transform`\n// containing blocks (notably Dialog and Drawer).\nfunction Popup({children}: {children: ReactNode}) {\n const {open, listboxId, rootRef} = useCombobox()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the root each time the popup opens, and re-measure on scroll/resize\n // so the dropdown follows the input. Capture-phase scroll listener catches\n // scroll on any ancestor (e.g. Dialog body).\n useLayoutEffect(() => {\n if (!open) {\n setCoords(null)\n return\n }\n const update = () => {\n const el = rootRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // Position immediately below the input with a small gap. `xs` token = 4px.\n setCoords({top: rect.bottom + 4, left: rect.left, width: rect.width})\n }\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, rootRef])\n\n if (!open || !coords) return null\n\n const node = (\n <html.div\n id={listboxId}\n role=\"listbox\"\n style={[styles.popup, styles.popupPosition(coords.top, coords.left, coords.width)]}\n >\n {children}\n </html.div>\n )\n\n // SSR / pre-mount fallback: render inline (will be invisible under\n // overflow:hidden parents but won't crash). Once the mount is available,\n // portal into it.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {\n value: selectedValue,\n setValue,\n inputValue,\n labels,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useCombobox()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\n\n // Filter: check if this item matches the input\n const label = labels[itemValue] ?? itemValue\n const query = inputValue.toLowerCase()\n const isVisible = !query || label.toLowerCase().includes(query)\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n if (!isVisible) return null\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => setValue(itemValue)}\n onPointerEnter={() => setHighlightedId(id)}\n style={[\n styles.item,\n isSelected && styles.itemSelected,\n isHighlighted && styles.itemHighlighted,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\n// --- Empty ---\nfunction Empty({children}: {children: ReactNode}) {\n const {open, inputValue, labels} = useCombobox()\n\n if (!open) return null\n\n // Check if any items are visible\n const query = inputValue.toLowerCase()\n const hasVisibleItems = query\n ? Object.values(labels).some((label) => label.toLowerCase().includes(query))\n : true\n\n if (hasVisibleItems) return null\n\n return <html.div style={styles.empty}>{children}</html.div>\n}\n\nexport const Combobox = {\n Root,\n Input,\n Trigger,\n Popup,\n Item,\n ItemText,\n Empty,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n trigger: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n value: {\n color: colors.text,\n },\n placeholder: {\n color: colors.textMuted,\n },\n icon: {\n display: 'flex',\n alignItems: 'center',\n color: colors.textMuted,\n },\n backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 49,\n // The portal mount is pointer-events: none, so re-enable here to catch\n // outside clicks that close the popup.\n pointerEvents: 'auto',\n },\n popup: {\n // Position is `fixed` and top/left/minWidth are applied inline by Popup\n // (computed from the trigger's bounding rect) so the dropdown escapes any\n // ancestor with `overflow: hidden` / `transform` (notably inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n minWidth: 120,\n maxHeight: 280,\n overflowY: 'auto',\n zIndex: 50,\n // Re-enable pointer events: the portal mount is pointer-events: none.\n pointerEvents: 'auto',\n },\n popupPosition: (top: number, left: number, minWidth: number) => ({\n top,\n left,\n minWidth,\n }),\n item: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n borderRadius: radii.sm,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n itemSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n itemHighlighted: {\n backgroundColor: colors.bgCardHover,\n },\n hidden: {\n display: 'none',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SelectContextValue {\n open: boolean\n toggle: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n triggerRef: React.RefObject<HTMLButtonElement | null>\n}\n\nexport const SelectContext = createContext<SelectContextValue | null>(null)\n\nexport function useSelect() {\n const ctx = useContext(SelectContext)\n if (!ctx) throw new Error('Select compound components must be used within Select.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {SelectContextValue} from './SelectContext'\n\ninterface UseSelectRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useSelectRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n initialLabels,\n}: UseSelectRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n triggerRef.current?.focus()\n }, [])\n\n const toggle = useCallback(() => {\n setOpen((prev) => {\n if (!prev) {\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n } else {\n setHighlightedId(null)\n }\n return !prev\n })\n }, [value])\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const items = itemsRef.current\n if (order.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : -1\n return order[(idx + 1) % order.length]\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : 0\n return order[(idx - 1 + order.length) % order.length]\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(order[0])\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(order[order.length - 1])\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = items.get(prev)\n if (item) {\n setValue(item.value)\n close()\n }\n }\n return prev\n })\n break\n }\n case 'Escape':\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, setValue])\n\n const ctx: SelectContextValue = useMemo(\n () => ({\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n triggerRef,\n }),\n [\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {SelectContext, useSelect} from './SelectContext'\nimport {useSelectRoot} from './useSelectRoot'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({name, defaultValue, value, onValueChange, initialLabels, children}: RootProps) {\n const {ctx, rootRef} = useSelectRoot({defaultValue, value, onValueChange, initialLabels})\n\n return (\n <SelectContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </SelectContext.Provider>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({\n children,\n 'aria-label': ariaLabel,\n}: {\n children: ReactNode\n 'aria-label'?: string\n}) {\n const {open, toggle, listboxId, highlightedId, triggerRef} = useSelect()\n const localRef = useRef<HTMLButtonElement>(null)\n // Inside a <Field.Root>, adopt its controlId so <Field.Label for={controlId}>\n // labels the trigger (a labelable <button>) — no manual aria-label needed; and\n // surface the field's description/error + invalid state, mirroring <Input>.\n const fieldCtx = useFieldContext()\n const describedBy = fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n\n // Sync local ref to context triggerRef\n useEffect(() => {\n triggerRef.current = localRef.current\n })\n\n return (\n <html.button\n ref={localRef}\n id={fieldCtx?.controlId}\n type=\"button\"\n role={'combobox' as 'listbox'}\n onClick={toggle}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\n aria-describedby={describedBy || undefined}\n aria-invalid={fieldCtx?.invalid || undefined}\n style={styles.trigger}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Value ---\nfunction Value({placeholder}: {placeholder?: string}) {\n const {value, labels} = useSelect()\n const display = value ? (labels[value] ?? value) : null\n\n return (\n <html.span style={display ? styles.value : styles.placeholder}>\n {display ?? placeholder}\n </html.span>\n )\n}\n\n// --- Icon ---\nfunction Icon({children}: {children?: ReactNode}) {\n return (\n <html.span style={styles.icon}>\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.span>\n )\n}\n\n// --- Popup ---\n// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates (measured off the trigger) so it escapes ancestor\n// `overflow: hidden` / `transform` containing blocks (notably Dialog/Drawer).\n// The listbox stays mounted while closed (display: none) so Items can register\n// their labels from DOM text before the popup is ever opened.\nfunction Popup({children}: {children: ReactNode}) {\n const {open, close, listboxId, triggerRef} = useSelect()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the trigger when the popup opens, and re-measure on scroll/resize so\n // the dropdown follows it. Capture-phase scroll catches scroll on any ancestor\n // (e.g. a Dialog body).\n useLayoutEffect(() => {\n if (!open) return\n const update = () => {\n const el = triggerRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // `xs` token = 4px gap below the trigger.\n setCoords({top: rect.bottom + 4, left: rect.left, width: rect.width})\n }\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, triggerRef])\n\n const node = (\n <>\n {open && <html.div style={styles.backdrop} onClick={close} />}\n <html.div\n id={listboxId}\n role=\"listbox\"\n aria-hidden={!open}\n style={[\n styles.popup,\n (!open || !coords) && styles.hidden,\n coords && styles.popupPosition(coords.top, coords.left, coords.width),\n ]}\n >\n {children}\n </html.div>\n </>\n )\n\n // SSR / pre-mount fallback: render inline (hidden under overflow parents but\n // won't crash). Once the mount exists, portal into it.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {\n value: selectedValue,\n setValue,\n close,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useSelect()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\n\n // Register label from DOM text content (works with both string and JSX children)\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n const handleClick = () => {\n setValue(itemValue)\n close()\n }\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={handleClick}\n onPointerEnter={() => setHighlightedId(id)}\n style={[\n styles.item,\n isSelected && styles.itemSelected,\n isHighlighted && styles.itemHighlighted,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\nexport const Select = {\n Root,\n Trigger,\n Value,\n Icon,\n Popup,\n Item,\n ItemText,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n },\n group: {\n display: 'flex',\n flexDirection: 'column',\n },\n groupTrigger: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n cursor: 'pointer',\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n groupTriggerActive: {\n color: colors.text,\n },\n chevron: {\n display: 'inline-flex',\n alignItems: 'center',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(90deg)',\n },\n // The `role=\"group\"` wrapper around a Section's / an expanded Group's items.\n // Purely structural: it exists to carry the accessible name, so it must not\n // change how the items stack.\n items: {\n display: 'flex',\n flexDirection: 'column',\n },\n // Static (non-collapsible) section — see SideNav.Section.\n section: {\n display: 'flex',\n flexDirection: 'column',\n },\n sectionLabel: {\n paddingTop: spacing.md,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.06em',\n color: colors.textMuted,\n },\n item: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: '6px',\n paddingBottom: '6px',\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightNormal,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 0,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textAlign: 'left' as const,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n },\n itemActive: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n backgroundColor: colors.bgCardHover,\n },\n // Active indicator — a bar at the rail's left edge that grows in on select.\n marker: {\n position: 'absolute',\n left: 0,\n top: '50%',\n width: '3px',\n height: 0,\n transform: 'translateY(-50%)',\n borderTopRightRadius: radii.full,\n borderBottomRightRadius: radii.full,\n backgroundColor: colors.accent,\n transitionProperty: 'height',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n markerActive: {\n height: '18px',\n },\n itemIcon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: '18px',\n height: '18px',\n },\n itemLabel: {\n flexGrow: 1,\n minWidth: 0,\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SideNavContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n expandedGroups: Set<string>\n toggleGroup: (group: string) => void\n /** Idempotent expand (add-only) — used by auto-expand/defaultExpanded so a\n * group that qualifies twice (e.g. defaultExpanded AND holding the active\n * item) doesn't get toggled back closed. `toggleGroup` stays for user clicks. */\n expandGroup: (group: string) => void\n registerItem: (value: string) => () => void\n orderRef: React.RefObject<string[]>\n}\n\nexport const SideNavContext = createContext<SideNavContextValue | null>(null)\n\nexport function useSideNav() {\n const ctx = useContext(SideNavContext)\n if (!ctx) throw new Error('SideNav compound components must be used within SideNav.Root')\n return ctx\n}\n","import {type ReactNode, useState, useCallback, useRef, useEffect, useId} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {SideNavContext, useSideNav} from './SideNavContext'\n\n/**\n * SideNav has two ways to chunk a rail, and they are NOT interchangeable.\n *\n * `Section` — a labelled block that is always open. This is the DEFAULT for\n * primary navigation. A nav's job is to advertise where you can go; an\n * always-open list keeps the whole information architecture scannable and puts\n * every destination one click away. The uppercase label does the chunking work\n * on its own — you get the grouping benefit without hiding anything.\n *\n * `Group` — the same block behind a chevron (a disclosure). Collapsing costs\n * every destination inside it an extra click and hides it from scanning, so it\n * has to buy something back. It does when the region is:\n * • rare or advanced (\"Advanced\", \"Danger zone\", \"Legacy\") — disclose the\n * seldom-used, never the everyday;\n * • unbounded / data-driven (one entry per namespace, project, team) — you\n * cannot author-flatten a list whose length you don't control;\n * • one of many in a rail long enough (>~30 leaves) that a flat list stops\n * reading as an overview.\n * The healthy shape is a mix: flat Sections for the journey, one collapsed\n * Group at the bottom.\n *\n * Neither is a tree. Arbitrary-depth *data* browsing (a file tree, a\n * namespace → resource drill-down) needs `role=\"tree\"` with roving tabindex,\n * typeahead and aria-level — a different component, not a deeper SideNav.\n */\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nfunction Root({children, value: controlledValue, defaultValue, onValueChange}: RootProps) {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set())\n const orderRef = useRef<string[]>([])\n\n const toggleGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev)\n if (next.has(group)) {\n next.delete(group)\n } else {\n next.add(group)\n }\n return next\n })\n }, [])\n\n // Idempotent expand — never closes an already-open group. The mount effects\n // in Group (defaultExpanded + auto-expand-active) use this instead of\n // toggleGroup so a group that qualifies on both counts stays open rather than\n // being toggled open-then-closed.\n const expandGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n if (prev.has(group)) return prev\n const next = new Set(prev)\n next.add(group)\n return next\n })\n }, [])\n\n const registerItem = useCallback((value: string) => {\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return (\n <SideNavContext.Provider\n value={{\n activeValue,\n onSelect,\n expandedGroups,\n toggleGroup,\n expandGroup,\n registerItem,\n orderRef,\n }}\n >\n <html.nav role=\"navigation\" style={styles.root}>\n {children}\n </html.nav>\n </SideNavContext.Provider>\n )\n}\n\n// --- Group ---\n\ninterface GroupProps {\n children: ReactNode\n label: string\n groupKey?: string\n defaultExpanded?: boolean\n}\n\nfunction Group({children, label, groupKey, defaultExpanded}: GroupProps) {\n const key = groupKey ?? label\n const {expandedGroups, toggleGroup, expandGroup, activeValue} = useSideNav()\n const isExpanded = expandedGroups.has(key)\n const groupRef = useRef<HTMLDivElement>(null)\n const triggerId = useId()\n const panelId = useId()\n\n // Auto-expand if this group contains the active item. Uses expandGroup (not\n // toggleGroup) so it never races the defaultExpanded effect into a closed\n // state when the active item lives in a defaultExpanded group.\n useEffect(() => {\n if (!activeValue || expandedGroups.has(key)) return\n const el = groupRef.current\n if (!el) return\n const activeBtn = el.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n if (activeBtn) {\n expandGroup(key)\n }\n }, [activeValue, key, expandedGroups, expandGroup])\n\n // Expand on first render if defaultExpanded (idempotent add, not a toggle).\n useEffect(() => {\n if (defaultExpanded) {\n expandGroup(key)\n }\n // Only run on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const hasActiveChild = (() => {\n if (!activeValue || !groupRef.current) return false\n return !!groupRef.current.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n })()\n\n return (\n <html.div ref={groupRef} style={styles.group}>\n <html.button\n type=\"button\"\n id={triggerId}\n onClick={() => toggleGroup(key)}\n style={[styles.groupTrigger, hasActiveChild && styles.groupTriggerActive]}\n aria-expanded={isExpanded}\n aria-controls={isExpanded ? panelId : undefined}\n >\n <html.span style={[styles.chevron, isExpanded && styles.chevronOpen]}>\n <svg\n width={10}\n height={10}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </html.span>\n {label}\n </html.button>\n {isExpanded ? (\n <html.div id={panelId} role=\"group\" aria-labelledby={triggerId} style={styles.items}>\n {children}\n </html.div>\n ) : null}\n </html.div>\n )\n}\n\n// --- Section ---\n\ninterface SectionProps {\n children: ReactNode\n label: string\n}\n\n/**\n * A static, non-collapsible grouping: an always-visible uppercase header with\n * its items below. Unlike `Group` there is no chevron, toggle, or hidden state.\n *\n * Reach for this first — see the note at the top of this file for when a\n * collapsible `Group` is the better call. The label is exposed as the group's\n * accessible name, so a screen reader announces \"Networking, group\" on the way\n * into its items instead of dropping the user into an undifferentiated run of\n * thirty buttons.\n */\nfunction Section({children, label}: SectionProps) {\n const labelId = useId()\n return (\n <html.div style={styles.section}>\n <html.div id={labelId} style={styles.sectionLabel}>\n {label}\n </html.div>\n <html.div role=\"group\" aria-labelledby={labelId} style={styles.items}>\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n children: ReactNode\n /** Optional leading glyph (e.g. a design-system `<Icon />`). Inherits the\n * item's text color, so it turns accent when the item is active. */\n icon?: ReactNode\n}\n\nfunction Item({value, children, icon}: ItemProps) {\n const {activeValue, onSelect, registerItem} = useSideNav()\n const isActive = activeValue === value\n\n useEffect(() => {\n return registerItem(value)\n }, [value, registerItem])\n\n return (\n <html.button\n type=\"button\"\n data-nav-value={value}\n onClick={() => onSelect(value)}\n style={[styles.item, isActive && styles.itemActive]}\n aria-current={isActive ? 'page' : undefined}\n >\n <html.span aria-hidden style={[styles.marker, isActive && styles.markerActive]} />\n {icon ? (\n <html.span aria-hidden style={styles.itemIcon}>\n {icon}\n </html.span>\n ) : null}\n <html.span style={styles.itemLabel}>{children}</html.span>\n </html.button>\n )\n}\n\nexport const SideNav = {\n Root,\n Group,\n Section,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nconst spin = css.keyframes({\n '0%': {transform: 'rotate(0deg)'},\n '100%': {transform: 'rotate(360deg)'},\n})\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n spinner: {\n borderRadius: '50%',\n borderStyle: 'solid',\n borderColor: colors.border,\n borderTopColor: colors.accent,\n animationName: spin,\n animationDuration: '0.6s',\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite',\n },\n sm: {\n width: 16,\n height: 16,\n borderWidth: 2,\n },\n md: {\n width: 24,\n height: 24,\n borderWidth: 2,\n },\n lg: {\n width: 40,\n height: 40,\n borderWidth: 3,\n },\n srOnly: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n },\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\ninterface SpinnerProps {\n size?: SpinnerSize\n label?: string\n}\n\nconst sizeMap = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const\n\nexport function Spinner({size = 'md', label = 'Loading'}: SpinnerProps) {\n return (\n <html.div role=\"status\" style={styles.root}>\n <html.div style={[styles.spinner, sizeMap[size]]} aria-hidden />\n <html.span style={styles.srOnly}>{label}</html.span>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {easing} from '@duro-app/tokens/tokens/motion.css'\n\nconst enter = css.keyframes({\n from: {opacity: 0, transform: 'translateY(10px)'},\n to: {opacity: 1, transform: 'translateY(0)'},\n})\n\nexport const styles = css.create({\n // Fixed, viewport-anchored stack. Portaled into the ThemeProvider mount so it\n // layers above dialogs; the container itself is click-through, each toast\n // re-enables pointer events.\n region: {\n position: 'fixed',\n bottom: spacing.lg,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n pointerEvents: 'none',\n },\n toast: {\n pointerEvents: 'auto',\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: 440,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderLeftWidth: 3,\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n color: colors.text,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n animationName: {\n default: enter,\n '@media (prefers-reduced-motion: reduce)': 'none',\n },\n animationDuration: '160ms',\n animationTimingFunction: easing.easeOut,\n },\n success: {borderLeftColor: colors.successBorder},\n error: {borderLeftColor: colors.errorBorder},\n info: {borderLeftColor: colors.infoBorder},\n\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 1,\n },\n iconSuccess: {color: colors.successText},\n iconError: {color: colors.errorText},\n iconInfo: {color: colors.infoText},\n\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n },\n message: {\n color: colors.text,\n },\n action: {\n alignSelf: 'flex-start',\n marginTop: 2,\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: colors.accent,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n textDecorationLine: 'underline',\n cursor: 'pointer',\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: 2,\n outlineColor: colors.accent,\n outlineOffset: 2,\n borderRadius: radii.sm,\n },\n closeBtn: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 2,\n marginTop: -1,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: {default: colors.textMuted, ':hover': colors.text},\n cursor: 'pointer',\n borderRadius: radii.sm,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: 2,\n outlineColor: colors.accent,\n outlineOffset: 1,\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {Icon, type IconName} from '../Icon'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\nexport type ToastVariant = 'success' | 'error' | 'info'\n\nexport interface ToastAction {\n label: string\n onClick: () => void\n}\n\nexport interface ToastOptions {\n /** Visual + semantic tone. Errors announce assertively and linger longer. */\n variant?: ToastVariant\n message: ReactNode\n /** Optional single action, e.g. Undo. Runs, then dismisses the toast. */\n action?: ToastAction\n /** Auto-dismiss delay in ms. `0` (or negative) keeps it until dismissed. */\n duration?: number\n}\n\nexport interface ToastContextValue {\n /** Show a toast; returns its id so it can be dismissed programmatically. */\n toast: (opts: ToastOptions) => string\n dismiss: (id: string) => void\n}\n\ninterface ToastEntry {\n id: string\n variant: ToastVariant\n message: ReactNode\n action?: ToastAction\n duration: number\n}\n\ninterface ToastStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ToastEntry[]\n add: (opts: ToastOptions) => string\n remove: (id: string) => void\n}\n\nconst DEFAULT_DURATION: Record<ToastVariant, number> = {\n success: 5000,\n info: 5000,\n error: 8000,\n}\n\nfunction createToastStore(): ToastStore {\n let entries: ToastEntry[] = []\n let seq = 0\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n add: (opts) => {\n const variant = opts.variant ?? 'info'\n const id = `toast-${++seq}`\n const duration = opts.duration ?? DEFAULT_DURATION[variant]\n entries = [...entries, {id, variant, message: opts.message, action: opts.action, duration}]\n notify()\n return id\n },\n remove: (id) => {\n const next = entries.filter((e) => e.id !== id)\n if (next.length !== entries.length) {\n entries = next\n notify()\n }\n },\n }\n}\n\nconst variantIcon: Record<ToastVariant, IconName> = {\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n info: 'info-circle-filled',\n}\nconst variantIconStyle = {\n success: styles.iconSuccess,\n error: styles.iconError,\n info: styles.iconInfo,\n} as const\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within a <ToastProvider>')\n return ctx\n}\n\nfunction ToastItem({entry, onDismiss}: {entry: ToastEntry; onDismiss: (id: string) => void}) {\n const {id, variant, message, action, duration} = entry\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => onDismiss(id), duration)\n return () => clearTimeout(timer)\n }, [id, duration, onDismiss])\n\n return (\n <html.div\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n style={[styles.toast, styles[variant]]}\n >\n <html.div style={[styles.iconWrap, variantIconStyle[variant]]}>\n <Icon name={variantIcon[variant]} size=\"md\" />\n </html.div>\n <html.div style={styles.content}>\n <html.div style={styles.message}>{message}</html.div>\n {action ? (\n <html.button\n type=\"button\"\n style={styles.action}\n onClick={() => {\n action.onClick()\n onDismiss(id)\n }}\n >\n {action.label}\n </html.button>\n ) : null}\n </html.div>\n <html.button\n type=\"button\"\n aria-label=\"Dismiss\"\n style={styles.closeBtn}\n onClick={() => onDismiss(id)}\n >\n <Icon name=\"x-circle\" size=\"sm\" />\n </html.button>\n </html.div>\n )\n}\n\nexport function ToastProvider({children}: {children: ReactNode}) {\n const storeRef = useRef<ToastStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createToastStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const mount = usePortalMount()\n\n const value = useMemo<ToastContextValue>(\n () => ({\n toast: (opts) => store.add(opts),\n dismiss: (id) => store.remove(id),\n }),\n [store],\n )\n\n const dismiss = useCallback((id: string) => store.remove(id), [store])\n\n const region = (\n <html.div role=\"region\" aria-label=\"Notifications\" style={styles.region}>\n {entries.map((entry) => (\n <ToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </html.div>\n )\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {mount ? createPortal(region, mount) : region}\n </ToastContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: spacing.md,\n },\n error: {\n color: colors.error,\n },\n success: {\n color: colors.success,\n },\n warning: {\n color: colors.warning,\n },\n info: {\n color: colors.info,\n },\n muted: {\n color: colors.textMuted,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName, IconSize} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type StatusIconName = Extract<\n IconName,\n 'x-circle' | 'check-circle' | 'check-done' | 'clock' | 'forbidden'\n>\nexport type StatusIconVariant = 'error' | 'success' | 'warning' | 'info' | 'muted'\n\ninterface StatusIconProps {\n name: StatusIconName\n size?: IconSize\n variant?: StatusIconVariant\n}\n\nexport function StatusIcon({name, size = 'xxl', variant = 'muted'}: StatusIconProps) {\n return (\n <html.div style={[styles.root, styles[variant]]}>\n <Icon name={name} size={size} />\n </html.div>\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport interface TagGroupContextValue {\n values: string[]\n addTag: (value: string) => void\n removeTag: (value: string) => void\n editable: boolean\n setEditable: (v: boolean) => void\n disabled: boolean\n validate?: (value: string) => true | string\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n inputRef: React.RefObject<HTMLInputElement | null>\n gridId: string\n name?: string\n}\n\nexport const TagGroupContext = createContext<TagGroupContextValue | null>(null)\n\nexport function useTagGroup(): TagGroupContextValue | null {\n return useContext(TagGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightNormal,\n lineHeight: 1,\n borderRadius: 4,\n whiteSpace: 'nowrap',\n minWidth: 0,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 1,\n },\n },\n sizeMd: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontSize: typography.fontSizeSm,\n },\n sizeSm: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n // Opt-in wrapping for long identifier-style labels. Overrides the base\n // nowrap so the text breaks within its container (e.g. a table cell)\n // instead of overflowing into the next column. `anywhere` also lets the\n // tag shrink below its content's intrinsic width so a flex/grid parent can\n // actually give it a narrow track.\n wrap: {\n whiteSpace: 'normal',\n overflowWrap: 'anywhere',\n lineHeight: 1.35,\n textAlign: 'start',\n },\n // Reduce right padding when removable to keep visual balance with the button\n removableMd: {\n paddingRight: spacing.sm,\n },\n removableSm: {\n paddingRight: spacing.xs,\n },\n default: {\n backgroundColor: {\n default: colors.bg,\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n removeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n borderRadius: radii.full,\n opacity: {\n default: 0.6,\n ':hover': 1,\n },\n outlineWidth: 0,\n },\n removeButtonDisabled: {\n cursor: 'not-allowed',\n opacity: 0.4,\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useTagGroup} from '../TagGroup/TagGroupContext'\nimport {styles} from './styles.css'\n\nexport type TagVariant = 'default' | 'success' | 'warning' | 'error' | 'info'\nexport type TagSize = 'sm' | 'md'\n\ninterface TagProps {\n /** Value identifier — required when used inside TagGroup */\n value?: string\n variant?: TagVariant\n size?: TagSize\n /** Show remove button. Auto-derived from TagGroup context when inside one. */\n removable?: boolean\n /** Called when remove button is clicked. Auto-wired to TagGroup when inside one. */\n onRemove?: () => void\n disabled?: boolean\n /**\n * Allow the label to wrap / break instead of staying on one line. Tags are\n * `white-space: nowrap` by default (they read as pills); set this for long\n * identifier-style values (e.g. `lldap.group.member.remove`) sitting in a\n * constrained column, so they break within their cell instead of leaking\n * into the next one.\n */\n wrap?: boolean\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nconst removableSizeMap = {\n sm: styles.removableSm,\n md: styles.removableMd,\n} as const\n\nexport function Tag({\n value,\n variant = 'default',\n size = 'md',\n removable: removableProp,\n onRemove: onRemoveProp,\n disabled: disabledProp = false,\n wrap = false,\n children,\n}: TagProps) {\n const group = useTagGroup()\n const contentRef = useRef<HTMLElement>(null)\n\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const removable = removableProp ?? (isGrouped ? group.editable : false)\n\n const onRemove = useCallback(() => {\n if (disabled) return\n if (onRemoveProp) {\n onRemoveProp()\n } else if (isGrouped && value !== undefined) {\n group.removeTag(value)\n }\n }, [disabled, onRemoveProp, isGrouped, value, group])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return\n if ((e.key === 'Backspace' || e.key === 'Delete') && removable) {\n e.preventDefault()\n onRemove()\n }\n // Arrow key navigation delegated to TagGroup via context\n if (isGrouped && (e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n e.preventDefault()\n const idx = value !== undefined ? group.values.indexOf(value) : -1\n if (e.key === 'ArrowLeft' && idx > 0) {\n group.setFocusedIndex(idx - 1)\n } else if (e.key === 'ArrowRight') {\n if (idx < group.values.length - 1) {\n group.setFocusedIndex(idx + 1)\n } else {\n // Move focus to input\n group.inputRef.current?.focus()\n group.setFocusedIndex(-1)\n }\n }\n }\n },\n [disabled, removable, onRemove, isGrouped, value, group],\n )\n\n const removeLabel = contentRef.current?.textContent\n ? `Remove ${contentRef.current.textContent}`\n : 'Remove'\n\n const tagContent = (\n <>\n <html.span ref={contentRef} {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n {children}\n </html.span>\n {removable && (\n <html.span {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n <html.button\n type=\"button\"\n aria-label={removeLabel}\n disabled={disabled}\n onClick={(e) => {\n ;(e as any).stopPropagation?.()\n onRemove()\n }}\n tabIndex={-1}\n style={[styles.removeButton, disabled && styles.removeButtonDisabled]}\n >\n <svg\n width={size === 'sm' ? 10 : 12}\n height={size === 'sm' ? 10 : 12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M3 3l6 6M9 3l-6 6\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n </html.span>\n )}\n </>\n )\n\n return (\n <html.span\n {...(isGrouped ? {role: 'row' as any} : {})}\n tabIndex={isGrouped ? 0 : undefined}\n onKeyDown={isGrouped ? (handleKeyDown as any) : undefined}\n style={[\n styles.base,\n sizeMap[size],\n removable && removableSizeMap[size],\n styles[variant],\n disabled && styles.disabled,\n wrap && styles.wrap,\n ]}\n >\n {tagContent}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n containerError: {},\n containerDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // Static display (no Input) — no gap needed\n containerStatic: {\n gap: 0,\n },\n list: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: spacing.xs,\n alignItems: 'center',\n },\n input: {\n width: '100%',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus': colors.accent,\n },\n borderRadius: radii.sm,\n backgroundColor: colors.bg,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n minHeight: 40,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus': 1,\n },\n boxSizing: 'border-box',\n },\n inputError: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n liveRegion: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n },\n})\n","import {\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {TagGroupContext, type TagGroupContextValue} from './TagGroupContext'\nimport {styles} from './styles.css'\n\n// ---------------------------------------------------------------------------\n// Local context accessor (non-throwing, returns null)\n// ---------------------------------------------------------------------------\n\nfunction useTagGroupCtx() {\n return useContext(TagGroupContext)\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Root\n// ---------------------------------------------------------------------------\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (values: string[]) => void\n /** Validate a value before adding. Return `true` if valid, or an error string. */\n onValidate?: (value: string) => true | string\n disabled?: boolean\n /** Form field name — renders hidden inputs for each tag value */\n name?: string\n 'aria-label'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n onValidate,\n disabled: disabledProp = false,\n name,\n 'aria-label': ariaLabel,\n children,\n}: RootProps) {\n const gridId = useId()\n const fieldCtx = useFieldContext()\n const [values, setValues] = useControllableValue(controlledValue, defaultValue, onValueChange)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [editable, setEditable] = useState(false)\n const [announcement, setAnnouncement] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const disabled = disabledProp || (fieldCtx?.disabled ?? false)\n const isInvalid = fieldCtx?.invalid ?? false\n\n const addTag = useCallback(\n (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) return\n if (values.includes(trimmed)) return\n if (onValidate) {\n const result = onValidate(trimmed)\n if (result !== true) return\n }\n setValues([...values, trimmed])\n setAnnouncement(`Added ${trimmed}`)\n },\n [values, setValues, onValidate],\n )\n\n const removeTag = useCallback(\n (value: string) => {\n const idx = values.indexOf(value)\n if (idx === -1) return\n const next = values.filter((v) => v !== value)\n setValues(next)\n setAnnouncement(`Removed ${value}`)\n\n // Focus management: move to next tag, or previous, or input\n if (next.length === 0) {\n inputRef.current?.focus()\n setFocusedIndex(-1)\n } else if (idx >= next.length) {\n setFocusedIndex(next.length - 1)\n } else {\n setFocusedIndex(idx)\n }\n },\n [values, setValues],\n )\n\n // Focus the tag at focusedIndex when it changes\n useEffect(() => {\n if (focusedIndex >= 0 && focusedIndex < values.length) {\n const container = document.getElementById(gridId)\n if (!container) return\n const rows = container.querySelectorAll('[role=\"row\"]')\n const target = rows[focusedIndex] as HTMLElement | undefined\n target?.focus()\n }\n }, [focusedIndex, gridId, values.length])\n\n const ctx = useMemo<TagGroupContextValue>(\n () => ({\n values,\n addTag,\n removeTag,\n editable,\n setEditable,\n disabled,\n validate: onValidate,\n focusedIndex,\n setFocusedIndex,\n inputRef,\n gridId,\n name,\n }),\n [values, addTag, removeTag, editable, disabled, onValidate, focusedIndex, gridId, name],\n )\n\n return (\n <TagGroupContext.Provider value={ctx}>\n <html.div style={styles.root} aria-label={ariaLabel}>\n <html.div\n style={[\n styles.container,\n !editable && styles.containerStatic,\n isInvalid && styles.containerError,\n disabled && styles.containerDisabled,\n ]}\n aria-describedby={\n fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n }\n aria-invalid={isInvalid || undefined}\n >\n {children}\n </html.div>\n\n {/* Hidden inputs for form submission */}\n {name && values.map((v) => <html.input key={v} type=\"hidden\" name={name} value={v} />)}\n\n {/* Live region for screen reader announcements */}\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={styles.liveRegion}>\n {announcement}\n </html.div>\n </html.div>\n </TagGroupContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.List\n// ---------------------------------------------------------------------------\n\ninterface ListProps {\n children: ReactNode\n 'aria-label'?: string\n}\n\nfunction List({children, 'aria-label': ariaLabel}: ListProps) {\n const ctx = useTagGroupCtx()\n\n return (\n <html.div role={'grid' as any} aria-label={ariaLabel} id={ctx?.gridId} style={styles.list}>\n {children}\n </html.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Input\n// ---------------------------------------------------------------------------\n\ninterface InputProps {\n placeholder?: string\n}\n\nfunction Input({placeholder}: InputProps) {\n const ctx = useTagGroupCtx()\n const [inputValue, setInputValue] = useState('')\n const localRef = useRef<HTMLInputElement>(null)\n\n // Sync local ref with context inputRef\n useEffect(() => {\n if (ctx?.inputRef) {\n ;(ctx.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = localRef.current\n }\n })\n\n // Register as editable on mount\n useEffect(() => {\n ctx?.setEditable(true)\n return () => ctx?.setEditable(false)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const commitValueRef = useRef<(raw: string) => boolean>(() => false)\n commitValueRef.current = (raw: string) => {\n const trimmed = raw.trim()\n if (!trimmed || !ctx) return false\n ctx.addTag(trimmed)\n setInputValue('')\n return true\n }\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const el = localRef.current\n if (!el) return\n\n function handleKeyDown(e: KeyboardEvent) {\n if (!ctx) return\n const target = e.target as HTMLInputElement\n\n if (e.key === 'Enter' || e.key === ',' || e.key === ';') {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Tab' && target.value.trim()) {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Backspace' && !target.value && ctx.values.length > 0) {\n e.preventDefault()\n ctx.removeTag(ctx.values[ctx.values.length - 1])\n return\n }\n\n if (e.key === 'ArrowLeft' && (target.selectionStart ?? 0) === 0 && ctx.values.length > 0) {\n e.preventDefault()\n ctx.setFocusedIndex(ctx.values.length - 1)\n return\n }\n\n if (e.key === 'Escape') {\n setInputValue('')\n }\n }\n\n function handlePaste(e: ClipboardEvent) {\n if (!ctx) return\n const text = e.clipboardData?.getData('text') ?? ''\n const items = text\n .split(/[\\n,;]+/)\n .map((s) => s.trim())\n .filter(Boolean)\n if (items.length > 1) {\n e.preventDefault()\n for (const item of items) {\n ctx.addTag(item)\n }\n }\n }\n\n function handleFocus() {\n ctx?.setFocusedIndex(-1)\n }\n\n el.addEventListener('keydown', handleKeyDown)\n el.addEventListener('paste', handlePaste)\n el.addEventListener('focus', handleFocus)\n return () => {\n el.removeEventListener('keydown', handleKeyDown)\n el.removeEventListener('paste', handlePaste)\n el.removeEventListener('focus', handleFocus)\n }\n }, [ctx])\n\n return (\n <html.input\n ref={localRef as React.Ref<HTMLInputElement>}\n type=\"text\"\n value={inputValue}\n onChange={(e: any) => setInputValue(e.target.value)}\n placeholder={placeholder}\n disabled={ctx?.disabled}\n style={styles.input}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Namespace export\n// ---------------------------------------------------------------------------\n\nexport const TagGroup = {\n Root,\n List,\n Input,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n rootVertical: {\n flexDirection: 'row',\n },\n list: {\n display: 'flex',\n flexDirection: 'row',\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n gap: spacing.xs,\n // Positioning context for the sliding indicator.\n position: 'relative',\n },\n listVertical: {\n flexDirection: 'column',\n borderBottomWidth: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n gap: 0,\n },\n tab: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderBottomWidth: 2,\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n cursor: 'pointer',\n transitionProperty: 'color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': -2,\n },\n },\n tabVertical: {\n justifyContent: 'flex-start',\n borderBottomWidth: 0,\n borderRightWidth: 2,\n borderRightStyle: 'solid',\n borderRightColor: 'transparent',\n },\n tabActiveHorizontal: {\n color: colors.text,\n borderBottomColor: colors.accent,\n },\n tabActiveVertical: {\n color: colors.text,\n borderRightColor: colors.accent,\n },\n // Applied to the active tab once JS drives the sliding indicator: drop the\n // per-tab accent border so the single sliding bar is the only underline\n // (avoids a double line and an instant-pop that would undercut the slide).\n tabIndicatorActive: {\n borderBottomColor: 'transparent',\n borderRightColor: 'transparent',\n },\n // --- Sliding active indicator (positioned by measuring the active tab) ---\n indicator: {\n position: 'absolute',\n backgroundColor: colors.accent,\n pointerEvents: 'none',\n transitionProperty: 'transform, width, height',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.easeOut,\n },\n indicatorHorizontal: {\n bottom: -1,\n left: 0,\n height: 2,\n },\n indicatorVertical: {\n right: -1,\n top: 0,\n width: 2,\n },\n // Dynamic transform/size from the measured active tab (StyleX dynamic style:\n // simple identifier params only).\n indicatorOffsetH: (offset: number, size: number) => ({\n transform: `translateX(${offset}px)`,\n width: size,\n }),\n indicatorOffsetV: (offset: number, size: number) => ({\n transform: `translateY(${offset}px)`,\n height: size,\n }),\n tabDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n color: colors.textMuted,\n },\n panel: {\n paddingTop: spacing.md,\n },\n panelVertical: {\n paddingTop: 0,\n paddingLeft: spacing.md,\n },\n})\n","import {createContext, useContext} from 'react'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface TabsContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n orientation: Orientation\n registerTab: (value: string, disabled: boolean) => () => void\n tabsRef: React.RefObject<Map<string, boolean>>\n orderRef: React.RefObject<string[]>\n // True once the List has measured the active tab and is driving a sliding\n // indicator. Tabs suppress their own accent border while it's true so the\n // single sliding bar is the only underline; it stays false without JS\n // (SSR / no-hydration), where the per-tab border is the graceful fallback.\n indicatorActive: boolean\n setIndicatorActive: (active: boolean) => void\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport function useTabs() {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error('Tabs compound components must be used within Tabs.Root')\n return ctx\n}\n","import {useCallback, useRef, useState} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {Orientation, TabsContextValue} from './TabsContext'\n\ninterface UseTabsRootOptions {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: Orientation\n}\n\nexport function useTabsRoot({\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: UseTabsRootOptions): TabsContextValue {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const tabsRef = useRef(new Map<string, boolean>())\n const orderRef = useRef<string[]>([])\n const [indicatorActive, setIndicatorActive] = useState(false)\n\n const registerTab = useCallback((value: string, disabled: boolean) => {\n tabsRef.current.set(value, disabled)\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n tabsRef.current.delete(value)\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return {\n activeValue,\n onSelect,\n orientation,\n registerTab,\n tabsRef,\n orderRef,\n indicatorActive,\n setIndicatorActive,\n }\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {TabsContext, useTabs} from './TabsContext'\nimport {useTabsRoot} from './useTabsRoot'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n}\n\nfunction Root({\n children,\n value,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: RootProps) {\n const ctx = useTabsRoot({value, defaultValue, onValueChange, orientation})\n\n return (\n <TabsContext.Provider value={ctx}>\n <html.div style={[styles.root, orientation === 'vertical' && styles.rootVertical]}>\n {children}\n </html.div>\n </TabsContext.Provider>\n )\n}\n\n// --- List ---\n\ninterface ListProps {\n children: ReactNode\n}\n\nfunction List({children}: ListProps) {\n const {orientation, activeValue, onSelect, tabsRef, orderRef, setIndicatorActive} = useTabs()\n const listRef = useRef<HTMLDivElement>(null)\n const [indicator, setIndicator] = useState<{offset: number; size: number} | null>(null)\n\n // Measure the active tab and drive the sliding indicator. useLayoutEffect so\n // the first position is set before paint (the indicator element mounts already\n // in place — no slide-in from zero; only later tab changes animate). Observes\n // the active tab (its own size, e.g. a changing \"(3)\" count) and the list\n // (container resize / reflow). A non-active sibling resizing while you're on\n // another tab is the one case not caught; it self-corrects on the next\n // selection or resize.\n useLayoutEffect(() => {\n const list = listRef.current\n if (!list || !activeValue) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const el = list.querySelector<HTMLElement>(`[data-tab-value=\"${CSS.escape(activeValue)}\"]`)\n if (!el) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const measure = () => {\n setIndicator(\n orientation === 'horizontal'\n ? {offset: el.offsetLeft, size: el.offsetWidth}\n : {offset: el.offsetTop, size: el.offsetHeight},\n )\n setIndicatorActive(true)\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n ro.observe(list)\n return () => ro.disconnect()\n }, [activeValue, orientation, setIndicatorActive])\n\n useEffect(() => {\n const el = listRef.current\n if (!el) return\n const listEl = el\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const tabs = tabsRef.current\n if (order.length === 0) return\n\n const prevKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'\n const nextKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown'\n\n let targetValue: string | null = null\n\n switch (e.key) {\n case nextKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : -1\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx + i) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case prevKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : 0\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx - i + order.length) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'Home': {\n e.preventDefault()\n for (const val of order) {\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'End': {\n e.preventDefault()\n for (let i = order.length - 1; i >= 0; i--) {\n if (!tabs.get(order[i])) {\n targetValue = order[i]\n break\n }\n }\n break\n }\n }\n\n if (targetValue) {\n onSelect(targetValue)\n // Focus the newly activated tab button\n const tabEl = listEl.querySelector(\n `[data-tab-value=\"${targetValue}\"]`,\n ) as HTMLElement | null\n tabEl?.focus()\n }\n }\n\n el.addEventListener('keydown', handleKeyDown)\n return () => el.removeEventListener('keydown', handleKeyDown)\n }, [orientation, activeValue, onSelect, tabsRef, orderRef])\n\n return (\n <html.div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n style={[styles.list, orientation === 'vertical' && styles.listVertical]}\n >\n {children}\n {indicator && (\n <html.div\n aria-hidden\n style={[\n styles.indicator,\n orientation === 'horizontal' ? styles.indicatorHorizontal : styles.indicatorVertical,\n orientation === 'horizontal'\n ? styles.indicatorOffsetH(indicator.offset, indicator.size)\n : styles.indicatorOffsetV(indicator.offset, indicator.size),\n ]}\n />\n )}\n </html.div>\n )\n}\n\n// --- Tab ---\n\ninterface TabProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Tab({value, disabled = false, children}: TabProps) {\n const {activeValue, onSelect, orientation, registerTab, indicatorActive} = useTabs()\n const isActive = activeValue === value\n const tabId = useId()\n const panelId = `${tabId}-panel`\n\n useEffect(() => {\n return registerTab(value, disabled)\n }, [value, disabled, registerTab])\n\n const handleClick = () => {\n if (!disabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.button\n type=\"button\"\n role=\"tab\"\n id={tabId}\n aria-selected={isActive}\n aria-controls={panelId}\n aria-disabled={disabled || undefined}\n data-tab-value={value}\n tabIndex={isActive ? 0 : -1}\n onClick={handleClick}\n style={[\n styles.tab,\n orientation === 'vertical' && styles.tabVertical,\n isActive &&\n (orientation === 'vertical' ? styles.tabActiveVertical : styles.tabActiveHorizontal),\n isActive && indicatorActive && styles.tabIndicatorActive,\n disabled && styles.tabDisabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Panel ---\n\ninterface PanelProps {\n value: string\n children: ReactNode\n}\n\nfunction Panel({value, children}: PanelProps) {\n const {activeValue, orientation} = useTabs()\n\n if (activeValue !== value) return null\n\n return (\n <html.div\n role=\"tabpanel\"\n style={[styles.panel, orientation === 'vertical' && styles.panelVertical]}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tabs = {\n Root,\n List,\n Tab,\n Panel,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n resize: 'vertical' as const,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 1,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ntype StrictTextareaProps = React.ComponentProps<typeof html.textarea>\n\nexport type TextareaVariant = 'default' | 'error'\n\ninterface TextareaProps {\n variant?: TextareaVariant\n name?: string\n placeholder?: string\n required?: boolean\n rows?: number\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLTextAreaElement>\n}\n\nexport function Textarea({\n variant = 'default',\n name,\n placeholder,\n required,\n rows = 3,\n value,\n defaultValue,\n disabled,\n autoFocus,\n onChange,\n onBlur,\n ref,\n}: TextareaProps) {\n const ctx = useFieldContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const effectiveVariant = ctx?.invalid ? 'error' : variant\n\n const extraProps: Record<string, unknown> = {}\n if (autoFocus) extraProps.autoFocus = true\n\n return (\n <html.textarea\n id={ctx?.controlId}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n rows={rows}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={\n ctx ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() : undefined\n }\n aria-invalid={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictTextareaProps['onChange']}\n onBlur={effectiveOnBlur as StrictTextareaProps['onBlur']}\n ref={effectiveRef as React.Ref<HTMLTextAreaElement>}\n style={[styles.base, styles[effectiveVariant]]}\n {...extraProps}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\n },\n})\n","import {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {Icon, type IconName, type IconSize} from '../Icon/Icon'\nimport {ThemeProvider, type ThemeName} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\n/**\n * The user's *preference*. `'system'` follows the OS `prefers-color-scheme`;\n * the others pin a concrete {@link ThemeName}. Resolves to a ThemeName via\n * {@link useColorMode}().theme.\n */\nexport type ColorModePreference = 'system' | ThemeName\n\nconst PREFERENCES: readonly ColorModePreference[] = ['system', 'light', 'dark', 'high-contrast']\n\nconst ICON: Record<ColorModePreference, IconName> = {\n system: 'monitor',\n light: 'sun',\n dark: 'moon',\n 'high-contrast': 'contrast',\n}\n\nconst LABEL: Record<ColorModePreference, string> = {\n system: 'system',\n light: 'light',\n dark: 'dark',\n 'high-contrast': 'high contrast',\n}\n\ninterface ColorModeContextValue {\n /** The user's chosen preference. */\n preference: ColorModePreference\n /** The concrete theme the preference resolves to (system → OS scheme). */\n theme: ThemeName\n /** Set the preference explicitly. */\n setPreference: (preference: ColorModePreference) => void\n /** Advance to the next preference in {@link modes} (wraps). */\n cycle: () => void\n /** The cycle order used by `cycle()` and the toggle. */\n modes: readonly ColorModePreference[]\n}\n\nconst ColorModeContext = createContext<ColorModeContextValue | null>(null)\n\n/**\n * Read the active color mode. Throws if used outside a {@link ColorModeProvider}.\n */\nexport function useColorMode(): ColorModeContextValue {\n const ctx = useContext(ColorModeContext)\n if (!ctx) {\n throw new Error('useColorMode must be used within a <ColorModeProvider>')\n }\n return ctx\n}\n\nconst canUseDom =\n !isNative && typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n\nfunction isPreference(value: unknown): value is ColorModePreference {\n return typeof value === 'string' && (PREFERENCES as readonly string[]).includes(value)\n}\n\nfunction readStored(key: string | null): ColorModePreference | null {\n if (!key || isNative || typeof window === 'undefined') return null\n try {\n const raw = window.localStorage.getItem(key)\n return isPreference(raw) ? raw : null\n } catch {\n // Private mode / blocked storage — degrade to no persistence.\n return null\n }\n}\n\nfunction writeStored(key: string | null, value: ColorModePreference): void {\n if (!key || isNative || typeof window === 'undefined') return\n try {\n window.localStorage.setItem(key, value)\n } catch {\n /* ignore */\n }\n}\n\ninterface ColorModeProviderProps {\n children: ReactNode\n /** Initial preference (uncontrolled). Default `'system'`. For SSR with no\n * hydration flash, pass the value you persisted server-side (e.g. a cookie). */\n defaultPreference?: ColorModePreference\n /** Controlled preference — when set, the provider does not own the state. */\n preference?: ColorModePreference\n /** Fired whenever the preference changes (controlled or not). */\n onPreferenceChange?: (preference: ColorModePreference) => void\n /** Cycle order for `cycle()` / `<ColorModeToggle>`. Default `['light', 'dark']`. */\n modes?: readonly ColorModePreference[]\n /** localStorage key for persistence; `null` disables it. Default `'duro-color-mode'`. */\n storageKey?: string | null\n /** Wrap children in the DS `ThemeProvider` with the resolved theme. Default `true`.\n * Set `false` to drive your own ThemeProvider from `useColorMode().theme`. */\n applyTheme?: boolean\n}\n\n/**\n * Owns color-mode state, resolves `'system'` against the OS scheme, persists the\n * choice, and (by default) applies the resolved theme via `ThemeProvider`.\n * Pair with {@link ColorModeToggle} or read state via {@link useColorMode}.\n */\nexport function ColorModeProvider({\n children,\n defaultPreference = 'system',\n preference: controlled,\n onPreferenceChange,\n modes = ['light', 'dark'],\n storageKey = 'duro-color-mode',\n applyTheme = true,\n}: ColorModeProviderProps) {\n const [internal, setInternal] = useState<ColorModePreference>(controlled ?? defaultPreference)\n const preference = controlled ?? internal\n\n // Hydrate from storage AFTER mount (not in the initializer) so the first\n // client render matches the server and React doesn't warn about a mismatch.\n useEffect(() => {\n if (controlled !== undefined) return\n const stored = readStored(storageKey)\n if (stored) setInternal(stored)\n // Only on mount / when the key changes.\n }, [controlled, storageKey])\n\n const setPreference = useCallback(\n (next: ColorModePreference) => {\n if (controlled === undefined) setInternal(next)\n writeStored(storageKey, next)\n onPreferenceChange?.(next)\n },\n [controlled, storageKey, onPreferenceChange],\n )\n\n // Track the OS scheme so `'system'` stays live. The initial value MUST be the\n // SSR-stable default ('dark', what the server renders without a DOM) so the\n // first client render matches the server — reading matchMedia in the\n // initializer would diverge (server 'dark' vs client's real scheme) and trip\n // a hydration mismatch. The effect reconciles to the real scheme after mount.\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('dark')\n useEffect(() => {\n if (!canUseDom) return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const onChange = () => setSystemTheme(mq.matches ? 'dark' : 'light')\n onChange()\n mq.addEventListener('change', onChange)\n return () => mq.removeEventListener('change', onChange)\n }, [])\n\n const theme: ThemeName = preference === 'system' ? systemTheme : preference\n\n const cycle = useCallback(() => {\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0]\n if (next) setPreference(next)\n }, [modes, preference, setPreference])\n\n const value = useMemo<ColorModeContextValue>(\n () => ({preference, theme, setPreference, cycle, modes}),\n [preference, theme, setPreference, cycle, modes],\n )\n\n return (\n <ColorModeContext.Provider value={value}>\n {applyTheme ? <ThemeProvider theme={theme}>{children}</ThemeProvider> : children}\n </ColorModeContext.Provider>\n )\n}\n\ninterface ColorModeToggleProps {\n /** Icon size token. Default `'md'` (18px). */\n size?: IconSize\n /** Override the announced label (otherwise auto-generated from current/next). */\n 'aria-label'?: string\n}\n\n/**\n * A compact icon button that cycles the color-mode preference through the\n * provider's `modes`. The glyph reflects the current preference\n * (sun/moon/monitor/contrast). Must be inside a {@link ColorModeProvider}.\n */\nexport function ColorModeToggle({size = 'md', 'aria-label': ariaLabel}: ColorModeToggleProps) {\n const {preference, cycle, modes} = useColorMode()\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0] ?? preference\n const label = ariaLabel ?? `Color mode: ${LABEL[preference]}. Switch to ${LABEL[next]}.`\n\n return (\n <html.button type=\"button\" aria-label={label} onClick={cycle} style={styles.button}>\n <Icon name={ICON[preference]} size={size} />\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n error: {\n color: colors.errorText,\n },\n success: {\n color: colors.successText,\n },\n warning: {\n color: colors.warningText,\n },\n\n // Weight overrides\n weightNormal: {\n fontWeight: typography.fontWeightNormal,\n },\n weightMedium: {\n fontWeight: typography.fontWeightMedium,\n },\n weightSemibold: {\n fontWeight: typography.fontWeightSemibold,\n },\n weightBold: {\n fontWeight: typography.fontWeightBold,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n\n // Truncate. minWidth: 0 lets a truncating Text actually shrink inside a\n // flex/grid container — without it, the default `min-width: auto` would\n // keep the element at its content width, so text-overflow: ellipsis would\n // never trigger and the text would just overflow the parent instead.\n truncate: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type TextVariant = 'bodySm' | 'bodyMd' | 'bodyLg' | 'caption' | 'label' | 'code' | 'overline'\nexport type TextColor = 'default' | 'muted' | 'accent' | 'error' | 'success' | 'warning'\n\ninterface TextProps {\n variant?: TextVariant\n color?: TextColor\n weight?: 'normal' | 'medium' | 'semibold' | 'bold'\n align?: 'start' | 'center' | 'end'\n truncate?: boolean\n as?: 'span' | 'p' | 'div'\n children: ReactNode\n}\n\nconst weightMap = {\n normal: styles.weightNormal,\n medium: styles.weightMedium,\n semibold: styles.weightSemibold,\n bold: styles.weightBold,\n} as const\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Text({\n variant = 'bodyMd',\n color = 'default',\n weight,\n align,\n truncate,\n as = 'span',\n children,\n}: TextProps) {\n const style = [\n typePresets[variant],\n styles[color],\n weight && weightMap[weight],\n align && alignMap[align],\n truncate && styles.truncate,\n ]\n\n if (as === 'p') return <html.p style={style}>{children}</html.p>\n if (as === 'div') return <html.div style={style}>{children}</html.div>\n return <html.span style={style}>{children}</html.span>\n}\n","import {createContext, useContext} from 'react'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface ToggleGroupContextValue {\n value: string[]\n toggle: (itemValue: string) => void\n disabled: boolean\n orientation: Orientation\n size: ToggleSize\n}\n\nexport const ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null)\n\nexport function useToggleGroup() {\n return useContext(ToggleGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1,\n borderStyle: 'solid',\n cursor: 'pointer',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n transitionProperty: 'background-color, border-color, color, opacity',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\n },\n sizeDefault: {\n padding: `${spacing.sm} ${spacing.md}`,\n fontSize: typography.fontSizeSm,\n borderRadius: radii.sm,\n gap: spacing.sm,\n },\n sizeSmall: {\n padding: `${spacing.xs} ${spacing.sm}`,\n fontSize: typography.fontSizeXs,\n borderRadius: radii.sm,\n gap: spacing.xs,\n },\n unpressed: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n color: colors.textMuted,\n },\n pressed: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n borderColor: colors.accent,\n color: colors.accentContrast,\n },\n grouped: {\n borderWidth: 0,\n borderRadius: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n // Override any borderColor set by pressed state — dividers always use border token\n borderColor: colors.border,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n})\n","import {type ReactNode, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useToggleGroup} from '../ToggleGroup/ToggleGroupContext'\nimport {styles} from './styles.css'\n\nexport type ToggleSize = 'default' | 'small'\n\ninterface ToggleProps {\n /** Controlled pressed state (standalone usage). */\n pressed?: boolean\n /** Initial pressed state (uncontrolled, standalone usage). */\n defaultPressed?: boolean\n /** Callback fired when the pressed state changes (standalone usage). */\n onPressedChange?: (pressed: boolean) => void\n /** Unique value when used inside a ToggleGroup. */\n value?: string\n /** Prevents user interaction. */\n disabled?: boolean\n /** Size variant (overridden by ToggleGroup when grouped). */\n size?: ToggleSize\n 'aria-label'?: string\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Toggle({\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n value,\n disabled: disabledProp = false,\n size: sizeProp = 'default',\n 'aria-label': ariaLabel,\n children,\n}: ToggleProps) {\n const group = useToggleGroup()\n\n // When inside a ToggleGroup, derive pressed state from group context\n const groupPressed = group && value !== undefined ? group.value.includes(value) : undefined\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const size = group?.size ?? sizeProp\n\n const [standalonePressed, setStandalonePressed] = useControllableValue(\n controlledPressed,\n defaultPressed,\n onPressedChange,\n )\n\n const pressed = groupPressed ?? standalonePressed\n\n const handleClick = useCallback(() => {\n if (disabled) return\n if (isGrouped && value !== undefined) {\n group.toggle(value)\n } else {\n setStandalonePressed(!pressed)\n }\n }, [disabled, isGrouped, value, group, pressed, setStandalonePressed])\n\n return (\n <html.button\n type=\"button\"\n aria-pressed={pressed}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={handleClick}\n data-pressed={pressed ? '' : undefined}\n style={[\n styles.base,\n sizeMap[size],\n pressed ? styles.pressed : styles.unpressed,\n isGrouped && styles.grouped,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n overflow: 'hidden',\n },\n vertical: {\n flexDirection: 'column',\n },\n})\n","import {type ReactNode, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport {ToggleGroupContext, type Orientation} from './ToggleGroupContext'\nimport {styles} from './styles.css'\n\ninterface ToggleGroupProps {\n /** Controlled value — array of pressed item values. */\n value?: string[]\n /** Initial value (uncontrolled). */\n defaultValue?: string[]\n /** Callback fired when the set of pressed values changes. */\n onValueChange?: (value: string[]) => void\n /** When false, at most one item can be pressed at a time. */\n multiple?: boolean\n /** Prevents interaction with all items. */\n disabled?: boolean\n /** Layout direction. */\n orientation?: Orientation\n /** Size applied to all child toggles. */\n size?: ToggleSize\n children: ReactNode\n}\n\nexport function ToggleGroup({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n multiple = false,\n disabled = false,\n orientation = 'horizontal',\n size = 'default',\n children,\n}: ToggleGroupProps) {\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const toggle = useCallback(\n (itemValue: string) => {\n const nextPressed = !value.includes(itemValue)\n let next: string[]\n if (multiple) {\n next = nextPressed ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n } else {\n next = nextPressed ? [itemValue] : []\n }\n setValue(next)\n },\n [value, multiple, setValue],\n )\n\n return (\n <ToggleGroupContext.Provider value={{value, toggle, disabled, orientation, size}}>\n <html.div\n role=\"toolbar\"\n aria-orientation={orientation}\n style={[styles.root, orientation === 'vertical' && styles.vertical]}\n >\n {children}\n </html.div>\n </ToggleGroupContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n popup: {\n position: 'absolute',\n zIndex: 50,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n },\n top: {\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: spacing.xs,\n },\n bottom: {\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginTop: spacing.xs,\n },\n left: {\n right: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginRight: spacing.xs,\n },\n right: {\n left: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginLeft: spacing.xs,\n },\n})\n","import {\n type ReactNode,\n createContext,\n useContext,\n useState,\n useRef,\n useCallback,\n useId,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ntype Placement = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipContextValue {\n open: boolean\n show: () => void\n hide: () => void\n tooltipId: string\n placement: Placement\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null)\n\nfunction useTooltip() {\n const ctx = useContext(TooltipContext)\n if (!ctx) throw new Error('Tooltip compound components must be used within Tooltip.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n content: ReactNode\n placement?: Placement\n delay?: number\n}\n\nfunction Root({children, content, placement = 'top', delay = 300}: RootProps) {\n const [open, setOpen] = useState(false)\n const tooltipId = useId()\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const hide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = null\n setOpen(false)\n }, [])\n\n return (\n <TooltipContext.Provider value={{open, show, hide, tooltipId, placement}}>\n <html.div style={styles.root}>\n {children}\n {open && (\n <html.div id={tooltipId} role=\"tooltip\" style={[styles.popup, styles[placement]]}>\n {content}\n </html.div>\n )}\n </html.div>\n </TooltipContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {open, show, hide, tooltipId} = useTooltip()\n\n return (\n <html.div\n onPointerEnter={show}\n onPointerLeave={hide}\n onFocus={show}\n onBlur={hide}\n aria-describedby={open ? tooltipId : undefined}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tooltip = {\n Root,\n Trigger,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n track: {\n position: 'relative',\n width: 36,\n height: 20,\n borderRadius: radii.full,\n borderWidth: 0,\n padding: 0,\n cursor: 'inherit',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\n flexShrink: 0,\n },\n trackUnchecked: {\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n trackChecked: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n },\n thumb: {\n position: 'absolute',\n top: 2,\n left: 2,\n width: 16,\n height: 16,\n borderRadius: radii.full,\n backgroundColor: '#fff',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n thumbChecked: {\n transform: 'translateX(16px)',\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\n\ninterface SwitchProps {\n /** Controlled checked state. */\n checked?: boolean\n /** Initial checked state (uncontrolled). */\n defaultChecked?: boolean\n /** Callback fired when the checked state changes. */\n onCheckedChange?: (checked: boolean) => void\n /** Prevents user interaction. */\n disabled?: boolean\n /** Form field name for the hidden input. */\n name?: string\n /** Value submitted when checked. */\n value?: string\n /** Label content rendered beside the switch. */\n children?: ReactNode\n}\n\nexport function Switch({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n name,\n value,\n children,\n}: SwitchProps) {\n const [checked, setChecked] = useControllableValue(\n controlledChecked,\n defaultChecked,\n onCheckedChange,\n )\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleClick = useCallback(() => {\n if (disabled) return\n setChecked(!checked)\n // Keep hidden input in sync for form submission\n if (inputRef.current) {\n inputRef.current.checked = !checked\n }\n }, [disabled, checked, setChecked])\n\n return (\n <html.label\n style={[styles.root, isNative && styles.nativeFlex, disabled && styles.rootDisabled]}\n >\n {!isNative && (\n // Web: hidden real checkbox carries a11y + form submission. RSD has no\n // <input type=checkbox> on native, so it's omitted there and the\n // button below carries the switch role instead.\n <html.input\n ref={inputRef}\n type=\"checkbox\"\n role=\"switch\"\n name={name}\n value={value}\n checked={controlledChecked !== undefined ? controlledChecked : undefined}\n defaultChecked={controlledChecked === undefined ? defaultChecked : undefined}\n disabled={disabled}\n aria-checked={checked}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n onCheckedChange?.(e.target.checked)\n }}\n style={styles.input}\n />\n )}\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-hidden={isNative ? undefined : true}\n role={isNative ? 'switch' : undefined}\n aria-checked={isNative ? checked : undefined}\n disabled={disabled}\n onClick={handleClick}\n style={[styles.track, checked ? styles.trackChecked : styles.trackUnchecked]}\n >\n <html.span style={[styles.thumb, checked && styles.thumbChecked]} />\n </html.button>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'column',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignStretch: {alignItems: 'stretch'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type SpacingKey = SpacingToken\n\ninterface StackProps {\n gap?: SpacingKey\n align?: 'start' | 'center' | 'end' | 'stretch'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n stretch: styles.alignStretch,\n} as const\n\nexport function Stack({gap = 'md', align = 'stretch', children}: StackProps) {\n return <html.div style={[styles.base, gapMap[gap], alignMap[align]]}>{children}</html.div>\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignBaseline: {alignItems: 'baseline'},\n alignStretch: {alignItems: 'stretch'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface InlineProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end' | 'baseline' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n baseline: styles.alignBaseline,\n stretch: styles.alignStretch,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Inline({gap = 'sm', align = 'center', justify = 'start', children}: InlineProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface ClusterProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Cluster({gap = 'sm', align = 'start', justify = 'start', children}: ClusterProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {breakpoints} from '@duro-app/tokens/tokens/breakpoints.css'\n\n// Where a split collapses to one column — measured on the split's OWN\n// container, not the viewport. A split nested in another split (a list/detail\n// board inside a nav/content shell) has far less room than the window: at a\n// 768px viewport the shell leaves ~408px for its content column, and a\n// viewport-keyed inner split would still open there and squeeze its detail\n// pane to ~150px. Container queries collapse each split on what it actually\n// has. defineConsts strings, inlined into the @container text at build time.\nconst SPLIT_WIDE_BP = breakpoints.md // 280px rail + real content\nconst SPLIT_BP = breakpoints.sm // 240px list + ≥ 384px detail\n\nexport const styles = css.create({\n base: {\n display: 'grid',\n },\n col1: {gridTemplateColumns: '1fr'},\n col2: {gridTemplateColumns: 'repeat(2, 1fr)'},\n col3: {gridTemplateColumns: 'repeat(3, 1fr)'},\n col4: {gridTemplateColumns: 'repeat(4, 1fr)'},\n col5: {gridTemplateColumns: 'repeat(5, 1fr)'},\n col6: {gridTemplateColumns: 'repeat(6, 1fr)'},\n autoFit: (minWidth: string) => ({\n gridTemplateColumns: `repeat(auto-fill, minmax(${minWidth}, 1fr))`,\n }),\n // Hosts the @container query for a named layout. A container cannot query\n // itself, so the grid sits inside this wrapper (the Table.rootContainer\n // pattern). Only `layout` grids get it: counted and weighted grids keep\n // their DOM exactly as before.\n splitContainer: {\n containerType: 'inline-size',\n },\n // Asymmetric list/detail splits: a bounded first column, the rest for the\n // detail; one column when the container is narrower than the breakpoint.\n // Static entries rather than a parameter because the pair (widths +\n // collapse point) is the design decision — a screen picks a split, it does\n // not tune one.\n split: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_BP})`]: 'minmax(240px, 1fr) minmax(0, 2fr)',\n },\n },\n splitWide: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_WIDE_BP})`]: 'minmax(280px, 1fr) minmax(0, 3fr)',\n },\n },\n // Weighted columns: `[1, 2]` → `1fr 2fr` (see columns.ts).\n template: (tracks: string) => ({\n gridTemplateColumns: tracks,\n }),\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n\n // --- native only (see NativeGrid in Grid.tsx) -----------------------------\n // React Native honours `display: 'flex'` only, and RSD gives it web flex\n // semantics, so the row direction is explicit.\n nativeRow: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n // A definite width so percentage bases resolve in Yoga's measure pass;\n // against an auto width the line breaks come out wrong and the container\n // under-reports its height (verified on the iOS simulator).\n width: '100%',\n },\n // border-box is explicit: react-strict-dom mirrors the web default\n // (content-box) on native, which adds the gap padding on top of the basis\n // and overflows the row so every cell wraps.\n nativeCell: (basis: string) => ({\n flexBasis: basis,\n flexShrink: 0,\n boxSizing: 'border-box',\n }),\n // Auto-fit approximation: start at the minimum width, grow to fill. flexGrow\n // is fine here: this style is native-only, so RSD-web's forced flex-grow: 0\n // never applies.\n nativeMinCell: (minWidth: string) => ({\n flexBasis: minWidth,\n flexGrow: 1,\n boxSizing: 'border-box',\n }),\n cellGapLeftXs: {paddingLeft: spacing.xs},\n cellGapLeftSm: {paddingLeft: spacing.sm},\n cellGapLeftMs: {paddingLeft: spacing.ms},\n cellGapLeftMd: {paddingLeft: spacing.md},\n cellGapLeftLg: {paddingLeft: spacing.lg},\n cellGapLeftXl: {paddingLeft: spacing.xl},\n cellGapLeftXxl: {paddingLeft: spacing.xxl},\n cellGapLeftXxxl: {paddingLeft: spacing.xxxl},\n cellGapTopXs: {paddingTop: spacing.xs},\n cellGapTopSm: {paddingTop: spacing.sm},\n cellGapTopMs: {paddingTop: spacing.ms},\n cellGapTopMd: {paddingTop: spacing.md},\n cellGapTopLg: {paddingTop: spacing.lg},\n cellGapTopXl: {paddingTop: spacing.xl},\n cellGapTopXxl: {paddingTop: spacing.xxl},\n cellGapTopXxxl: {paddingTop: spacing.xxxl},\n})\n","// Pure column arithmetic behind Grid. No react-strict-dom, no platform: this\n// is what the unit project tests, and what both the web and native renderers\n// derive their styles from.\n\nexport type GridColumnCount = 1 | 2 | 3 | 4 | 5 | 6\n\n/**\n * Column spec: a count (equal columns) or a list of weights (`[1, 2]` is a\n * one-third / two-thirds split). Weights are the portable form of\n * `grid-template-columns: 1fr 2fr` — the only shape both runtimes can\n * honour, since React Native has no grid.\n */\nexport type GridColumns = GridColumnCount | readonly number[]\n\n/** Normalise a column spec to weights; `undefined` when no spec was given\n * (the caller then falls back to auto-fit or a single column). An invalid\n * weight list (empty, non-finite or non-positive entries) is a programming\n * error, reported in development and treated as one column. */\nexport function columnWeights(columns: GridColumns | undefined): readonly number[] | undefined {\n if (columns === undefined) return undefined\n if (typeof columns === 'number') return Array.from({length: columns}, () => 1)\n const valid = columns.length > 0 && columns.every((w) => Number.isFinite(w) && w > 0)\n if (!valid) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Grid: \\`columns\\` must be a non-empty list of positive numbers, got ${JSON.stringify(columns)}. Falling back to one column.`,\n )\n }\n return [1]\n }\n return columns\n}\n\n/** Web track list: `[1, 2]` → `\"1fr 2fr\"`. */\nexport function gridTemplate(weights: readonly number[]): string {\n return weights.map((w) => `${w}fr`).join(' ')\n}\n\n/** Native cell basis for the child at `index`: its column's share of the row\n * as a percentage string Yoga accepts (`\"33.3333%\"`). Children flow into\n * columns in order and wrap, exactly like grid auto-placement. */\nexport function cellBasis(weights: readonly number[], index: number): string {\n const total = weights.reduce((sum, w) => sum + w, 0)\n const share = (weights[index % weights.length] / total) * 100\n // Four decimals keeps a row summing to 100% within Yoga's tolerance while\n // never exceeding it (which would wrap the last cell).\n return `${Math.floor(share * 10000) / 10000}%`\n}\n\n/** Where the child at `index` sits in an `columnCount`-wide flow: whether it\n * opens a row (no gap to its left) and whether it is on the first row (no\n * gap above). Drives the native gap-as-padding scheme. */\nexport function cellPosition(\n index: number,\n columnCount: number,\n): {opensRow: boolean; firstRow: boolean} {\n return {opensRow: index % columnCount === 0, firstRow: index < columnCount}\n}\n","import {Children, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {isNative} from '../../platform'\nimport {cellBasis, cellPosition, columnWeights, gridTemplate, type GridColumns} from './columns'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\nexport type GridLayout = 'split' | 'split-wide'\n\ninterface GridProps {\n gap?: SpacingToken\n /** A column count (equal columns) or weights: `[1, 2]` gives a one-third /\n * two-thirds split. Weights are the portable form of a track list — a CSS\n * template string would be silently ignored on native. */\n columns?: GridColumns\n /** Responsive auto-fit: as many columns of at least this width as fit.\n * Wins over `columns` when both are set. On native this approximates to\n * cells of that minimum width that grow and wrap. */\n minColumnWidth?: string\n /**\n * A named responsive layout. `split` is list/detail (1:2, list ≥ 240px),\n * `split-wide` is nav/content (1:3, nav ≥ 280px). Each collapses to one\n * column on the width of its OWN container — `split` below `sm` (640px),\n * `split-wide` below `md` (768px) — so a split nested inside another\n * split, or beside an open DetailPanel, collapses when it runs out of room\n * rather than when the window does. Wins over `columns` / `minColumnWidth`.\n */\n layout?: GridLayout\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\n// Fixed counts keep their static classes so existing web consumers emit the\n// exact CSS they did before; only weight lists go through the dynamic style.\nconst columnsMap = {\n 1: styles.col1,\n 2: styles.col2,\n 3: styles.col3,\n 4: styles.col4,\n 5: styles.col5,\n 6: styles.col6,\n} as const\n\nconst layoutMap = {\n split: styles.split,\n 'split-wide': styles.splitWide,\n} as const satisfies Record<GridLayout, unknown>\n\n// On native the named layouts are their weights; there is no media query to\n// collapse them, so a split stays a split on a phone (see NativeGrid).\nconst layoutWeights = {\n split: [1, 2],\n 'split-wide': [1, 3],\n} as const satisfies Record<GridLayout, readonly number[]>\n\nconst cellGapLeftMap = {\n xs: styles.cellGapLeftXs,\n sm: styles.cellGapLeftSm,\n ms: styles.cellGapLeftMs,\n md: styles.cellGapLeftMd,\n lg: styles.cellGapLeftLg,\n xl: styles.cellGapLeftXl,\n xxl: styles.cellGapLeftXxl,\n xxxl: styles.cellGapLeftXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst cellGapTopMap = {\n xs: styles.cellGapTopXs,\n sm: styles.cellGapTopSm,\n ms: styles.cellGapTopMs,\n md: styles.cellGapTopMd,\n lg: styles.cellGapTopLg,\n xl: styles.cellGapTopXl,\n xxl: styles.cellGapTopXxl,\n xxxl: styles.cellGapTopXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nexport function Grid({gap = 'md', columns, minColumnWidth, layout, children}: GridProps) {\n if (isNative) {\n return (\n <NativeGrid\n gap={gap}\n columns={layout ? layoutWeights[layout] : columns}\n minColumnWidth={layout ? undefined : minColumnWidth}\n >\n {children}\n </NativeGrid>\n )\n }\n\n const columnStyle = layout\n ? layoutMap[layout]\n : minColumnWidth\n ? styles.autoFit(minColumnWidth)\n : typeof columns === 'number'\n ? columnsMap[columns]\n : columns\n ? styles.template(gridTemplate(columnWeights(columns) ?? [1]))\n : undefined\n\n const grid = <html.div style={[styles.base, gapMap[gap], columnStyle]}>{children}</html.div>\n // A named layout answers its container query from a wrapper: an element\n // cannot query its own size.\n return layout ? <html.div style={styles.splitContainer}>{grid}</html.div> : grid\n}\n\n/**\n * React Native has no grid, so the native Grid is a wrapping flex row with\n * each child in a cell:\n *\n * - Weighted / counted columns: the cell's `flexBasis` is its column's share\n * of the row. Percentages plus a real `gap` would overflow and wrap early,\n * so the gap is padding on the cell instead — left on every cell that does\n * not open a row, top on every row after the first. RN is border-box, so\n * the bases still sum to exactly 100%, and the gap stays a token.\n * - `minColumnWidth`: cells start at that width and grow, and the row uses a\n * real `gap`, since here wrapping is width-driven and row membership is\n * not known from the index.\n *\n * Only this branch wraps children; on web grid children stay direct, so\n * existing DOM trees are untouched.\n */\nfunction NativeGrid({gap = 'md', columns, minColumnWidth, children}: GridProps) {\n const items = Children.toArray(children)\n if (minColumnWidth) {\n return (\n <html.div style={[styles.nativeRow, gapMap[gap]]}>\n {items.map((child, index) => (\n <html.div key={index} style={styles.nativeMinCell(minColumnWidth)}>\n {child}\n </html.div>\n ))}\n </html.div>\n )\n }\n const weights = columnWeights(columns) ?? [1]\n return (\n <html.div style={styles.nativeRow}>\n {items.map((child, index) => {\n const {opensRow, firstRow} = cellPosition(index, weights.length)\n return (\n <html.div\n key={index}\n style={[\n styles.nativeCell(cellBasis(weights, index)),\n !opensRow && cellGapLeftMap[gap],\n !firstRow && cellGapTopMap[gap],\n ]}\n >\n {child}\n </html.div>\n )\n })}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {layoutSpacing} from '@duro-app/tokens/tokens/layout-spacing.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n width: '100%',\n },\n container: {\n width: '100%',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n // Max-width presets\n maxSm: {maxWidth: 600},\n maxMd: {maxWidth: 800},\n maxLg: {maxWidth: 1200},\n // Horizontal padding\n padSm: {paddingLeft: layoutSpacing.containerSm, paddingRight: layoutSpacing.containerSm},\n padMd: {paddingLeft: layoutSpacing.containerMd, paddingRight: layoutSpacing.containerMd},\n padLg: {paddingLeft: layoutSpacing.containerLg, paddingRight: layoutSpacing.containerLg},\n // Vertical spacing\n headerPadding: {paddingTop: spacing.lg},\n mainPadding: {paddingTop: spacing.xl, paddingBottom: spacing.xl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type PageShellMaxWidth = 'sm' | 'md' | 'lg' | 'full'\nexport type PageShellPadding = 'sm' | 'md' | 'lg'\n\ninterface PageShellProps {\n /** Max-width preset: sm (600), md (800), lg (1200), full (none). Default: 'lg' */\n maxWidth?: PageShellMaxWidth\n /** Horizontal padding preset. Default: 'md' (24px) */\n padding?: PageShellPadding\n /** Header element rendered above the main content with same constraints */\n header?: ReactNode\n children: ReactNode\n}\n\nconst maxWidthMap = {\n sm: styles.maxSm,\n md: styles.maxMd,\n lg: styles.maxLg,\n full: null,\n} as const\n\nconst paddingMap = {\n sm: styles.padSm,\n md: styles.padMd,\n lg: styles.padLg,\n} as const\n\nexport function PageShell({maxWidth = 'lg', padding = 'md', header, children}: PageShellProps) {\n const mw = maxWidthMap[maxWidth]\n const pad = paddingMap[padding]\n\n return (\n <html.div style={styles.root}>\n {header != null && (\n <html.header style={[styles.container, styles.maxLg, pad, styles.headerPadding]}>\n {header}\n </html.header>\n )}\n <html.main style={[styles.container, mw, pad, styles.mainPadding]}>{children}</html.main>\n </html.div>\n )\n}\n","import {useRef, useState, useEffect} from 'react'\nimport {breakpointsPx, type Breakpoint} from '@duro-app/tokens/tokens/breakpoints.css'\n\nexport type ContainerSize = 'compact' | 'default' | 'spacious'\n\ninterface UseContainerQueryOptions {\n compactBelow?: Breakpoint | number\n spaciousAbove?: Breakpoint | number\n}\n\nfunction toPx(value: Breakpoint | number): number {\n return typeof value === 'number' ? value : breakpointsPx[value]\n}\n\nexport function useContainerQuery<T extends HTMLElement = HTMLElement>(\n options: UseContainerQueryOptions = {},\n): {\n ref: React.RefObject<T | null>\n size: ContainerSize\n} {\n const {compactBelow: compactOpt = 'xs', spaciousAbove: spaciousOpt = 'md'} = options\n const compactBelow = toPx(compactOpt)\n const spaciousAbove = toPx(spaciousOpt)\n const ref = useRef<T | null>(null)\n const [size, setSize] = useState<ContainerSize>('default')\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n let rafId: number | null = null\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId)\n\n rafId = requestAnimationFrame(() => {\n const entry = entries[0]\n if (!entry) return\n\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n\n if (width < compactBelow) {\n setSize('compact')\n } else if (width >= spaciousAbove) {\n setSize('spacious')\n } else {\n setSize('default')\n }\n })\n })\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n if (rafId !== null) cancelAnimationFrame(rafId)\n }\n }, [compactBelow, spaciousAbove])\n\n return {ref, size}\n}\n"],"names":["SPACING_PX","xs","sm","ms","md","lg","xl","xxl","xxxl","DURATION_MS","instant","fast","base","slow","ICON_SIZES","createActionBarStore","entries","listeners","Set","notify","forEach","l","subscribe","cb","add","delete","getSnapshot","push","id","render","update","map","e","remove","filter","ActionBarContext","createContext","ActionBarProvider","children","storeRef","useRef","current","store","useSyncExternalStore","topEntry","length","jsxs","useActionBarStack","$","_c","useContext","useId","t0","some","register","t1","unregister","t2","bb0","t3","entries_0","isTop","t4","managed","styles","overlay","$$css","overlayOffset","bottom","val","undefined","overlayEmphasized","selectedCount","selectedCountEmphasized","actions","closeButton","closeButtonEmphasized","separator","separatorEmphasized","ActionBarContent","selectedItemCount","selectedLabel","isEmphasized","onClearSelection","dismissible","bottomOffset","countStr","label","t5","t6","t7","t8","t9","jsx","_rsdMerge","_rsdDefaultStyles","span","t10","t11","div","t12","t13","button","t14","ActionBarInner","props","stack","isActive","renderBar","useEffect","ActionBar","strokeIcons","Fragment","clock","forbidden","shield","lock","key","layers","repeat","database","route","menu","server","box","image","tag","users","mail","plug","pin","sun","moon","monitor","contrast","filledIcons","Icon","name","size","filled","iconWrap","content","error","success","warning","info","defaultIcons","resolveIcon","icon","variant","Alert","resolvedIcon","isNative","sizeMd","sizeSm","default","nativeFlex","sizeMap","Badge","sizeDefault","sizeSmall","primary","secondary","link","inverseSecondary","danger","fullWidth","disabled","small","Button","type","onClick","ariaLabel","horizontal","vertical","alignStart","alignCenter","alignEnd","verticalAlignStart","verticalAlignCenter","verticalAlignEnd","gapXs","gapSm","gapMd","gapMap","horizontalAlignMap","start","center","end","verticalAlignMap","ButtonGroup","orientation","align","gap","isVertical","alignStyle","Callout","elevated","outlined","interactive","sizeCompact","sizeFull","header","compact","full","Card","root","rootDisabled","boxUnchecked","boxChecked","input","Checkbox","value","checked","controlledChecked","defaultChecked","onChange","isControlled","internalChecked","setInternalChecked","useState","isChecked","target","handleChange","next","opacity","t15","Symbol","for","t16","t17","t18","t19","useControllableValue","controlledValue","defaultValue","internal","setInternal","v","setValue","rootHorizontal","CheckboxGroupContext","useCheckboxGroup","ctx","Error","Root","onValueChange","itemValue","onToggle","Item","itemDisabled","groupValue","groupDisabled","includes","isDisabled","CheckboxGroup","FieldContext","useFieldContext","invalid","ColorInput","required","onBlur","ref","fieldCtx","field","effectiveName","effectiveValue","String","effectiveOnChange","effectiveOnBlur","effectiveRef","effectiveDisabled","controlId","descriptionId","errorId","trim","backdrop","backdropOpen","backdropClosing","viewport","popup","popupOpen","popupClosing","closeDurationInstant","closeDurationFast","closeDurationBase","closeDurationSlow","title","description","body","footer","inlineWrapper","reducedMotion","closeDurationMap","DialogContext","useDialog","open","controlledOpen","defaultOpen","onOpenChange","dismissable","closeAnimationDuration","internalOpen","setInternalOpen","closing","setClosing","closingTimerRef","popupRef","isOpen","titleId","clearTimeout","requestOpen","setTimeout","requestClose","onKeyDown","stopPropagation","document","addEventListener","removeEventListener","prev","style","overflow","closeDuration","Trigger","Portal","handleBackdropClick","Header","Title","h2","Description","p","Body","Footer","Close","Dialog","InputGroupContext","useInputGroupContext","inGroup","mono","Input","font","placeholder","readOnly","minLength","maxLength","min","max","step","inputMode","list","pattern","autoComplete","autoFocus","ariaDescribedby","groupCtx","effectiveVariant","describedBy","extraProps","FormContext","useFormContext","rootSide","labelSide","fieldContent","necessityIcon","necessityLabel","formCtx","ControlledRoot","StaticRoot","labelPosition","invalidProp","control","useRHFFormContext","fieldState","useController","effectiveLabelPosition","effectiveNecessityIndicator","necessityIndicator","message","errorMessage","FieldLayout","labelNode","rest","Children","child","isValidElement","Label","isSide","indicator","Field","ConfirmDialog","confirmPhrase","promptLabel","cancelLabel","confirmSlot","onConfirm","confirmLabel","typed","setTyped","satisfied","handleOpenChange","wrapper","wrapperOpenSm","wrapperCloseSm","wrapperOpenMd","wrapperCloseMd","contentSm","contentMd","slideIn","slideOut","bodyPadded","DetailPanelContext","useDetailPanel","present","setPresent","panelRef","previousFocusRef","labelId","setLabelId","activeElement","focus","el","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","startX","startY","currentX","currentY","startTime","swiping","panelSize","stateRef","isHorizontal","state","dx","getMovement","movement","panelEl","Number","dataset","progress","sign","transform","closest","previousElementSibling","Math","absMovement","abs","overscroll","shadowSpread","round","boxShadow","applyTransform","resetStyles","_temp","panelEl_1","dismissTransform","transition","backdrop_1","dismissed","done","once","animateDismiss","animateSnapBack","_temp2","handlePointerDown","rect","getBoundingClientRect","state_0","clientX","clientY","Date","now","width","height","setPointerCapture","pointerId","animation","handlePointerMove","e_0","state_1","dx_0","dy","sqrt","preventDefault","movement_0","handlePointerUp","_e","state_2","movement_1","elapsed","velocity","handlePointerCancel","state_3","handleTouchMove","e_1","passive","panelEl_2","backdrop_2","cleanup","panelEl_0","backdrop_0","DrawerContext","useDrawer","swipeDismiss","requestCloseImmediate","slideInMap","right","left","slideOutMap","viewportAnchorMap","swipeEnabled","t20","t21","t22","Drawer","action","EmptyState","typePresets","bodySm","bodyMd","bodyLg","caption","code","overline","headingSm","headingMd","headingLg","headingXl","displaySm","displayMd","displayLg","muted","accent","defaultVariantMap","alignMap","Heading","level","color","resolvedVariant","h1","h3","h4","h5","h6","item","itemSelected","text","empty","ListContext","selectionMode","useList","selected","ItemText","Actions","Empty","List","Text","formStyles","Form","schema","defaultValues","onSubmit","validationErrors","effectTsResolver","resolver","mode","reValidateMode","methods","useForm","prevErrorKeysRef","prevKeys","nextKeys","Object","keys","clearErrors","key_0","setError","formRef","errors","firstField","setFocus","onInvalid","handleSubmit","form","FormProvider","legend","gapMs","gapLg","gapXl","Legend","Fieldset","addon","addonStart","addonEnd","addonClickable","addonDisabled","dynamicStyles","minWidth","Addon","position","positionStyle","InputGroup","LinkButton","href","rel","a","bordered","Panel","circle","circleUnchecked","circleChecked","dot","RadioGroupContext","useRadioGroup","onSelect","handleClick","RadioGroup","scrollbar","scrollbarVertical","scrollbarHorizontal","scrollbarHidden","scrollbarVisible","thumb","viewportMaxHeight","maxHeight","thumbVertical","thumbHorizontal","ScrollAreaContext","useScrollArea","useScrollAreaRoot","viewportId","viewportRef","contentRef","scrollTop","setScrollTop","scrollLeft","setScrollLeft","scrollHeight","setScrollHeight","scrollWidth","setScrollWidth","clientHeight","setClientHeight","clientWidth","setClientWidth","scrolling","setScrolling","scrollTimerRef","vp","handleScroll","vp_0","observer","ResizeObserver","observe","disconnect","vp_1","Viewport","Scrollbar","maxScroll","scrollOffset","valueNow","Thumb","draggingRef","startPosRef","startScrollRef","thumbSizePercent","trackSize","thumbPixelSize","thumbOffset","thumbStyle","delta","scrollRatio","scrollDelta","ScrollArea","inputWrapper","inputWrapperFocused","trigger","itemHighlighted","itemHidden","hidden","popupPosition","top","ComboboxContext","useCombobox","useComboboxRoot","inputValue","controlledInputValue","onInputChange","initialLabels","initial","internalInputValue","setInternalInputValue","setInputValue","setOpen","labels","setLabels","highlightedId","setHighlightedId","listboxId","rootRef","inputRef","Map","itemsRef","orderRef","close","items","order","found","get","openPopup","selectValue","v_0","label_0","registerLabel","id_0","itemValue_0","element","set","ids","sort","b","elA","elB","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","i","registerItem","query","toLowerCase","id_1","item_0","getVisibleOrder","handleKeyDown","visibleOrder","bb137","prev_2","idx_0","indexOf","idx","prev_1","prev_0","item_1","scrollIntoView","block","lightTheme","xjvd03b","lightShadows","x13v825q","highContrastTheme","highContrastShadows","themeMap","light","portalMount","PortalMountContext","usePortalMount","ThemeProvider","theme","overrides","themeStyles","mount","setMount","localRef","focused","setFocused","Popup","coords","setCoords","window","useLayoutEffect","node","createPortal","selectedValue","isSelected","isHighlighted","isVisible","textContent","el_0","values","Combobox","SelectContext","useSelect","useSelectRoot","triggerRef","toggle","order_0","items_0","bb86","prev_3","Value","display","Select","group","groupTrigger","groupTriggerActive","chevron","chevronOpen","section","sectionLabel","itemActive","marker","markerActive","itemIcon","itemLabel","SideNavContext","useSideNav","activeValue","expandedGroups","setExpandedGroups","has","toggleGroup","group_0","next_0","expandGroup","nav","Group","groupKey","defaultExpanded","isExpanded","groupRef","triggerId","panelId","querySelector","hasActiveChild","Section","SideNav","spinner","srOnly","Spinner","region","toast","iconSuccess","iconError","iconInfo","closeBtn","DEFAULT_DURATION","createToastStore","seq","opts","duration","variantIcon","variantIconStyle","ToastContext","useToast","ToastItem","entry","timer","ToastProvider","useMemo","dismiss","StatusIcon","TagGroupContext","useTagGroup","wrap","removableMd","removableSm","removeButton","removeButtonDisabled","removableSizeMap","Tag","removable","removableProp","onRemove","onRemoveProp","disabledProp","isGrouped","editable","removeTag","setFocusedIndex","removeLabel","tagContent","role","container","containerError","containerDisabled","containerStatic","liveRegion","useTagGroupCtx","onValidate","gridId","setValues","focusedIndex","setEditable","announcement","setAnnouncement","isInvalid","trimmed","addTag","value_0","getElementById","querySelectorAll","validate","commitValueRef","raw","selectionStart","handlePaste","clipboardData","getData","split","s","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","cancelAnimationFrame","requestAnimationFrame","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/CheckboxGroup/CheckboxGroup.tsx","../src/components/Field/FieldContext.ts","../src/components/ColorInput/styles.css.ts","../src/components/ColorInput/ColorInput.tsx","../src/components/Dialog/styles.css.ts","../src/components/Dialog/Dialog.tsx","../src/components/InputGroup/InputGroupContext.ts","../src/components/Input/styles.css.ts","../src/components/Input/Input.tsx","../src/components/Form/FormContext.ts","../src/components/Field/styles.css.ts","../src/components/Field/Field.tsx","../src/components/ConfirmDialog/ConfirmDialog.tsx","../src/components/DragDrop/styles.css.ts","../src/components/DragDrop/DragDrop.tsx","../src/components/DetailPanel/styles.css.ts","../src/components/DetailPanel/DetailPanel.tsx","../src/components/Drawer/styles.css.ts","../src/components/Drawer/useSwipeDismiss.ts","../src/components/Drawer/Drawer.tsx","../src/components/EmptyState/styles.css.ts","../src/components/EmptyState/EmptyState.tsx","../../tokens/src/tokens/type-presets.css.ts","../src/components/Heading/styles.css.ts","../src/components/Heading/Heading.tsx","../src/components/List/styles.css.ts","../src/components/List/List.tsx","../src/components/Form/Form.tsx","../src/components/Fieldset/styles.css.ts","../src/components/Fieldset/Fieldset.tsx","../src/components/InputGroup/styles.css.ts","../src/components/InputGroup/InputGroup.tsx","../src/components/LinkButton/styles.css.ts","../src/components/LinkButton/LinkButton.tsx","../src/components/Panel/styles.css.ts","../src/components/Panel/Panel.tsx","../src/components/RadioGroup/styles.css.ts","../src/components/RadioGroup/RadioGroup.tsx","../src/components/ScrollArea/styles.css.ts","../src/components/ScrollArea/ScrollAreaContext.ts","../src/components/ScrollArea/useScrollAreaRoot.ts","../src/components/ScrollArea/ScrollArea.tsx","../src/components/Combobox/styles.css.ts","../src/components/Combobox/ComboboxContext.ts","../src/components/Combobox/useComboboxRoot.ts","../../tokens/src/themes/light.css.ts","../../tokens/src/themes/high-contrast.css.ts","../src/components/ThemeProvider/ThemeProvider.tsx","../src/components/Combobox/Combobox.tsx","../src/components/Select/styles.css.ts","../src/components/Select/SelectContext.ts","../src/components/Select/useSelectRoot.ts","../src/components/Select/Select.tsx","../src/components/SideNav/styles.css.ts","../src/components/SideNav/SideNavContext.ts","../src/components/SideNav/SideNav.tsx","../src/components/Spinner/styles.css.ts","../src/components/Spinner/Spinner.tsx","../src/components/Toast/styles.css.ts","../src/components/Toast/ToastProvider.tsx","../src/components/StatusIcon/styles.css.ts","../src/components/StatusIcon/StatusIcon.tsx","../src/components/TagGroup/TagGroupContext.ts","../src/components/Tag/styles.css.ts","../src/components/Tag/Tag.tsx","../src/components/TagGroup/styles.css.ts","../src/components/TagGroup/TagGroup.tsx","../src/components/Tabs/styles.css.ts","../src/components/Tabs/TabsContext.ts","../src/components/Tabs/useTabsRoot.ts","../src/components/Tabs/Tabs.tsx","../src/components/Textarea/styles.css.ts","../src/components/Textarea/Textarea.tsx","../src/components/ColorMode/styles.css.ts","../src/components/ColorMode/ColorMode.tsx","../src/components/Text/styles.css.ts","../src/components/Text/Text.tsx","../src/components/ToggleGroup/ToggleGroupContext.ts","../src/components/Toggle/styles.css.ts","../src/components/Toggle/Toggle.tsx","../src/components/ToggleGroup/styles.css.ts","../src/components/ToggleGroup/ToggleGroup.tsx","../src/components/Tooltip/styles.css.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Switch/styles.css.ts","../src/components/Switch/Switch.tsx","../src/components/Stack/styles.css.ts","../src/components/Stack/Stack.tsx","../src/components/Inline/styles.css.ts","../src/components/Inline/Inline.tsx","../src/components/Cluster/styles.css.ts","../src/components/Cluster/Cluster.tsx","../src/components/Grid/styles.css.ts","../src/components/Grid/columns.ts","../src/components/Grid/Grid.tsx","../src/components/PageShell/styles.css.ts","../src/components/PageShell/PageShell.tsx","../src/hooks/useContainerQuery.ts"],"sourcesContent":["// Token key unions and raw numeric values, as plain TypeScript.\n//\n// The css.ts files can't export these: StyleX requires inline object literals,\n// and `css.defineVars` returns an opaque VarGroup whose keyof includes phantom\n// members (`__opaqueId`, `__tokens`). So the scales are duplicated here as the\n// typed source of truth for component props, Storybook argTypes, and tooling —\n// with zero StyleX/react-strict-dom imports, so this module is safe to load in\n// Node (tests, scripts, the ESLint plugin's drift test).\n//\n// `scripts/check-token-drift.mjs` runs in `prebuild` and fails the build if any\n// value here diverges from the corresponding css.ts literal.\n\n// Explicit .js extensions: this module is also typechecked under NodeNext\n// resolution (the ESLint plugin's tests import it via the `types` condition),\n// which rejects extensionless relative imports. Both are type-only, so they\n// are erased at build time.\nimport type {RawColors} from './raw.js'\n\nexport const SPACING_KEYS = ['xs', 'sm', 'ms', 'md', 'lg', 'xl', 'xxl', 'xxxl'] as const\nexport type SpacingToken = (typeof SPACING_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `spacing` (px).\nexport const SPACING_PX = {\n xs: 4,\n sm: 8,\n ms: 12,\n md: 16,\n lg: 24,\n xl: 32,\n xxl: 48,\n xxxl: 64,\n} as const\n\nexport const RADIUS_KEYS = ['xs', 'sm', 'md', 'lg', 'full'] as const\nexport type RadiusToken = (typeof RADIUS_KEYS)[number]\n\n// Mirrors tokens/spacing.css.ts `radii` (px).\nexport const RADII_PX = {\n xs: 4,\n sm: 8,\n md: 12,\n lg: 16,\n full: 9999,\n} as const\n\nexport const SHADOW_KEYS = ['sm', 'md', 'lg'] as const\nexport type ShadowToken = (typeof SHADOW_KEYS)[number]\n\n// Mirrors tokens/motion.css.ts `duration`, as numbers for setTimeout use.\nexport const DURATION_MS = {\n instant: 0,\n fast: 150,\n base: 200,\n slow: 280,\n} as const\nexport type DurationToken = keyof typeof DURATION_MS\n\n// Icon rendering sizes (SVG width/height, px). Not a css.defineVars scale —\n// icons size via attributes, not CSS custom properties.\nexport const ICON_SIZES = {\n sm: 16,\n md: 18,\n lg: 24,\n xl: 36,\n xxl: 48,\n} as const\nexport type IconSize = keyof typeof ICON_SIZES\n\n// Mirrors tokens/breakpoints.css.ts `breakpoints` (css.defineConsts), as\n// numbers. The css.ts file also exports `breakpointsPx`, but importing it\n// pulls react-strict-dom; tooling that only needs the numbers reads here.\nexport const BREAKPOINT_KEYS = ['xs', 'sm', 'md', 'lg', 'xl'] as const\nexport const BREAKPOINTS_PX = {\n xs: 480,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font sizes, in rem.\nexport const FONT_SIZE_REM = {\n fontSizeXs: 0.75,\n fontSizeSm: 0.875,\n fontSizeMd: 1,\n fontSizeLg: 1.125,\n fontSizeXl: 1.25,\n fontSizeHeading: 1.5,\n} as const\n\n// Mirrors tokens/typography.css.ts `typography` font weights, as numbers.\nexport const FONT_WEIGHTS = {\n fontWeightNormal: 400,\n fontWeightMedium: 500,\n fontWeightSemibold: 600,\n fontWeightBold: 700,\n} as const\n\n// Mirrors tokens/typography.css.ts `typeScale` fontSize1..9, in rem.\nexport const TYPE_SCALE_FONT_SIZE_REM = {\n fontSize1: 0.75,\n fontSize2: 0.8125,\n fontSize3: 0.875,\n fontSize4: 1,\n fontSize5: 1.125,\n fontSize6: 1.25,\n fontSize7: 1.5,\n fontSize8: 1.875,\n fontSize9: 2.25,\n} as const\n\n// Mirrors tokens/shadows.css.ts `shadows` (the base, dark palette) verbatim.\nexport const SHADOWS = {\n sm: '0 2px 4px rgba(0, 0, 0, 0.3)',\n md: '0 4px 12px rgba(0, 0, 0, 0.4)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.5)',\n} as const\n\n// Mirrors tokens/motion.css.ts `easing` verbatim.\nexport const EASINGS = {\n standard: 'ease',\n easeOut: 'cubic-bezier(0.32, 0.72, 0, 1)',\n easeIn: 'cubic-bezier(0.72, 0, 0.68, 0.28)',\n} as const\n\nexport type ColorToken = keyof RawColors\n\nexport type {Breakpoint} from './tokens/breakpoints.css.js'\n","import {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\n\ninterface ActionBarEntry {\n id: string\n render: () => ReactNode\n}\n\ninterface ActionBarStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ActionBarEntry[]\n push: (id: string, render: () => ReactNode) => void\n update: (id: string, render: () => ReactNode) => void\n remove: (id: string) => void\n}\n\nfunction createActionBarStore(): ActionBarStore {\n let entries: ActionBarEntry[] = []\n const listeners = new Set<() => void>()\n\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n push: (id, render) => {\n entries = [...entries, {id, render}]\n notify()\n },\n update: (id, render) => {\n entries = entries.map((e) => (e.id === id ? {id, render} : e))\n notify()\n },\n remove: (id) => {\n entries = entries.filter((e) => e.id !== id)\n notify()\n },\n }\n}\n\nconst ActionBarContext = createContext<ActionBarStore | null>(null)\n\nexport function ActionBarProvider({children}: {children: ReactNode}) {\n const storeRef = useRef<ActionBarStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createActionBarStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const topEntry = entries.length > 0 ? entries[entries.length - 1] : null\n\n return (\n <ActionBarContext.Provider value={store}>\n {children}\n {topEntry?.render()}\n </ActionBarContext.Provider>\n )\n}\n\nexport function useActionBarStack() {\n const store = useContext(ActionBarContext)\n const id = useId()\n\n const register = useCallback(\n (render: () => ReactNode) => {\n if (!store) return\n const entries = store.getSnapshot()\n if (entries.some((e) => e.id === id)) {\n store.update(id, render)\n } else {\n store.push(id, render)\n }\n },\n [store, id],\n )\n\n const unregister = useCallback(() => {\n store?.remove(id)\n }, [store, id])\n\n const isTop = useMemo(() => {\n if (!store) return false\n const entries = store.getSnapshot()\n return entries.length > 0 && entries[entries.length - 1].id === id\n }, [store, id])\n\n return {id, register, unregister, managed: store !== null, isTop}\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n overlay: {\n position: 'fixed',\n bottom: spacing.lg,\n left: '50%',\n transform: 'translateX(-50%)',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.md,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.md,\n boxShadow: shadows.lg,\n zIndex: 50,\n maxWidth: 'calc(100vw - 48px)',\n },\n overlayOffset: (bottom: number) => ({\n bottom,\n }),\n overlayEmphasized: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n selectedCount: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n fontFamily: typography.fontFamily,\n color: colors.text,\n whiteSpace: 'nowrap',\n },\n selectedCountEmphasized: {\n color: colors.accentContrast,\n },\n actions: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: spacing.sm,\n },\n closeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 28,\n height: 28,\n padding: 0,\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderRadius: radii.sm,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 2,\n },\n },\n closeButtonEmphasized: {\n color: {\n default: colors.accentContrast,\n ':hover': colors.accentContrast,\n },\n opacity: {\n default: 0.7,\n ':hover': 1,\n },\n },\n separator: {\n width: 1,\n alignSelf: 'stretch',\n backgroundColor: colors.border,\n marginTop: spacing.xs,\n marginBottom: spacing.xs,\n },\n separatorEmphasized: {\n backgroundColor: colors.accentContrast,\n opacity: 0.3,\n },\n})\n","import {useEffect, useCallback, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {SPACING_PX, type SpacingToken} from '@duro-app/tokens/keys'\nimport {useActionBarStack} from './ActionBarProvider'\nimport {styles} from './styles.css'\n\nexport interface ActionBarProps {\n /** Number of selected items, or 'all'. Hidden when 0. */\n selectedItemCount: number | 'all'\n /** Label for the selection count. Receives the count string. */\n selectedLabel?: (count: string) => string\n /** Whether to use emphasized (accent) styling. */\n isEmphasized?: boolean\n /** Called when the clear/close button is pressed. */\n onClearSelection: () => void\n /** Whether the bar can be dismissed. When false, the close button is hidden. @default true */\n dismissible?: boolean\n /**\n * Distance between the bar and the bottom of the viewport, for hosts with\n * their own bottom chrome (zoom controls, players) the bar must clear.\n * A spacing token, or a raw px number when clearing chrome of arbitrary\n * height. Defaults to the spacing.lg token.\n */\n bottomOffset?: SpacingToken | number\n /** Action buttons to display. */\n children: ReactNode\n}\n\nfunction ActionBarContent({\n selectedItemCount,\n selectedLabel,\n isEmphasized = false,\n onClearSelection,\n dismissible = true,\n bottomOffset,\n children,\n}: ActionBarProps) {\n const countStr = selectedItemCount === 'all' ? 'All' : `${selectedItemCount}`\n const label = selectedLabel ? selectedLabel(countStr) : `${countStr} selected`\n\n return (\n <html.div\n role=\"toolbar\"\n aria-label={label}\n style={[\n styles.overlay,\n bottomOffset != null &&\n styles.overlayOffset(\n typeof bottomOffset === 'number' ? bottomOffset : SPACING_PX[bottomOffset],\n ),\n isEmphasized && styles.overlayEmphasized,\n ]}\n >\n <html.span style={[styles.selectedCount, isEmphasized && styles.selectedCountEmphasized]}>\n {label}\n </html.span>\n <html.div style={[styles.separator, isEmphasized && styles.separatorEmphasized]} />\n <html.div style={styles.actions}>{children}</html.div>\n {dismissible && (\n <html.button\n type=\"button\"\n aria-label=\"Clear selection\"\n onClick={onClearSelection}\n style={[styles.closeButton, isEmphasized && styles.closeButtonEmphasized]}\n >\n <svg width={10} height={10} viewBox=\"0 0 10 10\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M1 1l8 8M9 1l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )}\n </html.div>\n )\n}\n\nfunction ActionBarInner(props: ActionBarProps) {\n const {selectedItemCount} = props\n const stack = useActionBarStack()\n const isActive = selectedItemCount !== 0\n\n const renderBar = useCallback(() => <ActionBarContent {...props} />, [props])\n\n useEffect(() => {\n if (!stack.managed) return\n if (isActive) {\n stack.register(renderBar)\n } else {\n stack.unregister()\n }\n return () => stack.unregister()\n }, [stack, isActive, renderBar])\n\n // If no provider, fall back to standalone rendering\n if (!stack.managed) {\n if (!isActive) return null\n return <ActionBarContent {...props} />\n }\n\n // Managed by provider — rendering happens there\n return null\n}\n\nexport const ActionBar = ActionBarInner\n","import type {ReactNode} from 'react'\nimport {ICON_SIZES, type IconSize} from '@duro-app/tokens/keys'\n\nexport type {IconSize}\n\nexport type IconName =\n | 'x-circle'\n | 'check-circle'\n | 'check-done'\n | 'clock'\n | 'forbidden'\n | 'info-circle'\n | 'alert-triangle'\n | 'shield'\n | 'lock'\n | 'key'\n // Navigation / wayfinding glyphs\n | 'map'\n | 'layers'\n | 'repeat'\n | 'database'\n | 'shield-check'\n | 'route'\n | 'git-branch'\n | 'menu'\n | 'pin'\n // Infrastructure / inventory glyphs\n | 'server'\n | 'hard-drive'\n | 'box'\n | 'image'\n | 'tag'\n | 'pie-chart'\n // People / access / admin glyphs\n | 'users'\n | 'user-plus'\n | 'mail'\n | 'file-text'\n | 'plug'\n // Color-mode glyphs\n | 'sun'\n | 'moon'\n | 'monitor'\n | 'contrast'\n // Filled variants (solid shape with cutout symbol)\n | 'info-circle-filled'\n | 'alert-triangle-filled'\n | 'check-circle-filled'\n | 'x-circle-filled'\n | 'shield-filled'\n | 'lock-filled'\n\n/** Stroke-based icons (Feather/Lucide style) */\nconst strokeIcons: Partial<Record<IconName, ReactNode>> = {\n 'x-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </>\n ),\n 'check-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"16 10 11 15 8 12\" />\n </>\n ),\n 'check-done': (\n <>\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\n <polyline points=\"22 4 12 14.01 9 11.01\" />\n </>\n ),\n clock: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <polyline points=\"12 6 12 12 16 14\" />\n </>\n ),\n forbidden: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"4.93\" y1=\"4.93\" x2=\"19.07\" y2=\"19.07\" />\n </>\n ),\n 'info-circle': (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </>\n ),\n 'alert-triangle': (\n <>\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </>\n ),\n shield: <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />,\n lock: (\n <>\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n <path d=\"M7 11V7a5 5 0 0 1 10 0v4\" />\n </>\n ),\n key: (\n <>\n <path d=\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.78 7.78 5.5 5.5 0 0 1 7.78-7.78zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\" />\n </>\n ),\n // ---- navigation / wayfinding ----\n map: (\n <>\n <polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\" />\n <line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\" />\n <line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\" />\n </>\n ),\n layers: (\n <>\n <polygon points=\"12 2 2 7 12 12 22 7 12 2\" />\n <polyline points=\"2 17 12 22 22 17\" />\n <polyline points=\"2 12 12 17 22 12\" />\n </>\n ),\n // Two crossing arrows — exchange / interface flows.\n repeat: (\n <>\n <polyline points=\"17 1 21 5 17 9\" />\n <path d=\"M3 11V9a4 4 0 0 1 4-4h14\" />\n <polyline points=\"7 23 3 19 7 15\" />\n <path d=\"M21 13v2a4 4 0 0 1-4 4H3\" />\n </>\n ),\n database: (\n <>\n <ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\" />\n <path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\" />\n <path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\" />\n </>\n ),\n 'shield-check': (\n <>\n <path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\" />\n <polyline points=\"9 12 11 14 15 10\" />\n </>\n ),\n // Milestone path — roadmap / itinerary.\n route: (\n <>\n <circle cx=\"6\" cy=\"19\" r=\"3\" />\n <path d=\"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15\" />\n <circle cx=\"18\" cy=\"5\" r=\"3\" />\n </>\n ),\n 'git-branch': (\n <>\n <line x1=\"6\" y1=\"3\" x2=\"6\" y2=\"15\" />\n <circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"6\" cy=\"18\" r=\"3\" />\n <path d=\"M18 9a9 9 0 0 1-9 9\" />\n </>\n ),\n menu: (\n <>\n <line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" />\n </>\n ),\n // ---- infrastructure / inventory ----\n // Two stacked rack units — hosts, nodes, machines.\n server: (\n <>\n <rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\" ry=\"2\" />\n <line x1=\"6\" y1=\"6\" x2=\"6.01\" y2=\"6\" />\n <line x1=\"6\" y1=\"18\" x2=\"6.01\" y2=\"18\" />\n </>\n ),\n // Disk enclosure — volumes, persistent storage.\n 'hard-drive': (\n <>\n <line x1=\"22\" y1=\"12\" x2=\"2\" y2=\"12\" />\n <path d=\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\" />\n <line x1=\"6\" y1=\"16\" x2=\"6.01\" y2=\"16\" />\n <line x1=\"10\" y1=\"16\" x2=\"10.01\" y2=\"16\" />\n </>\n ),\n // Isometric crate — a deployable unit of work.\n box: (\n <>\n <path d=\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\" />\n <polyline points=\"3.27 6.96 12 12.01 20.73 6.96\" />\n <line x1=\"12\" y1=\"22.08\" x2=\"12\" y2=\"12\" />\n </>\n ),\n // Picture frame — container images, artefacts.\n image: (\n <>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" />\n <polyline points=\"21 15 16 10 5 21\" />\n </>\n ),\n // Luggage tag — labels, annotations, metadata.\n tag: (\n <>\n <path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\" />\n <line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\" />\n </>\n ),\n // Share of a whole — quotas, budgets, utilisation.\n 'pie-chart': (\n <>\n <path d=\"M21.21 15.89A10 10 0 1 1 8 2.83\" />\n <path d=\"M22 12A10 10 0 0 0 12 2v10z\" />\n </>\n ),\n // ---- people / access / admin ----\n users: (\n <>\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </>\n ),\n 'user-plus': (\n <>\n <path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"8.5\" cy=\"7\" r=\"4\" />\n <line x1=\"20\" y1=\"8\" x2=\"20\" y2=\"14\" />\n <line x1=\"23\" y1=\"11\" x2=\"17\" y2=\"11\" />\n </>\n ),\n mail: (\n <>\n <path d=\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\" />\n <polyline points=\"22,6 12,13 2,6\" />\n </>\n ),\n 'file-text': (\n <>\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </>\n ),\n plug: (\n <>\n <path d=\"M12 22v-5\" />\n <path d=\"M9 8V2\" />\n <path d=\"M15 8V2\" />\n <path d=\"M18 8v5a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V8Z\" />\n </>\n ),\n pin: (\n <>\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"22\" />\n <path d=\"M9 10.76V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v6.76a2 2 0 0 0 .55 1.38l1.68 1.78A1 1 0 0 1 16.5 16h-9a1 1 0 0 1-.73-1.68l1.68-1.78A2 2 0 0 0 9 10.76z\" />\n </>\n ),\n // ---- color mode ----\n sun: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"5\" />\n <line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"3\" />\n <line x1=\"12\" y1=\"21\" x2=\"12\" y2=\"23\" />\n <line x1=\"4.22\" y1=\"4.22\" x2=\"5.64\" y2=\"5.64\" />\n <line x1=\"18.36\" y1=\"18.36\" x2=\"19.78\" y2=\"19.78\" />\n <line x1=\"1\" y1=\"12\" x2=\"3\" y2=\"12\" />\n <line x1=\"21\" y1=\"12\" x2=\"23\" y2=\"12\" />\n <line x1=\"4.22\" y1=\"19.78\" x2=\"5.64\" y2=\"18.36\" />\n <line x1=\"18.36\" y1=\"5.64\" x2=\"19.78\" y2=\"4.22\" />\n </>\n ),\n moon: <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />,\n monitor: (\n <>\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </>\n ),\n // Circle, half solid — high-contrast / mode indicator.\n contrast: (\n <>\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 2a10 10 0 0 1 0 20z\" fill=\"currentColor\" stroke=\"none\" />\n </>\n ),\n}\n\n/**\n * Filled icons — solid shape with evenodd cutout for the inner symbol.\n * The cutout reveals the background color, so they work on any theme.\n * Uses fill=\"currentColor\" only, no stroke.\n */\nconst filledIcons: Partial<Record<IconName, ReactNode>> = {\n // Filled circle with \"i\" cutout (dot + line)\n 'info-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm-.75 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0zM11 11a1 1 0 1 1 2 0v5a1 1 0 1 1-2 0v-5z\"\n />\n ),\n // Filled triangle with \"!\" cutout\n 'alert-triangle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0zM11 10a1 1 0 1 1 2 0v3a1 1 0 1 1-2 0v-3zm.25 6a.75.75 0 1 1 1.5 0 .75.75 0 0 1-1.5 0z\"\n />\n ),\n // Filled circle with checkmark cutout\n 'check-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zm4.707 8.707a1 1 0 0 0-1.414-1.414L11 13.586l-2.293-2.293a1 1 0 0 0-1.414 1.414l3 3a1 1 0 0 0 1.414 0l5-5z\"\n />\n ),\n // Filled circle with X cutout\n 'x-circle-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2zM9.707 8.293a1 1 0 0 0-1.414 1.414L10.586 12l-2.293 2.293a1 1 0 1 0 1.414 1.414L12 13.414l2.293 2.293a1 1 0 0 0 1.414-1.414L13.414 12l2.293-2.293a1 1 0 0 0-1.414-1.414L12 10.586 9.707 8.293z\"\n />\n ),\n // Filled shield with checkmark cutout\n 'shield-filled': (\n <path\n fillRule=\"evenodd\"\n d=\"M12 1L3 5v7c0 6.5 8.5 10.5 9 10.73.5-.23 9-4.23 9-10.73V5l-9-4zm3.707 8.707a1 1 0 0 0-1.414-1.414L11 11.586l-1.293-1.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4z\"\n />\n ),\n // Filled lock body with stroke shackle\n 'lock-filled': (\n <>\n <path\n d=\"M7 11V7a5 5 0 0 1 10 0v4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n </>\n ),\n}\n\ninterface IconProps {\n name: IconName\n /** Token from the icon size scale: sm 16, md 18, lg 24, xl 36, xxl 48. */\n size?: IconSize\n}\n\nexport function Icon({name, size: sizeToken = 'lg'}: IconProps) {\n const size = ICON_SIZES[sizeToken]\n const filled = filledIcons[name]\n if (filled) {\n return (\n <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" width={size} height={size}>\n {filled}\n </svg>\n )\n }\n\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={size}\n height={size}\n >\n {strokeIcons[name]}\n </svg>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 1,\n },\n content: {\n flex: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type AlertVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<AlertVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface AlertProps {\n variant?: AlertVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n children: ReactNode\n}\n\nfunction resolveIcon(icon: AlertProps['icon'], variant: AlertVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"md\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"md\" />\n return icon\n}\n\nexport function Alert({variant = 'info', icon, children}: AlertProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div role=\"alert\" style={[styles.base, styles[variant]]}>\n {resolvedIcon ? (\n <>\n <html.div style={styles.iconWrap}>{resolvedIcon}</html.div>\n <html.div style={styles.content}>{children}</html.div>\n </>\n ) : (\n children\n )}\n </html.div>\n )\n}\n","/**\n * Platform flag resolved by the bundler's platform extensions: web bundlers\n * (Vite/Rollup) read THIS file (`isNative = false`); Metro reads\n * `platform.native.ts` (`isNative = true`) on React Native / Expo.\n *\n * It lets shared components layer a native-only style override without\n * importing `react-native` on web (the DS web build has no react-native).\n * Typed `boolean` (not the `false` literal) so `isNative && styles.x` stays a\n * `false | Style` union in style arrays rather than narrowing to `false`.\n */\nexport const isNative: boolean = false\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n lineHeight: 1,\n borderRadius: radii.full,\n whiteSpace: 'nowrap',\n },\n sizeMd: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n sizeSm: {\n paddingTop: 2,\n paddingBottom: 2,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n fontSize: '0.625rem',\n },\n default: {\n backgroundColor: colors.bgCardHover,\n color: colors.textMuted,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type BadgeVariant = 'default' | 'success' | 'warning' | 'error' | 'info'\nexport type BadgeSize = 'sm' | 'md'\n\ninterface BadgeProps {\n variant?: BadgeVariant\n size?: BadgeSize\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nexport function Badge({variant = 'default', size = 'md', children}: BadgeProps) {\n return (\n <html.span style={[styles.base, isNative && styles.nativeFlex, sizeMap[size], styles[variant]]}>\n {children}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color, opacity, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n // Tactile press feedback. The scale is suppressed under reduced motion (and\n // duration.fast collapses to 0ms there too), so it's inert for those users.\n transform: {\n default: 'scale(1)',\n ':active': {\n default: 'scale(0.97)',\n '@media (prefers-reduced-motion: reduce)': 'scale(1)',\n },\n },\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 2,\n },\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n ':active': colors.accentHover,\n },\n borderColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: colors.border,\n color: colors.textMuted,\n },\n link: {\n backgroundColor: 'transparent',\n borderColor: 'transparent',\n color: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n textDecoration: {\n default: 'none',\n ':hover': 'underline',\n },\n paddingLeft: 0,\n paddingRight: 0,\n },\n inverseSecondary: {\n backgroundColor: {\n default: 'rgba(0, 0, 0, 0.10)',\n ':hover': 'rgba(0, 0, 0, 0.18)',\n },\n borderColor: {\n default: 'rgba(0, 0, 0, 0.55)',\n ':hover': 'rgba(0, 0, 0, 0.70)',\n },\n color: colors.accentContrast,\n },\n danger: {\n backgroundColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n ':active': colors.errorHover,\n },\n borderColor: {\n default: colors.error,\n ':hover': colors.errorHover,\n },\n color: colors.errorContrast,\n },\n fullWidth: {\n width: '100%',\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'inverseSecondary' | 'link' | 'danger'\nexport type ButtonSize = 'default' | 'small'\n\ninterface ButtonProps {\n variant?: ButtonVariant\n size?: ButtonSize\n fullWidth?: boolean\n disabled?: boolean\n type?: 'button' | 'submit'\n onClick?: () => void\n /** Accessible name override — e.g. for buttons whose visible text isn't unique. */\n 'aria-label'?: string\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Button({\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n disabled = false,\n type = 'button',\n onClick,\n 'aria-label': ariaLabel,\n children,\n}: ButtonProps) {\n return (\n <html.button\n type={type}\n disabled={disabled}\n onClick={onClick}\n aria-label={ariaLabel}\n style={[\n styles.base,\n isNative && styles.nativeFlex,\n sizeMap[size],\n styles[variant],\n fullWidth && styles.fullWidth,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n },\n horizontal: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n vertical: {\n flexDirection: 'column',\n },\n alignStart: {justifyContent: 'flex-start'},\n alignCenter: {justifyContent: 'center'},\n alignEnd: {justifyContent: 'flex-end'},\n verticalAlignStart: {alignItems: 'flex-start'},\n verticalAlignCenter: {alignItems: 'center'},\n verticalAlignEnd: {alignItems: 'flex-end'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMd: {gap: spacing.md},\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type ButtonGroupGap = Extract<SpacingToken, 'xs' | 'sm' | 'md'>\n\nexport interface ButtonGroupProps {\n children: ReactNode\n /** Layout direction. Default: 'horizontal' */\n orientation?: 'horizontal' | 'vertical'\n /** Alignment within container. Default: 'start' */\n align?: 'start' | 'end' | 'center'\n /** Disable all buttons in group */\n disabled?: boolean\n /** Gap between buttons. Default: 'sm' */\n gap?: ButtonGroupGap\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n md: styles.gapMd,\n} as const satisfies Record<ButtonGroupGap, unknown>\n\nconst horizontalAlignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst verticalAlignMap = {\n start: styles.verticalAlignStart,\n center: styles.verticalAlignCenter,\n end: styles.verticalAlignEnd,\n} as const\n\nexport function ButtonGroup({\n children,\n orientation = 'horizontal',\n align = 'start',\n disabled = false,\n gap = 'sm',\n}: ButtonGroupProps) {\n const isVertical = orientation === 'vertical'\n const alignStyle = isVertical ? verticalAlignMap[align] : horizontalAlignMap[align]\n\n return (\n <html.div\n role=\"group\"\n style={[\n styles.base,\n isVertical ? styles.vertical : styles.horizontal,\n gapMap[gap],\n alignStyle,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n },\n // Vertically centres the icon with the message — the right default for the\n // short, single/two-line messages callouts usually carry.\n alignCenter: {\n alignItems: 'center',\n },\n // Aligns the icon to the first line — for long, multi-paragraph messages.\n alignStart: {\n alignItems: 'flex-start',\n },\n icon: {\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n content: {\n flexGrow: 1,\n minWidth: 0,\n },\n error: {\n backgroundColor: colors.errorBg,\n borderColor: colors.errorBorder,\n color: colors.errorText,\n },\n success: {\n backgroundColor: colors.successBg,\n borderColor: colors.successBorder,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n borderColor: colors.warningBorder,\n color: colors.warningText,\n },\n info: {\n backgroundColor: colors.infoBg,\n borderColor: colors.infoBorder,\n color: colors.infoText,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type CalloutVariant = 'error' | 'success' | 'warning' | 'info'\n\nconst defaultIcons: Record<CalloutVariant, IconName> = {\n info: 'info-circle-filled',\n warning: 'alert-triangle-filled',\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n}\n\ninterface CalloutProps {\n variant?: CalloutVariant\n /** Built-in icon name, custom ReactNode, or false to hide. Defaults to variant icon. */\n icon?: IconName | ReactNode | false\n /**\n * Vertical alignment of the icon against the message. `center` (default)\n * suits short single/two-line messages; `start` aligns the icon to the first\n * line for long multi-paragraph content.\n */\n align?: 'center' | 'start'\n children: ReactNode\n}\n\nfunction resolveIcon(icon: CalloutProps['icon'], variant: CalloutVariant): ReactNode | null {\n if (icon === false) return null\n if (icon === undefined) return <Icon name={defaultIcons[variant]} size=\"xl\" />\n if (typeof icon === 'string') return <Icon name={icon as IconName} size=\"xl\" />\n return icon\n}\n\nexport function Callout({variant = 'info', icon, align = 'center', children}: CalloutProps) {\n const resolvedIcon = resolveIcon(icon, variant)\n\n return (\n <html.div\n role=\"note\"\n style={[\n styles.base,\n styles[variant],\n align === 'center' ? styles.alignCenter : styles.alignStart,\n ]}\n >\n {resolvedIcon && <html.span style={styles.icon}>{resolvedIcon}</html.span>}\n <html.div style={styles.content}>{children}</html.div>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n },\n // Variants\n elevated: {\n borderRadius: radii.lg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n },\n outlined: {\n borderRadius: radii.md,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n filled: {\n borderRadius: radii.md,\n },\n interactive: {\n borderRadius: radii.md,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n backgroundColor: {\n default: colors.bgCard,\n ':hover': colors.bgCardHover,\n },\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n // Lift on hover; suppressed under reduced motion so there's no positional\n // shift (the token duration also collapses to 0ms there).\n transform: {\n default: 'translateY(0)',\n ':hover': {\n default: 'translateY(-2px)',\n '@media (prefers-reduced-motion: reduce)': 'translateY(0)',\n },\n },\n },\n // Sizes (padding)\n sizeDefault: {\n padding: spacing.lg,\n },\n sizeCompact: {\n padding: spacing.md,\n },\n sizeFull: {\n padding: spacing.xl,\n },\n // Header\n header: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n marginBottom: spacing.md,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type CardVariant = 'elevated' | 'outlined' | 'filled' | 'interactive'\nexport type CardSize = 'default' | 'compact' | 'full'\n\ninterface CardProps {\n variant?: CardVariant\n size?: CardSize\n header?: string\n onClick?: () => void\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n compact: styles.sizeCompact,\n full: styles.sizeFull,\n} as const\n\nexport function Card({\n variant = 'outlined',\n size = 'default',\n header,\n onClick,\n children,\n}: CardProps) {\n return (\n <html.div onClick={onClick} style={[styles.base, styles[variant], sizeMap[size]]}>\n {header && <html.div style={styles.header}>{header}</html.div>}\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n box: {\n width: 18,\n height: 18,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.xs,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n boxUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n boxChecked: {\n backgroundColor: colors.accent,\n borderColor: colors.accent,\n },\n // Native-only checkmark: a small box showing just its right + bottom border,\n // rotated 45° into a tick. Pure CSS (RSD translates the transform string to\n // an RN transform), so no SVG / react-native-svg weight reaches web.\n checkmark: {\n width: 5,\n height: 9,\n borderRightWidth: 2,\n borderRightStyle: 'solid',\n borderRightColor: colors.accentContrast,\n borderBottomWidth: 2,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.accentContrast,\n transform: 'rotate(45deg)',\n marginTop: -2,\n },\n checkmarkVisible: {\n opacity: 1,\n },\n checkmarkHidden: {\n opacity: 0,\n },\n // Native label text — RN <Text> doesn't inherit color/size from the button\n // ancestor the way web inherits from <label>, so set it explicitly.\n labelText: {\n fontSize: typography.fontSizeSm,\n color: colors.text,\n },\n // Strip the default button chrome RSD gives <button> on native (border/bg/\n // padding mimic the browser default) so the row matches the web checkbox.\n nativeButton: {\n borderWidth: 0,\n backgroundColor: 'transparent',\n padding: 0,\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` (on both .root and .box); web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {type ReactNode, useState, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {styles} from './styles.css'\n\ninterface CheckboxProps {\n name?: string\n value?: string\n checked?: boolean\n defaultChecked?: boolean\n disabled?: boolean\n /** Accessible label when no visible label (children) is provided. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n children?: ReactNode\n}\n\nexport function Checkbox({\n name,\n value,\n checked: controlledChecked,\n defaultChecked = false,\n disabled = false,\n 'aria-label': ariaLabel,\n onChange,\n children,\n}: CheckboxProps) {\n const isControlled = controlledChecked !== undefined\n const [internalChecked, setInternalChecked] = useState(defaultChecked)\n const isChecked = isControlled ? controlledChecked : internalChecked\n\n // Web: the real <input type=checkbox> drives toggling, a11y and form submit.\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isControlled) {\n setInternalChecked(e.target.checked)\n }\n onChange?.(e)\n },\n [isControlled, onChange],\n )\n\n // Native: RSD only makes <button> pressable and has no <input type=checkbox>,\n // so the whole row is a button and we synthesize the change payload that\n // consumers read (e.target.checked).\n const handlePress = useCallback(() => {\n if (disabled) return\n const next = !isChecked\n if (!isControlled) {\n setInternalChecked(next)\n }\n onChange?.({\n target: {checked: next, name, value},\n } as unknown as React.ChangeEvent<HTMLInputElement>)\n }, [disabled, isChecked, isControlled, onChange, name, value])\n\n if (isNative) {\n return (\n <html.button\n type=\"button\"\n onClick={handlePress}\n disabled={disabled}\n role=\"checkbox\"\n aria-checked={isChecked}\n aria-label={!children ? ariaLabel : undefined}\n style={[\n styles.root,\n styles.nativeFlex,\n styles.nativeButton,\n disabled && styles.rootDisabled,\n ]}\n >\n <html.div\n style={[\n styles.box,\n styles.nativeFlex,\n isChecked ? styles.boxChecked : styles.boxUnchecked,\n ]}\n >\n {/* CSS-border checkmark (rotated right+bottom borders) — no SVG, no\n react-native-svg dep, so nothing is added to the web bundle. */}\n <html.div\n style={[styles.checkmark, isChecked ? styles.checkmarkVisible : styles.checkmarkHidden]}\n />\n </html.div>\n {children && <html.span style={styles.labelText}>{children}</html.span>}\n </html.button>\n )\n }\n\n return (\n <html.label style={[styles.root, disabled && styles.rootDisabled]}>\n <html.input\n type=\"checkbox\"\n name={name}\n value={value}\n checked={isControlled ? controlledChecked : undefined}\n defaultChecked={!isControlled ? defaultChecked : undefined}\n disabled={disabled}\n aria-label={!children ? ariaLabel : undefined}\n onChange={handleChange}\n style={styles.input}\n />\n <html.span\n style={[styles.box, isChecked ? styles.boxChecked : styles.boxUnchecked]}\n aria-hidden\n >\n <svg\n width={12}\n height={12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n style={{opacity: isChecked ? 1 : 0}}\n >\n <polyline\n points=\"2.5 6 5 8.5 9.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import {useState, useCallback} from 'react'\n\nexport function useControllableValue<T>(\n controlledValue: T | undefined,\n defaultValue: T,\n onChange?: (value: T) => void,\n) {\n const [internal, setInternal] = useState(defaultValue)\n const value = controlledValue !== undefined ? controlledValue : internal\n const setValue = useCallback(\n (v: T) => {\n if (controlledValue === undefined) setInternal(v)\n onChange?.(v)\n },\n [controlledValue, onChange],\n )\n return [value, setValue] as const\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n})\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {Checkbox} from '../Checkbox/Checkbox'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ninterface CheckboxGroupContextValue {\n value: string[]\n onToggle: (itemValue: string, checked: boolean) => void\n disabled: boolean\n}\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(null)\n\nfunction useCheckboxGroup() {\n const ctx = useContext(CheckboxGroupContext)\n if (!ctx) {\n throw new Error('CheckboxGroup.Item must be used within CheckboxGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (value: string[]) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n}: RootProps) {\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onToggle = useCallback(\n (itemValue: string, checked: boolean) => {\n if (disabled) return\n const next = checked ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n setValue(next)\n },\n [disabled, value, setValue],\n )\n\n return (\n <CheckboxGroupContext.Provider value={{value, onToggle, disabled}}>\n <html.div\n role=\"group\"\n aria-orientation={orientation}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </CheckboxGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onToggle, disabled: groupDisabled} = useCheckboxGroup()\n const isChecked = groupValue.includes(value)\n const isDisabled = groupDisabled || itemDisabled\n\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onToggle(value, e.target.checked)\n },\n [value, onToggle],\n )\n\n return (\n <Checkbox value={value} checked={isChecked} disabled={isDisabled} onChange={handleChange}>\n {children}\n </Checkbox>\n )\n}\n\nexport const CheckboxGroup = {\n Root,\n Item,\n}\n","import {createContext, useContext} from 'react'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\n\ninterface FieldContextValue {\n controlId: string\n descriptionId: string\n errorId: string\n invalid: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n field?: {\n value: unknown\n onChange: (...event: unknown[]) => void\n onBlur: () => void\n ref: React.RefCallback<unknown>\n name: string\n }\n errorMessage?: string\n}\n\nexport type {FieldContextValue}\n\nexport const FieldContext = createContext<FieldContextValue | null>(null)\n\nexport function useFieldContext() {\n return useContext(FieldContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n width: 44,\n height: 34,\n padding: 2,\n backgroundColor: colors.bg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: 1,\n },\n invalid: {\n borderColor: colors.error,\n },\n disabled: {\n cursor: 'not-allowed',\n opacity: 0.5,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ninterface ColorInputProps {\n /** Hex color, controlled (e.g. \"#cfc8ba\"). */\n value?: string\n defaultValue?: string\n name?: string\n /** Explicit id — overrides the Field-context controlId when set. */\n id?: string\n disabled?: boolean\n required?: boolean\n /** Accessible name when there is no associated <Field.Label>. */\n 'aria-label'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLInputElement>\n}\n\n/**\n * A styled native `<input type=\"color\">` swatch. Mirrors <Input>'s native\n * surface (value/defaultValue/name/onChange/ref/disabled/required) and adopts\n * the parent <Field.Root> context (controlId for label association, value/\n * onChange when bound to a Form, invalid border, disabled) — so it drops into a\n * <Field> exactly like <Input>. The text <Input> can't render type=color, hence\n * a dedicated leaf.\n */\nexport function ColorInput({\n value,\n defaultValue,\n name,\n id,\n disabled,\n required,\n 'aria-label': ariaLabel,\n onChange,\n onBlur,\n ref,\n}: ColorInputProps) {\n const ctx = useFieldContext()\n const fieldCtx = ctx?.field\n\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n\n return (\n <html.input\n type=\"color\"\n id={id ?? ctx?.controlId}\n name={effectiveName}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n required={required}\n aria-label={ariaLabel}\n aria-invalid={ctx?.invalid || undefined}\n aria-describedby={\n ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() || undefined\n : undefined\n }\n onChange={effectiveOnChange as React.ComponentProps<typeof html.input>['onChange']}\n onBlur={effectiveOnBlur as React.ComponentProps<typeof html.input>['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[styles.base, ctx?.invalid && styles.invalid, effectiveDisabled && styles.disabled]}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\n },\n backdropOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (centering container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 1001,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.lg,\n // Allow clicking backdrop through viewport when clicking outside popup\n pointerEvents: 'none',\n },\n\n // --- Popup ---\n popup: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n borderRadius: radii.lg,\n boxShadow: shadows.lg,\n width: '100%',\n maxHeight: '85vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n popupOpen: {\n opacity: 1,\n animationName: css.keyframes({\n from: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n to: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n popupClosing: {\n opacity: 0,\n animationName: css.keyframes({\n from: {\n opacity: 1,\n transform: 'scale(1) translateY(0)',\n },\n to: {\n opacity: 0,\n transform: 'scale(0.97) translateY(8px)',\n },\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Sizes ---\n sm: {maxWidth: 400},\n md: {maxWidth: 520},\n lg: {maxWidth: 680},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper (for Trigger / Close children) ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n\n // --- Reduced motion ---\n reducedMotion: {\n animationDuration: '1ms',\n },\n})\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nexport type DialogSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DialogContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n dismissable: boolean\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n descriptionId: string\n popupRef: RefObject<HTMLDivElement | null>\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null)\n\nfunction useDialog() {\n const ctx = useContext(DialogContext)\n if (!ctx) throw new Error('Dialog compound components must be used within Dialog.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when dialog open state changes */\n onOpenChange?: (open: boolean) => void\n /** Whether clicking backdrop closes the dialog. Default: true */\n dismissable?: boolean\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n dismissable = true,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const popupRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n // If controlled open goes false externally, trigger close animation\n useEffect(() => {\n if (isControlled && !controlledOpen && !closing) {\n // Already closed, nothing to animate\n }\n }, [isControlled, controlledOpen, closing])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!dismissable) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, dismissable, requestClose])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DialogContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n dismissable,\n requestOpen,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n }}\n >\n {children}\n </DialogContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {requestOpen} = useDialog()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal (renders backdrop + viewport + popup) ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DialogSize\n}\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n dismissable,\n requestClose,\n titleId,\n descriptionId,\n popupRef,\n } = useDialog()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n if (!open) return null\n\n return (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport (centering container, pointer-events: none) */}\n <html.div style={styles.viewport}>\n <html.div\n ref={popupRef}\n role=\"dialog\"\n aria-modal={true}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.popup,\n styles[size],\n closing && styles.popupClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.popupOpen,\n ]}\n >\n {children}\n </html.div>\n </html.div>\n </>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDialog()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDialog()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDialog()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Dialog = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {createContext, useContext} from 'react'\n\ninterface InputGroupContextValue {\n inGroup: boolean\n}\n\nexport const InputGroupContext = createContext<InputGroupContextValue | null>(null)\n\nexport function useInputGroupContext() {\n return useContext(InputGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 1,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n inGroup: {\n borderWidth: 0,\n borderRadius: 0,\n outlineWidth: 0,\n },\n // orthogonal to variant (default/error) — composes on top so a mono field\n // still shows its error border. For slugs, identifiers, hashes.\n mono: {\n fontFamily: typography.fontFamilyMono,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {useInputGroupContext} from '../InputGroup/InputGroupContext'\nimport {styles} from './styles.css'\n\ntype StrictInputProps = React.ComponentProps<typeof html.input>\nexport type InputType = NonNullable<StrictInputProps['type']>\n\nexport type InputVariant = 'default' | 'error'\n\ninterface InputProps {\n variant?: InputVariant\n /** Orthogonal to variant — `mono` keeps the error border but uses the\n * monospace family (slugs, identifiers, hashes). */\n font?: 'mono'\n type?: InputType\n /** Explicit id — overrides the Field-context controlId when set (e.g. a\n * control used outside a Field that still needs a stable id). */\n id?: string\n name?: string\n placeholder?: string\n required?: boolean\n readOnly?: boolean\n minLength?: number\n maxLength?: number\n /** Numeric/range hints — forwarded to the native input (date/number/etc). */\n min?: string | number\n max?: string | number\n step?: string | number\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url'\n /** id of a <datalist> for native typeahead. */\n list?: string\n pattern?: string\n autoComplete?:\n | 'on'\n | 'off'\n | 'email'\n | 'username'\n | 'current-password'\n | 'new-password'\n | 'name'\n | 'tel'\n | 'url'\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n /** Accessible name when there's no associated <Field.Label>. */\n 'aria-label'?: string\n /** Extra describedby ids (merged with the Field context's, if any). */\n 'aria-describedby'?: string\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLInputElement>\n}\n\nexport function Input({\n variant = 'default',\n font,\n type = 'text',\n id,\n name,\n placeholder,\n required,\n readOnly,\n minLength,\n maxLength,\n min,\n max,\n step,\n inputMode,\n list,\n pattern,\n autoComplete,\n value,\n defaultValue,\n disabled,\n autoFocus,\n 'aria-label': ariaLabel,\n 'aria-describedby': ariaDescribedby,\n onChange,\n onBlur,\n ref,\n}: InputProps) {\n const ctx = useFieldContext()\n const groupCtx = useInputGroupContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const effectiveVariant = ctx?.invalid ? 'error' : variant\n // Field context owns describedby (description + error); fall back to the\n // explicit prop only when standalone.\n const describedBy = ctx\n ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim()\n : ariaDescribedby\n\n // react-strict-dom omits some web-only props from its types, but the\n // underlying DOM element supports them. Type-assert to pass them through.\n const extraProps: Record<string, unknown> = {}\n if (pattern !== undefined) extraProps.pattern = pattern\n if (autoFocus) extraProps.autoFocus = true\n if (readOnly) extraProps.readOnly = true\n if (maxLength !== undefined) extraProps.maxLength = maxLength\n if (min !== undefined) extraProps.min = min\n if (max !== undefined) extraProps.max = max\n if (step !== undefined) extraProps.step = step\n if (inputMode !== undefined) extraProps.inputMode = inputMode\n if (list !== undefined) extraProps.list = list\n if (ariaLabel !== undefined) extraProps['aria-label'] = ariaLabel\n\n return (\n <html.input\n id={id ?? ctx?.controlId}\n type={type}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n minLength={minLength}\n autoComplete={autoComplete}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={describedBy || undefined}\n aria-invalid={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictInputProps['onChange']}\n onBlur={effectiveOnBlur as StrictInputProps['onBlur']}\n ref={effectiveRef as React.Ref<HTMLInputElement>}\n style={[\n styles.base,\n styles[effectiveVariant],\n font === 'mono' && styles.mono,\n groupCtx?.inGroup && styles.inGroup,\n ]}\n {...extraProps}\n />\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport type LabelPosition = 'top' | 'side'\nexport type NecessityIndicator = 'icon' | 'label' | false\n\nexport interface FormContextValue {\n disabled: boolean\n labelPosition: LabelPosition\n necessityIndicator: NecessityIndicator\n}\n\nexport const FormContext = createContext<FormContextValue | null>(null)\n\nexport function useFormContext() {\n return useContext(FormContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n },\n rootSide: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.md,\n },\n label: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n labelSide: {\n minWidth: 120,\n paddingTop: spacing.sm,\n flexShrink: 0,\n },\n description: {\n fontSize: typography.fontSizeXs,\n color: colors.textMuted,\n },\n error: {\n fontSize: typography.fontSizeXs,\n color: colors.errorText,\n },\n fieldContent: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.xs,\n flex: 1,\n minWidth: 0,\n },\n necessityIcon: {\n color: colors.error,\n },\n necessityLabel: {\n color: colors.textMuted,\n fontWeight: typography.fontWeightNormal,\n fontSize: typography.fontSizeXs,\n },\n})\n","import {type ReactNode, Children, isValidElement, useId, useMemo} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useFormContext as useRHFFormContext, useController} from 'react-hook-form'\nimport {FieldContext, useFieldContext} from './FieldContext'\nimport {useFormContext} from '../Form/FormContext'\nimport type {LabelPosition, NecessityIndicator} from '../Form/FormContext'\nimport {styles} from './styles.css'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}\n\nfunction Root({name, ...props}: RootProps) {\n const formCtx = useFormContext()\n if (name && formCtx) {\n return <ControlledRoot name={name} formCtx={formCtx} {...props} />\n }\n return <StaticRoot {...props} />\n}\n\n// Always calls useController — no conditional hooks\nfunction ControlledRoot({\n name,\n formCtx,\n invalid: invalidProp = false,\n required,\n disabled,\n labelPosition,\n children,\n}: {\n name: string\n formCtx: NonNullable<ReturnType<typeof useFormContext>>\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const {control} = useRHFFormContext()\n const {field, fieldState} = useController({control, name})\n const invalid = invalidProp || !!fieldState.error\n\n const effectiveDisabled = disabled ?? formCtx.disabled\n const effectiveLabelPosition = labelPosition ?? formCtx.labelPosition\n const effectiveNecessityIndicator = formCtx.necessityIndicator\n\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled: effectiveDisabled,\n labelPosition: effectiveLabelPosition,\n necessityIndicator: effectiveNecessityIndicator,\n field: {\n value: field.value,\n onChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n name: field.name,\n },\n errorMessage: fieldState.error?.message,\n }),\n [\n id,\n invalid,\n required,\n effectiveDisabled,\n effectiveLabelPosition,\n effectiveNecessityIndicator,\n field.value,\n field.onChange,\n field.onBlur,\n field.ref,\n field.name,\n fieldState.error,\n ],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={effectiveLabelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// Current behavior, no RHF dependency\nfunction StaticRoot({\n invalid = false,\n required,\n disabled,\n labelPosition = 'top',\n children,\n}: {\n invalid?: boolean\n required?: boolean\n disabled?: boolean\n labelPosition?: LabelPosition\n children: ReactNode\n}) {\n const id = useId()\n const ctx = useMemo(\n () => ({\n controlId: `${id}-control`,\n descriptionId: `${id}-description`,\n errorId: `${id}-error`,\n invalid,\n required,\n disabled,\n labelPosition,\n }),\n [id, invalid, required, disabled, labelPosition],\n )\n\n return (\n <FieldContext.Provider value={ctx}>\n <FieldLayout labelPosition={labelPosition}>{children}</FieldLayout>\n </FieldContext.Provider>\n )\n}\n\n// --- FieldLayout ---\n// When labelPosition is 'side', separates Label from other children\n// and wraps the non-label children in a content column.\nfunction FieldLayout({\n labelPosition,\n children,\n}: {\n labelPosition: LabelPosition\n children: ReactNode\n}) {\n if (labelPosition !== 'side') {\n return <html.div style={styles.root}>{children}</html.div>\n }\n\n let labelNode: ReactNode = null\n const rest: ReactNode[] = []\n\n Children.forEach(children, (child) => {\n if (isValidElement(child) && child.type === Label && !labelNode) {\n labelNode = child\n } else {\n rest.push(child)\n }\n })\n\n return (\n <html.div style={styles.rootSide}>\n {labelNode}\n <html.div style={styles.fieldContent}>{rest}</html.div>\n </html.div>\n )\n}\n\n// --- Label ---\ninterface LabelProps {\n children: ReactNode\n}\n\nfunction Label({children}: LabelProps) {\n const ctx = useFieldContext()\n const isSide = ctx?.labelPosition === 'side'\n const indicator = ctx?.necessityIndicator\n\n return (\n <html.label for={ctx?.controlId} style={[styles.label, isSide && styles.labelSide]}>\n {children}\n {indicator === 'icon' && ctx?.required && (\n <html.span style={styles.necessityIcon} aria-hidden={true}>\n {' *'}\n </html.span>\n )}\n {indicator === 'label' && (\n <html.span style={styles.necessityLabel}>\n {ctx?.required ? ' (required)' : ' (optional)'}\n </html.span>\n )}\n </html.label>\n )\n}\n\n// --- Description ---\ninterface DescriptionProps {\n children: ReactNode\n}\n\nfunction Description({children}: DescriptionProps) {\n const ctx = useFieldContext()\n return (\n <html.span id={ctx?.descriptionId} style={styles.description}>\n {children}\n </html.span>\n )\n}\n\n// --- Error ---\ninterface ErrorProps {\n children?: ReactNode\n}\n\nfunction Error({children}: ErrorProps) {\n const ctx = useFieldContext()\n const content = children ?? ctx?.errorMessage\n if (!ctx?.invalid && !content) return null\n\n return (\n <html.span id={ctx?.errorId} role=\"alert\" style={styles.error}>\n {content}\n </html.span>\n )\n}\n\nexport const Field = {\n Root,\n Label,\n Description,\n Error,\n}\n","import {type ReactNode, useState} from 'react'\nimport {Dialog, type DialogSize} from '../Dialog/Dialog'\nimport {Button} from '../Button/Button'\nimport {Input} from '../Input/Input'\nimport {Field} from '../Field/Field'\n\ninterface ConfirmDialogProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n title: ReactNode\n /** Warning / cascade body. */\n children?: ReactNode\n /** When set, the confirm action stays DISABLED until the user types this\n * exact phrase (org name, slug…). The typed value is a client-side gate\n * only — it is never submitted. */\n confirmPhrase?: string\n /** Prompt shown above the phrase input. */\n promptLabel?: ReactNode\n cancelLabel?: ReactNode\n /**\n * App-owned confirm control. Receives whether the phrase gate is satisfied,\n * so the app can render its OWN <Button type=\"submit\"> INSIDE its form\n * (e.g. a react-router fetcher.Form with hidden intent fields) — the DS does\n * NOT own the submit, avoiding a fight with the app's form flow. Takes\n * precedence over onConfirm/confirmLabel.\n */\n confirmSlot?: (gate: {satisfied: boolean}) => ReactNode\n /** Simple case (no app form): the DS renders a danger Button calling this. */\n onConfirm?: () => void\n confirmLabel?: ReactNode\n size?: DialogSize\n}\n\n/**\n * Generic destructive-confirmation dialog: layout + an optional type-a-phrase\n * gate. The DS owns the shell and the gate; the APP owns the actual submit\n * (via `confirmSlot`) so it composes with form libraries instead of forcing a\n * callback. Domain warning text goes in `children`.\n */\nexport function ConfirmDialog({\n open,\n onOpenChange,\n title,\n children,\n confirmPhrase,\n promptLabel,\n cancelLabel = 'Cancel',\n confirmSlot,\n onConfirm,\n confirmLabel = 'Confirm',\n size = 'sm',\n}: ConfirmDialogProps) {\n const [typed, setTyped] = useState('')\n const satisfied = !confirmPhrase || typed.trim() === confirmPhrase\n\n const handleOpenChange = (next: boolean) => {\n if (!next) setTyped('') // reset the gate when the dialog closes\n onOpenChange(next)\n }\n\n return (\n <Dialog.Root open={open} onOpenChange={handleOpenChange}>\n <Dialog.Portal size={size}>\n <Dialog.Header>\n <Dialog.Title>{title}</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n {children}\n {confirmPhrase ? (\n <Field.Root>\n {promptLabel ? <Field.Label>{promptLabel}</Field.Label> : null}\n <Input\n font=\"mono\"\n value={typed}\n onChange={(e) => setTyped(e.target.value)}\n autoFocus\n aria-label=\"confirmation phrase\"\n />\n </Field.Root>\n ) : null}\n </Dialog.Body>\n <Dialog.Footer>\n <Button variant=\"secondary\" onClick={() => handleOpenChange(false)}>\n {cancelLabel}\n </Button>\n {confirmSlot ? (\n confirmSlot({satisfied})\n ) : onConfirm ? (\n <Button variant=\"danger\" disabled={!satisfied} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n ) : null}\n </Dialog.Footer>\n </Dialog.Portal>\n </Dialog.Root>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n // The item is the drag handle: no browser panning starts on it, so a touch\n // hold becomes a drag instead of a scroll, and text inside never selects\n // mid-gesture.\n item: {\n touchAction: 'none',\n userSelect: 'none',\n cursor: 'grab',\n transitionProperty: 'opacity',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n itemDisabled: {\n cursor: 'default',\n },\n // The source stays in flow while its ghost travels, so nothing reflows.\n itemLifted: {\n opacity: 0.4,\n cursor: 'grabbing',\n },\n zone: {\n borderRadius: radii.sm,\n transitionProperty: 'box-shadow, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n // Every zone shows it can receive while something is in the air; the one\n // under the pointer lights up.\n zoneReady: {\n boxShadow: `inset 0 0 0 1px ${colors.border}`,\n },\n zoneOver: {\n boxShadow: `inset 0 0 0 2px ${colors.accent}`,\n backgroundColor: colors.infoBg,\n },\n ghost: {\n position: 'fixed',\n top: 0,\n left: 0,\n pointerEvents: 'none',\n zIndex: 1000,\n opacity: 0.9,\n cursor: 'grabbing',\n },\n ghostAt: (x: number, y: number, width: number, height: number) => ({\n width,\n height,\n transform: `translate3d(${x}px, ${y}px, 0)`,\n }),\n // Same visually-hidden recipe as TagGroup's live region.\n liveRegion: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {isNative} from '../../platform'\n\n// ---------------------------------------------------------------------------\n// DragDrop — move items between zones with one pointer, on mouse, pen and\n// touch alike.\n//\n// Pointer events are the single input path: a press arms a drag, movement\n// past a small threshold (or, on touch, a short hold) starts it, pointer\n// capture keeps the stream on the item, and release resolves the zone under\n// the pointer. The dragged item stays in the DOM (faded) while a ghost copy\n// follows the pointer, so layout never shifts mid-drag and a cancelled drag\n// costs nothing.\n//\n// Dragging is a pointer gesture only. Every consumer MUST keep a non-drag way\n// to do the same thing (a button that adds, a remove affordance) — that is\n// the keyboard and assistive path, and WCAG 2.5.7 requires it. The Root's\n// live region announces picks and drops so screen readers follow along.\n//\n// Native: react-strict-dom does not route pointer capture on React Native,\n// so Item renders its children without drag behaviour there and the consumer's\n// non-drag path is the only path. Not exported from the native barrel.\n// ---------------------------------------------------------------------------\n\nexport interface DragDropItemData<T = unknown> {\n readonly id: string\n readonly zone: string\n readonly data: T\n}\n\nexport interface DragDropTarget {\n readonly zone: string\n /** Insertion index among the target zone's items, from the pointer's\n * position along the zone's axis. Excludes the dragged item itself. */\n readonly index: number\n}\n\nexport interface DragDropEvent<T = unknown> {\n readonly item: DragDropItemData<T>\n readonly target: DragDropTarget\n}\n\ninterface ZoneRecord {\n readonly el: HTMLElement\n readonly orientation: 'horizontal' | 'vertical'\n readonly accepts?: (item: DragDropItemData) => boolean\n readonly label: string\n}\n\ninterface ItemRecord {\n readonly el: HTMLElement\n readonly zone: string\n readonly data: unknown\n readonly label: string\n readonly preview: ReactNode\n}\n\ninterface DragSession {\n readonly id: string\n readonly pointerId: number\n /** Event time of the press, for judging the touch hold by timestamps. */\n readonly downAt: number\n readonly startX: number\n readonly startY: number\n readonly offsetX: number\n readonly offsetY: number\n readonly width: number\n readonly height: number\n readonly source: HTMLElement\n active: boolean\n holdTimer: ReturnType<typeof setTimeout> | null\n}\n\ninterface DragState {\n readonly id: string\n readonly preview: ReactNode\n readonly width: number\n readonly height: number\n readonly x: number\n readonly y: number\n readonly over: DragDropTarget | null\n}\n\ninterface RootContextValue {\n registerZone: (id: string, record: ZoneRecord) => () => void\n registerItem: (id: string, record: ItemRecord) => () => void\n begin: (id: string, e: React.PointerEvent) => void\n drag: DragState | null\n}\n\nconst RootContext = createContext<RootContextValue | null>(null)\n\nconst useRoot = (part: string): RootContextValue => {\n const ctx = useContext(RootContext)\n if (!ctx) throw new Error(`DragDrop.${part} must be used within DragDrop.Root`)\n return ctx\n}\n\n/** How far the pointer moves before a press becomes a drag (mouse/pen), so a\n * click stays a click. */\nconst MOVE_THRESHOLD_PX = 6\n/** How long a touch holds still before it becomes a drag. Below this a touch\n * that moves is a scroll, and the browser gets it back via pointercancel. */\nconst TOUCH_HOLD_MS = 180\n\n// ---------------------------------------------------------------------------\n// Root\n// ---------------------------------------------------------------------------\n\nexport interface DragDropRootProps<T = unknown> {\n /** Called when an item is released over a zone that accepts it. Reordering\n * inside the item's own zone arrives here too, with the new index. */\n onDrop: (event: DragDropEvent<T>) => void\n /** Overrides the default screen-reader announcements. */\n announce?: (event: {kind: 'pick' | 'drop' | 'cancel'; item: string; zone?: string}) => string\n children: ReactNode\n}\n\nfunction Root<T = unknown>({onDrop, announce, children}: DragDropRootProps<T>) {\n const zones = useRef(new Map<string, ZoneRecord>())\n const items = useRef(new Map<string, ItemRecord>())\n const session = useRef<DragSession | null>(null)\n const frame = useRef<number | null>(null)\n const [drag, setDrag] = useState<DragState | null>(null)\n const [announcement, setAnnouncement] = useState('')\n\n const say = useCallback(\n (kind: 'pick' | 'drop' | 'cancel', itemId: string, zoneId?: string) => {\n const item = items.current.get(itemId)?.label ?? itemId\n const zone = zoneId ? (zones.current.get(zoneId)?.label ?? zoneId) : undefined\n const text = announce\n ? announce({kind, item, zone})\n : kind === 'pick'\n ? `Picked up ${item}.`\n : kind === 'drop'\n ? `Dropped ${item} in ${zone ?? 'place'}.`\n : `Cancelled moving ${item}.`\n setAnnouncement(text)\n },\n [announce],\n )\n\n const registerZone = useCallback((id: string, record: ZoneRecord) => {\n zones.current.set(id, record)\n return () => {\n zones.current.delete(id)\n }\n }, [])\n\n const registerItem = useCallback((id: string, record: ItemRecord) => {\n items.current.set(id, record)\n return () => {\n items.current.delete(id)\n }\n }, [])\n\n /** The zone under the pointer that accepts the dragged item, and where in\n * it the item would land. */\n const locate = useCallback((itemId: string, x: number, y: number): DragDropTarget | null => {\n const item = items.current.get(itemId)\n if (!item) return null\n const payload: DragDropItemData = {id: itemId, zone: item.zone, data: item.data}\n for (const [zoneId, zone] of zones.current) {\n const r = zone.el.getBoundingClientRect()\n if (x < r.left || x > r.right || y < r.top || y > r.bottom) continue\n if (zone.accepts && !zone.accepts(payload)) return null\n const horizontal = zone.orientation === 'horizontal'\n let index = 0\n for (const [otherId, other] of items.current) {\n if (otherId === itemId || other.zone !== zoneId) continue\n const or = other.el.getBoundingClientRect()\n const mid = horizontal ? (or.left + or.right) / 2 : (or.top + or.bottom) / 2\n if ((horizontal ? x : y) > mid) index += 1\n }\n return {zone: zoneId, index}\n }\n return null\n }, [])\n\n // `target` is the resolved drop target (null cancels). The consumer's\n // onDrop runs here, in the event handler, never inside a state updater:\n // React may call an updater more than once and forbids updating another\n // component from it.\n const finish = useCallback(\n (target: DragDropTarget | null) => {\n const s = session.current\n if (!s) return\n if (s.holdTimer) clearTimeout(s.holdTimer)\n if (frame.current !== null) cancelAnimationFrame(frame.current)\n frame.current = null\n session.current = null\n try {\n if (s.source.hasPointerCapture(s.pointerId)) s.source.releasePointerCapture(s.pointerId)\n } catch {\n // already released\n }\n if (!s.active) return\n const item = items.current.get(s.id)\n setDrag(null)\n if (target && item) {\n onDrop({item: {id: s.id, zone: item.zone, data: item.data as T}, target})\n say('drop', s.id, target.zone)\n } else {\n say('cancel', s.id)\n }\n },\n [onDrop, say],\n )\n\n const activate = useCallback(\n (s: DragSession, x: number, y: number) => {\n s.active = true\n const item = items.current.get(s.id)\n setDrag({\n id: s.id,\n preview: item?.preview ?? null,\n width: s.width,\n height: s.height,\n x: x - s.offsetX,\n y: y - s.offsetY,\n over: locate(s.id, x, y),\n })\n say('pick', s.id)\n },\n [locate, say],\n )\n\n const begin = useCallback(\n (id: string, e: React.PointerEvent) => {\n if (session.current || e.button !== 0) return\n const source = e.currentTarget as HTMLElement\n const rect = source.getBoundingClientRect()\n const s: DragSession = {\n id,\n pointerId: e.pointerId,\n downAt: e.timeStamp,\n startX: e.clientX,\n startY: e.clientY,\n offsetX: e.clientX - rect.left,\n offsetY: e.clientY - rect.top,\n width: rect.width,\n height: rect.height,\n source,\n active: false,\n holdTimer: null,\n }\n session.current = s\n // Capture keeps the stream on the item if the pointer leaves the window;\n // the document listeners below carry the drag either way, so a browser\n // (or a synthetic event) without an active pointer is not an error.\n try {\n source.setPointerCapture(e.pointerId)\n } catch {\n // no active pointer to capture\n }\n if (e.pointerType === 'touch') {\n s.holdTimer = setTimeout(() => {\n s.holdTimer = null\n if (session.current === s && !s.active) activate(s, s.startX, s.startY)\n }, TOUCH_HOLD_MS)\n }\n },\n [activate],\n )\n\n // Move/up/cancel listen on the document: pointer capture keeps the events\n // flowing to the source element, but a single document listener survives\n // the item re-rendering under the pointer.\n useEffect(() => {\n const onMove = (e: PointerEvent) => {\n const s = session.current\n if (!s || e.pointerId !== s.pointerId) return\n if (!s.active) {\n const moved = Math.hypot(e.clientX - s.startX, e.clientY - s.startY)\n if (e.pointerType === 'touch') {\n // The hold is judged by event time, not by the timer having fired:\n // a busy main thread (seen on iOS Safari) can withhold the timer\n // AND every pointermove until the finger lifts, then deliver them\n // in one burst. Since touch-action:none keeps the browser from\n // panning on the item, a move stream that arrives at all is ours;\n // the hold only separates a drag from a quick flick.\n if (e.timeStamp - s.downAt >= TOUCH_HOLD_MS) {\n if (s.holdTimer) clearTimeout(s.holdTimer)\n s.holdTimer = null\n activate(s, s.startX, s.startY)\n } else {\n // Moved before the hold elapsed: a flick, not a drag.\n if (moved > MOVE_THRESHOLD_PX) finish(null)\n return\n }\n } else {\n if (moved < MOVE_THRESHOLD_PX) return\n activate(s, e.clientX, e.clientY)\n }\n }\n if (frame.current !== null) return\n frame.current = requestAnimationFrame(() => {\n frame.current = null\n const x = e.clientX\n const y = e.clientY\n setDrag((current) =>\n current\n ? {...current, x: x - s.offsetX, y: y - s.offsetY, over: locate(s.id, x, y)}\n : current,\n )\n })\n }\n const onUp = (e: PointerEvent) => {\n const s = session.current\n if (!s || e.pointerId !== s.pointerId) return\n // Resolve the target from the release point, not the last frame.\n finish(s.active ? locate(s.id, e.clientX, e.clientY) : null)\n }\n const onCancel = (e: PointerEvent) => {\n const s = session.current\n if (!s || e.pointerId !== s.pointerId) return\n finish(null)\n }\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && session.current) finish(null)\n }\n document.addEventListener('pointermove', onMove)\n document.addEventListener('pointerup', onUp)\n document.addEventListener('pointercancel', onCancel)\n document.addEventListener('keydown', onKey)\n return () => {\n document.removeEventListener('pointermove', onMove)\n document.removeEventListener('pointerup', onUp)\n document.removeEventListener('pointercancel', onCancel)\n document.removeEventListener('keydown', onKey)\n }\n }, [activate, finish, locate])\n\n const value = useMemo<RootContextValue>(\n () => ({registerZone, registerItem, begin, drag}),\n [registerZone, registerItem, begin, drag],\n )\n\n return (\n <RootContext.Provider value={value}>\n {children}\n {drag && (\n <html.div\n aria-hidden\n style={[styles.ghost, styles.ghostAt(drag.x, drag.y, drag.width, drag.height)]}\n >\n {drag.preview}\n </html.div>\n )}\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={styles.liveRegion}>\n {announcement}\n </html.div>\n </RootContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Zone\n// ---------------------------------------------------------------------------\n\nexport interface DragDropZoneProps<T = unknown> {\n id: string\n /** Read to screen readers when an item is dropped here. */\n label: string\n /** Which axis items flow along; decides how the insertion index is read\n * from the pointer. */\n orientation?: 'horizontal' | 'vertical'\n /** Refuse an item; the zone then never lights up for it. */\n accepts?: (item: DragDropItemData<T>) => boolean\n children: ReactNode\n}\n\nfunction Zone<T = unknown>({\n id,\n label,\n orientation = 'horizontal',\n accepts,\n children,\n}: DragDropZoneProps<T>) {\n const {registerZone, drag} = useRoot('Zone')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n return registerZone(id, {\n el,\n orientation,\n label,\n accepts: accepts as ZoneRecord['accepts'],\n })\n }, [id, label, orientation, accepts, registerZone])\n\n const over = drag?.over?.zone === id\n const dragging = drag !== null\n\n return (\n <html.div\n ref={ref}\n style={[styles.zone, dragging && styles.zoneReady, over && styles.zoneOver]}\n >\n {children}\n </html.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Item\n// ---------------------------------------------------------------------------\n\nexport interface DragDropItemProps<T = unknown> {\n id: string\n /** The zone this item currently lives in. */\n zone: string\n /** Read to screen readers when picked up or dropped. */\n label: string\n /** Carried to onDrop untouched. */\n data?: T\n /** What follows the pointer; defaults to the children. */\n preview?: ReactNode\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item<T = unknown>({\n id,\n zone,\n label,\n data,\n preview,\n disabled = false,\n children,\n}: DragDropItemProps<T>) {\n const {registerItem, begin, drag} = useRoot('Item')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n return registerItem(id, {el, zone, data, label, preview: preview ?? children})\n }, [id, zone, data, label, preview, children, registerItem])\n\n // WebKit only honours the prefixed user-select, and a touch held on\n // selectable text becomes iOS's selection gesture (loupe and handles)\n // before our hold can turn it into a drag; the callout is the same race\n // for links and images. StyleX emits neither prefixed property and\n // react-strict-dom's types have no vendor keys, so they are set on the\n // element directly. Both inherit into the item's children.\n useEffect(() => {\n const el = ref.current\n if (!el || isNative) return\n const style = el.style as CSSStyleDeclaration & {webkitTouchCallout?: string}\n style.webkitUserSelect = 'none'\n style.webkitTouchCallout = 'none'\n }, [])\n\n const onPointerDown = useCallback(\n (e: React.PointerEvent) => {\n if (disabled) return\n begin(id, e)\n },\n [begin, disabled, id],\n )\n\n if (isNative) return <>{children}</>\n\n const lifted = drag?.id === id\n return (\n <html.div\n ref={ref}\n onPointerDown={onPointerDown}\n style={[styles.item, disabled && styles.itemDisabled, lifted && styles.itemLifted]}\n >\n {children}\n </html.div>\n )\n}\n\n/** Current drag, for consumers that render their own placeholder or ghost. */\nexport function useDragDrop(): {\n readonly dragging: string | null\n readonly over: DragDropTarget | null\n} {\n const ctx = useContext(RootContext)\n return {dragging: ctx?.drag?.id ?? null, over: ctx?.drag?.over ?? null}\n}\n\nexport const DragDrop = {Root, Zone, Item}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\n// The \"Apple ease\" curves and the 280ms open live in the shared motion tokens\n// (easing.easeOut/easeIn, duration.slow). The close is duration.base, and the\n// closeAnimationDuration prop can override it via the closeDuration* styles.\n\nexport const styles = css.create({\n // --- Outer wrapper: animates width from 0 → target ---\n wrapper: {\n overflow: 'hidden',\n flexShrink: 0,\n position: 'relative',\n },\n\n // --- Wrapper open/close: SM (360px) ---\n wrapperOpenSm: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 360},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseSm: {\n animationName: css.keyframes({\n from: {width: 360},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Wrapper open/close: MD (480px) ---\n wrapperOpenMd: {\n animationName: css.keyframes({\n from: {width: 0},\n to: {width: 480},\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n wrapperCloseMd: {\n animationName: css.keyframes({\n from: {width: 480},\n to: {width: 0},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Content panel ---\n content: {\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n borderLeftWidth: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n boxShadow: shadows.sm,\n position: 'relative',\n },\n\n // Content must maintain its target width even while wrapper is narrower\n contentSm: {width: 360},\n contentMd: {width: 480},\n\n // --- Content slide + fade animations ---\n slideIn: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n to: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n }),\n animationDuration: duration.slow,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOut: {\n animationName: css.keyframes({\n from: {\n transform: 'translateX(0)',\n opacity: 1,\n },\n to: {\n transform: 'translateX(40px)',\n opacity: 0,\n },\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n // --- Title ---\n title: {\n fontSize: 18,\n fontWeight: 600,\n lineHeight: 1.4,\n color: colors.text,\n margin: 0,\n flex: 1,\n minWidth: 0,\n },\n\n // --- Body ---\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: 8,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\nexport type DetailPanelSize = 'sm' | 'md'\n\n// --- Context ---\n\ninterface DetailPanelContextValue {\n present: boolean\n closing: boolean\n closeDuration: DurationToken\n requestOpen: () => void\n requestClose: () => void\n titleId: string\n labelId: string | undefined\n registerTitle: (id: string) => void\n unregisterTitle: () => void\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DetailPanelContext = createContext<DetailPanelContextValue | null>(null)\n\nfunction useDetailPanel() {\n const ctx = useContext(DetailPanelContext)\n if (!ctx) throw new Error('DetailPanel compound components must be used within DetailPanel.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when open state changes */\n onOpenChange?: (open: boolean) => void\n /** Motion token for the close animation. Default: 'base' (200ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n closeAnimationDuration = 'base',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [present, setPresent] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n const previousFocusRef = useRef<Element | null>(null)\n\n const titleId = useId()\n const [labelId, setLabelId] = useState<string | undefined>(undefined)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n // Sync presence with open state\n useEffect(() => {\n if (isOpen && !present) {\n setPresent(true)\n setClosing(false)\n } else if (!isOpen && present && !closing) {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n setPresent(false)\n closingTimerRef.current = null\n }, DURATION_MS[closeAnimationDuration])\n }\n }, [isOpen, present, closing, closeAnimationDuration])\n\n // Focus management: move focus on open, restore on close\n useEffect(() => {\n if (present && !closing) {\n previousFocusRef.current = document.activeElement\n panelRef.current?.focus()\n }\n }, [present]) // eslint-disable-line react-hooks/exhaustive-deps -- only on present change\n\n useEffect(() => {\n if (!present && previousFocusRef.current) {\n const el = previousFocusRef.current as HTMLElement\n if (typeof el.focus === 'function') {\n el.focus()\n }\n previousFocusRef.current = null\n }\n }, [present])\n\n // ESC handler\n useEffect(() => {\n if (!present || closing) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [present, closing]) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n setClosing(false)\n }\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n const registerTitle = useCallback((id: string) => {\n setLabelId(id)\n }, [])\n\n const unregisterTitle = useCallback(() => {\n setLabelId(undefined)\n }, [])\n\n return (\n <DetailPanelContext.Provider\n value={{\n present,\n closing,\n closeDuration: closeAnimationDuration,\n requestOpen,\n requestClose,\n titleId,\n labelId,\n registerTitle,\n unregisterTitle,\n panelRef,\n }}\n >\n {children}\n </DetailPanelContext.Provider>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n /** Width of the panel. Default: 'sm' (360px) */\n size?: DetailPanelSize\n /** Accessible name for the complementary landmark */\n label: string\n}\n\nconst wrapperOpenMap = {\n sm: styles.wrapperOpenSm,\n md: styles.wrapperOpenMd,\n} as const\n\nconst wrapperCloseMap = {\n sm: styles.wrapperCloseSm,\n md: styles.wrapperCloseMd,\n} as const\n\nfunction Content({children, size = 'sm', label}: ContentProps) {\n const {present, closing, closeDuration, labelId, panelRef} = useDetailPanel()\n\n if (!present) return null\n\n return (\n <html.div\n style={[\n styles.wrapper,\n closing ? wrapperCloseMap[size] : wrapperOpenMap[size],\n closing && closeDurationMap[closeDuration],\n ]}\n >\n <html.div\n ref={panelRef}\n role=\"complementary\"\n aria-label={!labelId ? label : undefined}\n aria-labelledby={labelId || undefined}\n tabIndex={-1}\n style={[\n styles.content,\n size === 'sm' ? styles.contentSm : styles.contentMd,\n closing ? styles.slideOut : styles.slideIn,\n closing && closeDurationMap[closeDuration],\n ]}\n >\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId, registerTitle, unregisterTitle} = useDetailPanel()\n\n useEffect(() => {\n registerTitle(titleId)\n return () => unregisterTitle()\n }, [titleId, registerTitle, unregisterTitle])\n\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDetailPanel()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const DetailPanel = {\n Root,\n Content,\n Header,\n Title,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n // --- Backdrop ---\n backdrop: {\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.4)',\n zIndex: 1000,\n },\n backdropOpen: {\n animationName: css.keyframes({\n from: {opacity: 0},\n to: {opacity: 1},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n backdropClosing: {\n animationName: css.keyframes({\n from: {opacity: 1},\n to: {opacity: 0},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Viewport (positioning container) ---\n viewport: {\n position: 'fixed',\n inset: 0,\n zIndex: 1001,\n display: 'flex',\n pointerEvents: 'none',\n },\n\n // Right anchor (desktop default)\n viewportRight: {\n justifyContent: 'flex-end',\n alignItems: 'stretch',\n },\n // Left anchor\n viewportLeft: {\n justifyContent: 'flex-start',\n alignItems: 'stretch',\n },\n // Bottom anchor (mobile default)\n viewportBottom: {\n justifyContent: 'stretch',\n alignItems: 'flex-end',\n },\n\n // --- Panel ---\n panel: {\n position: 'relative',\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n pointerEvents: 'auto',\n borderWidth: 0,\n touchAction: 'none',\n },\n\n // Panel sizing per anchor\n panelHorizontal: {\n width: '100%',\n height: '100%',\n borderLeftWidth: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n panelVertical: {\n width: '100%',\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n borderTopLeftRadius: radii.lg,\n borderTopRightRadius: radii.lg,\n maxHeight: '85vh',\n },\n panelLeftBorder: {\n borderLeftWidth: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n\n // --- Panel widths (horizontal anchors) ---\n sm: {maxWidth: 360},\n md: {maxWidth: 480},\n lg: {maxWidth: 640},\n\n // --- Slide animations: Right ---\n slideInRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutRight: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Left ---\n slideInLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(-100%)'},\n to: {transform: 'translateX(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutLeft: {\n animationName: css.keyframes({\n from: {transform: 'translateX(0)'},\n to: {transform: 'translateX(-100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Slide animations: Bottom ---\n slideInBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(100%)'},\n to: {transform: 'translateY(0)'},\n }),\n animationDuration: duration.base,\n animationTimingFunction: easing.easeOut,\n animationFillMode: 'both',\n },\n slideOutBottom: {\n animationName: css.keyframes({\n from: {transform: 'translateY(0)'},\n to: {transform: 'translateY(100%)'},\n }),\n animationDuration: duration.fast,\n animationTimingFunction: easing.easeIn,\n animationFillMode: 'both',\n },\n\n // --- Close-duration overrides ---\n // The closeAnimationDuration prop token drives both these and the unmount\n // timeout, so the exit animation can never race the unmount.\n closeDurationInstant: {animationDuration: duration.instant},\n closeDurationFast: {animationDuration: duration.fast},\n closeDurationBase: {animationDuration: duration.base},\n closeDurationSlow: {animationDuration: duration.slow},\n\n // --- Header ---\n header: {\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n gap: spacing.md,\n },\n\n // --- Title ---\n title: {\n fontSize: typography.fontSizeLg,\n fontWeight: typography.fontWeightSemibold,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n },\n\n // --- Description ---\n description: {\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.md,\n },\n\n // --- Body ---\n body: {\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n overflowY: 'auto',\n flex: 1,\n },\n\n // --- Footer ---\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n\n // --- Close button ---\n closeButton: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 32,\n height: 32,\n borderRadius: radii.sm,\n borderWidth: 0,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.textMuted,\n cursor: 'pointer',\n padding: 0,\n flexShrink: 0,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n\n // --- Inline wrapper ---\n inlineWrapper: {\n display: 'inline-flex',\n },\n})\n","import {useRef, useCallback, useEffect} from 'react'\nimport type {DrawerAnchor} from './Drawer'\n\n/** Threshold: fraction of panel size the user must drag to dismiss */\nconst DISMISS_THRESHOLD = 0.3\n\n/** Minimum velocity (px/ms) to dismiss even below threshold */\nconst VELOCITY_THRESHOLD = 0.5\n\n/** Duration for the dismiss slide-out animation (ms) */\nconst DISMISS_DURATION = 160\n\n/**\n * Max pixels the panel visually \"grows\" when dragged in the opposite direction.\n * iOS-style: panel stays anchored to its edge, doesn't translate.\n * Instead we show a subtle shadow/scale hint capped at this value.\n */\nconst OPPOSITE_MAX_OVERSCROLL = 12\n\ninterface UseSwipeDismissOptions {\n anchor: DrawerAnchor\n enabled: boolean\n onDismiss: () => void\n panelRef: React.RefObject<HTMLDivElement | null>\n}\n\ninterface SwipeState {\n startX: number\n startY: number\n currentX: number\n currentY: number\n startTime: number\n swiping: boolean\n panelSize: number\n}\n\n/**\n * Hook that adds swipe-to-dismiss gesture to a drawer panel.\n *\n * Dismiss direction: panel follows finger 1:1, backdrop fades.\n * Opposite direction: iOS-style — panel stays anchored, shows subtle\n * overscroll feedback (box-shadow intensifies), then snaps back.\n */\nexport function useSwipeDismiss({anchor, enabled, onDismiss, panelRef}: UseSwipeDismissOptions) {\n const stateRef = useRef<SwipeState>({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n startTime: 0,\n swiping: false,\n panelSize: 0,\n })\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n /** Returns positive = dismiss direction, negative = opposite */\n const getMovement = useCallback(\n (state: SwipeState) => {\n if (isHorizontal) {\n const dx = state.currentX - state.startX\n return anchor === 'right' ? dx : -dx\n }\n return state.currentY - state.startY\n },\n [anchor, isHorizontal],\n )\n\n const applyTransform = useCallback(\n (movement: number, panelEl: HTMLDivElement) => {\n const size = Number(panelEl.dataset.panelSize) || 1\n\n if (movement >= 0) {\n // Dismiss direction — 1:1 tracking\n const progress = movement / size\n\n if (isHorizontal) {\n const sign = anchor === 'right' ? 1 : -1\n panelEl.style.transform = `translateX(${sign * movement}px)`\n } else {\n panelEl.style.transform = `translateY(${movement}px)`\n }\n\n // Fade backdrop proportionally\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = String(Math.max(0, 1 - progress))\n }\n } else {\n // Opposite direction — iOS behavior:\n // Panel stays anchored (no translate). Show subtle overscroll via box-shadow.\n // Diminishing resistance: asymptotically approaches OPPOSITE_MAX_OVERSCROLL.\n const absMovement = Math.abs(movement)\n const overscroll = (absMovement / (absMovement + size * 0.5)) * OPPOSITE_MAX_OVERSCROLL\n const shadowSpread = Math.round(overscroll)\n\n panelEl.style.transform = ''\n panelEl.style.boxShadow =\n shadowSpread > 0 ? `0 0 ${shadowSpread * 2}px ${shadowSpread}px rgba(0, 0, 0, 0.15)` : ''\n }\n },\n [anchor, isHorizontal],\n )\n\n /** Reset all inline styles (snap back) */\n const resetStyles = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transform = ''\n panelEl.style.boxShadow = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.opacity = ''\n }\n }, [])\n\n /** Animate to fully dismissed position, then call onDismiss */\n const animateDismiss = useCallback(\n (panelEl: HTMLDivElement) => {\n const dismissTransform = isHorizontal\n ? `translateX(${anchor === 'right' ? '100%' : '-100%'})`\n : 'translateY(100%)'\n\n panelEl.style.transition = `transform ${DISMISS_DURATION}ms ease-in`\n panelEl.style.transform = dismissTransform\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = `opacity ${DISMISS_DURATION}ms ease-in`\n backdrop.style.opacity = '0'\n }\n\n // When the slide-out transition finishes, just call onDismiss.\n // Do NOT reset inline styles before unmount — that causes a 1-frame flash\n // where the panel appears at its original position. React will unmount the\n // DOM node entirely, so the inline styles don't need cleanup.\n let dismissed = false\n const done = () => {\n if (dismissed) return\n dismissed = true\n onDismiss()\n }\n panelEl.addEventListener('transitionend', done, {once: true})\n setTimeout(done, DISMISS_DURATION + 50)\n },\n [anchor, isHorizontal, onDismiss],\n )\n\n /** Animate snap-back for dismiss-direction undershoot */\n const animateSnapBack = useCallback((panelEl: HTMLDivElement) => {\n panelEl.style.transition = 'transform 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n panelEl.style.transform = ''\n\n const backdrop = panelEl.closest('[data-drawer-viewport]')\n ?.previousElementSibling as HTMLElement | null\n if (backdrop) {\n backdrop.style.transition = 'opacity 200ms cubic-bezier(0.25, 1, 0.5, 1)'\n backdrop.style.opacity = ''\n }\n\n const cleanup = () => {\n panelEl.style.transition = ''\n if (backdrop) backdrop.style.transition = ''\n }\n panelEl.addEventListener('transitionend', cleanup, {once: true})\n setTimeout(cleanup, 250)\n }, [])\n\n useEffect(() => {\n if (!enabled) return\n const panel = panelRef.current\n if (!panel) return\n\n function handlePointerDown(e: PointerEvent) {\n if (e.button !== 0) return\n const target = e.target as HTMLElement\n if (target.closest('button, a, input, textarea, select, [role=\"button\"]')) {\n return\n }\n\n const rect = panel!.getBoundingClientRect()\n const state = stateRef.current\n state.startX = e.clientX\n state.startY = e.clientY\n state.currentX = e.clientX\n state.currentY = e.clientY\n state.startTime = Date.now()\n state.swiping = false\n state.panelSize = isHorizontal ? rect.width : rect.height\n\n panel!.dataset.panelSize = String(state.panelSize)\n panel!.setPointerCapture(e.pointerId)\n\n // Freeze CSS animation — we take over positioning.\n // Never restore it; the panel is already at its final resting position.\n panel!.style.animation = 'none'\n }\n\n function handlePointerMove(e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n state.currentX = e.clientX\n state.currentY = e.clientY\n\n const dx = Math.abs(state.currentX - state.startX)\n const dy = Math.abs(state.currentY - state.startY)\n\n if (!state.swiping) {\n const totalMovement = Math.sqrt(dx * dx + dy * dy)\n if (totalMovement < 8) return\n\n if (isHorizontal && dx > dy) {\n state.swiping = true\n } else if (!isHorizontal && dy > dx) {\n state.swiping = true\n } else {\n // Wrong axis — abort gesture\n state.startTime = 0\n return\n }\n }\n\n if (state.swiping) {\n e.preventDefault()\n const movement = getMovement(state)\n applyTransform(movement, panel!)\n }\n }\n\n function handlePointerUp(_e: PointerEvent) {\n const state = stateRef.current\n if (state.startTime === 0) return\n\n const movement = getMovement(state)\n const elapsed = Date.now() - state.startTime\n const velocity = movement / elapsed\n\n state.startTime = 0\n\n if (!state.swiping) {\n return\n }\n\n state.swiping = false\n\n if (movement <= 0) {\n // Was dragging in opposite direction — just reset (no translate was applied)\n resetStyles(panel!)\n return\n }\n\n const fraction = movement / state.panelSize\n const shouldDismiss = fraction > DISMISS_THRESHOLD || velocity > VELOCITY_THRESHOLD\n\n if (shouldDismiss) {\n animateDismiss(panel!)\n } else {\n animateSnapBack(panel!)\n }\n }\n\n function handlePointerCancel() {\n const state = stateRef.current\n state.startTime = 0\n state.swiping = false\n resetStyles(panel!)\n }\n\n panel.addEventListener('pointerdown', handlePointerDown)\n panel.addEventListener('pointermove', handlePointerMove)\n panel.addEventListener('pointerup', handlePointerUp)\n panel.addEventListener('pointercancel', handlePointerCancel)\n\n function handleTouchMove(e: TouchEvent) {\n if (stateRef.current.swiping) {\n e.preventDefault()\n }\n }\n panel.addEventListener('touchmove', handleTouchMove, {passive: false})\n\n return () => {\n panel.removeEventListener('pointerdown', handlePointerDown)\n panel.removeEventListener('pointermove', handlePointerMove)\n panel.removeEventListener('pointerup', handlePointerUp)\n panel.removeEventListener('pointercancel', handlePointerCancel)\n panel.removeEventListener('touchmove', handleTouchMove)\n }\n }, [\n enabled,\n panelRef,\n anchor,\n isHorizontal,\n getMovement,\n applyTransform,\n resetStyles,\n animateSnapBack,\n animateDismiss,\n ])\n}\n","import {\n type ReactNode,\n type RefObject,\n createContext,\n useContext,\n useState,\n useEffect,\n useCallback,\n useId,\n useRef,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {DURATION_MS, type DurationToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\nimport {useSwipeDismiss} from './useSwipeDismiss'\n\n// --- Types ---\n\nexport type DrawerAnchor = 'right' | 'left' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg'\n\nconst closeDurationMap = {\n instant: styles.closeDurationInstant,\n fast: styles.closeDurationFast,\n base: styles.closeDurationBase,\n slow: styles.closeDurationSlow,\n} as const satisfies Record<DurationToken, unknown>\n\n// --- Context ---\n\ninterface DrawerContextValue {\n open: boolean\n closing: boolean\n closeDuration: DurationToken\n anchor: DrawerAnchor\n dismissable: boolean\n swipeDismiss: boolean\n requestOpen: () => void\n requestClose: () => void\n /** Close immediately without CSS animation (used by swipe dismiss which handles its own exit animation) */\n requestCloseImmediate: () => void\n titleId: string\n descriptionId: string\n panelRef: RefObject<HTMLDivElement | null>\n}\n\nconst DrawerContext = createContext<DrawerContextValue | null>(null)\n\nfunction useDrawer() {\n const ctx = useContext(DrawerContext)\n if (!ctx) throw new Error('Drawer compound components must be used within Drawer.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Controlled open state */\n open?: boolean\n /** Default open state (uncontrolled) */\n defaultOpen?: boolean\n /** Called when drawer open state changes */\n onOpenChange?: (open: boolean) => void\n /** Which edge the drawer slides from. Default: 'right' */\n anchor?: DrawerAnchor\n /** Whether clicking backdrop or pressing Escape closes the drawer. Default: true */\n dismissable?: boolean\n /** Whether swipe gesture dismisses the drawer. Default: true */\n swipeDismiss?: boolean\n /** Motion token for the close animation. Default: 'fast' (150ms) */\n closeAnimationDuration?: DurationToken\n}\n\nfunction Root({\n children,\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n anchor = 'right',\n dismissable = true,\n swipeDismiss = true,\n closeAnimationDuration = 'fast',\n}: RootProps) {\n const isControlled = controlledOpen !== undefined\n const [internalOpen, setInternalOpen] = useState(defaultOpen)\n const [closing, setClosing] = useState(false)\n const closingTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const panelRef = useRef<HTMLDivElement>(null)\n\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const titleId = useId()\n const descriptionId = useId()\n\n const requestOpen = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(true)\n onOpenChange?.(true)\n }, [isControlled, onOpenChange])\n\n const requestClose = useCallback(() => {\n setClosing(true)\n closingTimerRef.current = setTimeout(() => {\n setClosing(false)\n closingTimerRef.current = null\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, DURATION_MS[closeAnimationDuration])\n }, [isControlled, onOpenChange, closeAnimationDuration])\n\n const requestCloseImmediate = useCallback(() => {\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current)\n closingTimerRef.current = null\n }\n setClosing(false)\n if (!isControlled) setInternalOpen(false)\n onOpenChange?.(false)\n }, [isControlled, onOpenChange])\n\n // Clean up timer on unmount\n useEffect(() => {\n return () => {\n if (closingTimerRef.current) clearTimeout(closingTimerRef.current)\n }\n }, [])\n\n // Handle Escape key\n useEffect(() => {\n if (!isOpen && !closing) return\n if (!dismissable) return\n\n function onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape') {\n e.stopPropagation()\n requestClose()\n }\n }\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [isOpen, closing, dismissable, requestClose])\n\n // Lock body scroll when open\n useEffect(() => {\n if (isOpen || closing) {\n const prev = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n return () => {\n document.body.style.overflow = prev\n }\n }\n }, [isOpen, closing])\n\n return (\n <DrawerContext.Provider\n value={{\n open: isOpen || closing,\n closing,\n closeDuration: closeAnimationDuration,\n anchor,\n dismissable,\n swipeDismiss,\n requestOpen,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n }}\n >\n {children}\n </DrawerContext.Provider>\n )\n}\n\n// --- Trigger ---\n\nfunction Trigger({children}: {children: ReactNode}) {\n const {requestOpen} = useDrawer()\n\n return (\n <html.div onClick={requestOpen} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n}\n\n// --- Portal ---\n\ninterface PortalProps {\n children: ReactNode\n size?: DrawerSize\n}\n\n// Slide animation maps\nconst slideInMap = {\n right: styles.slideInRight,\n left: styles.slideInLeft,\n bottom: styles.slideInBottom,\n} as const\n\nconst slideOutMap = {\n right: styles.slideOutRight,\n left: styles.slideOutLeft,\n bottom: styles.slideOutBottom,\n} as const\n\nconst viewportAnchorMap = {\n right: styles.viewportRight,\n left: styles.viewportLeft,\n bottom: styles.viewportBottom,\n} as const\n\nfunction Portal({children, size = 'md'}: PortalProps) {\n const {\n open,\n closing,\n closeDuration,\n anchor,\n dismissable,\n swipeDismiss: swipeEnabled,\n requestClose,\n requestCloseImmediate,\n titleId,\n descriptionId,\n panelRef,\n } = useDrawer()\n\n const handleBackdropClick = useCallback(() => {\n if (dismissable) {\n requestClose()\n }\n }, [dismissable, requestClose])\n\n // Swipe-to-dismiss — uses immediate close since the hook handles its own exit animation\n useSwipeDismiss({\n anchor,\n enabled: swipeEnabled && open && !closing,\n onDismiss: requestCloseImmediate,\n panelRef,\n })\n\n if (!open) return null\n\n const isHorizontal = anchor === 'left' || anchor === 'right'\n\n return (\n <>\n {/* Backdrop — click to dismiss */}\n <html.div\n style={[\n styles.backdrop,\n closing && styles.backdropClosing,\n closing && closeDurationMap[closeDuration],\n !closing && styles.backdropOpen,\n ]}\n aria-hidden\n onClick={handleBackdropClick}\n />\n\n {/* Viewport */}\n <html.div style={[styles.viewport, viewportAnchorMap[anchor]]} data-drawer-viewport=\"\">\n <html.div\n ref={panelRef}\n role=\"dialog\"\n aria-modal={true}\n aria-labelledby={titleId}\n aria-describedby={descriptionId}\n style={[\n styles.panel,\n isHorizontal && styles.panelHorizontal,\n isHorizontal && styles[size],\n !isHorizontal && styles.panelVertical,\n anchor === 'left' && styles.panelLeftBorder,\n closing && slideOutMap[anchor],\n closing && closeDurationMap[closeDuration],\n !closing && slideInMap[anchor],\n ]}\n >\n {children}\n </html.div>\n </html.div>\n </>\n )\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Title ---\n\nfunction Title({children}: {children: ReactNode}) {\n const {titleId} = useDrawer()\n return (\n <html.h2 id={titleId} style={styles.title}>\n {children}\n </html.h2>\n )\n}\n\n// --- Description ---\n\nfunction Description({children}: {children: ReactNode}) {\n const {descriptionId} = useDrawer()\n return (\n <html.p id={descriptionId} style={styles.description}>\n {children}\n </html.p>\n )\n}\n\n// --- Body ---\n\nfunction Body({children}: {children: ReactNode}) {\n return <html.div style={styles.body}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Close ---\n\ninterface CloseProps {\n children?: ReactNode\n 'aria-label'?: string\n}\n\nfunction Close({children, 'aria-label': ariaLabel = 'Close'}: CloseProps) {\n const {requestClose} = useDrawer()\n\n if (children) {\n return (\n <html.div onClick={requestClose} style={styles.inlineWrapper}>\n {children}\n </html.div>\n )\n }\n\n return (\n <html.button onClick={requestClose} aria-label={ariaLabel} style={styles.closeButton}>\n <svg width={16} height={16} viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n )\n}\n\n// --- Export ---\n\nexport const Drawer = {\n Root,\n Trigger,\n Portal,\n Header,\n Title,\n Description,\n Body,\n Footer,\n Close,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n textAlign: 'center',\n },\n message: {\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n lineHeight: typography.lineHeight,\n },\n action: {\n marginTop: spacing.sm,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\ninterface EmptyStateProps {\n message: string\n icon?: ReactNode\n action?: ReactNode\n}\n\nexport function EmptyState({message, icon, action}: EmptyStateProps) {\n return (\n <html.div style={styles.root}>\n {icon}\n <html.p style={styles.message}>{message}</html.p>\n {action && <html.div style={styles.action}>{action}</html.div>}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {typography, typeScale} from './typography.css'\n\nexport const typePresets = css.create({\n // Body\n bodySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize4,\n lineHeight: typeScale.lineHeight4,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n bodyLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize5,\n lineHeight: typeScale.lineHeight5,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n\n // UI\n caption: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingWide,\n },\n label: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightMedium,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n code: {\n fontFamily: typography.fontFamilyMono,\n fontSize: typeScale.fontSize3,\n lineHeight: typeScale.lineHeight3,\n fontWeight: typography.fontWeightNormal,\n letterSpacing: typeScale.letterSpacingNormal,\n },\n overline: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize1,\n lineHeight: typeScale.lineHeight1,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingWide,\n textTransform: 'uppercase' as const,\n },\n\n // Heading\n headingSm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize6,\n lineHeight: typeScale.lineHeight6,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize7,\n lineHeight: typeScale.lineHeight7,\n fontWeight: typography.fontWeightSemibold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize8,\n lineHeight: typeScale.lineHeight8,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n headingXl: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.fontSize9,\n lineHeight: typeScale.lineHeight9,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n\n // Display (fluid)\n displaySm: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displaySm,\n lineHeight: 1.2,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayMd: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayMd,\n lineHeight: 1.15,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n displayLg: {\n fontFamily: typography.fontFamily,\n fontSize: typeScale.displayLg,\n lineHeight: 1.1,\n fontWeight: typography.fontWeightBold,\n letterSpacing: typeScale.letterSpacingTight,\n },\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type HeadingVariant =\n | 'displayLg'\n | 'displayMd'\n | 'displaySm'\n | 'headingXl'\n | 'headingLg'\n | 'headingMd'\n | 'headingSm'\n\ninterface HeadingProps {\n level: 1 | 2 | 3 | 4 | 5 | 6\n variant?: HeadingVariant\n color?: 'default' | 'muted' | 'accent'\n align?: 'start' | 'center' | 'end'\n children: ReactNode\n}\n\nconst defaultVariantMap: Record<number, HeadingVariant> = {\n 1: 'headingXl',\n 2: 'headingLg',\n 3: 'headingMd',\n 4: 'headingSm',\n 5: 'headingSm',\n 6: 'headingSm',\n}\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Heading({level, variant, color = 'default', align, children}: HeadingProps) {\n const resolvedVariant = variant ?? defaultVariantMap[level]\n const style = [typePresets[resolvedVariant], styles[color], align && alignMap[align]]\n\n if (level === 1) return <html.h1 style={style}>{children}</html.h1>\n if (level === 2) return <html.h2 style={style}>{children}</html.h2>\n if (level === 3) return <html.h3 style={style}>{children}</html.h3>\n if (level === 4) return <html.h4 style={style}>{children}</html.h4>\n if (level === 5) return <html.h5 style={style}>{children}</html.h5>\n return <html.h6 style={style}>{children}</html.h6>\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // --- Root ---\n root: {\n display: 'flex',\n flexDirection: 'column',\n margin: 0,\n padding: 0,\n },\n\n // --- Item ---\n item: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n transitionProperty: 'background-color',\n transitionDuration: '120ms',\n cursor: 'default',\n },\n itemSelected: {\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCardHover,\n },\n },\n itemDisabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n itemLast: {\n borderBottomWidth: 0,\n },\n\n // --- Item content area (text + description) ---\n content: {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: 0,\n },\n\n // --- Primary text ---\n text: {\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n color: colors.text,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Description text ---\n description: {\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n color: colors.textMuted,\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n\n // --- Actions slot ---\n actions: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n flexShrink: 0,\n },\n\n // --- Empty state ---\n empty: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xl,\n paddingBottom: spacing.xl,\n color: colors.textMuted,\n fontSize: typography.fontSizeSm,\n },\n})\n","import {type ReactNode, createContext, useContext} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Types ---\n\nexport type ListSelectionMode = 'none' | 'single' | 'multiple'\n\n// --- Context ---\n\ninterface ListContextValue {\n selectionMode: ListSelectionMode\n}\n\nconst ListContext = createContext<ListContextValue>({selectionMode: 'none'})\n\nfunction useList() {\n return useContext(ListContext)\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Selection mode: 'none' (default), 'single', or 'multiple' */\n selectionMode?: ListSelectionMode\n /** Accessible label for the list */\n 'aria-label'?: string\n}\n\nfunction Root({children, selectionMode = 'none', 'aria-label': ariaLabel}: RootProps) {\n return (\n <ListContext.Provider value={{selectionMode}}>\n <html.div role=\"list\" aria-label={ariaLabel} style={styles.root}>\n {children}\n </html.div>\n </ListContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n children: ReactNode\n /** Whether this item is selected */\n selected?: boolean\n /** Whether this item is disabled */\n disabled?: boolean\n /** Click handler for the item */\n onClick?: () => void\n}\n\nfunction Item({children, selected, disabled, onClick}: ItemProps) {\n const {selectionMode} = useList()\n const isSelectable = selectionMode !== 'none'\n\n return (\n <html.div\n role=\"listitem\"\n aria-selected={isSelectable ? selected : undefined}\n aria-disabled={disabled || undefined}\n onClick={disabled ? undefined : onClick}\n style={[styles.item, selected && styles.itemSelected, disabled && styles.itemDisabled]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content: wraps primary text + description ---\n\nfunction Content({children}: {children: ReactNode}) {\n return <html.div style={styles.content}>{children}</html.div>\n}\n\n// --- Text: primary label ---\n\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.p style={styles.text}>{children}</html.p>\n}\n\n// --- Description: secondary text ---\n\nfunction Description({children}: {children: ReactNode}) {\n return <html.p style={styles.description}>{children}</html.p>\n}\n\n// --- Actions: slot for buttons, badges, etc. ---\n\nfunction Actions({children}: {children: ReactNode}) {\n return <html.div style={styles.actions}>{children}</html.div>\n}\n\n// --- Empty: placeholder when list has no items ---\n\nfunction Empty({children}: {children: ReactNode}) {\n return (\n <html.div role=\"listitem\" style={styles.empty}>\n {children}\n </html.div>\n )\n}\n\n// --- Export ---\n\nexport const List = {\n Root,\n Item,\n Content,\n Text: ItemText,\n Description,\n Actions,\n Empty,\n}\n","import {type ReactNode, useCallback, useEffect, useMemo, useRef} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {\n useForm,\n FormProvider,\n type UseFormReturn,\n type DefaultValues,\n type FieldValues,\n type FieldErrors,\n type Path,\n} from 'react-hook-form'\nimport {effectTsResolver} from '@hookform/resolvers/effect-ts'\nimport type {Schema} from 'effect'\nimport {FormContext, type LabelPosition, type NecessityIndicator} from './FormContext'\n\nexport interface FormProps<T extends FieldValues> {\n schema: Schema.Schema<T>\n defaultValues: DefaultValues<T>\n onSubmit: (data: T) => void | Promise<void>\n disabled?: boolean\n labelPosition?: LabelPosition\n necessityIndicator?: NecessityIndicator\n validationErrors?: Partial<Record<Path<T>, string>>\n children: ReactNode | ((methods: UseFormReturn<T>) => ReactNode)\n}\n\nconst formStyles = css.create({\n disabled: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n})\n\nexport function Form<T extends FieldValues>({\n schema,\n defaultValues,\n onSubmit,\n disabled = false,\n labelPosition = 'top',\n necessityIndicator = false,\n validationErrors,\n children,\n}: FormProps<T>) {\n const methods = useForm<T>({\n resolver: effectTsResolver(schema),\n defaultValues,\n mode: 'onTouched',\n reValidateMode: 'onChange',\n })\n\n // Sync server-side validation errors into RHF\n const prevErrorKeysRef = useRef<string[]>([])\n useEffect(() => {\n const prevKeys = prevErrorKeysRef.current\n const nextKeys = validationErrors ? Object.keys(validationErrors) : []\n\n // Clear errors that were removed\n for (const key of prevKeys) {\n if (!nextKeys.includes(key)) {\n methods.clearErrors(key as Path<T>)\n }\n }\n\n // Set new errors\n if (validationErrors) {\n for (const [key, message] of Object.entries(validationErrors)) {\n if (message) {\n methods.setError(key as Path<T>, {type: 'server', message: message as string})\n }\n }\n }\n\n prevErrorKeysRef.current = nextKeys\n }, [validationErrors, methods])\n\n const formRef = useRef<HTMLFormElement>(null)\n\n const onInvalid = useCallback(\n (errors: FieldErrors<T>) => {\n const firstField = Object.keys(errors)[0]\n if (firstField) {\n methods.setFocus(firstField as Path<T>)\n }\n },\n [methods],\n )\n\n const handleSubmit = useCallback(\n (e: Event) => {\n e.preventDefault()\n void methods.handleSubmit(onSubmit, onInvalid)()\n },\n [methods, onSubmit, onInvalid],\n )\n\n useEffect(() => {\n const el = formRef.current\n if (!el) return\n el.addEventListener('submit', handleSubmit)\n return () => el.removeEventListener('submit', handleSubmit)\n }, [handleSubmit])\n\n const formCtx = useMemo(\n () => ({disabled, labelPosition, necessityIndicator}),\n [disabled, labelPosition, necessityIndicator],\n )\n\n return (\n <FormProvider {...methods}>\n <FormContext.Provider value={formCtx}>\n <html.form\n ref={formRef}\n aria-disabled={disabled || undefined}\n style={disabled && formStyles.disabled}\n >\n {typeof children === 'function' ? children(methods) : children}\n </html.form>\n </FormContext.Provider>\n </FormProvider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n // Reset native fieldset chrome\n borderWidth: 0,\n margin: 0,\n padding: 0,\n minWidth: 0,\n },\n legend: {\n // Reset native legend quirks\n padding: 0,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: colors.text,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type FieldsetGap = Exclude<SpacingToken, 'xxl' | 'xxxl'>\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n} as const satisfies Record<FieldsetGap, unknown>\n\n// --- Root ---\ninterface RootProps {\n /** Disables all form controls within the fieldset */\n disabled?: boolean\n /** Gap between child elements */\n gap?: FieldsetGap\n children: ReactNode\n}\n\nfunction Root({disabled = false, gap = 'md', children}: RootProps) {\n return (\n <html.div\n role=\"group\"\n aria-disabled={disabled || undefined}\n style={[styles.root, gapMap[gap], disabled && styles.disabled]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Legend ---\ninterface LegendProps {\n children: ReactNode\n}\n\nfunction Legend({children}: LegendProps) {\n return <html.span style={styles.legend}>{children}</html.span>\n}\n\nexport const Fieldset = {\n Root,\n Legend,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n wrapper: {\n display: 'flex',\n alignItems: 'stretch',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus-within': colors.accent,\n },\n borderRadius: radii.sm,\n overflow: 'hidden',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n backgroundColor: colors.bgCardHover,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n userSelect: 'none',\n borderWidth: 0,\n },\n addonStart: {\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n },\n addonEnd: {\n borderLeftWidth: 1,\n borderLeftStyle: 'solid',\n borderLeftColor: colors.border,\n },\n addonClickable: {\n cursor: 'pointer',\n backgroundColor: {\n default: colors.bgCardHover,\n ':hover': colors.bgCard,\n ':active': colors.bg,\n },\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n addonDisabled: {\n opacity: 0.4,\n cursor: 'not-allowed',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import type {ReactNode} from 'react'\nimport {useMemo} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {InputGroupContext} from './InputGroupContext'\nimport {styles} from './styles.css'\n\n// --- Root ---\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useMemo(() => ({inGroup: true}), [])\n\n return (\n <InputGroupContext.Provider value={ctx}>\n <html.div style={styles.wrapper}>{children}</html.div>\n </InputGroupContext.Provider>\n )\n}\n\n// --- Addon ---\nconst dynamicStyles = css.create({\n minWidth: (value: number | string) => ({minWidth: value}),\n})\n\ninterface AddonProps {\n position?: 'start' | 'end'\n onClick?: () => void\n disabled?: boolean\n /** Optional minimum width to prevent layout shift (e.g. Copy → Copied!) */\n minWidth?: number | string\n children: ReactNode\n}\n\nfunction Addon({position = 'end', onClick, disabled, minWidth, children}: AddonProps) {\n const positionStyle = position === 'start' ? styles.addonStart : styles.addonEnd\n const style = [\n styles.addon,\n isNative && styles.nativeFlex,\n positionStyle,\n onClick && !disabled && styles.addonClickable,\n disabled && styles.addonDisabled,\n minWidth != null && dynamicStyles.minWidth(minWidth),\n ]\n\n if (onClick) {\n return (\n <html.button type=\"button\" onClick={onClick} disabled={disabled} style={style}>\n {children}\n </html.button>\n )\n }\n\n return <html.span style={style}>{children}</html.span>\n}\n\nexport const InputGroup = {\n Root,\n Addon,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n cursor: 'pointer',\n textDecoration: 'none',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n sizeDefault: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n },\n sizeSmall: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n primary: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n color: colors.accentContrast,\n },\n secondary: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n color: colors.textMuted,\n },\n fullWidth: {\n width: '100%',\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type LinkButtonVariant = 'primary' | 'secondary'\nexport type LinkButtonSize = 'default' | 'small'\n\ninterface LinkButtonProps {\n href: string\n variant?: LinkButtonVariant\n size?: LinkButtonSize\n fullWidth?: boolean\n target?: '_blank' | '_self'\n rel?: string\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function LinkButton({\n href,\n variant = 'primary',\n size = 'default',\n fullWidth = false,\n target,\n rel,\n children,\n}: LinkButtonProps) {\n return (\n <html.a\n href={href}\n target={target}\n rel={rel}\n style={[styles.base, sizeMap[size], styles[variant], fullWidth && styles.fullWidth]}\n >\n {children}\n </html.a>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: colors.bgCard,\n },\n bordered: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n },\n\n header: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n gap: spacing.md,\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n },\n\n body: {\n flex: 1,\n overflowY: 'auto',\n // Minimal inset prevents child borders from touching panel structural borders\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n },\n bodyPadded: {\n paddingTop: spacing.lg,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n paddingBottom: spacing.lg,\n },\n\n footer: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: spacing.sm,\n paddingTop: spacing.md,\n paddingBottom: spacing.md,\n paddingLeft: spacing.lg,\n paddingRight: spacing.lg,\n borderTopWidth: 1,\n borderTopStyle: 'solid',\n borderTopColor: colors.border,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n /** Adds an outer border. Default: false */\n bordered?: boolean\n}\n\nfunction Root({children, bordered = false}: RootProps) {\n return <html.div style={[styles.root, bordered && styles.bordered]}>{children}</html.div>\n}\n\n// --- Header ---\n\nfunction Header({children}: {children: ReactNode}) {\n return <html.div style={styles.header}>{children}</html.div>\n}\n\n// --- Body ---\n\ninterface BodyProps {\n children: ReactNode\n /** Adds inner padding. Default: true */\n padded?: boolean\n}\n\nfunction Body({children, padded = true}: BodyProps) {\n return <html.div style={[styles.body, padded && styles.bodyPadded]}>{children}</html.div>\n}\n\n// --- Footer ---\n\nfunction Footer({children}: {children: ReactNode}) {\n return <html.div style={styles.footer}>{children}</html.div>\n}\n\n// --- Export ---\n\nexport const Panel = {\n Root,\n Header,\n Body,\n Footer,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n rootHorizontal: {\n flexDirection: 'row',\n },\n item: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n itemDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n circle: {\n width: 18,\n height: 18,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.full,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transitionProperty: 'background-color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n circleUnchecked: {\n backgroundColor: colors.bg,\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n circleChecked: {\n backgroundColor: colors.bg,\n borderColor: colors.accent,\n },\n dot: {\n width: 8,\n height: 8,\n borderRadius: radii.full,\n backgroundColor: colors.accent,\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\n },\n})\n","import {type ReactNode, createContext, useContext, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ninterface RadioGroupContextValue {\n value: string\n onSelect: (value: string) => void\n disabled: boolean\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nfunction useRadioGroup() {\n const ctx = useContext(RadioGroupContext)\n if (!ctx) {\n throw new Error('RadioGroup.Item must be used within RadioGroup.Root')\n }\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n orientation = 'vertical',\n disabled = false,\n children,\n}: RootProps) {\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const onSelect = useCallback(\n (itemValue: string) => {\n if (!disabled) {\n setValue(itemValue)\n }\n },\n [disabled, setValue],\n )\n\n return (\n <RadioGroupContext.Provider value={{value, onSelect, disabled}}>\n <html.div\n role=\"radiogroup\"\n aria-orientation={orientation}\n style={[styles.root, orientation === 'horizontal' && styles.rootHorizontal]}\n >\n {children}\n </html.div>\n </RadioGroupContext.Provider>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Item({value, disabled: itemDisabled = false, children}: ItemProps) {\n const {value: groupValue, onSelect, disabled: groupDisabled} = useRadioGroup()\n const isChecked = groupValue === value\n const isDisabled = groupDisabled || itemDisabled\n\n const handleClick = () => {\n if (!isDisabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.label style={[styles.item, isDisabled && styles.itemDisabled]} onClick={handleClick}>\n <html.input\n type=\"radio\"\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => onSelect(value)}\n style={styles.input}\n />\n <html.span\n style={[styles.circle, isChecked ? styles.circleChecked : styles.circleUnchecked]}\n aria-hidden\n >\n {isChecked && <html.span style={styles.dot} />}\n </html.span>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n\nexport const RadioGroup = {\n Root,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n overflow: 'hidden',\n },\n viewport: {\n width: '100%',\n height: '100%',\n overflowX: 'auto',\n overflowY: 'auto',\n // Hide native scrollbar\n scrollbarWidth: 'none',\n },\n content: {\n minWidth: '100%',\n minHeight: '100%',\n },\n scrollbar: {\n position: 'absolute',\n zIndex: 1,\n display: 'flex',\n touchAction: 'none',\n userSelect: 'none',\n transitionProperty: 'opacity',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.standard,\n },\n scrollbarVertical: {\n top: 0,\n right: 0,\n bottom: 0,\n width: 8,\n flexDirection: 'column',\n paddingTop: 2,\n paddingBottom: 2,\n paddingRight: 2,\n },\n scrollbarHorizontal: {\n left: 0,\n right: 0,\n bottom: 0,\n height: 8,\n flexDirection: 'row',\n paddingLeft: 2,\n paddingRight: 2,\n paddingBottom: 2,\n },\n scrollbarHidden: {\n opacity: 0,\n },\n scrollbarVisible: {\n opacity: 1,\n },\n thumb: {\n position: 'relative',\n flex: 1,\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.full,\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n // Dynamic styles — simple identifier params only (StyleX constraint)\n viewportMaxHeight: (maxHeight: number | string) => ({\n maxHeight,\n }),\n thumbVertical: (height: string, transform: string) => ({\n height,\n transform,\n }),\n thumbHorizontal: (width: string, transform: string) => ({\n width,\n transform,\n }),\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ScrollAreaContextValue {\n viewportRef: React.RefObject<HTMLDivElement | null>\n contentRef: React.RefObject<HTMLDivElement | null>\n viewportId: string\n scrollTop: number\n scrollLeft: number\n scrollHeight: number\n scrollWidth: number\n clientHeight: number\n clientWidth: number\n scrolling: boolean\n}\n\nexport const ScrollAreaContext = createContext<ScrollAreaContextValue | null>(null)\n\nexport function useScrollArea() {\n const ctx = useContext(ScrollAreaContext)\n if (!ctx) throw new Error('ScrollArea compound components must be used within ScrollArea.Root')\n return ctx\n}\n","import {useState, useCallback, useRef, useEffect, useId} from 'react'\nimport type {ScrollAreaContextValue} from './ScrollAreaContext'\n\nexport function useScrollAreaRoot(): ScrollAreaContextValue {\n const viewportId = useId()\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const contentRef = useRef<HTMLDivElement | null>(null)\n const [scrollTop, setScrollTop] = useState(0)\n const [scrollLeft, setScrollLeft] = useState(0)\n const [scrollHeight, setScrollHeight] = useState(0)\n const [scrollWidth, setScrollWidth] = useState(0)\n const [clientHeight, setClientHeight] = useState(0)\n const [clientWidth, setClientWidth] = useState(0)\n const [scrolling, setScrolling] = useState(false)\n const scrollTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleScroll = useCallback(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n setScrollTop(vp.scrollTop)\n setScrollLeft(vp.scrollLeft)\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n setScrolling(true)\n\n if (scrollTimerRef.current) clearTimeout(scrollTimerRef.current)\n scrollTimerRef.current = setTimeout(() => setScrolling(false), 1000)\n }, [])\n\n // Observe viewport size changes\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n\n const observer = new ResizeObserver(() => {\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n })\n observer.observe(vp)\n // Initial measurement\n setScrollHeight(vp.scrollHeight)\n setScrollWidth(vp.scrollWidth)\n setClientHeight(vp.clientHeight)\n setClientWidth(vp.clientWidth)\n\n return () => observer.disconnect()\n }, [])\n\n // Attach scroll listener directly to ensure we capture it\n useEffect(() => {\n const vp = viewportRef.current\n if (!vp) return\n vp.addEventListener('scroll', handleScroll, {passive: true})\n return () => vp.removeEventListener('scroll', handleScroll)\n }, [handleScroll])\n\n return {\n viewportRef,\n contentRef,\n viewportId,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n scrolling,\n }\n}\n","import {type ReactNode, useRef, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ScrollAreaContext, useScrollArea} from './ScrollAreaContext'\nimport {useScrollAreaRoot} from './useScrollAreaRoot'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n}\n\nfunction Root({children}: RootProps) {\n const ctx = useScrollAreaRoot()\n\n return (\n <ScrollAreaContext.Provider value={ctx}>\n <html.div style={styles.root}>{children}</html.div>\n </ScrollAreaContext.Provider>\n )\n}\n\n// --- Viewport ---\n\ninterface ViewportProps {\n children: ReactNode\n maxHeight?: number | string\n}\n\nfunction Viewport({children, maxHeight}: ViewportProps) {\n const {viewportRef, viewportId} = useScrollArea()\n\n return (\n <html.div\n ref={viewportRef}\n id={viewportId}\n tabIndex={0}\n role=\"region\"\n aria-label=\"Scrollable content\"\n style={[styles.viewport, maxHeight != null && styles.viewportMaxHeight(maxHeight)]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Content ---\n\ninterface ContentProps {\n children: ReactNode\n}\n\nfunction Content({children}: ContentProps) {\n const {contentRef} = useScrollArea()\n return (\n <html.div ref={contentRef} style={styles.content}>\n {children}\n </html.div>\n )\n}\n\n// --- Scrollbar ---\n\ntype ScrollbarOrientation = 'vertical' | 'horizontal'\n\ninterface ScrollbarProps {\n orientation?: ScrollbarOrientation\n children: ReactNode\n}\n\nfunction Scrollbar({orientation = 'vertical', children}: ScrollbarProps) {\n const {\n viewportId,\n scrolling,\n scrollTop,\n scrollLeft,\n scrollHeight,\n scrollWidth,\n clientHeight,\n clientWidth,\n } = useScrollArea()\n\n // Hide scrollbar when content fits\n const hasOverflow =\n orientation === 'vertical' ? scrollHeight > clientHeight : scrollWidth > clientWidth\n\n if (!hasOverflow) return null\n\n const isVertical = orientation === 'vertical'\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const valueNow = maxScroll > 0 ? Math.round((scrollOffset / maxScroll) * 100) : 0\n\n return (\n <html.div\n role=\"scrollbar\"\n aria-controls={viewportId}\n aria-orientation={orientation}\n aria-valuenow={valueNow}\n aria-valuemin={0}\n aria-valuemax={100}\n style={[\n styles.scrollbar,\n isVertical ? styles.scrollbarVertical : styles.scrollbarHorizontal,\n scrolling ? styles.scrollbarVisible : styles.scrollbarHidden,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- Thumb ---\n\ninterface ThumbProps {\n orientation?: ScrollbarOrientation\n}\n\nfunction Thumb({orientation = 'vertical'}: ThumbProps) {\n const {viewportRef, scrollTop, scrollLeft, scrollHeight, scrollWidth, clientHeight, clientWidth} =\n useScrollArea()\n const draggingRef = useRef(false)\n const startPosRef = useRef(0)\n const startScrollRef = useRef(0)\n\n const isVertical = orientation === 'vertical'\n\n const thumbSizePercent = isVertical\n ? Math.max((clientHeight / scrollHeight) * 100, 10)\n : Math.max((clientWidth / scrollWidth) * 100, 10)\n\n const maxScroll = isVertical ? scrollHeight - clientHeight : scrollWidth - clientWidth\n const trackSize = isVertical ? clientHeight : clientWidth\n const thumbPixelSize = (thumbSizePercent / 100) * trackSize\n const scrollOffset = isVertical ? scrollTop : scrollLeft\n const thumbOffset = maxScroll > 0 ? (scrollOffset / maxScroll) * (trackSize - thumbPixelSize) : 0\n\n const thumbStyle = isVertical\n ? styles.thumbVertical(`${thumbSizePercent}%`, `translateY(${thumbOffset}px)`)\n : styles.thumbHorizontal(`${thumbSizePercent}%`, `translateX(${thumbOffset}px)`)\n\n const handlePointerDown = useCallback(\n (e: React.PointerEvent) => {\n e.preventDefault()\n draggingRef.current = true\n startPosRef.current = isVertical ? e.clientY : e.clientX\n startScrollRef.current = isVertical\n ? (viewportRef.current?.scrollTop ?? 0)\n : (viewportRef.current?.scrollLeft ?? 0)\n ;(e.target as HTMLElement).setPointerCapture(e.pointerId)\n },\n [isVertical, viewportRef],\n )\n\n const handlePointerMove = useCallback(\n (e: React.PointerEvent) => {\n if (!draggingRef.current) return\n const vp = viewportRef.current\n if (!vp) return\n\n const delta = (isVertical ? e.clientY : e.clientX) - startPosRef.current\n const scrollRatio = maxScroll / (trackSize - thumbPixelSize)\n const scrollDelta = delta * scrollRatio\n\n if (isVertical) {\n vp.scrollTop = startScrollRef.current + scrollDelta\n } else {\n vp.scrollLeft = startScrollRef.current + scrollDelta\n }\n },\n [isVertical, maxScroll, trackSize, thumbPixelSize, viewportRef],\n )\n\n const handlePointerUp = useCallback(() => {\n draggingRef.current = false\n }, [])\n\n return (\n <html.div\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n style={[styles.thumb, thumbStyle]}\n />\n )\n}\n\nexport const ScrollArea = {\n Root,\n Viewport,\n Content,\n Scrollbar,\n Thumb,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n inputWrapper: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.xs,\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n inputWrapperFocused: {\n borderColor: colors.accent,\n },\n input: {\n flex: 1,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: 'transparent',\n borderWidth: 0,\n outline: 'none',\n minWidth: 0,\n },\n trigger: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.xs,\n paddingRight: spacing.xs,\n backgroundColor: 'transparent',\n borderWidth: 0,\n color: colors.textMuted,\n cursor: 'pointer',\n },\n backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 49,\n },\n popup: {\n // Position is `fixed` and the top/left/width are applied inline by Popup\n // (computed from the root's bounding rect) so the dropdown can escape any\n // ancestor with `overflow: hidden` or `transform` (e.g. inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n maxHeight: 200,\n overflowY: 'auto',\n // Re-enable pointer events: the portal mount is pointer-events: none so\n // clicks fall through except on the popup itself.\n pointerEvents: 'auto',\n },\n item: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n itemSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n itemHighlighted: {\n backgroundColor: colors.bgCardHover,\n },\n itemHidden: {\n display: 'none',\n },\n empty: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n color: colors.textMuted,\n },\n hidden: {\n display: 'none',\n },\n // Dynamic position — applied at runtime from the input's bounding rect.\n popupPosition: (top: number, left: number, width: number) => ({\n top,\n left,\n width,\n }),\n})\n","import {createContext, useContext} from 'react'\n\nexport interface ComboboxContextValue {\n open: boolean\n openPopup: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n inputValue: string\n setInputValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n inputRef: React.RefObject<HTMLInputElement | null>\n rootRef: React.RefObject<HTMLDivElement | null>\n}\n\nexport const ComboboxContext = createContext<ComboboxContextValue | null>(null)\n\nexport function useCombobox() {\n const ctx = useContext(ComboboxContext)\n if (!ctx) throw new Error('Combobox compound components must be used within Combobox.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ComboboxContextValue} from './ComboboxContext'\n\ninterface UseComboboxRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useComboboxRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n inputValue: controlledInputValue,\n onInputChange,\n initialLabels,\n}: UseComboboxRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n // Seed the visible text from the initially-selected value's label, so a\n // defaultValue/value shows its label on mount — and so the reconcile effect\n // below doesn't see \"value set but input empty\" and wipe the selection.\n const [internalInputValue, setInternalInputValue] = useState<string>(() => {\n const initial = controlledValue ?? defaultValue\n return initial ? (initialLabels?.[initial] ?? '') : ''\n })\n const inputValue = controlledInputValue !== undefined ? controlledInputValue : internalInputValue\n const setInputValue = useCallback(\n (v: string) => {\n if (controlledInputValue === undefined) setInternalInputValue(v)\n onInputChange?.(v)\n },\n [controlledInputValue, onInputChange],\n )\n\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const inputRef = useRef<HTMLInputElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n }, [])\n\n const openPopup = useCallback(() => {\n setOpen(true)\n // Highlight the selected item or first visible item\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n }, [value])\n\n const selectValue = useCallback(\n (itemValue: string) => {\n setValue(itemValue)\n // Set input to show the selected label\n const label = labels[itemValue] ?? itemValue\n setInputValue(label)\n close()\n inputRef.current?.focus()\n },\n [setValue, labels, setInputValue, close],\n )\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Get visible items (those matching the filter)\n const getVisibleOrder = useCallback(() => {\n const query = inputValue.toLowerCase()\n if (!query) return orderRef.current\n return orderRef.current.filter((id) => {\n const item = itemsRef.current.get(id)\n if (!item) return false\n const label = labels[item.value] ?? item.value\n return label.toLowerCase().includes(query)\n })\n }, [inputValue, labels])\n\n // Keyboard navigation\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const visibleOrder = getVisibleOrder()\n if (visibleOrder.length === 0 && e.key !== 'Escape' && e.key !== 'Tab') return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n if (!open) {\n setOpen(true)\n return\n }\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : -1\n return visibleOrder[(idx + 1) % visibleOrder.length] ?? null\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? visibleOrder.indexOf(prev) : 0\n return visibleOrder[(idx - 1 + visibleOrder.length) % visibleOrder.length] ?? null\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(visibleOrder[0] ?? null)\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(visibleOrder[visibleOrder.length - 1] ?? null)\n break\n }\n case 'Enter': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = itemsRef.current.get(prev)\n if (item) selectValue(item.value)\n } else if (!inputValue.trim()) {\n // Empty input + Enter = clear selection (reset to \"All\")\n selectValue('')\n }\n return prev\n })\n break\n }\n case 'Escape': {\n e.preventDefault()\n close()\n inputRef.current?.focus()\n break\n }\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, selectValue, getVisibleOrder])\n\n // Scroll highlighted item into view\n useEffect(() => {\n if (!highlightedId) return\n const item = itemsRef.current.get(highlightedId)\n item?.element.scrollIntoView({block: 'nearest'})\n }, [highlightedId])\n\n // Reconcile input text with the committed value once the popup closes.\n // Three cases when transitioning from open → closed:\n // - inputValue is empty: user cleared the field, treat that as\n // \"remove the selection\" so the consumer's onValueChange fires\n // with null and downstream UI (e.g. dependent fields) can reset.\n // - inputValue doesn't match the selected label: user typed something\n // but didn't pick anything; restore the label so the visible text\n // and the committed value stay consistent.\n // - inputValue equals the selected label: nothing to do.\n useEffect(() => {\n if (open) return\n // Treat an empty value (null OR '') as \"no selection\" — nothing to\n // reconcile. Without this, a controlled value=\"\" (e.g. a table column\n // filter) fires setValue(null) every render → inline onValueChange →\n // parent state change → re-render → infinite \"Maximum update depth\" loop.\n if (!value) return\n if (inputValue === '') {\n setValue(null)\n return\n }\n if (labels[value] && inputValue !== labels[value]) {\n setInputValue(labels[value])\n }\n }, [open, value, labels, inputValue, setInputValue, setValue])\n\n const ctx: ComboboxContextValue = useMemo(\n () => ({\n open,\n openPopup,\n close,\n value,\n setValue: selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n inputRef,\n rootRef,\n }),\n [\n open,\n openPopup,\n close,\n value,\n selectValue,\n inputValue,\n setInputValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const lightTheme = css.createTheme(colors, {\n bg: '#ffffff',\n bgCard: '#f5f5f5',\n bgCardHover: '#ebebeb',\n text: '#1a1a1a',\n textMuted: '#4a4a4a',\n accent: '#1e40af',\n accentHover: '#1a3799',\n accentContrast: '#ffffff',\n border: '#d4d4d4',\n error: '#991b1b',\n errorHover: '#7f1d1d',\n errorBg: 'rgba(153, 27, 27, 0.08)',\n errorBorder: 'rgba(153, 27, 27, 0.3)',\n errorText: '#7f1d1d',\n errorContrast: '#ffffff',\n success: '#166534',\n successBg: 'rgba(22, 101, 52, 0.08)',\n successBorder: 'rgba(22, 101, 52, 0.3)',\n successText: '#14532d',\n warning: '#92400e',\n warningBg: 'rgba(146, 64, 14, 0.08)',\n warningBorder: 'rgba(146, 64, 14, 0.3)',\n warningText: '#78350f',\n info: '#1e40af',\n infoBg: 'rgba(30, 64, 175, 0.08)',\n infoBorder: 'rgba(30, 64, 175, 0.3)',\n infoText: '#1e40af',\n})\n\nexport const lightShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.08)',\n md: '0 4px 12px rgba(0, 0, 0, 0.12)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.16)',\n})\n","import {css} from 'react-strict-dom'\nimport {colors} from '../tokens/colors.css'\nimport {shadows} from '../tokens/shadows.css'\n\nexport const highContrastTheme = css.createTheme(colors, {\n bg: '#000000',\n bgCard: '#111111',\n bgCardHover: '#1a1a1a',\n text: '#ffffff',\n textMuted: '#b0b0b0',\n accent: '#60a5fa',\n accentHover: '#93c5fd',\n accentContrast: '#000000',\n border: '#555555',\n error: '#f87171',\n errorHover: '#fca5a5',\n errorBg: 'rgba(248, 113, 113, 0.15)',\n errorBorder: 'rgba(248, 113, 113, 0.5)',\n errorText: '#fca5a5',\n errorContrast: '#000000',\n success: '#4ade80',\n successBg: 'rgba(74, 222, 128, 0.15)',\n successBorder: 'rgba(74, 222, 128, 0.5)',\n successText: '#86efac',\n warning: '#fcd34d',\n warningBg: 'rgba(252, 211, 77, 0.15)',\n warningBorder: 'rgba(252, 211, 77, 0.5)',\n warningText: '#fef08a',\n info: '#60a5fa',\n infoBg: 'rgba(96, 165, 250, 0.15)',\n infoBorder: 'rgba(96, 165, 250, 0.5)',\n infoText: '#bfdbfe',\n})\n\nexport const highContrastShadows = css.createTheme(shadows, {\n sm: '0 2px 4px rgba(0, 0, 0, 0.6)',\n md: '0 4px 12px rgba(0, 0, 0, 0.7)',\n lg: '0 8px 24px rgba(0, 0, 0, 0.8)',\n})\n","import {createContext, type ReactNode, useContext, useState} from 'react'\nimport {css, html} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {lightTheme, lightShadows} from '@duro-app/tokens/themes/light.css'\nimport {highContrastTheme, highContrastShadows} from '@duro-app/tokens/themes/high-contrast.css'\n\nexport type ThemeName = 'dark' | 'light' | 'high-contrast'\n\ninterface ThemeProviderProps {\n theme?: ThemeName\n children: ReactNode\n}\n\nconst themeMap: Partial<Record<ThemeName, readonly [typeof lightTheme, typeof lightShadows]>> = {\n light: [lightTheme, lightShadows],\n 'high-contrast': [highContrastTheme, highContrastShadows],\n}\n\nconst styles = css.create({\n root: {\n display: 'contents',\n color: colors.text,\n },\n // Sibling overlay where floating popups (Combobox, Menu, Tooltip) portal to.\n // Lives inside ThemeProvider so theme tokens cascade. Fixed + inset 0 so\n // popups can position freely with viewport coords; pointer-events: none lets\n // clicks fall through except where children re-enable them.\n portalMount: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n pointerEvents: 'none',\n // Above Dialog (1001) so popups inside dialogs render on top.\n zIndex: 1100,\n },\n})\n\n// react-strict-dom's style prop rejects Theme<VarGroup<{named keys}>> because the\n// concrete VarGroup lacks the generic index signature. This is a known typing gap.\ntype DivStyle = Parameters<typeof html.div>[0]['style']\n\nconst PortalMountContext = createContext<HTMLElement | null>(null)\n\nexport function usePortalMount(): HTMLElement | null {\n return useContext(PortalMountContext)\n}\n\nexport function ThemeProvider({theme = 'dark', children}: ThemeProviderProps) {\n const overrides = themeMap[theme]\n const themeStyles = [overrides?.[0], overrides?.[1], styles.root] as DivStyle\n const [mount, setMount] = useState<HTMLElement | null>(null)\n\n return (\n <html.div data-theme={theme} style={themeStyles}>\n <PortalMountContext.Provider value={mount}>{children}</PortalMountContext.Provider>\n <html.div ref={setMount} data-portal-mount style={styles.portalMount} />\n </html.div>\n )\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {ComboboxContext, useCombobox} from './ComboboxContext'\nimport {useComboboxRoot} from './useComboboxRoot'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n inputValue?: string\n onInputChange?: (value: string) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({\n name,\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n children,\n}: RootProps) {\n const {ctx, rootRef} = useComboboxRoot({\n defaultValue,\n value,\n onValueChange,\n inputValue,\n onInputChange,\n initialLabels,\n })\n\n return (\n <ComboboxContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </ComboboxContext.Provider>\n )\n}\n\n// --- Input ---\nfunction Input({placeholder, children}: {placeholder?: string; children?: ReactNode}) {\n const {open, openPopup, close, inputValue, setInputValue, listboxId, highlightedId, inputRef} =\n useCombobox()\n const localRef = useRef<HTMLInputElement>(null)\n const [focused, setFocused] = useState(false)\n\n useEffect(() => {\n inputRef.current = localRef.current\n })\n\n return (\n <html.div style={[styles.inputWrapper, focused && styles.inputWrapperFocused]}>\n <html.input\n ref={localRef}\n type=\"text\"\n role={'combobox' as 'listbox'}\n value={inputValue}\n placeholder={placeholder}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\n aria-autocomplete={'list' as 'none'}\n autoComplete=\"off\"\n style={styles.input}\n onFocus={() => {\n setFocused(true)\n openPopup()\n }}\n onBlur={() => {\n setFocused(false)\n // Delay close to allow item click to register\n setTimeout(close, 150)\n }}\n onChange={(e: any) => {\n setInputValue(e.target.value)\n if (!open) openPopup()\n }}\n />\n {children}\n </html.div>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({children}: {children?: ReactNode}) {\n const {open, openPopup, close, inputRef} = useCombobox()\n\n return (\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-label={open ? 'Close' : 'Open'}\n onClick={() => {\n if (open) {\n close()\n } else {\n openPopup()\n }\n inputRef.current?.focus()\n }}\n style={styles.trigger}\n >\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.button>\n )\n}\n\n// --- Popup ---\n// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates so it escapes ancestor `overflow: hidden` / `transform`\n// containing blocks (notably Dialog and Drawer).\nfunction Popup({children}: {children: ReactNode}) {\n const {open, listboxId, rootRef} = useCombobox()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the root each time the popup opens, and re-measure on scroll/resize\n // so the dropdown follows the input. Capture-phase scroll listener catches\n // scroll on any ancestor (e.g. Dialog body).\n useLayoutEffect(() => {\n if (!open) {\n setCoords(null)\n return\n }\n const update = () => {\n const el = rootRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // Position immediately below the input with a small gap. `xs` token = 4px.\n setCoords({top: rect.bottom + 4, left: rect.left, width: rect.width})\n }\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, rootRef])\n\n if (!open || !coords) return null\n\n const node = (\n <html.div\n id={listboxId}\n role=\"listbox\"\n style={[styles.popup, styles.popupPosition(coords.top, coords.left, coords.width)]}\n >\n {children}\n </html.div>\n )\n\n // SSR / pre-mount fallback: render inline (will be invisible under\n // overflow:hidden parents but won't crash). Once the mount is available,\n // portal into it.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {\n value: selectedValue,\n setValue,\n inputValue,\n labels,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useCombobox()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\n\n // Filter: check if this item matches the input\n const label = labels[itemValue] ?? itemValue\n const query = inputValue.toLowerCase()\n const isVisible = !query || label.toLowerCase().includes(query)\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n if (!isVisible) return null\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={() => setValue(itemValue)}\n onPointerEnter={() => setHighlightedId(id)}\n style={[\n styles.item,\n isSelected && styles.itemSelected,\n isHighlighted && styles.itemHighlighted,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\n// --- Empty ---\nfunction Empty({children}: {children: ReactNode}) {\n const {open, inputValue, labels} = useCombobox()\n\n if (!open) return null\n\n // Check if any items are visible\n const query = inputValue.toLowerCase()\n const hasVisibleItems = query\n ? Object.values(labels).some((label) => label.toLowerCase().includes(query))\n : true\n\n if (hasVisibleItems) return null\n\n return <html.div style={styles.empty}>{children}</html.div>\n}\n\nexport const Combobox = {\n Root,\n Input,\n Trigger,\n Popup,\n Item,\n ItemText,\n Empty,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {duration} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n trigger: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: spacing.sm,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n color: colors.text,\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.accent,\n },\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n },\n value: {\n color: colors.text,\n },\n placeholder: {\n color: colors.textMuted,\n },\n icon: {\n display: 'flex',\n alignItems: 'center',\n color: colors.textMuted,\n },\n backdrop: {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 49,\n // The portal mount is pointer-events: none, so re-enable here to catch\n // outside clicks that close the popup.\n pointerEvents: 'auto',\n },\n popup: {\n // Position is `fixed` and top/left/minWidth are applied inline by Popup\n // (computed from the trigger's bounding rect) so the dropdown escapes any\n // ancestor with `overflow: hidden` / `transform` (notably inside a Dialog).\n position: 'fixed',\n backgroundColor: colors.bgCard,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderRadius: radii.sm,\n boxShadow: shadows.md,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n minWidth: 120,\n maxHeight: 280,\n overflowY: 'auto',\n zIndex: 50,\n // Re-enable pointer events: the portal mount is pointer-events: none.\n pointerEvents: 'auto',\n },\n popupPosition: (top: number, left: number, minWidth: number) => ({\n top,\n left,\n minWidth,\n }),\n item: {\n display: 'flex',\n alignItems: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontSize: typography.fontSizeSm,\n fontFamily: typography.fontFamily,\n color: colors.text,\n borderRadius: radii.sm,\n cursor: 'pointer',\n backgroundColor: 'transparent',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n },\n itemSelected: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n },\n itemHighlighted: {\n backgroundColor: colors.bgCardHover,\n },\n hidden: {\n display: 'none',\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SelectContextValue {\n open: boolean\n toggle: () => void\n close: () => void\n value: string | null\n setValue: (value: string) => void\n labels: Record<string, string>\n registerLabel: (value: string, label: string) => void\n listboxId: string\n highlightedId: string | null\n setHighlightedId: (id: string | null) => void\n registerItem: (id: string, value: string, element: HTMLElement) => () => void\n triggerRef: React.RefObject<HTMLButtonElement | null>\n}\n\nexport const SelectContext = createContext<SelectContextValue | null>(null)\n\nexport function useSelect() {\n const ctx = useContext(SelectContext)\n if (!ctx) throw new Error('Select compound components must be used within Select.Root')\n return ctx\n}\n","import {useState, useCallback, useMemo, useRef, useId, useEffect} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {SelectContextValue} from './SelectContext'\n\ninterface UseSelectRootOptions {\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n}\n\nexport function useSelectRoot({\n defaultValue,\n value: controlledValue,\n onValueChange,\n initialLabels,\n}: UseSelectRootOptions) {\n const [value, setValue] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange,\n )\n const [open, setOpen] = useState(false)\n const [labels, setLabels] = useState<Record<string, string>>(initialLabels ?? {})\n const [highlightedId, setHighlightedId] = useState<string | null>(null)\n const listboxId = useId()\n const rootRef = useRef<HTMLDivElement>(null)\n const triggerRef = useRef<HTMLButtonElement | null>(null)\n const itemsRef = useRef(new Map<string, {value: string; element: HTMLElement}>())\n const orderRef = useRef<string[]>([])\n\n const close = useCallback(() => {\n setOpen(false)\n setHighlightedId(null)\n triggerRef.current?.focus()\n }, [])\n\n const toggle = useCallback(() => {\n setOpen((prev) => {\n if (!prev) {\n const items = itemsRef.current\n const order = orderRef.current\n let found: string | null = null\n for (const id of order) {\n const item = items.get(id)\n if (item && item.value === value) {\n found = id\n break\n }\n }\n setHighlightedId(found ?? (order.length > 0 ? order[0] : null))\n } else {\n setHighlightedId(null)\n }\n return !prev\n })\n }, [value])\n\n const registerLabel = useCallback((v: string, label: string) => {\n setLabels((prev) => {\n if (prev[v] === label) return prev\n return {...prev, [v]: label}\n })\n }, [])\n\n const registerItem = useCallback((id: string, itemValue: string, element: HTMLElement) => {\n itemsRef.current.set(id, {value: itemValue, element})\n const map = itemsRef.current\n const ids = [...map.keys()]\n ids.sort((a, b) => {\n const elA = map.get(a)?.element\n const elB = map.get(b)?.element\n if (!elA || !elB) return 0\n return elA.compareDocumentPosition(elB) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1\n })\n orderRef.current = ids\n return () => {\n itemsRef.current.delete(id)\n orderRef.current = orderRef.current.filter((i) => i !== id)\n }\n }, [])\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const root = rootRef.current\n if (!root || !open) return\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const items = itemsRef.current\n if (order.length === 0) return\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : -1\n return order[(idx + 1) % order.length]\n })\n break\n }\n case 'ArrowUp': {\n e.preventDefault()\n setHighlightedId((prev) => {\n const idx = prev ? order.indexOf(prev) : 0\n return order[(idx - 1 + order.length) % order.length]\n })\n break\n }\n case 'Home': {\n e.preventDefault()\n setHighlightedId(order[0])\n break\n }\n case 'End': {\n e.preventDefault()\n setHighlightedId(order[order.length - 1])\n break\n }\n case 'Enter':\n case ' ': {\n e.preventDefault()\n setHighlightedId((prev) => {\n if (prev) {\n const item = items.get(prev)\n if (item) {\n setValue(item.value)\n close()\n }\n }\n return prev\n })\n break\n }\n case 'Escape':\n case 'Tab': {\n close()\n break\n }\n }\n }\n\n root.addEventListener('keydown', handleKeyDown)\n return () => root.removeEventListener('keydown', handleKeyDown)\n }, [open, close, setValue])\n\n const ctx: SelectContextValue = useMemo(\n () => ({\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n triggerRef,\n }),\n [\n open,\n toggle,\n close,\n value,\n setValue,\n labels,\n registerLabel,\n listboxId,\n highlightedId,\n setHighlightedId,\n registerItem,\n ],\n )\n\n return {ctx, rootRef}\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {SelectContext, useSelect} from './SelectContext'\nimport {useSelectRoot} from './useSelectRoot'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\n\n// --- Root ---\ninterface RootProps {\n name?: string\n defaultValue?: string\n value?: string\n onValueChange?: (value: string | null) => void\n initialLabels?: Record<string, string>\n children: ReactNode\n}\n\nfunction Root({name, defaultValue, value, onValueChange, initialLabels, children}: RootProps) {\n const {ctx, rootRef} = useSelectRoot({defaultValue, value, onValueChange, initialLabels})\n\n return (\n <SelectContext.Provider value={ctx}>\n <html.div ref={rootRef} style={styles.root}>\n {name && <html.input type=\"hidden\" name={name} value={ctx.value ?? ''} />}\n {children}\n </html.div>\n </SelectContext.Provider>\n )\n}\n\n// --- Trigger ---\nfunction Trigger({\n children,\n 'aria-label': ariaLabel,\n}: {\n children: ReactNode\n 'aria-label'?: string\n}) {\n const {open, toggle, listboxId, highlightedId, triggerRef} = useSelect()\n const localRef = useRef<HTMLButtonElement>(null)\n // Inside a <Field.Root>, adopt its controlId so <Field.Label for={controlId}>\n // labels the trigger (a labelable <button>) — no manual aria-label needed; and\n // surface the field's description/error + invalid state, mirroring <Input>.\n const fieldCtx = useFieldContext()\n const describedBy = fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n\n // Sync local ref to context triggerRef\n useEffect(() => {\n triggerRef.current = localRef.current\n })\n\n return (\n <html.button\n ref={localRef}\n id={fieldCtx?.controlId}\n type=\"button\"\n role={'combobox' as 'listbox'}\n onClick={toggle}\n aria-label={ariaLabel}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n aria-activedescendant={highlightedId ?? undefined}\n aria-describedby={describedBy || undefined}\n aria-invalid={fieldCtx?.invalid || undefined}\n style={styles.trigger}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Value ---\nfunction Value({placeholder}: {placeholder?: string}) {\n const {value, labels} = useSelect()\n const display = value ? (labels[value] ?? value) : null\n\n return (\n <html.span style={display ? styles.value : styles.placeholder}>\n {display ?? placeholder}\n </html.span>\n )\n}\n\n// --- Icon ---\nfunction Icon({children}: {children?: ReactNode}) {\n return (\n <html.span style={styles.icon}>\n {children ?? (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 9l6 6 6-6\" />\n </svg>\n )}\n </html.span>\n )\n}\n\n// --- Popup ---\n// Rendered into the ThemeProvider portal mount and positioned with viewport\n// coordinates (measured off the trigger) so it escapes ancestor\n// `overflow: hidden` / `transform` containing blocks (notably Dialog/Drawer).\n// The listbox stays mounted while closed (display: none) so Items can register\n// their labels from DOM text before the popup is ever opened.\nfunction Popup({children}: {children: ReactNode}) {\n const {open, close, listboxId, triggerRef} = useSelect()\n const mount = usePortalMount()\n const [coords, setCoords] = useState<{top: number; left: number; width: number} | null>(null)\n\n // Measure the trigger when the popup opens, and re-measure on scroll/resize so\n // the dropdown follows it. Capture-phase scroll catches scroll on any ancestor\n // (e.g. a Dialog body).\n useLayoutEffect(() => {\n if (!open) return\n const update = () => {\n const el = triggerRef.current\n if (!el) return\n const rect = el.getBoundingClientRect()\n // `xs` token = 4px gap below the trigger.\n setCoords({top: rect.bottom + 4, left: rect.left, width: rect.width})\n }\n update()\n window.addEventListener('resize', update)\n window.addEventListener('scroll', update, true)\n return () => {\n window.removeEventListener('resize', update)\n window.removeEventListener('scroll', update, true)\n }\n }, [open, triggerRef])\n\n const node = (\n <>\n {open && <html.div style={styles.backdrop} onClick={close} />}\n <html.div\n id={listboxId}\n role=\"listbox\"\n aria-hidden={!open}\n style={[\n styles.popup,\n (!open || !coords) && styles.hidden,\n coords && styles.popupPosition(coords.top, coords.left, coords.width),\n ]}\n >\n {children}\n </html.div>\n </>\n )\n\n // SSR / pre-mount fallback: render inline (hidden under overflow parents but\n // won't crash). Once the mount exists, portal into it.\n return mount ? createPortal(node, mount) : node\n}\n\n// --- Item ---\ninterface ItemProps {\n value: string\n children: ReactNode\n}\n\nfunction Item({value: itemValue, children}: ItemProps) {\n const {\n value: selectedValue,\n setValue,\n close,\n registerLabel,\n highlightedId,\n setHighlightedId,\n registerItem,\n } = useSelect()\n const id = useId()\n const ref = useRef<HTMLDivElement>(null)\n const isSelected = selectedValue === itemValue\n const isHighlighted = highlightedId === id\n\n // Register label from DOM text content (works with both string and JSX children)\n useEffect(() => {\n const el = ref.current\n if (!el) return\n const text = el.textContent\n if (text) registerLabel(itemValue, text)\n }, [itemValue, registerLabel])\n\n useEffect(() => {\n const el = ref.current\n if (!el) return\n return registerItem(id, itemValue, el)\n }, [id, itemValue, registerItem])\n\n const handleClick = () => {\n setValue(itemValue)\n close()\n }\n\n return (\n <html.div\n ref={ref}\n id={id}\n role=\"option\"\n aria-selected={isSelected}\n onClick={handleClick}\n onPointerEnter={() => setHighlightedId(id)}\n style={[\n styles.item,\n isSelected && styles.itemSelected,\n isHighlighted && styles.itemHighlighted,\n ]}\n >\n {children}\n </html.div>\n )\n}\n\n// --- ItemText ---\nfunction ItemText({children}: {children: ReactNode}) {\n return <html.span>{children}</html.span>\n}\n\nexport const Select = {\n Root,\n Trigger,\n Value,\n Icon,\n Popup,\n Item,\n ItemText,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n gap: 0,\n },\n group: {\n display: 'flex',\n flexDirection: 'column',\n },\n groupTrigger: {\n display: 'flex',\n alignItems: 'center',\n gap: spacing.xs,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n cursor: 'pointer',\n transitionProperty: 'color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n groupTriggerActive: {\n color: colors.text,\n },\n chevron: {\n display: 'inline-flex',\n alignItems: 'center',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n chevronOpen: {\n transform: 'rotate(90deg)',\n },\n // The `role=\"group\"` wrapper around a Section's / an expanded Group's items.\n // Purely structural: it exists to carry the accessible name, so it must not\n // change how the items stack.\n items: {\n display: 'flex',\n flexDirection: 'column',\n },\n // Static (non-collapsible) section — see SideNav.Section.\n section: {\n display: 'flex',\n flexDirection: 'column',\n },\n sectionLabel: {\n paddingTop: spacing.md,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n fontWeight: typography.fontWeightSemibold,\n textTransform: 'uppercase' as const,\n letterSpacing: '0.06em',\n color: colors.textMuted,\n },\n item: {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: spacing.sm,\n paddingTop: '6px',\n paddingBottom: '6px',\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightNormal,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderWidth: 0,\n borderRadius: radii.sm,\n cursor: 'pointer',\n transitionProperty: 'color, background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n textAlign: 'left' as const,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n },\n itemActive: {\n color: colors.accent,\n fontWeight: typography.fontWeightMedium,\n backgroundColor: colors.bgCardHover,\n },\n // Active indicator — a bar at the rail's left edge that grows in on select.\n marker: {\n position: 'absolute',\n left: 0,\n top: '50%',\n width: '3px',\n height: 0,\n transform: 'translateY(-50%)',\n borderTopRightRadius: radii.full,\n borderBottomRightRadius: radii.full,\n backgroundColor: colors.accent,\n transitionProperty: 'height',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n markerActive: {\n height: '18px',\n },\n itemIcon: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n width: '18px',\n height: '18px',\n },\n itemLabel: {\n flexGrow: 1,\n minWidth: 0,\n },\n})\n","import {createContext, useContext} from 'react'\n\nexport interface SideNavContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n expandedGroups: Set<string>\n toggleGroup: (group: string) => void\n /** Idempotent expand (add-only) — used by auto-expand/defaultExpanded so a\n * group that qualifies twice (e.g. defaultExpanded AND holding the active\n * item) doesn't get toggled back closed. `toggleGroup` stays for user clicks. */\n expandGroup: (group: string) => void\n registerItem: (value: string) => () => void\n orderRef: React.RefObject<string[]>\n}\n\nexport const SideNavContext = createContext<SideNavContextValue | null>(null)\n\nexport function useSideNav() {\n const ctx = useContext(SideNavContext)\n if (!ctx) throw new Error('SideNav compound components must be used within SideNav.Root')\n return ctx\n}\n","import {type ReactNode, useState, useCallback, useRef, useEffect, useId} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {SideNavContext, useSideNav} from './SideNavContext'\n\n/**\n * SideNav has two ways to chunk a rail, and they are NOT interchangeable.\n *\n * `Section` — a labelled block that is always open. This is the DEFAULT for\n * primary navigation. A nav's job is to advertise where you can go; an\n * always-open list keeps the whole information architecture scannable and puts\n * every destination one click away. The uppercase label does the chunking work\n * on its own — you get the grouping benefit without hiding anything.\n *\n * `Group` — the same block behind a chevron (a disclosure). Collapsing costs\n * every destination inside it an extra click and hides it from scanning, so it\n * has to buy something back. It does when the region is:\n * • rare or advanced (\"Advanced\", \"Danger zone\", \"Legacy\") — disclose the\n * seldom-used, never the everyday;\n * • unbounded / data-driven (one entry per namespace, project, team) — you\n * cannot author-flatten a list whose length you don't control;\n * • one of many in a rail long enough (>~30 leaves) that a flat list stops\n * reading as an overview.\n * The healthy shape is a mix: flat Sections for the journey, one collapsed\n * Group at the bottom.\n *\n * Neither is a tree. Arbitrary-depth *data* browsing (a file tree, a\n * namespace → resource drill-down) needs `role=\"tree\"` with roving tabindex,\n * typeahead and aria-level — a different component, not a deeper SideNav.\n */\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n}\n\nfunction Root({children, value: controlledValue, defaultValue, onValueChange}: RootProps) {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set())\n const orderRef = useRef<string[]>([])\n\n const toggleGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev)\n if (next.has(group)) {\n next.delete(group)\n } else {\n next.add(group)\n }\n return next\n })\n }, [])\n\n // Idempotent expand — never closes an already-open group. The mount effects\n // in Group (defaultExpanded + auto-expand-active) use this instead of\n // toggleGroup so a group that qualifies on both counts stays open rather than\n // being toggled open-then-closed.\n const expandGroup = useCallback((group: string) => {\n setExpandedGroups((prev) => {\n if (prev.has(group)) return prev\n const next = new Set(prev)\n next.add(group)\n return next\n })\n }, [])\n\n const registerItem = useCallback((value: string) => {\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return (\n <SideNavContext.Provider\n value={{\n activeValue,\n onSelect,\n expandedGroups,\n toggleGroup,\n expandGroup,\n registerItem,\n orderRef,\n }}\n >\n <html.nav role=\"navigation\" style={styles.root}>\n {children}\n </html.nav>\n </SideNavContext.Provider>\n )\n}\n\n// --- Group ---\n\ninterface GroupProps {\n children: ReactNode\n label: string\n groupKey?: string\n defaultExpanded?: boolean\n}\n\nfunction Group({children, label, groupKey, defaultExpanded}: GroupProps) {\n const key = groupKey ?? label\n const {expandedGroups, toggleGroup, expandGroup, activeValue} = useSideNav()\n const isExpanded = expandedGroups.has(key)\n const groupRef = useRef<HTMLDivElement>(null)\n const triggerId = useId()\n const panelId = useId()\n\n // Auto-expand if this group contains the active item. Uses expandGroup (not\n // toggleGroup) so it never races the defaultExpanded effect into a closed\n // state when the active item lives in a defaultExpanded group.\n useEffect(() => {\n if (!activeValue || expandedGroups.has(key)) return\n const el = groupRef.current\n if (!el) return\n const activeBtn = el.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n if (activeBtn) {\n expandGroup(key)\n }\n }, [activeValue, key, expandedGroups, expandGroup])\n\n // Expand on first render if defaultExpanded (idempotent add, not a toggle).\n useEffect(() => {\n if (defaultExpanded) {\n expandGroup(key)\n }\n // Only run on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n const hasActiveChild = (() => {\n if (!activeValue || !groupRef.current) return false\n return !!groupRef.current.querySelector(`[data-nav-value=\"${activeValue}\"]`)\n })()\n\n return (\n <html.div ref={groupRef} style={styles.group}>\n <html.button\n type=\"button\"\n id={triggerId}\n onClick={() => toggleGroup(key)}\n style={[styles.groupTrigger, hasActiveChild && styles.groupTriggerActive]}\n aria-expanded={isExpanded}\n aria-controls={isExpanded ? panelId : undefined}\n >\n <html.span style={[styles.chevron, isExpanded && styles.chevronOpen]}>\n <svg\n width={10}\n height={10}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2.5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M9 18l6-6-6-6\" />\n </svg>\n </html.span>\n {label}\n </html.button>\n {isExpanded ? (\n <html.div id={panelId} role=\"group\" aria-labelledby={triggerId} style={styles.items}>\n {children}\n </html.div>\n ) : null}\n </html.div>\n )\n}\n\n// --- Section ---\n\ninterface SectionProps {\n children: ReactNode\n label: string\n}\n\n/**\n * A static, non-collapsible grouping: an always-visible uppercase header with\n * its items below. Unlike `Group` there is no chevron, toggle, or hidden state.\n *\n * Reach for this first — see the note at the top of this file for when a\n * collapsible `Group` is the better call. The label is exposed as the group's\n * accessible name, so a screen reader announces \"Networking, group\" on the way\n * into its items instead of dropping the user into an undifferentiated run of\n * thirty buttons.\n */\nfunction Section({children, label}: SectionProps) {\n const labelId = useId()\n return (\n <html.div style={styles.section}>\n <html.div id={labelId} style={styles.sectionLabel}>\n {label}\n </html.div>\n <html.div role=\"group\" aria-labelledby={labelId} style={styles.items}>\n {children}\n </html.div>\n </html.div>\n )\n}\n\n// --- Item ---\n\ninterface ItemProps {\n value: string\n children: ReactNode\n /** Optional leading glyph (e.g. a design-system `<Icon />`). Inherits the\n * item's text color, so it turns accent when the item is active. */\n icon?: ReactNode\n}\n\nfunction Item({value, children, icon}: ItemProps) {\n const {activeValue, onSelect, registerItem} = useSideNav()\n const isActive = activeValue === value\n\n useEffect(() => {\n return registerItem(value)\n }, [value, registerItem])\n\n return (\n <html.button\n type=\"button\"\n data-nav-value={value}\n onClick={() => onSelect(value)}\n style={[styles.item, isActive && styles.itemActive]}\n aria-current={isActive ? 'page' : undefined}\n >\n <html.span aria-hidden style={[styles.marker, isActive && styles.markerActive]} />\n {icon ? (\n <html.span aria-hidden style={styles.itemIcon}>\n {icon}\n </html.span>\n ) : null}\n <html.span style={styles.itemLabel}>{children}</html.span>\n </html.button>\n )\n}\n\nexport const SideNav = {\n Root,\n Group,\n Section,\n Item,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\n\nconst spin = css.keyframes({\n '0%': {transform: 'rotate(0deg)'},\n '100%': {transform: 'rotate(360deg)'},\n})\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n spinner: {\n borderRadius: '50%',\n borderStyle: 'solid',\n borderColor: colors.border,\n borderTopColor: colors.accent,\n animationName: spin,\n animationDuration: '0.6s',\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite',\n },\n sm: {\n width: 16,\n height: 16,\n borderWidth: 2,\n },\n md: {\n width: 24,\n height: 24,\n borderWidth: 2,\n },\n lg: {\n width: 40,\n height: 40,\n borderWidth: 3,\n },\n srOnly: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n },\n})\n","import {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type SpinnerSize = 'sm' | 'md' | 'lg'\n\ninterface SpinnerProps {\n size?: SpinnerSize\n label?: string\n}\n\nconst sizeMap = {\n sm: styles.sm,\n md: styles.md,\n lg: styles.lg,\n} as const\n\nexport function Spinner({size = 'md', label = 'Loading'}: SpinnerProps) {\n return (\n <html.div role=\"status\" style={styles.root}>\n <html.div style={[styles.spinner, sizeMap[size]]} aria-hidden />\n <html.span style={styles.srOnly}>{label}</html.span>\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\nimport {easing} from '@duro-app/tokens/tokens/motion.css'\n\nconst enter = css.keyframes({\n from: {opacity: 0, transform: 'translateY(10px)'},\n to: {opacity: 1, transform: 'translateY(0)'},\n})\n\nexport const styles = css.create({\n // Fixed, viewport-anchored stack. Portaled into the ThemeProvider mount so it\n // layers above dialogs; the container itself is click-through, each toast\n // re-enables pointer events.\n region: {\n position: 'fixed',\n bottom: spacing.lg,\n left: 0,\n right: 0,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n pointerEvents: 'none',\n },\n toast: {\n pointerEvents: 'auto',\n boxSizing: 'border-box',\n width: '100%',\n maxWidth: 440,\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: spacing.sm,\n padding: spacing.md,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n borderLeftWidth: 3,\n backgroundColor: colors.bgCard,\n boxShadow: shadows.lg,\n color: colors.text,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n animationName: {\n default: enter,\n '@media (prefers-reduced-motion: reduce)': 'none',\n },\n animationDuration: '160ms',\n animationTimingFunction: easing.easeOut,\n },\n success: {borderLeftColor: colors.successBorder},\n error: {borderLeftColor: colors.errorBorder},\n info: {borderLeftColor: colors.infoBorder},\n\n iconWrap: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: 1,\n },\n iconSuccess: {color: colors.successText},\n iconError: {color: colors.errorText},\n iconInfo: {color: colors.infoText},\n\n content: {\n flex: 1,\n minWidth: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n },\n message: {\n color: colors.text,\n },\n action: {\n alignSelf: 'flex-start',\n marginTop: 2,\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: colors.accent,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n textDecorationLine: 'underline',\n cursor: 'pointer',\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: 2,\n outlineColor: colors.accent,\n outlineOffset: 2,\n borderRadius: radii.sm,\n },\n closeBtn: {\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 2,\n marginTop: -1,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: {default: colors.textMuted, ':hover': colors.text},\n cursor: 'pointer',\n borderRadius: radii.sm,\n outlineStyle: {default: 'none', ':focus-visible': 'solid'},\n outlineWidth: 2,\n outlineColor: colors.accent,\n outlineOffset: 1,\n },\n})\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n type ReactNode,\n} from 'react'\nimport {createPortal} from 'react-dom'\nimport {html} from 'react-strict-dom'\nimport {Icon, type IconName} from '../Icon'\nimport {usePortalMount} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\nexport type ToastVariant = 'success' | 'error' | 'info'\n\nexport interface ToastAction {\n label: string\n onClick: () => void\n}\n\nexport interface ToastOptions {\n /** Visual + semantic tone. Errors announce assertively and linger longer. */\n variant?: ToastVariant\n message: ReactNode\n /** Optional single action, e.g. Undo. Runs, then dismisses the toast. */\n action?: ToastAction\n /** Auto-dismiss delay in ms. `0` (or negative) keeps it until dismissed. */\n duration?: number\n}\n\nexport interface ToastContextValue {\n /** Show a toast; returns its id so it can be dismissed programmatically. */\n toast: (opts: ToastOptions) => string\n dismiss: (id: string) => void\n}\n\ninterface ToastEntry {\n id: string\n variant: ToastVariant\n message: ReactNode\n action?: ToastAction\n duration: number\n}\n\ninterface ToastStore {\n subscribe: (cb: () => void) => () => void\n getSnapshot: () => readonly ToastEntry[]\n add: (opts: ToastOptions) => string\n remove: (id: string) => void\n}\n\nconst DEFAULT_DURATION: Record<ToastVariant, number> = {\n success: 5000,\n info: 5000,\n error: 8000,\n}\n\nfunction createToastStore(): ToastStore {\n let entries: ToastEntry[] = []\n let seq = 0\n const listeners = new Set<() => void>()\n const notify = () => listeners.forEach((l) => l())\n\n return {\n subscribe: (cb) => {\n listeners.add(cb)\n return () => listeners.delete(cb)\n },\n getSnapshot: () => entries,\n add: (opts) => {\n const variant = opts.variant ?? 'info'\n const id = `toast-${++seq}`\n const duration = opts.duration ?? DEFAULT_DURATION[variant]\n entries = [...entries, {id, variant, message: opts.message, action: opts.action, duration}]\n notify()\n return id\n },\n remove: (id) => {\n const next = entries.filter((e) => e.id !== id)\n if (next.length !== entries.length) {\n entries = next\n notify()\n }\n },\n }\n}\n\nconst variantIcon: Record<ToastVariant, IconName> = {\n success: 'check-circle-filled',\n error: 'x-circle-filled',\n info: 'info-circle-filled',\n}\nconst variantIconStyle = {\n success: styles.iconSuccess,\n error: styles.iconError,\n info: styles.iconInfo,\n} as const\n\nconst ToastContext = createContext<ToastContextValue | null>(null)\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext)\n if (!ctx) throw new Error('useToast must be used within a <ToastProvider>')\n return ctx\n}\n\nfunction ToastItem({entry, onDismiss}: {entry: ToastEntry; onDismiss: (id: string) => void}) {\n const {id, variant, message, action, duration} = entry\n\n useEffect(() => {\n if (duration <= 0) return\n const timer = setTimeout(() => onDismiss(id), duration)\n return () => clearTimeout(timer)\n }, [id, duration, onDismiss])\n\n return (\n <html.div\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n style={[styles.toast, styles[variant]]}\n >\n <html.div style={[styles.iconWrap, variantIconStyle[variant]]}>\n <Icon name={variantIcon[variant]} size=\"md\" />\n </html.div>\n <html.div style={styles.content}>\n <html.div style={styles.message}>{message}</html.div>\n {action ? (\n <html.button\n type=\"button\"\n style={styles.action}\n onClick={() => {\n action.onClick()\n onDismiss(id)\n }}\n >\n {action.label}\n </html.button>\n ) : null}\n </html.div>\n <html.button\n type=\"button\"\n aria-label=\"Dismiss\"\n style={styles.closeBtn}\n onClick={() => onDismiss(id)}\n >\n <Icon name=\"x-circle\" size=\"sm\" />\n </html.button>\n </html.div>\n )\n}\n\nexport function ToastProvider({children}: {children: ReactNode}) {\n const storeRef = useRef<ToastStore>(null)\n if (storeRef.current === null) {\n storeRef.current = createToastStore()\n }\n const store = storeRef.current\n\n const entries = useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot)\n const mount = usePortalMount()\n\n const value = useMemo<ToastContextValue>(\n () => ({\n toast: (opts) => store.add(opts),\n dismiss: (id) => store.remove(id),\n }),\n [store],\n )\n\n const dismiss = useCallback((id: string) => store.remove(id), [store])\n\n const region = (\n <html.div role=\"region\" aria-label=\"Notifications\" style={styles.region}>\n {entries.map((entry) => (\n <ToastItem key={entry.id} entry={entry} onDismiss={dismiss} />\n ))}\n </html.div>\n )\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n {mount ? createPortal(region, mount) : region}\n </ToastContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginBottom: spacing.md,\n },\n error: {\n color: colors.error,\n },\n success: {\n color: colors.success,\n },\n warning: {\n color: colors.warning,\n },\n info: {\n color: colors.info,\n },\n muted: {\n color: colors.textMuted,\n },\n})\n","import {html} from 'react-strict-dom'\nimport {Icon} from '../Icon'\nimport type {IconName, IconSize} from '../Icon'\nimport {styles} from './styles.css'\n\nexport type StatusIconName = Extract<\n IconName,\n 'x-circle' | 'check-circle' | 'check-done' | 'clock' | 'forbidden'\n>\nexport type StatusIconVariant = 'error' | 'success' | 'warning' | 'info' | 'muted'\n\ninterface StatusIconProps {\n name: StatusIconName\n size?: IconSize\n variant?: StatusIconVariant\n}\n\nexport function StatusIcon({name, size = 'xxl', variant = 'muted'}: StatusIconProps) {\n return (\n <html.div style={[styles.root, styles[variant]]}>\n <Icon name={name} size={size} />\n </html.div>\n )\n}\n","import {createContext, useContext} from 'react'\n\nexport interface TagGroupContextValue {\n values: string[]\n addTag: (value: string) => void\n removeTag: (value: string) => void\n editable: boolean\n setEditable: (v: boolean) => void\n disabled: boolean\n validate?: (value: string) => true | string\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n inputRef: React.RefObject<HTMLInputElement | null>\n gridId: string\n name?: string\n}\n\nexport const TagGroupContext = createContext<TagGroupContextValue | null>(null)\n\nexport function useTagGroup(): TagGroupContextValue | null {\n return useContext(TagGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightNormal,\n lineHeight: 1,\n borderRadius: 4,\n whiteSpace: 'nowrap',\n minWidth: 0,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 1,\n },\n },\n sizeMd: {\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.ms,\n paddingRight: spacing.ms,\n fontSize: typography.fontSizeSm,\n },\n sizeSm: {\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n fontSize: typography.fontSizeXs,\n },\n // Opt-in wrapping for long identifier-style labels. Overrides the base\n // nowrap so the text breaks within its container (e.g. a table cell)\n // instead of overflowing into the next column. `anywhere` also lets the\n // tag shrink below its content's intrinsic width so a flex/grid parent can\n // actually give it a narrow track.\n wrap: {\n whiteSpace: 'normal',\n overflowWrap: 'anywhere',\n lineHeight: 1.35,\n textAlign: 'start',\n },\n // Reduce right padding when removable to keep visual balance with the button\n removableMd: {\n paddingRight: spacing.sm,\n },\n removableSm: {\n paddingRight: spacing.xs,\n },\n default: {\n backgroundColor: {\n default: colors.bg,\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n },\n success: {\n backgroundColor: colors.successBg,\n color: colors.successText,\n },\n warning: {\n backgroundColor: colors.warningBg,\n color: colors.warningText,\n },\n error: {\n backgroundColor: colors.errorBg,\n color: colors.errorText,\n },\n info: {\n backgroundColor: colors.infoBg,\n color: colors.infoText,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n removeButton: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 0,\n borderWidth: 0,\n backgroundColor: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n borderRadius: radii.full,\n opacity: {\n default: 0.6,\n ':hover': 1,\n },\n outlineWidth: 0,\n },\n removeButtonDisabled: {\n cursor: 'not-allowed',\n opacity: 0.4,\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useTagGroup} from '../TagGroup/TagGroupContext'\nimport {styles} from './styles.css'\n\nexport type TagVariant = 'default' | 'success' | 'warning' | 'error' | 'info'\nexport type TagSize = 'sm' | 'md'\n\ninterface TagProps {\n /** Value identifier — required when used inside TagGroup */\n value?: string\n variant?: TagVariant\n size?: TagSize\n /** Show remove button. Auto-derived from TagGroup context when inside one. */\n removable?: boolean\n /** Called when remove button is clicked. Auto-wired to TagGroup when inside one. */\n onRemove?: () => void\n disabled?: boolean\n /**\n * Allow the label to wrap / break instead of staying on one line. Tags are\n * `white-space: nowrap` by default (they read as pills); set this for long\n * identifier-style values (e.g. `lldap.group.member.remove`) sitting in a\n * constrained column, so they break within their cell instead of leaking\n * into the next one.\n */\n wrap?: boolean\n children: ReactNode\n}\n\nconst sizeMap = {\n sm: styles.sizeSm,\n md: styles.sizeMd,\n} as const\n\nconst removableSizeMap = {\n sm: styles.removableSm,\n md: styles.removableMd,\n} as const\n\nexport function Tag({\n value,\n variant = 'default',\n size = 'md',\n removable: removableProp,\n onRemove: onRemoveProp,\n disabled: disabledProp = false,\n wrap = false,\n children,\n}: TagProps) {\n const group = useTagGroup()\n const contentRef = useRef<HTMLElement>(null)\n\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const removable = removableProp ?? (isGrouped ? group.editable : false)\n\n const onRemove = useCallback(() => {\n if (disabled) return\n if (onRemoveProp) {\n onRemoveProp()\n } else if (isGrouped && value !== undefined) {\n group.removeTag(value)\n }\n }, [disabled, onRemoveProp, isGrouped, value, group])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) return\n if ((e.key === 'Backspace' || e.key === 'Delete') && removable) {\n e.preventDefault()\n onRemove()\n }\n // Arrow key navigation delegated to TagGroup via context\n if (isGrouped && (e.key === 'ArrowLeft' || e.key === 'ArrowRight')) {\n e.preventDefault()\n const idx = value !== undefined ? group.values.indexOf(value) : -1\n if (e.key === 'ArrowLeft' && idx > 0) {\n group.setFocusedIndex(idx - 1)\n } else if (e.key === 'ArrowRight') {\n if (idx < group.values.length - 1) {\n group.setFocusedIndex(idx + 1)\n } else {\n // Move focus to input\n group.inputRef.current?.focus()\n group.setFocusedIndex(-1)\n }\n }\n }\n },\n [disabled, removable, onRemove, isGrouped, value, group],\n )\n\n const removeLabel = contentRef.current?.textContent\n ? `Remove ${contentRef.current.textContent}`\n : 'Remove'\n\n const tagContent = (\n <>\n <html.span ref={contentRef} {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n {children}\n </html.span>\n {removable && (\n <html.span {...(isGrouped ? {role: 'gridcell' as any} : {})}>\n <html.button\n type=\"button\"\n aria-label={removeLabel}\n disabled={disabled}\n onClick={(e) => {\n ;(e as any).stopPropagation?.()\n onRemove()\n }}\n tabIndex={-1}\n style={[styles.removeButton, disabled && styles.removeButtonDisabled]}\n >\n <svg\n width={size === 'sm' ? 10 : 12}\n height={size === 'sm' ? 10 : 12}\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n >\n <path\n d=\"M3 3l6 6M9 3l-6 6\"\n stroke=\"currentColor\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n </html.button>\n </html.span>\n )}\n </>\n )\n\n return (\n <html.span\n {...(isGrouped ? {role: 'row' as any} : {})}\n tabIndex={isGrouped ? 0 : undefined}\n onKeyDown={isGrouped ? (handleKeyDown as any) : undefined}\n style={[\n styles.base,\n sizeMap[size],\n removable && removableSizeMap[size],\n styles[variant],\n disabled && styles.disabled,\n wrap && styles.wrap,\n ]}\n >\n {tagContent}\n </html.span>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n container: {\n display: 'flex',\n flexDirection: 'column',\n gap: spacing.sm,\n },\n containerError: {},\n containerDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n // Static display (no Input) — no gap needed\n containerStatic: {\n gap: 0,\n },\n list: {\n display: 'flex',\n flexWrap: 'wrap',\n gap: spacing.xs,\n alignItems: 'center',\n },\n input: {\n width: '100%',\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':focus': colors.accent,\n },\n borderRadius: radii.sm,\n backgroundColor: colors.bg,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n minHeight: 40,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus': 1,\n },\n boxSizing: 'border-box',\n },\n inputError: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n liveRegion: {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n },\n})\n","import {\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {TagGroupContext, type TagGroupContextValue} from './TagGroupContext'\nimport {styles} from './styles.css'\n\n// ---------------------------------------------------------------------------\n// Local context accessor (non-throwing, returns null)\n// ---------------------------------------------------------------------------\n\nfunction useTagGroupCtx() {\n return useContext(TagGroupContext)\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Root\n// ---------------------------------------------------------------------------\n\ninterface RootProps {\n value?: string[]\n defaultValue?: string[]\n onValueChange?: (values: string[]) => void\n /** Validate a value before adding. Return `true` if valid, or an error string. */\n onValidate?: (value: string) => true | string\n disabled?: boolean\n /** Form field name — renders hidden inputs for each tag value */\n name?: string\n 'aria-label'?: string\n children: ReactNode\n}\n\nfunction Root({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n onValidate,\n disabled: disabledProp = false,\n name,\n 'aria-label': ariaLabel,\n children,\n}: RootProps) {\n const gridId = useId()\n const fieldCtx = useFieldContext()\n const [values, setValues] = useControllableValue(controlledValue, defaultValue, onValueChange)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [editable, setEditable] = useState(false)\n const [announcement, setAnnouncement] = useState('')\n const inputRef = useRef<HTMLInputElement>(null)\n\n const disabled = disabledProp || (fieldCtx?.disabled ?? false)\n const isInvalid = fieldCtx?.invalid ?? false\n\n const addTag = useCallback(\n (value: string) => {\n const trimmed = value.trim()\n if (!trimmed) return\n if (values.includes(trimmed)) return\n if (onValidate) {\n const result = onValidate(trimmed)\n if (result !== true) return\n }\n setValues([...values, trimmed])\n setAnnouncement(`Added ${trimmed}`)\n },\n [values, setValues, onValidate],\n )\n\n const removeTag = useCallback(\n (value: string) => {\n const idx = values.indexOf(value)\n if (idx === -1) return\n const next = values.filter((v) => v !== value)\n setValues(next)\n setAnnouncement(`Removed ${value}`)\n\n // Focus management: move to next tag, or previous, or input\n if (next.length === 0) {\n inputRef.current?.focus()\n setFocusedIndex(-1)\n } else if (idx >= next.length) {\n setFocusedIndex(next.length - 1)\n } else {\n setFocusedIndex(idx)\n }\n },\n [values, setValues],\n )\n\n // Focus the tag at focusedIndex when it changes\n useEffect(() => {\n if (focusedIndex >= 0 && focusedIndex < values.length) {\n const container = document.getElementById(gridId)\n if (!container) return\n const rows = container.querySelectorAll('[role=\"row\"]')\n const target = rows[focusedIndex] as HTMLElement | undefined\n target?.focus()\n }\n }, [focusedIndex, gridId, values.length])\n\n const ctx = useMemo<TagGroupContextValue>(\n () => ({\n values,\n addTag,\n removeTag,\n editable,\n setEditable,\n disabled,\n validate: onValidate,\n focusedIndex,\n setFocusedIndex,\n inputRef,\n gridId,\n name,\n }),\n [values, addTag, removeTag, editable, disabled, onValidate, focusedIndex, gridId, name],\n )\n\n return (\n <TagGroupContext.Provider value={ctx}>\n <html.div style={styles.root} aria-label={ariaLabel}>\n <html.div\n style={[\n styles.container,\n !editable && styles.containerStatic,\n isInvalid && styles.containerError,\n disabled && styles.containerDisabled,\n ]}\n aria-describedby={\n fieldCtx\n ? `${fieldCtx.descriptionId} ${fieldCtx.invalid ? fieldCtx.errorId : ''}`.trim()\n : undefined\n }\n aria-invalid={isInvalid || undefined}\n >\n {children}\n </html.div>\n\n {/* Hidden inputs for form submission */}\n {name && values.map((v) => <html.input key={v} type=\"hidden\" name={name} value={v} />)}\n\n {/* Live region for screen reader announcements */}\n <html.div role=\"status\" aria-live=\"polite\" aria-atomic style={styles.liveRegion}>\n {announcement}\n </html.div>\n </html.div>\n </TagGroupContext.Provider>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.List\n// ---------------------------------------------------------------------------\n\ninterface ListProps {\n children: ReactNode\n 'aria-label'?: string\n}\n\nfunction List({children, 'aria-label': ariaLabel}: ListProps) {\n const ctx = useTagGroupCtx()\n\n return (\n <html.div role={'grid' as any} aria-label={ariaLabel} id={ctx?.gridId} style={styles.list}>\n {children}\n </html.div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// TagGroup.Input\n// ---------------------------------------------------------------------------\n\ninterface InputProps {\n placeholder?: string\n}\n\nfunction Input({placeholder}: InputProps) {\n const ctx = useTagGroupCtx()\n const [inputValue, setInputValue] = useState('')\n const localRef = useRef<HTMLInputElement>(null)\n\n // Sync local ref with context inputRef\n useEffect(() => {\n if (ctx?.inputRef) {\n ;(ctx.inputRef as React.MutableRefObject<HTMLInputElement | null>).current = localRef.current\n }\n })\n\n // Register as editable on mount\n useEffect(() => {\n ctx?.setEditable(true)\n return () => ctx?.setEditable(false)\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n const commitValueRef = useRef<(raw: string) => boolean>(() => false)\n commitValueRef.current = (raw: string) => {\n const trimmed = raw.trim()\n if (!trimmed || !ctx) return false\n ctx.addTag(trimmed)\n setInputValue('')\n return true\n }\n\n // Native keydown for full KeyboardEvent access (preventDefault)\n useEffect(() => {\n const el = localRef.current\n if (!el) return\n\n function handleKeyDown(e: KeyboardEvent) {\n if (!ctx) return\n const target = e.target as HTMLInputElement\n\n if (e.key === 'Enter' || e.key === ',' || e.key === ';') {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Tab' && target.value.trim()) {\n e.preventDefault()\n commitValueRef.current(target.value)\n return\n }\n\n if (e.key === 'Backspace' && !target.value && ctx.values.length > 0) {\n e.preventDefault()\n ctx.removeTag(ctx.values[ctx.values.length - 1])\n return\n }\n\n if (e.key === 'ArrowLeft' && (target.selectionStart ?? 0) === 0 && ctx.values.length > 0) {\n e.preventDefault()\n ctx.setFocusedIndex(ctx.values.length - 1)\n return\n }\n\n if (e.key === 'Escape') {\n setInputValue('')\n }\n }\n\n function handlePaste(e: ClipboardEvent) {\n if (!ctx) return\n const text = e.clipboardData?.getData('text') ?? ''\n const items = text\n .split(/[\\n,;]+/)\n .map((s) => s.trim())\n .filter(Boolean)\n if (items.length > 1) {\n e.preventDefault()\n for (const item of items) {\n ctx.addTag(item)\n }\n }\n }\n\n function handleFocus() {\n ctx?.setFocusedIndex(-1)\n }\n\n el.addEventListener('keydown', handleKeyDown)\n el.addEventListener('paste', handlePaste)\n el.addEventListener('focus', handleFocus)\n return () => {\n el.removeEventListener('keydown', handleKeyDown)\n el.removeEventListener('paste', handlePaste)\n el.removeEventListener('focus', handleFocus)\n }\n }, [ctx])\n\n return (\n <html.input\n ref={localRef as React.Ref<HTMLInputElement>}\n type=\"text\"\n value={inputValue}\n onChange={(e: any) => setInputValue(e.target.value)}\n placeholder={placeholder}\n disabled={ctx?.disabled}\n style={styles.input}\n />\n )\n}\n\n// ---------------------------------------------------------------------------\n// Namespace export\n// ---------------------------------------------------------------------------\n\nexport const TagGroup = {\n Root,\n List,\n Input,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n rootVertical: {\n flexDirection: 'row',\n },\n list: {\n display: 'flex',\n flexDirection: 'row',\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderBottomColor: colors.border,\n gap: spacing.xs,\n // Positioning context for the sliding indicator.\n position: 'relative',\n },\n listVertical: {\n flexDirection: 'column',\n borderBottomWidth: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n borderRightColor: colors.border,\n gap: 0,\n },\n tab: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n fontWeight: typography.fontWeightMedium,\n color: {\n default: colors.textMuted,\n ':hover': colors.text,\n },\n backgroundColor: 'transparent',\n borderWidth: 0,\n borderBottomWidth: 2,\n borderBottomStyle: 'solid',\n borderBottomColor: 'transparent',\n cursor: 'pointer',\n transitionProperty: 'color, border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': -2,\n },\n },\n tabVertical: {\n justifyContent: 'flex-start',\n borderBottomWidth: 0,\n borderRightWidth: 2,\n borderRightStyle: 'solid',\n borderRightColor: 'transparent',\n },\n tabActiveHorizontal: {\n color: colors.text,\n borderBottomColor: colors.accent,\n },\n tabActiveVertical: {\n color: colors.text,\n borderRightColor: colors.accent,\n },\n // Applied to the active tab once JS drives the sliding indicator: drop the\n // per-tab accent border so the single sliding bar is the only underline\n // (avoids a double line and an instant-pop that would undercut the slide).\n tabIndicatorActive: {\n borderBottomColor: 'transparent',\n borderRightColor: 'transparent',\n },\n // --- Sliding active indicator (positioned by measuring the active tab) ---\n indicator: {\n position: 'absolute',\n backgroundColor: colors.accent,\n pointerEvents: 'none',\n transitionProperty: 'transform, width, height',\n transitionDuration: duration.base,\n transitionTimingFunction: easing.easeOut,\n },\n indicatorHorizontal: {\n bottom: -1,\n left: 0,\n height: 2,\n },\n indicatorVertical: {\n right: -1,\n top: 0,\n width: 2,\n },\n // Dynamic transform/size from the measured active tab (StyleX dynamic style:\n // simple identifier params only).\n indicatorOffsetH: (offset: number, size: number) => ({\n transform: `translateX(${offset}px)`,\n width: size,\n }),\n indicatorOffsetV: (offset: number, size: number) => ({\n transform: `translateY(${offset}px)`,\n height: size,\n }),\n tabDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n color: colors.textMuted,\n },\n panel: {\n paddingTop: spacing.md,\n },\n panelVertical: {\n paddingTop: 0,\n paddingLeft: spacing.md,\n },\n})\n","import {createContext, useContext} from 'react'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface TabsContextValue {\n activeValue: string | null\n onSelect: (value: string) => void\n orientation: Orientation\n registerTab: (value: string, disabled: boolean) => () => void\n tabsRef: React.RefObject<Map<string, boolean>>\n orderRef: React.RefObject<string[]>\n // True once the List has measured the active tab and is driving a sliding\n // indicator. Tabs suppress their own accent border while it's true so the\n // single sliding bar is the only underline; it stays false without JS\n // (SSR / no-hydration), where the per-tab border is the graceful fallback.\n indicatorActive: boolean\n setIndicatorActive: (active: boolean) => void\n}\n\nexport const TabsContext = createContext<TabsContextValue | null>(null)\n\nexport function useTabs() {\n const ctx = useContext(TabsContext)\n if (!ctx) throw new Error('Tabs compound components must be used within Tabs.Root')\n return ctx\n}\n","import {useCallback, useRef, useState} from 'react'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {Orientation, TabsContextValue} from './TabsContext'\n\ninterface UseTabsRootOptions {\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: Orientation\n}\n\nexport function useTabsRoot({\n value: controlledValue,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: UseTabsRootOptions): TabsContextValue {\n const [activeValue, onSelect] = useControllableValue<string | null>(\n controlledValue,\n defaultValue ?? null,\n onValueChange\n ? (v) => {\n if (v !== null) onValueChange(v)\n }\n : undefined,\n )\n const tabsRef = useRef(new Map<string, boolean>())\n const orderRef = useRef<string[]>([])\n const [indicatorActive, setIndicatorActive] = useState(false)\n\n const registerTab = useCallback((value: string, disabled: boolean) => {\n tabsRef.current.set(value, disabled)\n if (!orderRef.current.includes(value)) {\n orderRef.current.push(value)\n }\n return () => {\n tabsRef.current.delete(value)\n orderRef.current = orderRef.current.filter((v) => v !== value)\n }\n }, [])\n\n return {\n activeValue,\n onSelect,\n orientation,\n registerTab,\n tabsRef,\n orderRef,\n indicatorActive,\n setIndicatorActive,\n }\n}\n","import {type ReactNode, useRef, useId, useEffect, useLayoutEffect, useState} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {TabsContext, useTabs} from './TabsContext'\nimport {useTabsRoot} from './useTabsRoot'\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n value?: string\n defaultValue?: string\n onValueChange?: (value: string) => void\n orientation?: 'horizontal' | 'vertical'\n}\n\nfunction Root({\n children,\n value,\n defaultValue,\n onValueChange,\n orientation = 'horizontal',\n}: RootProps) {\n const ctx = useTabsRoot({value, defaultValue, onValueChange, orientation})\n\n return (\n <TabsContext.Provider value={ctx}>\n <html.div style={[styles.root, orientation === 'vertical' && styles.rootVertical]}>\n {children}\n </html.div>\n </TabsContext.Provider>\n )\n}\n\n// --- List ---\n\ninterface ListProps {\n children: ReactNode\n}\n\nfunction List({children}: ListProps) {\n const {orientation, activeValue, onSelect, tabsRef, orderRef, setIndicatorActive} = useTabs()\n const listRef = useRef<HTMLDivElement>(null)\n const [indicator, setIndicator] = useState<{offset: number; size: number} | null>(null)\n\n // Measure the active tab and drive the sliding indicator. useLayoutEffect so\n // the first position is set before paint (the indicator element mounts already\n // in place — no slide-in from zero; only later tab changes animate). Observes\n // the active tab (its own size, e.g. a changing \"(3)\" count) and the list\n // (container resize / reflow). A non-active sibling resizing while you're on\n // another tab is the one case not caught; it self-corrects on the next\n // selection or resize.\n useLayoutEffect(() => {\n const list = listRef.current\n if (!list || !activeValue) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const el = list.querySelector<HTMLElement>(`[data-tab-value=\"${CSS.escape(activeValue)}\"]`)\n if (!el) {\n setIndicator(null)\n setIndicatorActive(false)\n return\n }\n const measure = () => {\n setIndicator(\n orientation === 'horizontal'\n ? {offset: el.offsetLeft, size: el.offsetWidth}\n : {offset: el.offsetTop, size: el.offsetHeight},\n )\n setIndicatorActive(true)\n }\n measure()\n const ro = new ResizeObserver(measure)\n ro.observe(el)\n ro.observe(list)\n return () => ro.disconnect()\n }, [activeValue, orientation, setIndicatorActive])\n\n useEffect(() => {\n const el = listRef.current\n if (!el) return\n const listEl = el\n\n function handleKeyDown(e: KeyboardEvent) {\n const order = orderRef.current\n const tabs = tabsRef.current\n if (order.length === 0) return\n\n const prevKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp'\n const nextKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown'\n\n let targetValue: string | null = null\n\n switch (e.key) {\n case nextKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : -1\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx + i) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case prevKey: {\n e.preventDefault()\n const currentIdx = activeValue ? order.indexOf(activeValue) : 0\n for (let i = 1; i <= order.length; i++) {\n const idx = (currentIdx - i + order.length) % order.length\n const val = order[idx]\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'Home': {\n e.preventDefault()\n for (const val of order) {\n if (!tabs.get(val)) {\n targetValue = val\n break\n }\n }\n break\n }\n case 'End': {\n e.preventDefault()\n for (let i = order.length - 1; i >= 0; i--) {\n if (!tabs.get(order[i])) {\n targetValue = order[i]\n break\n }\n }\n break\n }\n }\n\n if (targetValue) {\n onSelect(targetValue)\n // Focus the newly activated tab button\n const tabEl = listEl.querySelector(\n `[data-tab-value=\"${targetValue}\"]`,\n ) as HTMLElement | null\n tabEl?.focus()\n }\n }\n\n el.addEventListener('keydown', handleKeyDown)\n return () => el.removeEventListener('keydown', handleKeyDown)\n }, [orientation, activeValue, onSelect, tabsRef, orderRef])\n\n return (\n <html.div\n ref={listRef}\n role=\"tablist\"\n aria-orientation={orientation}\n style={[styles.list, orientation === 'vertical' && styles.listVertical]}\n >\n {children}\n {indicator && (\n <html.div\n aria-hidden\n style={[\n styles.indicator,\n orientation === 'horizontal' ? styles.indicatorHorizontal : styles.indicatorVertical,\n orientation === 'horizontal'\n ? styles.indicatorOffsetH(indicator.offset, indicator.size)\n : styles.indicatorOffsetV(indicator.offset, indicator.size),\n ]}\n />\n )}\n </html.div>\n )\n}\n\n// --- Tab ---\n\ninterface TabProps {\n value: string\n disabled?: boolean\n children: ReactNode\n}\n\nfunction Tab({value, disabled = false, children}: TabProps) {\n const {activeValue, onSelect, orientation, registerTab, indicatorActive} = useTabs()\n const isActive = activeValue === value\n const tabId = useId()\n const panelId = `${tabId}-panel`\n\n useEffect(() => {\n return registerTab(value, disabled)\n }, [value, disabled, registerTab])\n\n const handleClick = () => {\n if (!disabled) {\n onSelect(value)\n }\n }\n\n return (\n <html.button\n type=\"button\"\n role=\"tab\"\n id={tabId}\n aria-selected={isActive}\n aria-controls={panelId}\n aria-disabled={disabled || undefined}\n data-tab-value={value}\n tabIndex={isActive ? 0 : -1}\n onClick={handleClick}\n style={[\n styles.tab,\n orientation === 'vertical' && styles.tabVertical,\n isActive &&\n (orientation === 'vertical' ? styles.tabActiveVertical : styles.tabActiveHorizontal),\n isActive && indicatorActive && styles.tabIndicatorActive,\n disabled && styles.tabDisabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n\n// --- Panel ---\n\ninterface PanelProps {\n value: string\n children: ReactNode\n}\n\nfunction Panel({value, children}: PanelProps) {\n const {activeValue, orientation} = useTabs()\n\n if (activeValue !== value) return null\n\n return (\n <html.div\n role=\"tabpanel\"\n style={[styles.panel, orientation === 'vertical' && styles.panelVertical]}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tabs = {\n Root,\n List,\n Tab,\n Panel,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n width: '100%',\n paddingTop: spacing.sm,\n paddingBottom: spacing.sm,\n paddingLeft: spacing.md,\n paddingRight: spacing.md,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeSm,\n lineHeight: typography.lineHeight,\n color: colors.text,\n backgroundColor: colors.bg,\n borderWidth: 1,\n borderStyle: 'solid',\n borderRadius: radii.sm,\n resize: 'vertical' as const,\n transitionProperty: 'border-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {\n default: 0,\n ':focus-visible': 2,\n },\n outlineStyle: {\n default: 'none',\n ':focus-visible': 'solid',\n },\n outlineColor: {\n default: 'transparent',\n ':focus-visible': colors.accent,\n },\n outlineOffset: {\n default: 0,\n ':focus-visible': 1,\n },\n },\n default: {\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n ':focus': colors.accent,\n },\n },\n error: {\n borderColor: {\n default: colors.error,\n ':focus': colors.error,\n },\n },\n})\n","import {html} from 'react-strict-dom'\nimport {useFieldContext} from '../Field/FieldContext'\nimport {styles} from './styles.css'\n\ntype StrictTextareaProps = React.ComponentProps<typeof html.textarea>\n\nexport type TextareaVariant = 'default' | 'error'\n\ninterface TextareaProps {\n variant?: TextareaVariant\n name?: string\n placeholder?: string\n required?: boolean\n rows?: number\n value?: string\n defaultValue?: string\n disabled?: boolean\n autoFocus?: boolean\n onChange?: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onBlur?: () => void\n ref?: React.Ref<HTMLTextAreaElement>\n}\n\nexport function Textarea({\n variant = 'default',\n name,\n placeholder,\n required,\n rows = 3,\n value,\n defaultValue,\n disabled,\n autoFocus,\n onChange,\n onBlur,\n ref,\n}: TextareaProps) {\n const ctx = useFieldContext()\n\n const fieldCtx = ctx?.field\n const effectiveName = name ?? fieldCtx?.name\n const effectiveValue = value ?? (fieldCtx ? String(fieldCtx.value ?? '') : undefined)\n const effectiveOnChange = onChange ?? fieldCtx?.onChange\n const effectiveOnBlur = onBlur ?? fieldCtx?.onBlur\n const effectiveRef = ref ?? fieldCtx?.ref\n const effectiveDisabled = disabled ?? ctx?.disabled\n const effectiveVariant = ctx?.invalid ? 'error' : variant\n\n const extraProps: Record<string, unknown> = {}\n if (autoFocus) extraProps.autoFocus = true\n\n return (\n <html.textarea\n id={ctx?.controlId}\n name={effectiveName}\n placeholder={placeholder}\n required={required}\n rows={rows}\n value={effectiveValue}\n defaultValue={defaultValue}\n disabled={effectiveDisabled}\n aria-describedby={\n ctx ? `${ctx.descriptionId} ${ctx.invalid ? ctx.errorId : ''}`.trim() : undefined\n }\n aria-invalid={ctx?.invalid || variant === 'error' || undefined}\n onChange={effectiveOnChange as StrictTextareaProps['onChange']}\n onBlur={effectiveOnBlur as StrictTextareaProps['onBlur']}\n ref={effectiveRef as React.Ref<HTMLTextAreaElement>}\n style={[styles.base, styles[effectiveVariant]]}\n {...extraProps}\n />\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n padding: spacing.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n borderRadius: radii.sm,\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n color: colors.text,\n cursor: 'pointer',\n transitionProperty: 'background-color, border-color, color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\n },\n})\n","import {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {Icon, type IconName, type IconSize} from '../Icon/Icon'\nimport {ThemeProvider, type ThemeName} from '../ThemeProvider/ThemeProvider'\nimport {styles} from './styles.css'\n\n/**\n * The user's *preference*. `'system'` follows the OS `prefers-color-scheme`;\n * the others pin a concrete {@link ThemeName}. Resolves to a ThemeName via\n * {@link useColorMode}().theme.\n */\nexport type ColorModePreference = 'system' | ThemeName\n\nconst PREFERENCES: readonly ColorModePreference[] = ['system', 'light', 'dark', 'high-contrast']\n\nconst ICON: Record<ColorModePreference, IconName> = {\n system: 'monitor',\n light: 'sun',\n dark: 'moon',\n 'high-contrast': 'contrast',\n}\n\nconst LABEL: Record<ColorModePreference, string> = {\n system: 'system',\n light: 'light',\n dark: 'dark',\n 'high-contrast': 'high contrast',\n}\n\ninterface ColorModeContextValue {\n /** The user's chosen preference. */\n preference: ColorModePreference\n /** The concrete theme the preference resolves to (system → OS scheme). */\n theme: ThemeName\n /** Set the preference explicitly. */\n setPreference: (preference: ColorModePreference) => void\n /** Advance to the next preference in {@link modes} (wraps). */\n cycle: () => void\n /** The cycle order used by `cycle()` and the toggle. */\n modes: readonly ColorModePreference[]\n}\n\nconst ColorModeContext = createContext<ColorModeContextValue | null>(null)\n\n/**\n * Read the active color mode. Throws if used outside a {@link ColorModeProvider}.\n */\nexport function useColorMode(): ColorModeContextValue {\n const ctx = useContext(ColorModeContext)\n if (!ctx) {\n throw new Error('useColorMode must be used within a <ColorModeProvider>')\n }\n return ctx\n}\n\nconst canUseDom =\n !isNative && typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n\nfunction isPreference(value: unknown): value is ColorModePreference {\n return typeof value === 'string' && (PREFERENCES as readonly string[]).includes(value)\n}\n\nfunction readStored(key: string | null): ColorModePreference | null {\n if (!key || isNative || typeof window === 'undefined') return null\n try {\n const raw = window.localStorage.getItem(key)\n return isPreference(raw) ? raw : null\n } catch {\n // Private mode / blocked storage — degrade to no persistence.\n return null\n }\n}\n\nfunction writeStored(key: string | null, value: ColorModePreference): void {\n if (!key || isNative || typeof window === 'undefined') return\n try {\n window.localStorage.setItem(key, value)\n } catch {\n /* ignore */\n }\n}\n\ninterface ColorModeProviderProps {\n children: ReactNode\n /** Initial preference (uncontrolled). Default `'system'`. For SSR with no\n * hydration flash, pass the value you persisted server-side (e.g. a cookie). */\n defaultPreference?: ColorModePreference\n /** Controlled preference — when set, the provider does not own the state. */\n preference?: ColorModePreference\n /** Fired whenever the preference changes (controlled or not). */\n onPreferenceChange?: (preference: ColorModePreference) => void\n /** Cycle order for `cycle()` / `<ColorModeToggle>`. Default `['light', 'dark']`. */\n modes?: readonly ColorModePreference[]\n /** localStorage key for persistence; `null` disables it. Default `'duro-color-mode'`. */\n storageKey?: string | null\n /** Wrap children in the DS `ThemeProvider` with the resolved theme. Default `true`.\n * Set `false` to drive your own ThemeProvider from `useColorMode().theme`. */\n applyTheme?: boolean\n}\n\n/**\n * Owns color-mode state, resolves `'system'` against the OS scheme, persists the\n * choice, and (by default) applies the resolved theme via `ThemeProvider`.\n * Pair with {@link ColorModeToggle} or read state via {@link useColorMode}.\n */\nexport function ColorModeProvider({\n children,\n defaultPreference = 'system',\n preference: controlled,\n onPreferenceChange,\n modes = ['light', 'dark'],\n storageKey = 'duro-color-mode',\n applyTheme = true,\n}: ColorModeProviderProps) {\n const [internal, setInternal] = useState<ColorModePreference>(controlled ?? defaultPreference)\n const preference = controlled ?? internal\n\n // Hydrate from storage AFTER mount (not in the initializer) so the first\n // client render matches the server and React doesn't warn about a mismatch.\n useEffect(() => {\n if (controlled !== undefined) return\n const stored = readStored(storageKey)\n if (stored) setInternal(stored)\n // Only on mount / when the key changes.\n }, [controlled, storageKey])\n\n const setPreference = useCallback(\n (next: ColorModePreference) => {\n if (controlled === undefined) setInternal(next)\n writeStored(storageKey, next)\n onPreferenceChange?.(next)\n },\n [controlled, storageKey, onPreferenceChange],\n )\n\n // Track the OS scheme so `'system'` stays live. The initial value MUST be the\n // SSR-stable default ('dark', what the server renders without a DOM) so the\n // first client render matches the server — reading matchMedia in the\n // initializer would diverge (server 'dark' vs client's real scheme) and trip\n // a hydration mismatch. The effect reconciles to the real scheme after mount.\n const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('dark')\n useEffect(() => {\n if (!canUseDom) return\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const onChange = () => setSystemTheme(mq.matches ? 'dark' : 'light')\n onChange()\n mq.addEventListener('change', onChange)\n return () => mq.removeEventListener('change', onChange)\n }, [])\n\n const theme: ThemeName = preference === 'system' ? systemTheme : preference\n\n const cycle = useCallback(() => {\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0]\n if (next) setPreference(next)\n }, [modes, preference, setPreference])\n\n const value = useMemo<ColorModeContextValue>(\n () => ({preference, theme, setPreference, cycle, modes}),\n [preference, theme, setPreference, cycle, modes],\n )\n\n return (\n <ColorModeContext.Provider value={value}>\n {applyTheme ? <ThemeProvider theme={theme}>{children}</ThemeProvider> : children}\n </ColorModeContext.Provider>\n )\n}\n\ninterface ColorModeToggleProps {\n /** Icon size token. Default `'md'` (18px). */\n size?: IconSize\n /** Override the announced label (otherwise auto-generated from current/next). */\n 'aria-label'?: string\n}\n\n/**\n * A compact icon button that cycles the color-mode preference through the\n * provider's `modes`. The glyph reflects the current preference\n * (sun/moon/monitor/contrast). Must be inside a {@link ColorModeProvider}.\n */\nexport function ColorModeToggle({size = 'md', 'aria-label': ariaLabel}: ColorModeToggleProps) {\n const {preference, cycle, modes} = useColorMode()\n const i = modes.indexOf(preference)\n const next = modes[(i + 1) % modes.length] ?? modes[0] ?? preference\n const label = ariaLabel ?? `Color mode: ${LABEL[preference]}. Switch to ${LABEL[next]}.`\n\n return (\n <html.button type=\"button\" aria-label={label} onClick={cycle} style={styles.button}>\n <Icon name={ICON[preference]} size={size} />\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\n\nexport const styles = css.create({\n // Colors\n default: {\n color: colors.text,\n },\n muted: {\n color: colors.textMuted,\n },\n accent: {\n color: colors.accent,\n },\n error: {\n color: colors.errorText,\n },\n success: {\n color: colors.successText,\n },\n warning: {\n color: colors.warningText,\n },\n\n // Weight overrides\n weightNormal: {\n fontWeight: typography.fontWeightNormal,\n },\n weightMedium: {\n fontWeight: typography.fontWeightMedium,\n },\n weightSemibold: {\n fontWeight: typography.fontWeightSemibold,\n },\n weightBold: {\n fontWeight: typography.fontWeightBold,\n },\n\n // Alignment\n alignStart: {\n textAlign: 'start',\n },\n alignCenter: {\n textAlign: 'center',\n },\n alignEnd: {\n textAlign: 'end',\n },\n\n // Truncate. minWidth: 0 lets a truncating Text actually shrink inside a\n // flex/grid container — without it, the default `min-width: auto` would\n // keep the element at its content width, so text-overflow: ellipsis would\n // never trigger and the text would just overflow the parent instead.\n truncate: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n minWidth: 0,\n },\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {typePresets} from '@duro-app/tokens/tokens/type-presets.css'\nimport {styles} from './styles.css'\n\nexport type TextVariant = 'bodySm' | 'bodyMd' | 'bodyLg' | 'caption' | 'label' | 'code' | 'overline'\nexport type TextColor = 'default' | 'muted' | 'accent' | 'error' | 'success' | 'warning'\n\ninterface TextProps {\n variant?: TextVariant\n color?: TextColor\n weight?: 'normal' | 'medium' | 'semibold' | 'bold'\n align?: 'start' | 'center' | 'end'\n truncate?: boolean\n as?: 'span' | 'p' | 'div'\n children: ReactNode\n}\n\nconst weightMap = {\n normal: styles.weightNormal,\n medium: styles.weightMedium,\n semibold: styles.weightSemibold,\n bold: styles.weightBold,\n} as const\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nexport function Text({\n variant = 'bodyMd',\n color = 'default',\n weight,\n align,\n truncate,\n as = 'span',\n children,\n}: TextProps) {\n const style = [\n typePresets[variant],\n styles[color],\n weight && weightMap[weight],\n align && alignMap[align],\n truncate && styles.truncate,\n ]\n\n if (as === 'p') return <html.p style={style}>{children}</html.p>\n if (as === 'div') return <html.div style={style}>{children}</html.div>\n return <html.span style={style}>{children}</html.span>\n}\n","import {createContext, useContext} from 'react'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport type {Orientation} from '../../shared/types'\n\nexport type {Orientation}\n\nexport interface ToggleGroupContextValue {\n value: string[]\n toggle: (itemValue: string) => void\n disabled: boolean\n orientation: Orientation\n size: ToggleSize\n}\n\nexport const ToggleGroupContext = createContext<ToggleGroupContextValue | null>(null)\n\nexport function useToggleGroup() {\n return useContext(ToggleGroupContext)\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n base: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 1,\n borderStyle: 'solid',\n cursor: 'pointer',\n fontFamily: typography.fontFamily,\n fontWeight: typography.fontWeightMedium,\n transitionProperty: 'background-color, border-color, color, opacity',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\n },\n sizeDefault: {\n padding: `${spacing.sm} ${spacing.md}`,\n fontSize: typography.fontSizeSm,\n borderRadius: radii.sm,\n gap: spacing.sm,\n },\n sizeSmall: {\n padding: `${spacing.xs} ${spacing.sm}`,\n fontSize: typography.fontSizeXs,\n borderRadius: radii.sm,\n gap: spacing.xs,\n },\n unpressed: {\n backgroundColor: {\n default: 'transparent',\n ':hover': colors.bgCardHover,\n },\n borderColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n color: colors.textMuted,\n },\n pressed: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n borderColor: colors.accent,\n color: colors.accentContrast,\n },\n grouped: {\n borderWidth: 0,\n borderRadius: 0,\n borderRightWidth: 1,\n borderRightStyle: 'solid',\n // Override any borderColor set by pressed state — dividers always use border token\n borderColor: colors.border,\n },\n disabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n})\n","import {type ReactNode, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {useToggleGroup} from '../ToggleGroup/ToggleGroupContext'\nimport {styles} from './styles.css'\n\nexport type ToggleSize = 'default' | 'small'\n\ninterface ToggleProps {\n /** Controlled pressed state (standalone usage). */\n pressed?: boolean\n /** Initial pressed state (uncontrolled, standalone usage). */\n defaultPressed?: boolean\n /** Callback fired when the pressed state changes (standalone usage). */\n onPressedChange?: (pressed: boolean) => void\n /** Unique value when used inside a ToggleGroup. */\n value?: string\n /** Prevents user interaction. */\n disabled?: boolean\n /** Size variant (overridden by ToggleGroup when grouped). */\n size?: ToggleSize\n 'aria-label'?: string\n children: ReactNode\n}\n\nconst sizeMap = {\n default: styles.sizeDefault,\n small: styles.sizeSmall,\n} as const\n\nexport function Toggle({\n pressed: controlledPressed,\n defaultPressed = false,\n onPressedChange,\n value,\n disabled: disabledProp = false,\n size: sizeProp = 'default',\n 'aria-label': ariaLabel,\n children,\n}: ToggleProps) {\n const group = useToggleGroup()\n\n // When inside a ToggleGroup, derive pressed state from group context\n const groupPressed = group && value !== undefined ? group.value.includes(value) : undefined\n const isGrouped = group !== null\n const disabled = disabledProp || (group?.disabled ?? false)\n const size = group?.size ?? sizeProp\n\n const [standalonePressed, setStandalonePressed] = useControllableValue(\n controlledPressed,\n defaultPressed,\n onPressedChange,\n )\n\n const pressed = groupPressed ?? standalonePressed\n\n const handleClick = useCallback(() => {\n if (disabled) return\n if (isGrouped && value !== undefined) {\n group.toggle(value)\n } else {\n setStandalonePressed(!pressed)\n }\n }, [disabled, isGrouped, value, group, pressed, setStandalonePressed])\n\n return (\n <html.button\n type=\"button\"\n aria-pressed={pressed}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={handleClick}\n data-pressed={pressed ? '' : undefined}\n style={[\n styles.base,\n sizeMap[size],\n pressed ? styles.pressed : styles.unpressed,\n isGrouped && styles.grouped,\n disabled && styles.disabled,\n ]}\n >\n {children}\n </html.button>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {radii} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n overflow: 'hidden',\n },\n vertical: {\n flexDirection: 'column',\n },\n})\n","import {type ReactNode, useCallback} from 'react'\nimport {html} from 'react-strict-dom'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport type {ToggleSize} from '../Toggle/Toggle'\nimport {ToggleGroupContext, type Orientation} from './ToggleGroupContext'\nimport {styles} from './styles.css'\n\ninterface ToggleGroupProps {\n /** Controlled value — array of pressed item values. */\n value?: string[]\n /** Initial value (uncontrolled). */\n defaultValue?: string[]\n /** Callback fired when the set of pressed values changes. */\n onValueChange?: (value: string[]) => void\n /** When false, at most one item can be pressed at a time. */\n multiple?: boolean\n /** Prevents interaction with all items. */\n disabled?: boolean\n /** Layout direction. */\n orientation?: Orientation\n /** Size applied to all child toggles. */\n size?: ToggleSize\n children: ReactNode\n}\n\nexport function ToggleGroup({\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n multiple = false,\n disabled = false,\n orientation = 'horizontal',\n size = 'default',\n children,\n}: ToggleGroupProps) {\n const [value, setValue] = useControllableValue(controlledValue, defaultValue, onValueChange)\n\n const toggle = useCallback(\n (itemValue: string) => {\n const nextPressed = !value.includes(itemValue)\n let next: string[]\n if (multiple) {\n next = nextPressed ? [...value, itemValue] : value.filter((v) => v !== itemValue)\n } else {\n next = nextPressed ? [itemValue] : []\n }\n setValue(next)\n },\n [value, multiple, setValue],\n )\n\n return (\n <ToggleGroupContext.Provider value={{value, toggle, disabled, orientation, size}}>\n <html.div\n role=\"toolbar\"\n aria-orientation={orientation}\n style={[styles.root, orientation === 'vertical' && styles.vertical]}\n >\n {children}\n </html.div>\n </ToggleGroupContext.Provider>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {shadows} from '@duro-app/tokens/tokens/shadows.css'\n\nexport const styles = css.create({\n root: {\n position: 'relative',\n display: 'inline-flex',\n },\n popup: {\n position: 'absolute',\n zIndex: 50,\n paddingTop: spacing.xs,\n paddingBottom: spacing.xs,\n paddingLeft: spacing.sm,\n paddingRight: spacing.sm,\n backgroundColor: colors.bgCard,\n color: colors.text,\n fontFamily: typography.fontFamily,\n fontSize: typography.fontSizeXs,\n lineHeight: typography.lineHeight,\n borderRadius: radii.sm,\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: colors.border,\n boxShadow: shadows.md,\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n },\n top: {\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: spacing.xs,\n },\n bottom: {\n top: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginTop: spacing.xs,\n },\n left: {\n right: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginRight: spacing.xs,\n },\n right: {\n left: '100%',\n top: '50%',\n transform: 'translateY(-50%)',\n marginLeft: spacing.xs,\n },\n})\n","import {\n type ReactNode,\n createContext,\n useContext,\n useState,\n useRef,\n useCallback,\n useId,\n} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\n// --- Context ---\n\ntype Placement = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipContextValue {\n open: boolean\n show: () => void\n hide: () => void\n tooltipId: string\n placement: Placement\n}\n\nconst TooltipContext = createContext<TooltipContextValue | null>(null)\n\nfunction useTooltip() {\n const ctx = useContext(TooltipContext)\n if (!ctx) throw new Error('Tooltip compound components must be used within Tooltip.Root')\n return ctx\n}\n\n// --- Root ---\n\ninterface RootProps {\n children: ReactNode\n content: ReactNode\n placement?: Placement\n delay?: number\n}\n\nfunction Root({children, content, placement = 'top', delay = 300}: RootProps) {\n const [open, setOpen] = useState(false)\n const tooltipId = useId()\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const show = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const hide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current)\n timerRef.current = null\n setOpen(false)\n }, [])\n\n return (\n <TooltipContext.Provider value={{open, show, hide, tooltipId, placement}}>\n <html.div style={styles.root}>\n {children}\n {open && (\n <html.div id={tooltipId} role=\"tooltip\" style={[styles.popup, styles[placement]]}>\n {content}\n </html.div>\n )}\n </html.div>\n </TooltipContext.Provider>\n )\n}\n\n// --- Trigger ---\n\ninterface TriggerProps {\n children: ReactNode\n}\n\nfunction Trigger({children}: TriggerProps) {\n const {open, show, hide, tooltipId} = useTooltip()\n\n return (\n <html.div\n onPointerEnter={show}\n onPointerLeave={hide}\n onFocus={show}\n onBlur={hide}\n aria-describedby={open ? tooltipId : undefined}\n >\n {children}\n </html.div>\n )\n}\n\nexport const Tooltip = {\n Root,\n Trigger,\n}\n","import {css} from 'react-strict-dom'\nimport {colors} from '@duro-app/tokens/tokens/colors.css'\nimport {spacing, radii} from '@duro-app/tokens/tokens/spacing.css'\nimport {typography} from '@duro-app/tokens/tokens/typography.css'\nimport {duration, easing} from '@duro-app/tokens/tokens/motion.css'\n\nexport const styles = css.create({\n root: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: spacing.sm,\n cursor: 'pointer',\n fontSize: typography.fontSizeSm,\n color: colors.text,\n lineHeight: typography.lineHeight,\n },\n rootDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed',\n },\n track: {\n position: 'relative',\n width: 36,\n height: 20,\n borderRadius: radii.full,\n borderWidth: 0,\n padding: 0,\n cursor: 'inherit',\n transitionProperty: 'background-color',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n outlineWidth: {default: 0, ':focus-visible': 2},\n outlineStyle: 'solid',\n outlineColor: colors.accent,\n outlineOffset: 2,\n flexShrink: 0,\n },\n trackUnchecked: {\n backgroundColor: {\n default: colors.border,\n ':hover': colors.textMuted,\n },\n },\n trackChecked: {\n backgroundColor: {\n default: colors.accent,\n ':hover': colors.accentHover,\n },\n },\n thumb: {\n position: 'absolute',\n top: 2,\n left: 2,\n width: 16,\n height: 16,\n borderRadius: radii.full,\n backgroundColor: '#fff',\n transitionProperty: 'transform',\n transitionDuration: duration.fast,\n transitionTimingFunction: easing.standard,\n },\n thumbChecked: {\n transform: 'translateX(16px)',\n },\n input: {\n position: 'absolute',\n width: 1,\n height: 1,\n opacity: 0,\n overflow: 'hidden',\n },\n // RSD-native only honors display:'flex' (not 'inline-flex'). Layered on\n // native via `isNative` so the flex container applies; web keeps inline-flex.\n nativeFlex: {\n display: 'flex',\n },\n})\n","import {type ReactNode, useCallback, useRef} from 'react'\nimport {html} from 'react-strict-dom'\nimport {isNative} from '../../platform'\nimport {useControllableValue} from '../../hooks/useControllableValue'\nimport {styles} from './styles.css'\n\ninterface SwitchProps {\n /** Controlled checked state. */\n checked?: boolean\n /** Initial checked state (uncontrolled). */\n defaultChecked?: boolean\n /** Callback fired when the checked state changes. */\n onCheckedChange?: (checked: boolean) => void\n /** Prevents user interaction. */\n disabled?: boolean\n /** Form field name for the hidden input. */\n name?: string\n /** Value submitted when checked. */\n value?: string\n /** Label content rendered beside the switch. */\n children?: ReactNode\n}\n\nexport function Switch({\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n disabled = false,\n name,\n value,\n children,\n}: SwitchProps) {\n const [checked, setChecked] = useControllableValue(\n controlledChecked,\n defaultChecked,\n onCheckedChange,\n )\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleClick = useCallback(() => {\n if (disabled) return\n setChecked(!checked)\n // Keep hidden input in sync for form submission\n if (inputRef.current) {\n inputRef.current.checked = !checked\n }\n }, [disabled, checked, setChecked])\n\n return (\n <html.label\n style={[styles.root, isNative && styles.nativeFlex, disabled && styles.rootDisabled]}\n >\n {!isNative && (\n // Web: hidden real checkbox carries a11y + form submission. RSD has no\n // <input type=checkbox> on native, so it's omitted there and the\n // button below carries the switch role instead.\n <html.input\n ref={inputRef}\n type=\"checkbox\"\n role=\"switch\"\n name={name}\n value={value}\n checked={controlledChecked !== undefined ? controlledChecked : undefined}\n defaultChecked={controlledChecked === undefined ? defaultChecked : undefined}\n disabled={disabled}\n aria-checked={checked}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n onCheckedChange?.(e.target.checked)\n }}\n style={styles.input}\n />\n )}\n <html.button\n type=\"button\"\n tabIndex={-1}\n aria-hidden={isNative ? undefined : true}\n role={isNative ? 'switch' : undefined}\n aria-checked={isNative ? checked : undefined}\n disabled={disabled}\n onClick={handleClick}\n style={[styles.track, checked ? styles.trackChecked : styles.trackUnchecked]}\n >\n <html.span style={[styles.thumb, checked && styles.thumbChecked]} />\n </html.button>\n {children && <html.span>{children}</html.span>}\n </html.label>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'column',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignStretch: {alignItems: 'stretch'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\nimport {styles} from './styles.css'\n\nexport type SpacingKey = SpacingToken\n\ninterface StackProps {\n gap?: SpacingKey\n align?: 'start' | 'center' | 'end' | 'stretch'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n stretch: styles.alignStretch,\n} as const\n\nexport function Stack({gap = 'md', align = 'stretch', children}: StackProps) {\n return <html.div style={[styles.base, gapMap[gap], alignMap[align]]}>{children}</html.div>\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'nowrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n alignBaseline: {alignItems: 'baseline'},\n alignStretch: {alignItems: 'stretch'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface InlineProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end' | 'baseline' | 'stretch'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n baseline: styles.alignBaseline,\n stretch: styles.alignStretch,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Inline({gap = 'sm', align = 'center', justify = 'start', children}: InlineProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n base: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n },\n alignStart: {alignItems: 'flex-start'},\n alignCenter: {alignItems: 'center'},\n alignEnd: {alignItems: 'flex-end'},\n justifyStart: {justifyContent: 'flex-start'},\n justifyCenter: {justifyContent: 'center'},\n justifyEnd: {justifyContent: 'flex-end'},\n justifyBetween: {justifyContent: 'space-between'},\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\ninterface ClusterProps {\n gap?: SpacingToken\n align?: 'start' | 'center' | 'end'\n justify?: 'start' | 'center' | 'end' | 'between'\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst alignMap = {\n start: styles.alignStart,\n center: styles.alignCenter,\n end: styles.alignEnd,\n} as const\n\nconst justifyMap = {\n start: styles.justifyStart,\n center: styles.justifyCenter,\n end: styles.justifyEnd,\n between: styles.justifyBetween,\n} as const\n\nexport function Cluster({gap = 'sm', align = 'start', justify = 'start', children}: ClusterProps) {\n return (\n <html.div style={[styles.base, gapMap[gap], alignMap[align], justifyMap[justify]]}>\n {children}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\nimport {breakpoints} from '@duro-app/tokens/tokens/breakpoints.css'\n\n// Where a split collapses to one column — measured on the split's OWN\n// container, not the viewport. A split nested in another split (a list/detail\n// board inside a nav/content shell) has far less room than the window: at a\n// 768px viewport the shell leaves ~408px for its content column, and a\n// viewport-keyed inner split would still open there and squeeze its detail\n// pane to ~150px. Container queries collapse each split on what it actually\n// has. defineConsts strings, inlined into the @container text at build time.\nconst SPLIT_WIDE_BP = breakpoints.md // 280px rail + real content\nconst SPLIT_BP = breakpoints.sm // 240px list + ≥ 384px detail\n\nexport const styles = css.create({\n base: {\n display: 'grid',\n },\n col1: {gridTemplateColumns: '1fr'},\n col2: {gridTemplateColumns: 'repeat(2, 1fr)'},\n col3: {gridTemplateColumns: 'repeat(3, 1fr)'},\n col4: {gridTemplateColumns: 'repeat(4, 1fr)'},\n col5: {gridTemplateColumns: 'repeat(5, 1fr)'},\n col6: {gridTemplateColumns: 'repeat(6, 1fr)'},\n autoFit: (minWidth: string) => ({\n gridTemplateColumns: `repeat(auto-fill, minmax(${minWidth}, 1fr))`,\n }),\n // Hosts the @container query for a named layout. A container cannot query\n // itself, so the grid sits inside this wrapper (the Table.rootContainer\n // pattern). Only `layout` grids get it: counted and weighted grids keep\n // their DOM exactly as before.\n splitContainer: {\n containerType: 'inline-size',\n },\n // Asymmetric list/detail splits: a bounded first column, the rest for the\n // detail; one column when the container is narrower than the breakpoint.\n // Static entries rather than a parameter because the pair (widths +\n // collapse point) is the design decision — a screen picks a split, it does\n // not tune one.\n split: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_BP})`]: 'minmax(240px, 1fr) minmax(0, 2fr)',\n },\n },\n splitWide: {\n gridTemplateColumns: {\n default: '1fr',\n [`@container (min-width: ${SPLIT_WIDE_BP})`]: 'minmax(280px, 1fr) minmax(0, 3fr)',\n },\n },\n // Weighted columns: `[1, 2]` → `1fr 2fr` (see columns.ts).\n template: (tracks: string) => ({\n gridTemplateColumns: tracks,\n }),\n gapXs: {gap: spacing.xs},\n gapSm: {gap: spacing.sm},\n gapMs: {gap: spacing.ms},\n gapMd: {gap: spacing.md},\n gapLg: {gap: spacing.lg},\n gapXl: {gap: spacing.xl},\n gapXxl: {gap: spacing.xxl},\n gapXxxl: {gap: spacing.xxxl},\n\n // --- native only (see NativeGrid in Grid.tsx) -----------------------------\n // React Native honours `display: 'flex'` only, and RSD gives it web flex\n // semantics, so the row direction is explicit.\n nativeRow: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'stretch',\n // A definite width so percentage bases resolve in Yoga's measure pass;\n // against an auto width the line breaks come out wrong and the container\n // under-reports its height (verified on the iOS simulator).\n width: '100%',\n },\n // border-box is explicit: react-strict-dom mirrors the web default\n // (content-box) on native, which adds the gap padding on top of the basis\n // and overflows the row so every cell wraps.\n nativeCell: (basis: string) => ({\n flexBasis: basis,\n flexShrink: 0,\n boxSizing: 'border-box',\n }),\n // Auto-fit approximation: start at the minimum width, grow to fill. flexGrow\n // is fine here: this style is native-only, so RSD-web's forced flex-grow: 0\n // never applies.\n nativeMinCell: (minWidth: string) => ({\n flexBasis: minWidth,\n flexGrow: 1,\n boxSizing: 'border-box',\n }),\n cellGapLeftXs: {paddingLeft: spacing.xs},\n cellGapLeftSm: {paddingLeft: spacing.sm},\n cellGapLeftMs: {paddingLeft: spacing.ms},\n cellGapLeftMd: {paddingLeft: spacing.md},\n cellGapLeftLg: {paddingLeft: spacing.lg},\n cellGapLeftXl: {paddingLeft: spacing.xl},\n cellGapLeftXxl: {paddingLeft: spacing.xxl},\n cellGapLeftXxxl: {paddingLeft: spacing.xxxl},\n cellGapTopXs: {paddingTop: spacing.xs},\n cellGapTopSm: {paddingTop: spacing.sm},\n cellGapTopMs: {paddingTop: spacing.ms},\n cellGapTopMd: {paddingTop: spacing.md},\n cellGapTopLg: {paddingTop: spacing.lg},\n cellGapTopXl: {paddingTop: spacing.xl},\n cellGapTopXxl: {paddingTop: spacing.xxl},\n cellGapTopXxxl: {paddingTop: spacing.xxxl},\n})\n","// Pure column arithmetic behind Grid. No react-strict-dom, no platform: this\n// is what the unit project tests, and what both the web and native renderers\n// derive their styles from.\n\nexport type GridColumnCount = 1 | 2 | 3 | 4 | 5 | 6\n\n/**\n * Column spec: a count (equal columns) or a list of weights (`[1, 2]` is a\n * one-third / two-thirds split). Weights are the portable form of\n * `grid-template-columns: 1fr 2fr` — the only shape both runtimes can\n * honour, since React Native has no grid.\n */\nexport type GridColumns = GridColumnCount | readonly number[]\n\n/** Normalise a column spec to weights; `undefined` when no spec was given\n * (the caller then falls back to auto-fit or a single column). An invalid\n * weight list (empty, non-finite or non-positive entries) is a programming\n * error, reported in development and treated as one column. */\nexport function columnWeights(columns: GridColumns | undefined): readonly number[] | undefined {\n if (columns === undefined) return undefined\n if (typeof columns === 'number') return Array.from({length: columns}, () => 1)\n const valid = columns.length > 0 && columns.every((w) => Number.isFinite(w) && w > 0)\n if (!valid) {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n `Grid: \\`columns\\` must be a non-empty list of positive numbers, got ${JSON.stringify(columns)}. Falling back to one column.`,\n )\n }\n return [1]\n }\n return columns\n}\n\n/** Web track list: `[1, 2]` → `\"1fr 2fr\"`. */\nexport function gridTemplate(weights: readonly number[]): string {\n return weights.map((w) => `${w}fr`).join(' ')\n}\n\n/** Native cell basis for the child at `index`: its column's share of the row\n * as a percentage string Yoga accepts (`\"33.3333%\"`). Children flow into\n * columns in order and wrap, exactly like grid auto-placement. */\nexport function cellBasis(weights: readonly number[], index: number): string {\n const total = weights.reduce((sum, w) => sum + w, 0)\n const share = (weights[index % weights.length] / total) * 100\n // Four decimals keeps a row summing to 100% within Yoga's tolerance while\n // never exceeding it (which would wrap the last cell).\n return `${Math.floor(share * 10000) / 10000}%`\n}\n\n/** Where the child at `index` sits in an `columnCount`-wide flow: whether it\n * opens a row (no gap to its left) and whether it is on the first row (no\n * gap above). Drives the native gap-as-padding scheme. */\nexport function cellPosition(\n index: number,\n columnCount: number,\n): {opensRow: boolean; firstRow: boolean} {\n return {opensRow: index % columnCount === 0, firstRow: index < columnCount}\n}\n","import {Children, type ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\nimport {isNative} from '../../platform'\nimport {cellBasis, cellPosition, columnWeights, gridTemplate, type GridColumns} from './columns'\nimport type {SpacingToken} from '@duro-app/tokens/keys'\n\nexport type GridLayout = 'split' | 'split-wide'\n\ninterface GridProps {\n gap?: SpacingToken\n /** A column count (equal columns) or weights: `[1, 2]` gives a one-third /\n * two-thirds split. Weights are the portable form of a track list — a CSS\n * template string would be silently ignored on native. */\n columns?: GridColumns\n /** Responsive auto-fit: as many columns of at least this width as fit.\n * Wins over `columns` when both are set. On native this approximates to\n * cells of that minimum width that grow and wrap. */\n minColumnWidth?: string\n /**\n * A named responsive layout. `split` is list/detail (1:2, list ≥ 240px),\n * `split-wide` is nav/content (1:3, nav ≥ 280px). Each collapses to one\n * column on the width of its OWN container — `split` below `sm` (640px),\n * `split-wide` below `md` (768px) — so a split nested inside another\n * split, or beside an open DetailPanel, collapses when it runs out of room\n * rather than when the window does. Wins over `columns` / `minColumnWidth`.\n */\n layout?: GridLayout\n children: ReactNode\n}\n\nconst gapMap = {\n xs: styles.gapXs,\n sm: styles.gapSm,\n ms: styles.gapMs,\n md: styles.gapMd,\n lg: styles.gapLg,\n xl: styles.gapXl,\n xxl: styles.gapXxl,\n xxxl: styles.gapXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\n// Fixed counts keep their static classes so existing web consumers emit the\n// exact CSS they did before; only weight lists go through the dynamic style.\nconst columnsMap = {\n 1: styles.col1,\n 2: styles.col2,\n 3: styles.col3,\n 4: styles.col4,\n 5: styles.col5,\n 6: styles.col6,\n} as const\n\nconst layoutMap = {\n split: styles.split,\n 'split-wide': styles.splitWide,\n} as const satisfies Record<GridLayout, unknown>\n\n// On native the named layouts are their weights; there is no media query to\n// collapse them, so a split stays a split on a phone (see NativeGrid).\nconst layoutWeights = {\n split: [1, 2],\n 'split-wide': [1, 3],\n} as const satisfies Record<GridLayout, readonly number[]>\n\nconst cellGapLeftMap = {\n xs: styles.cellGapLeftXs,\n sm: styles.cellGapLeftSm,\n ms: styles.cellGapLeftMs,\n md: styles.cellGapLeftMd,\n lg: styles.cellGapLeftLg,\n xl: styles.cellGapLeftXl,\n xxl: styles.cellGapLeftXxl,\n xxxl: styles.cellGapLeftXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nconst cellGapTopMap = {\n xs: styles.cellGapTopXs,\n sm: styles.cellGapTopSm,\n ms: styles.cellGapTopMs,\n md: styles.cellGapTopMd,\n lg: styles.cellGapTopLg,\n xl: styles.cellGapTopXl,\n xxl: styles.cellGapTopXxl,\n xxxl: styles.cellGapTopXxxl,\n} as const satisfies Record<SpacingToken, unknown>\n\nexport function Grid({gap = 'md', columns, minColumnWidth, layout, children}: GridProps) {\n if (isNative) {\n return (\n <NativeGrid\n gap={gap}\n columns={layout ? layoutWeights[layout] : columns}\n minColumnWidth={layout ? undefined : minColumnWidth}\n >\n {children}\n </NativeGrid>\n )\n }\n\n const columnStyle = layout\n ? layoutMap[layout]\n : minColumnWidth\n ? styles.autoFit(minColumnWidth)\n : typeof columns === 'number'\n ? columnsMap[columns]\n : columns\n ? styles.template(gridTemplate(columnWeights(columns) ?? [1]))\n : undefined\n\n const grid = <html.div style={[styles.base, gapMap[gap], columnStyle]}>{children}</html.div>\n // A named layout answers its container query from a wrapper: an element\n // cannot query its own size.\n return layout ? <html.div style={styles.splitContainer}>{grid}</html.div> : grid\n}\n\n/**\n * React Native has no grid, so the native Grid is a wrapping flex row with\n * each child in a cell:\n *\n * - Weighted / counted columns: the cell's `flexBasis` is its column's share\n * of the row. Percentages plus a real `gap` would overflow and wrap early,\n * so the gap is padding on the cell instead — left on every cell that does\n * not open a row, top on every row after the first. RN is border-box, so\n * the bases still sum to exactly 100%, and the gap stays a token.\n * - `minColumnWidth`: cells start at that width and grow, and the row uses a\n * real `gap`, since here wrapping is width-driven and row membership is\n * not known from the index.\n *\n * Only this branch wraps children; on web grid children stay direct, so\n * existing DOM trees are untouched.\n */\nfunction NativeGrid({gap = 'md', columns, minColumnWidth, children}: GridProps) {\n const items = Children.toArray(children)\n if (minColumnWidth) {\n return (\n <html.div style={[styles.nativeRow, gapMap[gap]]}>\n {items.map((child, index) => (\n <html.div key={index} style={styles.nativeMinCell(minColumnWidth)}>\n {child}\n </html.div>\n ))}\n </html.div>\n )\n }\n const weights = columnWeights(columns) ?? [1]\n return (\n <html.div style={styles.nativeRow}>\n {items.map((child, index) => {\n const {opensRow, firstRow} = cellPosition(index, weights.length)\n return (\n <html.div\n key={index}\n style={[\n styles.nativeCell(cellBasis(weights, index)),\n !opensRow && cellGapLeftMap[gap],\n !firstRow && cellGapTopMap[gap],\n ]}\n >\n {child}\n </html.div>\n )\n })}\n </html.div>\n )\n}\n","import {css} from 'react-strict-dom'\nimport {layoutSpacing} from '@duro-app/tokens/tokens/layout-spacing.css'\nimport {spacing} from '@duro-app/tokens/tokens/spacing.css'\n\nexport const styles = css.create({\n root: {\n width: '100%',\n },\n container: {\n width: '100%',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n // Max-width presets\n maxSm: {maxWidth: 600},\n maxMd: {maxWidth: 800},\n maxLg: {maxWidth: 1200},\n // Horizontal padding\n padSm: {paddingLeft: layoutSpacing.containerSm, paddingRight: layoutSpacing.containerSm},\n padMd: {paddingLeft: layoutSpacing.containerMd, paddingRight: layoutSpacing.containerMd},\n padLg: {paddingLeft: layoutSpacing.containerLg, paddingRight: layoutSpacing.containerLg},\n // Vertical spacing\n headerPadding: {paddingTop: spacing.lg},\n mainPadding: {paddingTop: spacing.xl, paddingBottom: spacing.xl},\n})\n","import type {ReactNode} from 'react'\nimport {html} from 'react-strict-dom'\nimport {styles} from './styles.css'\n\nexport type PageShellMaxWidth = 'sm' | 'md' | 'lg' | 'full'\nexport type PageShellPadding = 'sm' | 'md' | 'lg'\n\ninterface PageShellProps {\n /** Max-width preset: sm (600), md (800), lg (1200), full (none). Default: 'lg' */\n maxWidth?: PageShellMaxWidth\n /** Horizontal padding preset. Default: 'md' (24px) */\n padding?: PageShellPadding\n /** Header element rendered above the main content with same constraints */\n header?: ReactNode\n children: ReactNode\n}\n\nconst maxWidthMap = {\n sm: styles.maxSm,\n md: styles.maxMd,\n lg: styles.maxLg,\n full: null,\n} as const\n\nconst paddingMap = {\n sm: styles.padSm,\n md: styles.padMd,\n lg: styles.padLg,\n} as const\n\nexport function PageShell({maxWidth = 'lg', padding = 'md', header, children}: PageShellProps) {\n const mw = maxWidthMap[maxWidth]\n const pad = paddingMap[padding]\n\n return (\n <html.div style={styles.root}>\n {header != null && (\n <html.header style={[styles.container, styles.maxLg, pad, styles.headerPadding]}>\n {header}\n </html.header>\n )}\n <html.main style={[styles.container, mw, pad, styles.mainPadding]}>{children}</html.main>\n </html.div>\n )\n}\n","import {useRef, useState, useEffect} from 'react'\nimport {breakpointsPx, type Breakpoint} from '@duro-app/tokens/tokens/breakpoints.css'\n\nexport type ContainerSize = 'compact' | 'default' | 'spacious'\n\ninterface UseContainerQueryOptions {\n compactBelow?: Breakpoint | number\n spaciousAbove?: Breakpoint | number\n}\n\nfunction toPx(value: Breakpoint | number): number {\n return typeof value === 'number' ? value : breakpointsPx[value]\n}\n\nexport function useContainerQuery<T extends HTMLElement = HTMLElement>(\n options: UseContainerQueryOptions = {},\n): {\n ref: React.RefObject<T | null>\n size: ContainerSize\n} {\n const {compactBelow: compactOpt = 'xs', spaciousAbove: spaciousOpt = 'md'} = options\n const compactBelow = toPx(compactOpt)\n const spaciousAbove = toPx(spaciousOpt)\n const ref = useRef<T | null>(null)\n const [size, setSize] = useState<ContainerSize>('default')\n\n useEffect(() => {\n const element = ref.current\n if (!element) return\n\n let rafId: number | null = null\n\n const observer = new ResizeObserver((entries) => {\n if (rafId !== null) cancelAnimationFrame(rafId)\n\n rafId = requestAnimationFrame(() => {\n const entry = entries[0]\n if (!entry) return\n\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width\n\n if (width < compactBelow) {\n setSize('compact')\n } else if (width >= spaciousAbove) {\n setSize('spacious')\n } else {\n setSize('default')\n }\n })\n })\n\n observer.observe(element)\n\n return () => {\n observer.disconnect()\n if (rafId !== null) cancelAnimationFrame(rafId)\n }\n }, [compactBelow, spaciousAbove])\n\n return {ref, size}\n}\n"],"names":["SPACING_PX","xs","sm","ms","md","lg","xl","xxl","xxxl","DURATION_MS","instant","fast","base","slow","ICON_SIZES","createActionBarStore","entries","listeners","Set","notify","forEach","l","subscribe","cb","add","delete","getSnapshot","push","id","render","update","map","e","remove","filter","ActionBarContext","createContext","ActionBarProvider","children","storeRef","useRef","current","store","useSyncExternalStore","topEntry","length","jsxs","useActionBarStack","$","_c","useContext","useId","t0","some","register","t1","unregister","t2","bb0","t3","entries_0","isTop","t4","managed","styles","overlay","$$css","overlayOffset","bottom","val","undefined","overlayEmphasized","selectedCount","selectedCountEmphasized","actions","closeButton","closeButtonEmphasized","separator","separatorEmphasized","ActionBarContent","selectedItemCount","selectedLabel","isEmphasized","onClearSelection","dismissible","bottomOffset","countStr","label","t5","t6","t7","t8","t9","jsx","_rsdMerge","_rsdDefaultStyles","span","t10","t11","div","t12","t13","button","t14","ActionBarInner","props","stack","isActive","renderBar","useEffect","ActionBar","strokeIcons","Fragment","clock","forbidden","shield","lock","key","layers","repeat","database","route","menu","server","box","image","tag","users","mail","plug","pin","sun","moon","monitor","contrast","filledIcons","Icon","name","size","filled","iconWrap","content","error","success","warning","info","defaultIcons","resolveIcon","icon","variant","Alert","resolvedIcon","isNative","sizeMd","sizeSm","default","nativeFlex","sizeMap","Badge","sizeDefault","sizeSmall","primary","secondary","link","inverseSecondary","danger","fullWidth","disabled","small","Button","type","onClick","ariaLabel","horizontal","vertical","alignStart","alignCenter","alignEnd","verticalAlignStart","verticalAlignCenter","verticalAlignEnd","gapXs","gapSm","gapMd","gapMap","horizontalAlignMap","start","center","end","verticalAlignMap","ButtonGroup","orientation","align","gap","isVertical","alignStyle","Callout","elevated","outlined","interactive","sizeCompact","sizeFull","header","compact","full","Card","root","rootDisabled","boxUnchecked","boxChecked","input","Checkbox","value","checked","controlledChecked","defaultChecked","onChange","isControlled","internalChecked","setInternalChecked","useState","isChecked","target","handleChange","next","opacity","t15","Symbol","for","t16","t17","t18","t19","useControllableValue","controlledValue","defaultValue","internal","setInternal","v","setValue","rootHorizontal","CheckboxGroupContext","useCheckboxGroup","ctx","Error","Root","onValueChange","itemValue","onToggle","Item","itemDisabled","groupValue","groupDisabled","includes","isDisabled","CheckboxGroup","FieldContext","useFieldContext","invalid","ColorInput","required","onBlur","ref","fieldCtx","field","effectiveName","effectiveValue","String","effectiveOnChange","effectiveOnBlur","effectiveRef","effectiveDisabled","controlId","descriptionId","errorId","trim","backdrop","backdropOpen","backdropClosing","viewport","popup","popupOpen","popupClosing","closeDurationInstant","closeDurationFast","closeDurationBase","closeDurationSlow","title","description","body","footer","inlineWrapper","reducedMotion","closeDurationMap","DialogContext","useDialog","open","controlledOpen","defaultOpen","onOpenChange","dismissable","closeAnimationDuration","internalOpen","setInternalOpen","closing","setClosing","closingTimerRef","popupRef","isOpen","titleId","clearTimeout","requestOpen","setTimeout","requestClose","onKeyDown","stopPropagation","document","addEventListener","removeEventListener","prev","style","overflow","closeDuration","Trigger","Portal","handleBackdropClick","Header","Title","h2","Description","p","Body","Footer","Close","Dialog","InputGroupContext","useInputGroupContext","inGroup","mono","Input","font","placeholder","readOnly","minLength","maxLength","min","max","step","inputMode","list","pattern","autoComplete","autoFocus","ariaDescribedby","groupCtx","effectiveVariant","describedBy","extraProps","FormContext","useFormContext","rootSide","labelSide","fieldContent","necessityIcon","necessityLabel","formCtx","ControlledRoot","StaticRoot","labelPosition","invalidProp","control","useRHFFormContext","fieldState","useController","effectiveLabelPosition","effectiveNecessityIndicator","necessityIndicator","message","errorMessage","FieldLayout","labelNode","rest","Children","child","isValidElement","Label","isSide","indicator","Field","ConfirmDialog","confirmPhrase","promptLabel","cancelLabel","confirmSlot","onConfirm","confirmLabel","typed","setTyped","satisfied","handleOpenChange","_temp","item","itemLifted","zone","zoneReady","zoneOver","ghost","ghostAt","x","y","width","height","liveRegion","RootContext","useRoot","part","MOVE_THRESHOLD_PX","TOUCH_HOLD_MS","onDrop","announce","Map","zones","items","session","frame","drag","setDrag","announcement","setAnnouncement","kind","itemId","zoneId","get","text","say","record","set","registerZone","id_0","record_0","registerItem","itemId_0","item_0","payload","data","zoneId_0","zone_0","r","el","getBoundingClientRect","left","right","top","accepts","index","otherId","other","or","mid","locate","s","holdTimer","cancelAnimationFrame","source","hasPointerCapture","pointerId","releasePointerCapture","active","item_1","finish","s_0","x_0","y_0","item_2","preview","offsetX","offsetY","over","activate","id_1","currentTarget","rect","s_1","downAt","timeStamp","startX","clientX","startY","clientY","setPointerCapture","pointerType","begin","onMove","e_0","s_2","moved","Math","hypot","requestAnimationFrame","x_1","y_1","onUp","e_1","s_3","onCancel","e_2","s_4","onKey","e_3","Zone","el_0","webkitUserSelect","webkitTouchCallout","onPointerDown","lifted","useDragDrop","dragging","DragDrop","wrapper","wrapperOpenSm","wrapperCloseSm","wrapperOpenMd","wrapperCloseMd","contentSm","contentMd","slideIn","slideOut","bodyPadded","DetailPanelContext","useDetailPanel","present","setPresent","panelRef","previousFocusRef","labelId","setLabelId","activeElement","focus","useCallback","registerTitle","unregisterTitle","wrapperOpenMap","wrapperCloseMap","Content","padded","DetailPanel","viewportRight","viewportLeft","viewportBottom","panel","panelHorizontal","panelVertical","panelLeftBorder","slideInRight","slideOutRight","slideInLeft","slideOutLeft","slideInBottom","slideOutBottom","DISMISS_THRESHOLD","VELOCITY_THRESHOLD","DISMISS_DURATION","OPPOSITE_MAX_OVERSCROLL","useSwipeDismiss","anchor","enabled","onDismiss","currentX","currentY","startTime","swiping","panelSize","stateRef","isHorizontal","state","dx","getMovement","movement","panelEl","Number","dataset","progress","sign","transform","closest","previousElementSibling","absMovement","abs","overscroll","shadowSpread","round","boxShadow","applyTransform","resetStyles","panelEl_1","dismissTransform","transition","backdrop_1","dismissed","done","once","animateDismiss","animateSnapBack","_temp2","handlePointerDown","state_0","Date","now","animation","handlePointerMove","state_1","dx_0","dy","sqrt","preventDefault","movement_0","handlePointerUp","_e","state_2","movement_1","elapsed","velocity","handlePointerCancel","state_3","handleTouchMove","passive","panelEl_2","backdrop_2","cleanup","panelEl_0","backdrop_0","DrawerContext","useDrawer","swipeDismiss","requestCloseImmediate","slideInMap","slideOutMap","viewportAnchorMap","swipeEnabled","t20","t21","t22","Drawer","action","EmptyState","typePresets","bodySm","bodyMd","bodyLg","caption","code","overline","headingSm","headingMd","headingLg","headingXl","displaySm","displayMd","displayLg","muted","accent","defaultVariantMap","alignMap","Heading","level","color","resolvedVariant","h1","h3","h4","h5","h6","itemSelected","empty","ListContext","selectionMode","useList","selected","ItemText","Actions","Empty","List","Text","formStyles","Form","schema","defaultValues","onSubmit","validationErrors","effectTsResolver","resolver","mode","reValidateMode","methods","useForm","prevErrorKeysRef","prevKeys","nextKeys","Object","keys","clearErrors","key_0","setError","formRef","errors","firstField","setFocus","onInvalid","handleSubmit","form","FormProvider","legend","gapMs","gapLg","gapXl","Legend","Fieldset","addon","addonStart","addonEnd","addonClickable","addonDisabled","dynamicStyles","minWidth","Addon","position","positionStyle","InputGroup","LinkButton","href","rel","a","bordered","Panel","circle","circleUnchecked","circleChecked","dot","RadioGroupContext","useRadioGroup","onSelect","handleClick","RadioGroup","scrollbar","scrollbarVertical","scrollbarHorizontal","scrollbarHidden","scrollbarVisible","thumb","viewportMaxHeight","maxHeight","thumbVertical","thumbHorizontal","ScrollAreaContext","useScrollArea","useScrollAreaRoot","viewportId","viewportRef","contentRef","scrollTop","setScrollTop","scrollLeft","setScrollLeft","scrollHeight","setScrollHeight","scrollWidth","setScrollWidth","clientHeight","setClientHeight","clientWidth","setClientWidth","scrolling","setScrolling","scrollTimerRef","vp","handleScroll","vp_0","observer","ResizeObserver","observe","disconnect","vp_1","Viewport","Scrollbar","maxScroll","scrollOffset","valueNow","Thumb","draggingRef","startPosRef","startScrollRef","thumbSizePercent","trackSize","thumbPixelSize","thumbOffset","thumbStyle","delta","scrollRatio","scrollDelta","ScrollArea","inputWrapper","inputWrapperFocused","trigger","itemHighlighted","itemHidden","hidden","popupPosition","ComboboxContext","useCombobox","useComboboxRoot","inputValue","controlledInputValue","onInputChange","initialLabels","initial","internalInputValue","setInternalInputValue","setInputValue","setOpen","labels","setLabels","highlightedId","setHighlightedId","listboxId","rootRef","inputRef","itemsRef","orderRef","close","order","found","openPopup","selectValue","v_0","label_0","registerLabel","itemValue_0","element","ids","sort","b","elA","elB","compareDocumentPosition","Node","DOCUMENT_POSITION_FOLLOWING","i","query","toLowerCase","getVisibleOrder","handleKeyDown","visibleOrder","bb137","prev_2","idx_0","indexOf","idx","prev_1","prev_0","scrollIntoView","block","lightTheme","xjvd03b","lightShadows","x13v825q","highContrastTheme","highContrastShadows","themeMap","light","portalMount","PortalMountContext","usePortalMount","ThemeProvider","theme","overrides","themeStyles","mount","setMount","localRef","focused","setFocused","Popup","coords","setCoords","window","useLayoutEffect","node","createPortal","selectedValue","isSelected","isHighlighted","isVisible","textContent","values","Combobox","SelectContext","useSelect","useSelectRoot","triggerRef","toggle","order_0","items_0","bb86","prev_3","Value","display","Select","group","groupTrigger","groupTriggerActive","chevron","chevronOpen","section","sectionLabel","itemActive","marker","markerActive","itemIcon","itemLabel","SideNavContext","useSideNav","activeValue","expandedGroups","setExpandedGroups","has","toggleGroup","group_0","next_0","expandGroup","nav","Group","groupKey","defaultExpanded","isExpanded","groupRef","triggerId","panelId","querySelector","hasActiveChild","Section","SideNav","spinner","srOnly","Spinner","region","toast","iconSuccess","iconError","iconInfo","closeBtn","DEFAULT_DURATION","createToastStore","seq","opts","duration","variantIcon","variantIconStyle","ToastContext","useToast","ToastItem","entry","timer","ToastProvider","useMemo","dismiss","StatusIcon","TagGroupContext","useTagGroup","wrap","removableMd","removableSm","removeButton","removeButtonDisabled","removableSizeMap","Tag","removable","removableProp","onRemove","onRemoveProp","disabledProp","isGrouped","editable","removeTag","setFocusedIndex","removeLabel","tagContent","role","container","containerError","containerDisabled","containerStatic","useTagGroupCtx","onValidate","gridId","setValues","focusedIndex","setEditable","isInvalid","trimmed","addTag","value_0","getElementById","querySelectorAll","validate","commitValueRef","raw","selectionStart","handlePaste","clipboardData","getData","split","Boolean","handleFocus","TagGroup","rootVertical","listVertical","tab","tabVertical","tabActiveHorizontal","tabActiveVertical","tabIndicatorActive","indicatorHorizontal","indicatorVertical","indicatorOffsetH","offset","indicatorOffsetV","tabDisabled","TabsContext","useTabs","useTabsRoot","tabsRef","indicatorActive","setIndicatorActive","registerTab","listRef","setIndicator","CSS","escape","measure","offsetLeft","offsetWidth","offsetTop","offsetHeight","ro","listEl","tabs","prevKey","nextKey","targetValue","bb36","currentIdx_0","i_1","currentIdx","val_1","i_0","val_0","Tab","tabId","Tabs","Textarea","rows","textarea","PREFERENCES","ICON","system","dark","LABEL","ColorModeContext","useColorMode","canUseDom","matchMedia","isPreference","readStored","localStorage","getItem","writeStored","setItem","ColorModeProvider","defaultPreference","preference","controlled","onPreferenceChange","modes","storageKey","applyTheme","stored","setPreference","systemTheme","setSystemTheme","mq","matches","cycle","ColorModeToggle","weightNormal","weightMedium","weightSemibold","weightBold","truncate","weightMap","normal","medium","semibold","bold","weight","as","ToggleGroupContext","useToggleGroup","unpressed","pressed","grouped","Toggle","controlledPressed","defaultPressed","onPressedChange","sizeProp","groupPressed","standalonePressed","setStandalonePressed","ToggleGroup","multiple","nextPressed","TooltipContext","useTooltip","placement","delay","tooltipId","timerRef","show","hide","Tooltip","track","trackUnchecked","trackChecked","thumbChecked","Switch","onCheckedChange","setChecked","alignStretch","gapXxl","gapXxxl","stretch","Stack","alignBaseline","justifyStart","justifyCenter","justifyEnd","justifyBetween","baseline","justifyMap","between","Inline","justify","Cluster","_temp3","col1","col2","col3","col4","col5","col6","autoFit","splitContainer","splitWide","template","tracks","nativeRow","nativeCell","basis","nativeMinCell","cellGapLeftXs","cellGapLeftSm","cellGapLeftMs","cellGapLeftMd","cellGapLeftLg","cellGapLeftXl","cellGapLeftXxl","cellGapLeftXxxl","cellGapTopXs","cellGapTopSm","cellGapTopMs","cellGapTopMd","cellGapTopLg","cellGapTopXl","cellGapTopXxl","cellGapTopXxxl","columnWeights","columns","Array","from","every","w","isFinite","process","env","NODE_ENV","console","JSON","stringify","gridTemplate","weights","join","columnsMap","layoutMap","Grid","minColumnWidth","layout","columnStyle","grid","maxSm","maxMd","maxLg","padSm","padMd","padLg","headerPadding","mainPadding","maxWidthMap","paddingMap","PageShell","maxWidth","padding","mw","pad","main","toPx","breakpointsPx","useContainerQuery","options","compactBelow","spaciousAbove","compactOpt","spaciousOpt","setSize","rafId","contentBoxSize","inlineSize","contentRect"],"mappings":"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"}