@ship-it-ui/ui 0.0.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/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/index.cjs +3581 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1353 -0
- package/dist/index.d.ts +1353 -0
- package/dist/index.js +3410 -0
- package/dist/index.js.map +1 -0
- package/package.json +94 -0
- package/src/styles/animations.css +123 -0
- package/src/styles/globals.css +144 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/cn.ts","../src/hooks/useControllableState.ts","../src/hooks/useDisclosure.ts","../src/hooks/useEscape.ts","../src/hooks/useKeyboardList.ts","../src/hooks/useOutsideClick.ts","../src/hooks/useTheme.ts","../src/components/Button/Button.tsx","../src/components/Button/IconButton.tsx","../src/components/Button/ButtonGroup.tsx","../src/components/Button/SplitButton.tsx","../src/components/Button/FAB.tsx","../src/components/Checkbox/Checkbox.tsx","../src/components/Field/Field.tsx","../src/components/Input/Input.tsx","../src/components/Input/SearchInput.tsx","../src/components/OTP/OTP.tsx","../src/components/Radio/Radio.tsx","../src/components/Select/Select.tsx","../src/components/Slider/Slider.tsx","../src/components/Switch/Switch.tsx","../src/components/Textarea/Textarea.tsx","../src/components/Avatar/Avatar.tsx","../src/components/Avatar/AvatarGroup.tsx","../src/components/Badge/Badge.tsx","../src/components/Card/Card.tsx","../src/components/Card/StatCard.tsx","../src/components/Chip/Chip.tsx","../src/components/Kbd/Kbd.tsx","../src/components/Skeleton/Skeleton.tsx","../src/components/StatusDot/StatusDot.tsx","../src/components/Tag/Tag.tsx","../src/components/ContextMenu/ContextMenu.tsx","../src/components/Dialog/Dialog.tsx","../src/components/Dialog/Drawer.tsx","../src/components/Dialog/Sheet.tsx","../src/components/Dialog/AlertDialog.tsx","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/HoverCard/HoverCard.tsx","../src/components/Popover/Popover.tsx","../src/components/Toast/Toast.tsx","../src/components/Tooltip/Tooltip.tsx","../src/patterns/Alert/Alert.tsx","../src/patterns/Banner/Banner.tsx","../src/patterns/Breadcrumbs/Breadcrumbs.tsx","../src/patterns/Combobox/Combobox.tsx","../src/patterns/CommandPalette/CommandPalette.tsx","../src/patterns/DataTable/DataTable.tsx","../src/patterns/DatePicker/Calendar.tsx","../src/patterns/DatePicker/DatePicker.tsx","../src/patterns/Dots/Dots.tsx","../src/patterns/EmptyState/EmptyState.tsx","../src/patterns/FileChip/FileChip.tsx","../src/patterns/Menubar/Menubar.tsx","../src/patterns/Pagination/Pagination.tsx","../src/patterns/Progress/Progress.tsx","../src/patterns/RadialProgress/RadialProgress.tsx","../src/patterns/Sidebar/Sidebar.tsx","../src/patterns/Sparkline/Sparkline.tsx","../src/patterns/Spinner/Spinner.tsx","../src/patterns/Stepper/Stepper.tsx","../src/patterns/Tabs/Tabs.tsx","../src/patterns/Timeline/Timeline.tsx","../src/patterns/Topbar/Topbar.tsx","../src/patterns/Tree/Tree.tsx"],"names":["useState","useCallback","useEffect","Button","cva","forwardRef","IconButton","jsx","ButtonGroup","SplitButton","jsxs","FAB","Checkbox","useId","Input","SearchInput","OTP","useRef","RadioGroup","Radio","SelectTrigger","SelectContent","SelectItem","Slider","Switch","Textarea","Avatar","sizePx","AvatarGroup","Badge","Card","StatCard","Chip","Kbd","Skeleton","StatusDot","Tag","ContextMenuContent","ContextMenuItem","ContextMenuSeparator","DialogOverlay","DialogContent","RadixDialog2","Drawer","Sheet","RadixDialog3","AlertDialog","DropdownMenuContent","itemBase","MenuItem","MenuCheckboxItem","MenuSeparator","HoverCardContent","PopoverContent","ToastCard","TooltipContent","Alert","defaultGlyph","Banner","Breadcrumbs","Children","isValidElement","Crumb","Combobox","useMemo","CommandPalette","RadixDialog4","Calendar","DatePicker","RadixPopover2","Dots","EmptyState","FileChip","Menubar","MenubarTrigger","MenubarContent","MenubarItem","MenubarSeparator","Pagination","Progress","RadialProgress","Sidebar","NavItem","Fragment","NavSection","Sparkline","Spinner","Stepper","createContext","Tabs","TabsList","useContext","Tab","TabsContent","Timeline","TimelineItem","Topbar","Tree"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Combine class names with conflict-aware Tailwind merging.\n *\n * cn('px-2 py-1', condition && 'px-4') → 'py-1 px-4'\n *\n * Use anywhere you'd otherwise concatenate strings of Tailwind classes.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { useCallback, useRef, useState } from 'react';\n\n/**\n * Standard controlled/uncontrolled state hook. Mirrors Radix's\n * `useControllableState` — when `value` is provided, the hook stays in sync\n * with it; otherwise it manages an internal state seeded by `defaultValue`.\n *\n * Use this for any composite that needs to support both modes (Tabs,\n * Combobox, Tree, DatePicker, Switch, etc.).\n */\n\nexport interface UseControllableStateProps<T> {\n /** Controlled value. When provided, the hook is in controlled mode. */\n value?: T;\n /** Default for uncontrolled mode. Used only when `value` is undefined. */\n defaultValue?: T;\n /** Change callback fired in both modes whenever the value would change. */\n onChange?: (value: T) => void;\n}\n\nexport function useControllableState<T>({\n value: controlledValue,\n defaultValue,\n onChange,\n}: UseControllableStateProps<T>): [\n T | undefined,\n (next: T | ((prev: T | undefined) => T)) => void,\n] {\n const [uncontrolledValue, setUncontrolledValue] = useState<T | undefined>(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const valueRef = useRef(value);\n valueRef.current = value;\n\n const setValue = useCallback(\n (next: T | ((prev: T | undefined) => T)) => {\n const resolved =\n typeof next === 'function' ? (next as (prev: T | undefined) => T)(valueRef.current) : next;\n if (!isControlled) {\n setUncontrolledValue(resolved);\n }\n if (resolved !== valueRef.current) {\n onChangeRef.current?.(resolved);\n }\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n","import { useCallback, useState } from 'react';\n\n/**\n * Standardized open/close state for overlays.\n * Returns the same shape Radix and shadcn-style libraries use, so passing it as\n * `{...disclosure}` props works with any overlay primitive.\n */\nexport function useDisclosure(initial = false): {\n open: boolean;\n onOpen: () => void;\n onClose: () => void;\n onToggle: () => void;\n setOpen: (open: boolean) => void;\n} {\n const [open, setOpen] = useState(initial);\n const onOpen = useCallback(() => setOpen(true), []);\n const onClose = useCallback(() => setOpen(false), []);\n const onToggle = useCallback(() => setOpen((o) => !o), []);\n return { open, onOpen, onClose, onToggle, setOpen };\n}\n","import { useEffect } from 'react';\n\n/**\n * Calls `handler` when Escape is pressed while `enabled` is true.\n * Most overlay components (Dialog, Popover, Drawer) get this for free via Radix,\n * but custom popovers and inline editors need it.\n */\nexport function useEscape(handler: () => void, enabled = true) {\n useEffect(() => {\n if (!enabled) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handler();\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [handler, enabled]);\n}\n","import { useCallback, useState, type KeyboardEvent } from 'react';\n\n/**\n * Keyboard navigation for arrow-key selectable lists (Combobox, CommandPalette,\n * filtered dropdown bodies). Tracks the highlighted cursor and exposes a\n * `getKeyDownHandler` you can spread on the input/list element.\n *\n * Supports ↑/↓, Home/End, optional Enter, and a `loop` option that wraps from\n * end → start. The `count` arg drives bounds; pass `0` and the hook becomes a\n * no-op until you hydrate it.\n */\n\nexport interface UseKeyboardListOptions {\n /** Total number of items currently in the list. */\n count: number;\n /** Wrap around at the ends. Default true. */\n loop?: boolean;\n /** Initial cursor. Default 0. */\n defaultCursor?: number;\n /** Called with the current cursor index when Enter is pressed. */\n onSelect?: (index: number) => void;\n}\n\nexport interface UseKeyboardListResult {\n cursor: number;\n setCursor: (index: number) => void;\n /** Handler for `onKeyDown` — does NOT call `preventDefault` for unhandled keys. */\n onKeyDown: (event: KeyboardEvent) => void;\n}\n\nexport function useKeyboardList({\n count,\n loop = true,\n defaultCursor = 0,\n onSelect,\n}: UseKeyboardListOptions): UseKeyboardListResult {\n const [cursor, setCursor] = useState(defaultCursor);\n\n const move = useCallback(\n (delta: number) => {\n if (count <= 0) return;\n setCursor((c) => {\n const next = c + delta;\n if (loop) return ((next % count) + count) % count;\n return Math.max(0, Math.min(count - 1, next));\n });\n },\n [count, loop],\n );\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (count <= 0) return;\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n move(1);\n break;\n case 'ArrowUp':\n event.preventDefault();\n move(-1);\n break;\n case 'Home':\n event.preventDefault();\n setCursor(0);\n break;\n case 'End':\n event.preventDefault();\n setCursor(count - 1);\n break;\n case 'Enter':\n if (onSelect) {\n event.preventDefault();\n onSelect(cursor);\n }\n break;\n default:\n break;\n }\n },\n [count, cursor, move, onSelect],\n );\n\n const safeCursor = count > 0 ? Math.min(cursor, count - 1) : 0;\n\n return { cursor: safeCursor, setCursor, onKeyDown };\n}\n","import { useEffect, type RefObject } from 'react';\n\n/**\n * Calls `handler` when a mousedown occurs outside the element referenced by `ref`.\n *\n * Pass `enabled=false` to detach (typically while the popover is closed). Listens on\n * `mousedown` rather than `click` so the trigger sees the close before its own click\n * fires — matches the behavior of most popover libraries.\n */\nexport function useOutsideClick<T extends HTMLElement>(\n ref: RefObject<T | null>,\n handler: () => void,\n enabled = true,\n) {\n useEffect(() => {\n if (!enabled) return;\n const onDown = (e: MouseEvent) => {\n const el = ref.current;\n if (el && e.target instanceof Node && !el.contains(e.target)) handler();\n };\n document.addEventListener('mousedown', onDown);\n return () => document.removeEventListener('mousedown', onDown);\n }, [ref, handler, enabled]);\n}\n","import { useCallback, useEffect, useState } from 'react';\n\nexport type Theme = 'dark' | 'light';\n\n/**\n * Read and toggle the active theme (`[data-theme]` on `<html>`).\n *\n * `dark` is the default — when the attribute is absent, dark theme applies.\n * `light` is the opt-in: setting it adds `data-theme=\"light\"` to the document root.\n *\n * Usage:\n * const { theme, setTheme, toggle } = useTheme();\n * <Switch on={theme === 'light'} onChange={toggle} />\n */\nexport function useTheme(): {\n theme: Theme;\n setTheme: (next: Theme) => void;\n toggle: () => void;\n} {\n const [theme, setThemeState] = useState<Theme>(() => {\n if (typeof document === 'undefined') return 'dark';\n return document.documentElement.getAttribute('data-theme') === 'light' ? 'light' : 'dark';\n });\n\n const setTheme = useCallback((next: Theme) => {\n if (next === 'light') {\n document.documentElement.setAttribute('data-theme', 'light');\n } else {\n document.documentElement.removeAttribute('data-theme');\n }\n setThemeState(next);\n }, []);\n\n const toggle = useCallback(() => {\n setTheme(theme === 'dark' ? 'light' : 'dark');\n }, [theme, setTheme]);\n\n // Keep state in sync if something else flips the attribute (e.g., a test, a parent app).\n useEffect(() => {\n const observer = new MutationObserver(() => {\n const attr = document.documentElement.getAttribute('data-theme');\n setThemeState(attr === 'light' ? 'light' : 'dark');\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n return () => observer.disconnect();\n }, []);\n\n return { theme, setTheme, toggle };\n}\n","import { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode, type Ref } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Seven variants × three sizes × five states. One primary per surface — everything\n * else defers. Variants and sizes match `design-handoff/project/components/Button.jsx`.\n */\nconst buttonStyles = cva(\n [\n 'inline-flex items-center justify-center whitespace-nowrap',\n 'font-medium transition-[background,filter,box-shadow,color] duration-(--duration-micro)',\n 'outline-none',\n 'focus-visible:ring-[3px] focus-visible:ring-accent-dim',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n ],\n {\n variants: {\n variant: {\n primary:\n 'bg-accent text-on-accent border border-accent hover:brightness-110 active:brightness-95',\n secondary:\n 'bg-panel-2 text-text border border-border hover:bg-[color-mix(in_oklab,var(--color-panel-2),white_4%)]',\n ghost: 'bg-transparent text-text border border-transparent hover:bg-panel-2',\n outline: 'bg-transparent text-text border border-border-strong hover:bg-panel-2',\n destructive:\n 'bg-err text-on-accent border border-err hover:brightness-110 active:brightness-95',\n success: 'bg-ok text-on-accent border border-ok hover:brightness-110 active:brightness-95',\n link: 'bg-transparent text-accent border border-transparent underline underline-offset-[3px] hover:brightness-110',\n },\n size: {\n sm: 'h-[26px] px-[10px] text-[11px] gap-[5px] rounded-[5px]',\n md: 'h-[32px] px-3 text-[12px] gap-[6px] rounded-md',\n lg: 'h-[38px] px-4 text-[13px] gap-[7px] rounded-[7px]',\n },\n fullWidth: {\n true: 'w-full',\n false: '',\n },\n },\n defaultVariants: {\n variant: 'primary',\n size: 'md',\n fullWidth: false,\n },\n },\n);\n\n/** Spinner glyph used for the loading state. Inherits color from the button text. */\nfunction Spinner({ size }: { size: number }) {\n return (\n <span\n aria-hidden\n className=\"inline-block animate-[ship-spin_0.7s_linear_infinite] rounded-full border-[1.5px] border-current border-t-transparent\"\n style={{ width: size, height: size }}\n />\n );\n}\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonStyles> {\n /** Icon shown to the left of the label (or replacing the spinner when `loading`). */\n icon?: ReactNode;\n /** Icon/text shown to the right of the label. Often a chevron, kbd hint, or arrow. */\n trailing?: ReactNode;\n /** When true, hides the icon, swaps in a spinner, and disables the button. */\n loading?: boolean;\n /**\n * Render the inner content as a child element instead of a `<button>`. Useful for\n * link wrappers — `<Button asChild><Link href=\"/\" /></Button>`.\n */\n asChild?: boolean;\n}\n\n/** Pixel size of the icon/spinner inside each button size. */\nconst iconSize = { sm: 11, md: 12, lg: 13 } as const;\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant,\n size,\n fullWidth,\n icon,\n trailing,\n loading = false,\n disabled,\n asChild = false,\n type,\n className,\n children,\n ...props\n },\n ref,\n) {\n const isDisabled = disabled || loading;\n const iconPx = iconSize[size ?? 'md'];\n const composedClassName = cn(buttonStyles({ variant, size, fullWidth }), className);\n\n // asChild defers all rendering to the consumer's element. We just decorate it\n // with Button styles — Slot requires exactly one child, so icon/trailing/loading\n // slots are intentionally not supported on asChild buttons.\n if (asChild) {\n return (\n <Slot\n ref={ref as unknown as Ref<HTMLElement>}\n aria-busy={loading || undefined}\n aria-disabled={isDisabled || undefined}\n data-disabled={isDisabled ? '' : undefined}\n className={composedClassName}\n {...props}\n >\n {children}\n </Slot>\n );\n }\n\n return (\n <button\n ref={ref}\n type={type ?? 'button'}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n className={composedClassName}\n {...props}\n >\n {loading ? (\n <Spinner size={iconPx} />\n ) : icon ? (\n <span className=\"inline-flex\">{icon}</span>\n ) : null}\n {children}\n {trailing && <span className=\"inline-flex opacity-60\">{trailing}</span>}\n </button>\n );\n});\n\nButton.displayName = 'Button';\n\nexport { buttonStyles };\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nconst iconButtonStyles = cva(\n [\n 'inline-grid place-items-center transition-[background,filter,color] duration-(--duration-micro)',\n 'outline-none focus-visible:ring-[3px] focus-visible:ring-accent-dim',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n ],\n {\n variants: {\n variant: {\n primary: 'bg-accent text-on-accent border border-accent hover:brightness-110',\n secondary:\n 'bg-panel-2 text-text-muted border border-border hover:bg-[color-mix(in_oklab,var(--color-panel-2),white_4%)]',\n ghost:\n 'bg-transparent text-text-muted border border-transparent hover:bg-panel-2 hover:text-text',\n outline:\n 'bg-transparent text-text-muted border border-border-strong hover:bg-panel-2 hover:text-text',\n },\n size: {\n sm: 'h-[26px] w-[26px] text-[12px] rounded-[5px]',\n md: 'h-[32px] w-[32px] text-[13px] rounded-md',\n lg: 'h-[38px] w-[38px] text-[15px] rounded-[7px]',\n },\n },\n defaultVariants: { variant: 'secondary', size: 'md' },\n },\n);\n\nexport interface IconButtonProps\n extends\n Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'>,\n VariantProps<typeof iconButtonStyles> {\n /** The glyph or icon node to render. Pure decoration — set `aria-label` for screen readers. */\n icon: ReactNode;\n /**\n * Required: an accessible label since icon buttons have no visible text.\n * Mapped to `aria-label`.\n */\n 'aria-label': string;\n}\n\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(function IconButton(\n { variant, size, icon, type, className, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type={type ?? 'button'}\n className={cn(iconButtonStyles({ variant, size }), className)}\n {...props}\n >\n {icon}\n </button>\n );\n});\n\nIconButton.displayName = 'IconButton';\n\nexport { iconButtonStyles };\n","import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n} from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface ButtonGroupProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * `orientation=\"horizontal\"` (default) joins children edge-to-edge with shared\n * borders; `vertical` does the same column-wise.\n */\n orientation?: 'horizontal' | 'vertical';\n}\n\n/**\n * Joins a row of `<Button>`s into a segmented control. The group owns the rounded\n * corners and outer border; child buttons render flush.\n *\n * Pass children as `<Button variant=\"secondary\">…</Button>` — the group strips\n * each child's individual radius and adds the connecting borders.\n */\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(function ButtonGroup(\n { orientation = 'horizontal', className, children, ...props },\n ref,\n) {\n const items = Children.toArray(children).filter(isValidElement) as ReactElement<{\n className?: string;\n }>[];\n\n return (\n <div\n ref={ref}\n role=\"group\"\n className={cn(\n 'border-border inline-flex overflow-hidden rounded-md border',\n orientation === 'vertical' ? 'flex-col' : 'flex-row',\n className,\n )}\n {...props}\n >\n {items.map((child, i) => {\n const isFirst = i === 0;\n const childProps = (child.props ?? {}) as { className?: string };\n return cloneElement(child, {\n key: i,\n className: cn(\n childProps.className,\n 'rounded-none border-none',\n !isFirst &&\n (orientation === 'horizontal'\n ? 'border-l border-l-border'\n : 'border-t border-t-border'),\n ),\n });\n })}\n </div>\n );\n});\n\nButtonGroup.displayName = 'ButtonGroup';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nimport { Button, type ButtonProps } from './Button';\n\nexport interface SplitButtonProps extends HTMLAttributes<HTMLDivElement> {\n /** Visual variant applied to BOTH segments. Defaults to `primary`. */\n variant?: ButtonProps['variant'];\n /** Size applied to both segments. Defaults to `md`. */\n size?: ButtonProps['size'];\n /** Click handler for the main action button. */\n onClick?: () => void;\n /** Click handler for the trailing menu (caret) button. */\n onMenu?: () => void;\n /** Disable both segments. */\n disabled?: boolean;\n children: ReactNode;\n}\n\n/**\n * Two-segment button: a primary action on the left, a menu chevron on the right.\n * Common pattern for \"Deploy ▾\" or \"Save and …\" controls.\n */\nexport const SplitButton = forwardRef<HTMLDivElement, SplitButtonProps>(function SplitButton(\n { variant = 'primary', size = 'md', onClick, onMenu, disabled, className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn('inline-flex', className)} {...props}>\n <Button\n variant={variant}\n size={size}\n onClick={onClick}\n disabled={disabled}\n className=\"rounded-r-none border-r border-r-black/20\"\n >\n {children}\n </Button>\n <Button\n variant={variant}\n size={size}\n onClick={onMenu}\n disabled={disabled}\n aria-label=\"More actions\"\n className=\"rounded-l-none px-2\"\n >\n ▾\n </Button>\n </div>\n );\n});\n\nSplitButton.displayName = 'SplitButton';\n","import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface FABProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> {\n /** Icon or glyph rendered inside the FAB. Defaults to `✦`. */\n icon?: ReactNode;\n /** Required: accessible label. Maps to `aria-label`. */\n 'aria-label': string;\n}\n\n/**\n * Floating action button — round, accent-bg, accent-glow shadow. Use for the\n * single most-prominent action on a surface (e.g., \"Ask anything\" trigger).\n */\nexport const FAB = forwardRef<HTMLButtonElement, FABProps>(function FAB(\n { icon = '✦', type, className, style, ...props },\n ref,\n) {\n return (\n <button\n ref={ref}\n type={type ?? 'button'}\n className={cn(\n 'grid h-12 w-12 place-items-center rounded-full',\n 'bg-accent text-on-accent text-lg font-semibold',\n 'shadow-[0_10px_30px_var(--color-accent-glow),0_2px_6px_rgba(0,0,0,0.4)]',\n 'transition-[transform,box-shadow] duration-200',\n 'hover:-translate-y-px hover:shadow-[0_14px_36px_var(--color-accent-glow),0_4px_10px_rgba(0,0,0,0.45)]',\n 'focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n className,\n )}\n style={style}\n {...props}\n >\n {icon}\n </button>\n );\n});\n\nFAB.displayName = 'FAB';\n","import * as RadixCheckbox from '@radix-ui/react-checkbox';\nimport { forwardRef, useId, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface CheckboxProps extends Omit<RadixCheckbox.CheckboxProps, 'asChild' | 'children'> {\n /** Optional inline label rendered to the right of the box. */\n label?: ReactNode;\n}\n\n/**\n * Tri-state checkbox. Set `checked=\"indeterminate\"` for the dash-mark state used\n * in select-all rows.\n */\nexport const Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(function Checkbox(\n { label, className, id: idProp, ...props },\n ref,\n) {\n const reactId = useId();\n const id = idProp ?? `cb-${reactId}`;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-2 select-none',\n props.disabled && 'cursor-not-allowed opacity-40',\n className,\n )}\n >\n <RadixCheckbox.Root\n ref={ref}\n id={id}\n className={cn(\n 'grid h-4 w-4 place-items-center rounded-xs',\n 'bg-panel border-border-strong border',\n 'data-[state=checked]:bg-accent data-[state=checked]:border-accent',\n 'data-[state=indeterminate]:bg-accent data-[state=indeterminate]:border-accent',\n 'transition-[background,border-color] duration-(--duration-micro)',\n 'focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]',\n )}\n {...props}\n >\n <RadixCheckbox.Indicator className=\"text-on-accent text-[11px] leading-none\">\n {props.checked === 'indeterminate' ? '−' : '✓'}\n </RadixCheckbox.Indicator>\n </RadixCheckbox.Root>\n {label && (\n <label htmlFor={id} className=\"cursor-pointer text-[13px]\">\n {label}\n </label>\n )}\n </span>\n );\n});\n\nCheckbox.displayName = 'Checkbox';\n","import { useId, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface FieldProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Visible label rendered above the control. */\n label?: ReactNode;\n /** Helper text shown below the control when no error is present. */\n hint?: ReactNode;\n /** Error message shown below the control. Displaces `hint` when set. */\n error?: ReactNode;\n /** Marks the field with a visual asterisk (does not enforce validity). */\n required?: boolean;\n /**\n * The control. Receives `id`, `aria-describedby`, and `aria-invalid` automatically.\n * Pass via render prop so the field can wire IDs without consumers thinking about it.\n */\n children: (props: {\n id: string;\n 'aria-describedby': string | undefined;\n 'aria-invalid': boolean | undefined;\n }) => ReactNode;\n}\n\n/**\n * Form-field wrapper: label + control + hint/error. Wires up the IDs so screen\n * readers connect the label and helper text to the input.\n *\n * <Field label=\"Email\" hint=\"We never share it\">\n * {(p) => <Input type=\"email\" placeholder=\"me@org.com\" {...p} />}\n * </Field>\n */\nexport function Field({ label, hint, error, required, className, children, ...props }: FieldProps) {\n const reactId = useId();\n const id = `field-${reactId}`;\n const hintId = hint && !error ? `${id}-hint` : undefined;\n const errorId = error ? `${id}-error` : undefined;\n const describedBy = errorId ?? hintId;\n\n return (\n <div className={cn('flex flex-col gap-[6px]', className)} {...props}>\n {label && (\n <label htmlFor={id} className=\"text-text-muted text-[11px] font-medium\">\n {label}\n {required && <span className=\"text-err ml-1\">*</span>}\n </label>\n )}\n {children({\n id,\n 'aria-describedby': describedBy,\n 'aria-invalid': error ? true : undefined,\n })}\n {hint && !error && (\n <div id={hintId} className=\"text-text-dim text-[11px]\">\n {hint}\n </div>\n )}\n {error && (\n <div id={errorId} className=\"text-err text-[11px]\">\n {error}\n </div>\n )}\n </div>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type InputHTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nconst inputWrapperStyles = cva(\n [\n 'flex items-center gap-[6px] font-sans transition-[border-color,box-shadow] duration-(--duration-micro)',\n 'border focus-within:ring-[3px]',\n 'has-[:disabled]:opacity-50 has-[:disabled]:bg-panel-2',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 px-2 text-[12px] rounded-md',\n md: 'h-[34px] px-[10px] text-[13px] rounded-md',\n lg: 'h-10 px-3 text-[14px] rounded-md',\n },\n tone: {\n default: 'bg-panel border-border focus-within:border-accent focus-within:ring-accent-dim',\n error:\n 'bg-panel border-err focus-within:border-err focus-within:ring-[oklch(0.55_0.18_30/0.18)]',\n },\n },\n defaultVariants: { size: 'md', tone: 'default' },\n },\n);\n\nexport interface InputProps\n extends\n Omit<InputHTMLAttributes<HTMLInputElement>, 'size'>,\n VariantProps<typeof inputWrapperStyles> {\n /** Element rendered to the left of the input (an `IconGlyph`, `@`, etc.). */\n icon?: ReactNode;\n /** Element rendered to the right (a unit suffix, kbd hint, clear button). */\n trailing?: ReactNode;\n /** When true, swaps the wrapper border to error tone (independent of `aria-invalid`). */\n error?: boolean;\n /** Pixel width override; otherwise the wrapper grows to fill its container. */\n width?: number | string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(function Input(\n { size, tone, icon, trailing, error, width, className, style, disabled, ...props },\n ref,\n) {\n const computedTone = error ? 'error' : tone;\n return (\n <div\n className={cn(inputWrapperStyles({ size, tone: computedTone }), className)}\n style={{ width, ...style }}\n >\n {icon && <span className=\"text-text-dim leading-none\">{icon}</span>}\n <input\n ref={ref}\n disabled={disabled}\n aria-invalid={error || undefined}\n className={cn(\n 'text-text min-w-0 flex-1 border-none bg-transparent font-sans outline-none',\n 'placeholder:text-text-dim',\n 'disabled:cursor-not-allowed',\n )}\n {...props}\n />\n {trailing && <span className=\"text-text-dim text-[11px]\">{trailing}</span>}\n </div>\n );\n});\n\nInput.displayName = 'Input';\n","import { forwardRef, type InputHTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface SearchInputProps extends InputHTMLAttributes<HTMLInputElement> {\n /** Optional keyboard shortcut hint (e.g., `⌘K`) shown on the right edge. */\n shortcut?: string;\n /** Pixel width or any CSS length. Defaults to `360px`. */\n width?: number | string;\n}\n\n/**\n * The hero search field — taller than a regular Input, with a leading magnifying-glass\n * glyph and an optional trailing keyboard-shortcut chip. Used for command bars,\n * topbar search, and entity search.\n */\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(function SearchInput(\n { shortcut = '⌘K', width = 360, className, style, placeholder = 'Search…', ...props },\n ref,\n) {\n return (\n <div\n className={cn(\n 'rounded-base flex h-9 items-center gap-2 px-3 font-sans',\n 'bg-panel-2 border-border border',\n 'focus-within:border-accent focus-within:ring-accent-dim focus-within:ring-[3px]',\n 'transition-[border-color,box-shadow] duration-(--duration-micro)',\n className,\n )}\n style={{ width, ...style }}\n >\n <span className=\"text-text-dim leading-none\">⌕</span>\n <input\n ref={ref}\n type=\"search\"\n placeholder={placeholder}\n className=\"text-text placeholder:text-text-dim min-w-0 flex-1 border-none bg-transparent text-[13px] outline-none\"\n {...props}\n />\n {shortcut && (\n <kbd className=\"text-text-dim border-border rounded-xs border px-[6px] py-[2px] font-mono text-[10px]\">\n {shortcut}\n </kbd>\n )}\n </div>\n );\n});\n\nSearchInput.displayName = 'SearchInput';\n","import {\n forwardRef,\n useId,\n useImperativeHandle,\n useRef,\n useState,\n type KeyboardEvent,\n} from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface OTPProps {\n /** Number of digit slots. Defaults to 6. */\n length?: number;\n /** Called with the assembled string when every slot has a value. */\n onComplete?: (code: string) => void;\n /** Called with the partial string on every change. */\n onChange?: (value: string) => void;\n /** Initial value (string of digits). */\n defaultValue?: string;\n /** Aria label applied to each individual slot, suffixed with \" {n} of {N}\". */\n ariaLabel?: string;\n className?: string;\n disabled?: boolean;\n}\n\nexport type OTPHandle = {\n focus: () => void;\n reset: () => void;\n};\n\n/**\n * Six-slot one-time-password input with auto-advance, backspace navigation, and\n * paste-to-fill. Each slot is a single-character `<input>` for screen-reader clarity.\n */\nexport const OTP = forwardRef<OTPHandle, OTPProps>(function OTP(\n { length = 6, onComplete, onChange, defaultValue = '', ariaLabel = 'Code', className, disabled },\n ref,\n) {\n const baseId = useId();\n const refs = useRef<(HTMLInputElement | null)[]>([]);\n const [values, setValues] = useState<string[]>(() =>\n Array.from({ length }, (_, i) => defaultValue[i] ?? ''),\n );\n\n useImperativeHandle(ref, () => ({\n focus: () => refs.current[0]?.focus(),\n reset: () => {\n setValues(Array(length).fill(''));\n refs.current[0]?.focus();\n },\n }));\n\n const writeAt = (i: number, char: string) => {\n if (!/^\\d?$/.test(char)) return;\n setValues((prev) => {\n const next = [...prev];\n next[i] = char;\n const joined = next.join('');\n onChange?.(joined);\n if (joined.length === length && next.every((c) => c)) onComplete?.(joined);\n return next;\n });\n if (char && i < length - 1) refs.current[i + 1]?.focus();\n };\n\n const onKey = (i: number, e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace' && !values[i] && i > 0) {\n refs.current[i - 1]?.focus();\n } else if (e.key === 'ArrowLeft' && i > 0) {\n refs.current[i - 1]?.focus();\n } else if (e.key === 'ArrowRight' && i < length - 1) {\n refs.current[i + 1]?.focus();\n }\n };\n\n const onPaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\n const pasted = e.clipboardData.getData('text').replace(/\\D/g, '').slice(0, length);\n if (!pasted) return;\n e.preventDefault();\n const next = Array.from({ length }, (_, i) => pasted[i] ?? '');\n setValues(next);\n const joined = next.join('');\n onChange?.(joined);\n if (joined.length === length) onComplete?.(joined);\n refs.current[Math.min(pasted.length, length - 1)]?.focus();\n };\n\n return (\n <div className={cn('flex gap-2', className)}>\n {values.map((c, i) => (\n <input\n key={i}\n id={`${baseId}-${i}`}\n ref={(el) => {\n refs.current[i] = el;\n }}\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n maxLength={1}\n value={c}\n disabled={disabled}\n aria-label={`${ariaLabel} ${i + 1} of ${length}`}\n onChange={(e) => writeAt(i, e.target.value)}\n onKeyDown={(e) => onKey(i, e)}\n onFocus={(e) => e.target.select()}\n onPaste={i === 0 ? onPaste : undefined}\n className={cn(\n 'text-text bg-panel h-12 w-10 rounded-md text-center font-mono text-[20px] font-medium',\n 'border-border border transition-[border-color,box-shadow] duration-(--duration-micro) outline-none',\n 'focus:border-accent focus:ring-accent-dim focus:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n )}\n />\n ))}\n </div>\n );\n});\n\nOTP.displayName = 'OTP';\n","import * as RadixRadio from '@radix-ui/react-radio-group';\nimport { forwardRef, useId, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/* ───── RadioGroup ───── */\n\nexport type RadioGroupProps = Omit<RadixRadio.RadioGroupProps, 'asChild'>;\n\n/**\n * Container for radio items. Wires up roving focus + arrow-key navigation.\n *\n * <RadioGroup value={v} onValueChange={setV}>\n * <Radio value=\"team\" label=\"Everyone on team\" />\n * <Radio value=\"admins\" label=\"Admins only\" />\n * </RadioGroup>\n */\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(function RadioGroup(\n { className, ...props },\n ref,\n) {\n return <RadixRadio.Root ref={ref} className={cn('flex flex-col gap-2', className)} {...props} />;\n});\n\nRadioGroup.displayName = 'RadioGroup';\n\n/* ───── Radio ───── */\n\nexport interface RadioProps extends Omit<RadixRadio.RadioGroupItemProps, 'asChild' | 'children'> {\n /** Optional inline label. */\n label?: ReactNode;\n}\n\nexport const Radio = forwardRef<HTMLButtonElement, RadioProps>(function Radio(\n { label, className, id: idProp, ...props },\n ref,\n) {\n const reactId = useId();\n const id = idProp ?? `radio-${reactId}`;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-2 select-none',\n props.disabled && 'cursor-not-allowed opacity-40',\n className,\n )}\n >\n <RadixRadio.Item\n ref={ref}\n id={id}\n className={cn(\n 'grid h-4 w-4 place-items-center rounded-full',\n 'bg-panel border-border-strong border',\n 'data-[state=checked]:border-accent',\n 'transition-[border-color] duration-(--duration-micro)',\n 'focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]',\n )}\n {...props}\n >\n <RadixRadio.Indicator className=\"bg-accent block h-[7px] w-[7px] rounded-full\" />\n </RadixRadio.Item>\n {label && (\n <label htmlFor={id} className=\"cursor-pointer text-[13px]\">\n {label}\n </label>\n )}\n </span>\n );\n});\n\nRadio.displayName = 'Radio';\n","import * as RadixSelect from '@radix-ui/react-select';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/* ───── Atomic Radix wrappers (advanced API) ───── */\n\nexport const SelectRoot = RadixSelect.Root;\nexport const SelectValue = RadixSelect.Value;\nexport const SelectGroup = RadixSelect.Group;\nexport const SelectLabel = RadixSelect.Label;\n\nconst triggerClasses = {\n sm: 'h-7 px-2 text-[12px]',\n md: 'h-[34px] px-[10px] text-[13px]',\n lg: 'h-10 px-3 text-[14px]',\n} as const;\n\nexport const SelectTrigger = forwardRef<\n HTMLButtonElement,\n RadixSelect.SelectTriggerProps & { size?: keyof typeof triggerClasses }\n>(function SelectTrigger({ size = 'md', className, children, ...props }, ref) {\n return (\n <RadixSelect.Trigger\n ref={ref}\n className={cn(\n 'text-text bg-panel border-border inline-flex items-center justify-between gap-2 rounded-md border font-sans',\n 'data-[state=open]:border-accent',\n 'focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]',\n 'data-[disabled]:bg-panel-2 data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50',\n 'transition-[border-color,box-shadow] duration-(--duration-micro)',\n triggerClasses[size],\n className,\n )}\n {...props}\n >\n {children}\n <RadixSelect.Icon className=\"text-text-dim text-[11px] leading-none\">▾</RadixSelect.Icon>\n </RadixSelect.Trigger>\n );\n});\n\nSelectTrigger.displayName = 'SelectTrigger';\n\nexport const SelectContent = forwardRef<HTMLDivElement, RadixSelect.SelectContentProps>(\n function SelectContent(\n { className, children, position = 'popper', sideOffset = 6, ...props },\n ref,\n ) {\n return (\n <RadixSelect.Portal>\n <RadixSelect.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n className={cn(\n 'bg-panel border-border z-50 min-w-[var(--radix-select-trigger-width)] rounded-md border p-1 shadow',\n 'data-[state=open]:animate-[ship-pop-in_140ms_var(--easing-out)]',\n className,\n )}\n {...props}\n >\n <RadixSelect.Viewport>{children}</RadixSelect.Viewport>\n </RadixSelect.Content>\n </RadixSelect.Portal>\n );\n },\n);\n\nSelectContent.displayName = 'SelectContent';\n\nexport const SelectItem = forwardRef<HTMLDivElement, RadixSelect.SelectItemProps>(\n function SelectItem({ className, children, ...props }, ref) {\n return (\n <RadixSelect.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-pointer items-center rounded-sm px-2 py-[6px] text-[13px] outline-none',\n 'data-[highlighted]:bg-accent-dim data-[highlighted]:text-accent',\n 'data-[state=checked]:font-medium',\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-40',\n className,\n )}\n {...props}\n >\n <RadixSelect.ItemText>{children}</RadixSelect.ItemText>\n </RadixSelect.Item>\n );\n },\n);\n\nSelectItem.displayName = 'SelectItem';\n\n/* ───── Convenience wrapper ───── */\n\nexport type SelectOption = string | { value: string; label: ReactNode };\n\nexport interface SelectProps extends Omit<RadixSelect.SelectProps, 'children'> {\n /** Array of strings, or `{value, label}` objects. */\n options: SelectOption[];\n /** Placeholder shown when nothing is selected. */\n placeholder?: string;\n /** Trigger size. */\n size?: keyof typeof triggerClasses;\n /** Optional className for the trigger. */\n className?: string;\n /** Accessible label forwarded to the trigger button. */\n 'aria-label'?: string;\n /** ID of an element labelling the trigger. */\n 'aria-labelledby'?: string;\n}\n\n/**\n * One-line Select. For composition (groups, separators), use the lower-level\n * `SelectRoot/Trigger/Content/Item` exports directly.\n */\nexport function Select({\n options,\n placeholder = 'Select…',\n size,\n className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n ...rootProps\n}: SelectProps) {\n return (\n <RadixSelect.Root {...rootProps}>\n <SelectTrigger\n size={size}\n className={className}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n <SelectContent>\n {options.map((opt) => {\n const value = typeof opt === 'string' ? opt : opt.value;\n const label = typeof opt === 'string' ? opt : opt.label;\n return (\n <SelectItem key={value} value={value}>\n {label}\n </SelectItem>\n );\n })}\n </SelectContent>\n </RadixSelect.Root>\n );\n}\n","import * as RadixSlider from '@radix-ui/react-slider';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface SliderProps extends Omit<RadixSlider.SliderProps, 'asChild'> {\n /** Show the numeric value to the right of the track. */\n showValue?: boolean;\n /** Pixel width or any CSS length. Defaults to `240`. */\n width?: number | string;\n}\n\n/**\n * Range slider. Built on Radix Slider for keyboard support (arrow keys nudge,\n * Page Up/Down jumps, Home/End snap to extremes).\n */\nexport const Slider = forwardRef<HTMLSpanElement, SliderProps>(function Slider(\n { showValue, width = 240, className, value, defaultValue, ...props },\n ref,\n) {\n // Radix Slider's value is always an array; we accept either form for ergonomics.\n const arrValue = Array.isArray(value)\n ? value\n : value !== undefined\n ? [value as unknown as number]\n : undefined;\n const arrDefault = Array.isArray(defaultValue)\n ? defaultValue\n : defaultValue !== undefined\n ? [defaultValue as unknown as number]\n : undefined;\n const display = arrValue?.[0] ?? arrDefault?.[0] ?? props.min ?? 0;\n\n return (\n <span\n ref={ref}\n className={cn('inline-flex items-center gap-[10px]', className)}\n style={{ width }}\n >\n <RadixSlider.Root\n value={arrValue}\n defaultValue={arrDefault}\n className=\"relative flex h-4 flex-1 touch-none items-center select-none\"\n {...props}\n >\n <RadixSlider.Track className=\"bg-panel-2 relative h-1 grow rounded-full\">\n <RadixSlider.Range className=\"bg-accent absolute h-full rounded-full\" />\n </RadixSlider.Track>\n <RadixSlider.Thumb\n className={cn(\n 'bg-text border-accent block h-[14px] w-[14px] rounded-full border-2 shadow',\n 'focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]',\n 'cursor-grab active:cursor-grabbing',\n )}\n aria-label=\"Value\"\n />\n </RadixSlider.Root>\n {showValue && (\n <span className=\"text-text-muted min-w-[28px] text-right font-mono text-[11px]\">\n {display}\n </span>\n )}\n </span>\n );\n});\n\nSlider.displayName = 'Slider';\n","import * as RadixSwitch from '@radix-ui/react-switch';\nimport { forwardRef, useId, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface SwitchProps extends Omit<RadixSwitch.SwitchProps, 'asChild' | 'children'> {\n /** Optional inline label rendered to the right of the switch. */\n label?: ReactNode;\n /** Visual size. Default `md`. */\n size?: 'sm' | 'md';\n}\n\nconst trackClasses = {\n sm: 'h-4 w-7',\n md: 'h-5 w-9',\n} as const;\n\nconst thumbClasses = {\n sm: 'h-3 w-3 data-[state=checked]:translate-x-3',\n md: 'h-4 w-4 data-[state=checked]:translate-x-4',\n} as const;\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(function Switch(\n { label, size = 'md', className, id: idProp, ...props },\n ref,\n) {\n const reactId = useId();\n const id = idProp ?? `sw-${reactId}`;\n\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-2 select-none',\n props.disabled && 'cursor-not-allowed opacity-40',\n className,\n )}\n >\n <RadixSwitch.Root\n ref={ref}\n id={id}\n className={cn(\n 'relative inline-flex shrink-0 cursor-pointer rounded-full border transition-colors duration-(--duration-micro)',\n 'bg-panel-2 border-border data-[state=checked]:bg-accent data-[state=checked]:border-accent',\n 'focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed',\n trackClasses[size],\n )}\n {...props}\n >\n <RadixSwitch.Thumb\n className={cn(\n 'bg-text absolute top-1/2 left-[1px] -translate-y-1/2 rounded-full shadow-sm',\n 'data-[state=checked]:bg-on-accent transition-transform duration-(--duration-micro)',\n thumbClasses[size],\n )}\n />\n </RadixSwitch.Root>\n {label && (\n <label htmlFor={id} className=\"cursor-pointer text-[13px]\">\n {label}\n </label>\n )}\n </span>\n );\n});\n\nSwitch.displayName = 'Switch';\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type TextareaHTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nconst textareaStyles = cva(\n [\n 'w-full font-sans text-text bg-panel rounded-md p-[10px]',\n 'border outline-none transition-[border-color,box-shadow] duration-(--duration-micro)',\n 'placeholder:text-text-dim resize-y',\n 'focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-panel-2',\n ],\n {\n variants: {\n tone: {\n default: 'border-border focus-visible:border-accent focus-visible:ring-accent-dim',\n error: 'border-err focus-visible:border-err focus-visible:ring-[oklch(0.55_0.18_30/0.18)]',\n },\n },\n defaultVariants: { tone: 'default' },\n },\n);\n\nexport interface TextareaProps\n extends TextareaHTMLAttributes<HTMLTextAreaElement>, VariantProps<typeof textareaStyles> {\n /** Error tone shortcut. Sets `aria-invalid` and the error border. */\n error?: boolean;\n}\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n { tone, error, rows = 4, className, ...props },\n ref,\n) {\n return (\n <textarea\n ref={ref}\n rows={rows}\n aria-invalid={error || undefined}\n className={cn(textareaStyles({ tone: error ? 'error' : tone }), className)}\n {...props}\n />\n );\n});\n\nTextarea.displayName = 'Textarea';\n","import * as RadixAvatar from '@radix-ui/react-avatar';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type AvatarStatus = 'ok' | 'warn' | 'err' | 'off';\n\nconst sizePx: Record<AvatarSize, number> = { xs: 20, sm: 24, md: 32, lg: 40, xl: 56 };\n\nconst statusBg: Record<AvatarStatus, string> = {\n ok: 'bg-ok',\n warn: 'bg-warn',\n err: 'bg-err',\n off: 'bg-text-dim',\n};\n\nfunction initialsFor(name: string): string {\n return (name || '?')\n .split(/\\s+/)\n .map((p) => p[0] ?? '')\n .join('')\n .slice(0, 2)\n .toUpperCase();\n}\n\nfunction hashHue(str: string): number {\n let h = 0;\n for (let i = 0; i < str.length; i++) h = (h * 31 + str.charCodeAt(i)) % 360;\n return h;\n}\n\nexport interface AvatarProps extends HTMLAttributes<HTMLSpanElement> {\n /** Display name. Used to derive initials and a deterministic background color. */\n name?: string;\n /** Image source. Falls back to initials if loading fails. */\n src?: string;\n /** Predefined size: xs (20) / sm (24) / md (32) / lg (40) / xl (56). */\n size?: AvatarSize;\n /** Optional presence indicator. */\n status?: AvatarStatus;\n /** Override the auto-generated initials (e.g., for non-Latin scripts). */\n initials?: string;\n}\n\n/**\n * Person/entity avatar. Auto-generates initials and a stable background color from\n * `name`. When `src` is provided, it's the primary; initials show during load and\n * after a load failure.\n */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(function Avatar(\n { name = '?', src, size = 'md', status, initials, className, style, ...props },\n ref,\n) {\n const dim = sizePx[size];\n const hue = hashHue(name);\n const computedInitials = initials ?? initialsFor(name);\n\n return (\n <span\n ref={ref}\n className={cn('relative inline-block', className)}\n style={{ width: dim, height: dim, ...style }}\n {...props}\n >\n <RadixAvatar.Root\n className=\"border-border relative inline-flex h-full w-full shrink-0 overflow-hidden rounded-full border\"\n style={{ background: src ? undefined : `oklch(0.4 0.1 ${hue})` }}\n >\n {src && <RadixAvatar.Image src={src} alt={name} className=\"h-full w-full object-cover\" />}\n <RadixAvatar.Fallback\n className=\"flex h-full w-full items-center justify-center font-sans font-semibold text-white\"\n style={{ fontSize: dim * 0.38 }}\n >\n {computedInitials}\n </RadixAvatar.Fallback>\n </RadixAvatar.Root>\n {status && (\n <span\n role=\"img\"\n aria-label={`status: ${status}`}\n className={cn(\n 'border-bg absolute right-0 bottom-0 rounded-full border-[2px]',\n statusBg[status],\n )}\n style={{ width: dim * 0.3, height: dim * 0.3 }}\n />\n )}\n </span>\n );\n});\n\nAvatar.displayName = 'Avatar';\n","import { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nimport { Avatar, type AvatarSize } from './Avatar';\n\nconst sizePx: Record<AvatarSize, number> = { xs: 20, sm: 24, md: 32, lg: 40, xl: 56 };\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n /** Names rendered as stacked avatars. */\n names: string[];\n /** Maximum avatars before collapsing into a `+N` chip. Defaults to 3. */\n max?: number;\n /** Avatar size for the whole group. */\n size?: AvatarSize;\n}\n\n/**\n * Stacked avatars with overflow chip. Each avatar's initials and color is\n * deterministic from its name.\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(function AvatarGroup(\n { names, max = 3, size = 'md', className, ...props },\n ref,\n) {\n const dim = sizePx[size];\n const visible = names.slice(0, max);\n const rest = names.length - visible.length;\n const overlap = -dim * 0.35;\n\n return (\n <div ref={ref} className={cn('inline-flex', className)} {...props}>\n {visible.map((n, i) => (\n <span key={`${n}-${i}`} style={{ marginLeft: i === 0 ? 0 : overlap }}>\n <Avatar name={n} size={size} />\n </span>\n ))}\n {rest > 0 && (\n <span\n aria-label={`+${rest} more`}\n className=\"bg-panel-2 border-border text-text-muted grid place-items-center rounded-full border font-mono\"\n style={{\n width: dim,\n height: dim,\n marginLeft: overlap,\n fontSize: dim * 0.35,\n }}\n >\n +{rest}\n </span>\n )}\n </div>\n );\n});\n\nAvatarGroup.displayName = 'AvatarGroup';\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nconst badgeStyles = cva('inline-flex items-center font-sans leading-none whitespace-nowrap', {\n variants: {\n variant: {\n neutral: 'bg-panel-2 text-text-muted border border-border',\n accent: 'bg-accent-dim text-accent border border-transparent',\n ok: 'bg-[color-mix(in_oklab,var(--color-ok),transparent_85%)] text-ok border border-transparent',\n warn: 'bg-[color-mix(in_oklab,var(--color-warn),transparent_85%)] text-warn border border-transparent',\n err: 'bg-[color-mix(in_oklab,var(--color-err),transparent_85%)] text-err border border-transparent',\n purple:\n 'bg-[color-mix(in_oklab,var(--color-purple),transparent_85%)] text-purple border border-transparent',\n pink: 'bg-[color-mix(in_oklab,var(--color-pink),transparent_85%)] text-pink border border-transparent',\n outline: 'bg-transparent text-text border border-border-strong',\n solid: 'bg-text text-bg border border-text',\n },\n size: {\n sm: 'h-[18px] px-[6px] py-[1px] text-[10px] gap-1 rounded-full',\n md: 'h-[22px] px-2 py-[2px] text-[11px] gap-[5px] rounded-full',\n lg: 'h-[26px] px-[10px] py-[3px] text-[12px] gap-[6px] rounded-full',\n },\n },\n defaultVariants: { variant: 'neutral', size: 'md' },\n});\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>, VariantProps<typeof badgeStyles> {\n /** Show a colored leading dot. */\n dot?: boolean;\n /** Optional leading icon (defers to children). */\n icon?: ReactNode;\n}\n\nconst dotColorClass = {\n neutral: 'bg-text-dim',\n accent: 'bg-accent',\n ok: 'bg-ok',\n warn: 'bg-warn',\n err: 'bg-err',\n purple: 'bg-purple',\n pink: 'bg-pink',\n outline: 'bg-text-muted',\n solid: 'bg-bg',\n} as const;\n\nconst dotSize = { sm: 'h-[5px] w-[5px]', md: 'h-[6px] w-[6px]', lg: 'h-[7px] w-[7px]' } as const;\n\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n { variant = 'neutral', size = 'md', dot, icon, className, children, ...props },\n ref,\n) {\n return (\n <span ref={ref} className={cn(badgeStyles({ variant, size }), className)} {...props}>\n {dot && (\n <span\n aria-hidden\n className={cn('inline-block rounded-full', dotSize[size!], dotColorClass[variant!])}\n />\n )}\n {icon && <span className=\"inline-flex leading-none\">{icon}</span>}\n {children}\n </span>\n );\n});\n\nBadge.displayName = 'Badge';\n\nexport { badgeStyles };\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nconst cardStyles = cva(\n 'block bg-panel border border-border rounded-base transition-[border-color,transform,box-shadow] duration-(--duration-step)',\n {\n variants: {\n variant: {\n default: '',\n ghost: 'bg-transparent',\n elevated: 'shadow',\n },\n interactive: {\n true: 'cursor-pointer hover:border-border-strong hover:-translate-y-px hover:shadow',\n false: '',\n },\n },\n defaultVariants: { variant: 'default', interactive: false },\n },\n);\n\nexport interface CardProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, VariantProps<typeof cardStyles> {\n /** Render a header row with this title (and optional `actions`). */\n title?: ReactNode;\n /** Description shown under the title (or above children when no title). */\n description?: ReactNode;\n /** Action slot rendered to the right of the title. */\n actions?: ReactNode;\n /** Footer slot rendered with a top divider beneath children. */\n footer?: ReactNode;\n}\n\n/**\n * Standard surface for a chunk of content. All cards share the same chrome\n * (panel bg, 1px border, 10px radius); variation comes from what's inside.\n *\n * Compose with the `<Card title=\"…\" actions={…} footer={…}>` API for simple\n * cases, or pass children directly for full control.\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(function Card(\n {\n variant,\n interactive,\n title,\n description,\n actions,\n footer,\n className,\n children,\n onClick,\n ...props\n },\n ref,\n) {\n const isInteractive = interactive ?? Boolean(onClick);\n return (\n <div\n ref={ref}\n onClick={onClick}\n onKeyDown={\n isInteractive && onClick\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n }\n : undefined\n }\n role={isInteractive ? 'button' : undefined}\n tabIndex={isInteractive ? 0 : undefined}\n className={cn(cardStyles({ variant, interactive: isInteractive }), 'p-[18px]', className)}\n {...props}\n >\n {(title || actions) && (\n <div className={cn('flex items-start gap-3', (description || children) && 'mb-[10px]')}>\n {title && <div className=\"flex-1 text-[14px] font-medium\">{title}</div>}\n {actions && <div className=\"flex gap-1\">{actions}</div>}\n </div>\n )}\n {description && (\n <div className={cn('text-text-muted text-[12px] leading-[1.55]', children && 'mb-[14px]')}>\n {description}\n </div>\n )}\n {children}\n {footer && (\n <div className=\"border-border text-text-dim mt-[14px] border-t pt-3 text-[11px]\">\n {footer}\n </div>\n )}\n </div>\n );\n});\n\nCard.displayName = 'Card';\n\nexport { cardStyles };\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport type StatTrend = 'up' | 'down' | 'flat';\n\nexport interface StatCardProps extends HTMLAttributes<HTMLDivElement> {\n /** UPPERCASE eyebrow label above the value. */\n label: ReactNode;\n /** The big number / value. Renders in tabular-nums monospace for ticker comparison. */\n value: ReactNode;\n /** Optional delta string (\"+284 today\", \"-0.3%\"). */\n delta?: ReactNode;\n /** Pairs with `delta` to color the change: up = ok, down = err, flat = neutral. */\n trend?: StatTrend;\n /** Optional trailing icon, top-right. */\n icon?: ReactNode;\n}\n\nconst trendClasses: Record<StatTrend, string> = {\n up: 'text-ok',\n down: 'text-err',\n flat: 'text-text-dim',\n};\n\nconst trendArrows: Record<StatTrend, string> = { up: '↑', down: '↓', flat: '→' };\n\n/**\n * Card subclass for a single metric. Use in dashboard grids; cap at 4 per row.\n */\nexport const StatCard = forwardRef<HTMLDivElement, StatCardProps>(function StatCard(\n { label, value, delta, trend = 'flat', icon, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn('bg-panel border-border rounded-base block border p-[18px]', className)}\n {...props}\n >\n <div className=\"mb-[10px] flex items-center justify-between\">\n <div className=\"text-text-dim font-mono text-[10px] tracking-wide uppercase\">{label}</div>\n {icon && <div className=\"text-text-dim text-[14px]\">{icon}</div>}\n </div>\n <div className=\"text-text font-mono text-[26px] leading-none font-medium tracking-tight\">\n {value}\n </div>\n {delta !== undefined && (\n <div className={cn('mt-[6px] font-mono text-[11px]', trendClasses[trend])}>\n {trendArrows[trend]} {delta}\n </div>\n )}\n </div>\n );\n});\n\nStatCard.displayName = 'StatCard';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface ChipProps extends HTMLAttributes<HTMLSpanElement> {\n /** Pill-style leading icon (typically a glyph or `@`/`#`). */\n icon?: ReactNode;\n /** Optional remove handler — renders an inset close button. */\n removable?: boolean;\n onRemove?: () => void;\n children: ReactNode;\n}\n\n/**\n * Pill-shaped filter chip. Used in command palette tag rows, search filter strips,\n * and AI suggestion lists. Differs from `Tag` by being pill-shaped (full radius)\n * and slightly more decorative.\n */\nexport const Chip = forwardRef<HTMLSpanElement, ChipProps>(function Chip(\n { icon, removable, onRemove, className, children, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex h-[26px] items-center gap-[6px] py-[4px] pr-1 pl-[10px] font-sans text-[12px]',\n 'bg-panel-2 text-text border-border rounded-full border',\n className,\n )}\n {...props}\n >\n {icon && <span className=\"text-text-dim inline-flex text-[10px]\">{icon}</span>}\n {children}\n {removable && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label=\"Remove\"\n className=\"bg-panel text-text-dim hover:text-text grid h-[18px] w-[18px] place-items-center rounded-full text-[10px] leading-none\"\n >\n ×\n </button>\n )}\n </span>\n );\n});\n\nChip.displayName = 'Chip';\n","import { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport type KbdProps = HTMLAttributes<HTMLElement>;\n\n/**\n * Keyboard shortcut display — `<Kbd>⌘</Kbd><Kbd>K</Kbd>`. Uses `<kbd>` semantics\n * so screen readers announce it as a key.\n */\nexport const Kbd = forwardRef<HTMLElement, KbdProps>(function Kbd(\n { className, children, ...props },\n ref,\n) {\n return (\n <kbd\n ref={ref}\n className={cn(\n 'text-text-muted inline-flex items-center font-mono text-[10px] font-medium',\n 'bg-panel border-border rounded-xs border px-[6px] py-[2px]',\n 'border-b-border border-b-[2px]',\n className,\n )}\n {...props}\n >\n {children}\n </kbd>\n );\n});\n\nKbd.displayName = 'Kbd';\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nconst skeletonStyles = cva('block bg-panel-2 animate-[ship-skeleton_1.4s_infinite]', {\n variants: {\n shape: {\n line: 'rounded-xs',\n block: 'rounded-md',\n circle: 'rounded-full',\n },\n },\n defaultVariants: { shape: 'line' },\n});\n\nexport interface SkeletonProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof skeletonStyles> {\n /** Width override — accepts any CSS length, e.g. `'70%'`, `120`. */\n width?: number | string;\n /** Height override. Defaults differ by shape: `line` = 14, `block` = 80, `circle` = 40. */\n height?: number | string;\n}\n\nconst defaultHeight = { line: 14, block: 80, circle: 40 } as const;\n\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(function Skeleton(\n { shape = 'line', width = '100%', height, className, style, ...props },\n ref,\n) {\n const h = height ?? defaultHeight[shape!];\n const w = shape === 'circle' ? h : width;\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-busy=\"true\"\n aria-label=\"Loading\"\n className={cn(skeletonStyles({ shape }), className)}\n style={{ width: w, height: h, ...style }}\n {...props}\n />\n );\n});\n\nSkeleton.displayName = 'Skeleton';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport type StatusState = 'ok' | 'warn' | 'err' | 'off' | 'sync' | 'accent';\n\nexport interface StatusDotProps extends HTMLAttributes<HTMLSpanElement> {\n /** Semantic status. */\n state?: StatusState;\n /** Optional label rendered next to the dot. */\n label?: ReactNode;\n /** Pulse the dot — used for `sync` state to indicate live activity. */\n pulse?: boolean;\n /** Pixel diameter. Defaults to 8px. */\n size?: number;\n}\n\nconst stateColor: Record<StatusState, string> = {\n ok: 'bg-ok',\n warn: 'bg-warn',\n err: 'bg-err',\n off: 'bg-text-dim',\n sync: 'bg-accent',\n accent: 'bg-accent',\n};\n\nconst stateText: Record<StatusState, string> = {\n ok: 'text-ok',\n warn: 'text-warn',\n err: 'text-err',\n off: 'text-text-dim',\n sync: 'text-accent',\n accent: 'text-accent',\n};\n\nexport const StatusDot = forwardRef<HTMLSpanElement, StatusDotProps>(function StatusDot(\n { state = 'ok', label, pulse, size = 8, className, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n role={label ? 'status' : 'img'}\n aria-label={!label && typeof state === 'string' ? state : undefined}\n className={cn('inline-flex items-center gap-[6px]', className)}\n {...props}\n >\n <span\n className={cn(\n 'inline-block rounded-full',\n stateColor[state],\n pulse && 'animate-[ship-pulse-ring_1.6s_infinite]',\n stateText[state],\n )}\n style={{ width: size, height: size }}\n />\n {label && <span className=\"text-text-muted text-[12px]\">{label}</span>}\n </span>\n );\n});\n\nStatusDot.displayName = 'StatusDot';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport interface TagProps extends HTMLAttributes<HTMLSpanElement> {\n /** Optional close button. When provided, a `×` rendered on the right calls it. */\n onRemove?: () => void;\n /** Optional leading icon. */\n icon?: ReactNode;\n /** Pixel height. Defaults to 22px. */\n size?: number;\n children: ReactNode;\n}\n\n/**\n * Compact label with optional remove button. Used for selected filters,\n * applied tags, mention tokens.\n */\nexport const Tag = forwardRef<HTMLSpanElement, TagProps>(function Tag(\n { onRemove, icon, size = 22, className, children, ...props },\n ref,\n) {\n return (\n <span\n ref={ref}\n className={cn(\n 'inline-flex items-center gap-[6px] px-2 py-[3px] font-sans text-[11px]',\n 'bg-panel-2 text-text border-border rounded-xs border',\n className,\n )}\n style={{ height: size }}\n {...props}\n >\n {icon && <span className=\"text-text-dim inline-flex\">{icon}</span>}\n {children}\n {onRemove && (\n <button\n type=\"button\"\n onClick={onRemove}\n aria-label=\"Remove\"\n className=\"text-text-dim hover:text-text px-[2px] leading-none\"\n >\n ×\n </button>\n )}\n </span>\n );\n});\n\nTag.displayName = 'Tag';\n","import * as RadixContext from '@radix-ui/react-context-menu';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport const ContextMenuRoot = RadixContext.Root;\nexport const ContextMenuTrigger = RadixContext.Trigger;\nexport const ContextMenuPortal = RadixContext.Portal;\n\nexport const ContextMenuContent = forwardRef<HTMLDivElement, RadixContext.ContextMenuContentProps>(\n function ContextMenuContent({ className, ...props }, ref) {\n return (\n <RadixContext.Portal>\n <RadixContext.Content\n ref={ref}\n className={cn(\n 'bg-panel border-border-strong z-40 min-w-[180px] rounded-md border p-1 shadow-lg outline-none',\n 'data-[state=open]:animate-[ship-pop-in_140ms_var(--easing-out)]',\n className,\n )}\n {...props}\n />\n </RadixContext.Portal>\n );\n },\n);\n\nContextMenuContent.displayName = 'ContextMenuContent';\n\nconst itemBase = cn(\n 'flex items-center gap-2 px-[10px] py-[6px] rounded-sm text-[12px] cursor-pointer outline-none',\n 'data-[highlighted]:bg-panel-2',\n 'data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed',\n);\n\nexport interface ContextMenuItemProps extends RadixContext.ContextMenuItemProps {\n icon?: ReactNode;\n trailing?: ReactNode;\n destructive?: boolean;\n}\n\nexport const ContextMenuItem = forwardRef<HTMLDivElement, ContextMenuItemProps>(\n function ContextMenuItem({ icon, trailing, destructive, className, children, ...props }, ref) {\n return (\n <RadixContext.Item\n ref={ref}\n className={cn(itemBase, destructive ? 'text-err' : 'text-text', className)}\n {...props}\n >\n {icon && <span className=\"w-[14px] text-[12px] opacity-70\">{icon}</span>}\n <span className=\"flex-1\">{children}</span>\n {trailing && <span className=\"text-text-dim font-mono text-[10px]\">{trailing}</span>}\n </RadixContext.Item>\n );\n },\n);\n\nContextMenuItem.displayName = 'ContextMenuItem';\n\nexport const ContextMenuSeparator = forwardRef<\n HTMLDivElement,\n RadixContext.ContextMenuSeparatorProps\n>(function ContextMenuSeparator({ className, ...props }, ref) {\n return (\n <RadixContext.Separator\n ref={ref}\n className={cn('bg-border my-1 h-[1px]', className)}\n {...props}\n />\n );\n});\n\nContextMenuSeparator.displayName = 'ContextMenuSeparator';\n\nexport const ContextMenu = RadixContext.Root;\n","import * as RadixDialog from '@radix-ui/react-dialog';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Modal dialog. Built on Radix Dialog so focus trap, ESC, and ARIA come for free.\n *\n * Two APIs:\n * 1. Composition: `<Dialog open={…}><DialogContent>…</DialogContent></Dialog>`\n * 2. Convenience: `<Dialog open={…} title=\"…\" description=\"…\" footer={…}>body</Dialog>`\n */\n\nexport const DialogRoot = RadixDialog.Root;\nexport const DialogTrigger = RadixDialog.Trigger;\nexport const DialogClose = RadixDialog.Close;\nexport const DialogPortal = RadixDialog.Portal;\n\nexport const DialogOverlay = forwardRef<HTMLDivElement, RadixDialog.DialogOverlayProps>(\n function DialogOverlay({ className, ...props }, ref) {\n return (\n <RadixDialog.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/55 backdrop-blur-[4px]',\n 'data-[state=open]:animate-[ship-fade-in_150ms_ease]',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nDialogOverlay.displayName = 'DialogOverlay';\n\nexport interface DialogContentProps extends RadixDialog.DialogContentProps {\n /** Pixel max-width of the panel. Defaults to 460. */\n width?: number | string;\n}\n\nexport const DialogContent = forwardRef<HTMLDivElement, DialogContentProps>(function DialogContent(\n { className, width = 460, style, children, ...props },\n ref,\n) {\n return (\n <DialogPortal>\n <DialogOverlay />\n <RadixDialog.Content\n ref={ref}\n className={cn(\n 'fixed top-1/2 left-1/2 z-[51] w-[calc(100%-40px)] -translate-x-1/2 -translate-y-1/2 p-6',\n 'bg-panel border-border-strong rounded-lg border shadow-lg',\n 'data-[state=open]:animate-[ship-dialog-in_180ms_var(--easing-out)]',\n 'outline-none',\n className,\n )}\n style={{ maxWidth: width, ...style }}\n {...props}\n >\n {children}\n </RadixDialog.Content>\n </DialogPortal>\n );\n});\n\nDialogContent.displayName = 'DialogContent';\n\nexport interface DialogProps extends RadixDialog.DialogProps {\n /** Convenience: title rendered with proper heading semantics. */\n title?: ReactNode;\n /** Convenience: description rendered with proper a11y description. */\n description?: ReactNode;\n /** Footer slot — typically buttons. */\n footer?: ReactNode;\n /** Pixel max-width of the panel. */\n width?: number | string;\n /** When set, content is wrapped in a content frame; omit for full custom layout. */\n children?: ReactNode;\n}\n\nexport function Dialog({ title, description, footer, width, children, ...rootProps }: DialogProps) {\n // If consumer passed only children, render in convenience mode.\n return (\n <DialogRoot {...rootProps}>\n <DialogContent width={width}>\n {title && (\n <RadixDialog.Title\n className={cn('text-[16px] font-medium', description ? 'mb-[6px]' : 'mb-4')}\n >\n {title}\n </RadixDialog.Title>\n )}\n {description && (\n <RadixDialog.Description className=\"text-text-muted mb-[18px] text-[13px] leading-[1.55]\">\n {description}\n </RadixDialog.Description>\n )}\n {children}\n {footer && <div className=\"mt-5 flex justify-end gap-2\">{footer}</div>}\n </DialogContent>\n </DialogRoot>\n );\n}\n","import * as RadixDialog from '@radix-ui/react-dialog';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nimport { DialogOverlay, DialogPortal, DialogRoot } from './Dialog';\n\nexport type DrawerSide = 'left' | 'right';\n\nexport interface DrawerProps extends RadixDialog.DialogProps {\n /** Side the drawer slides in from. */\n side?: DrawerSide;\n /** Title rendered in the drawer header (with built-in close button). */\n title?: ReactNode;\n /** Width override. Defaults to 420. */\n width?: number | string;\n children?: ReactNode;\n}\n\nconst sideClasses: Record<DrawerSide, string> = {\n left: 'left-0 border-r border-border-strong data-[state=open]:animate-[ship-slide-in-left_220ms_var(--easing-out)]',\n right:\n 'right-0 border-l border-border-strong data-[state=open]:animate-[ship-slide-in-right_220ms_var(--easing-out)]',\n};\n\nconst DrawerHeader = ({ title, onClose }: { title: ReactNode; onClose?: () => void }) => (\n <div className=\"border-border flex items-center justify-between border-b p-[16px] px-5\">\n <span className=\"text-[14px] font-medium\">{title}</span>\n <RadixDialog.Close\n onClick={onClose}\n aria-label=\"Close\"\n className=\"text-text-dim hover:text-text p-1 text-[18px] leading-none\"\n >\n ×\n </RadixDialog.Close>\n </div>\n);\n\n/**\n * Side-panel overlay. Same focus-trap + ESC + backdrop semantics as Dialog,\n * just slid in from the side.\n */\nexport const Drawer = forwardRef<HTMLDivElement, DrawerProps>(function Drawer(\n { side = 'right', title, width = 420, children, ...rootProps },\n ref,\n) {\n return (\n <DialogRoot {...rootProps}>\n <DialogPortal>\n <DialogOverlay />\n <RadixDialog.Content\n ref={ref}\n className={cn(\n 'bg-panel fixed top-0 bottom-0 z-[51] flex flex-col shadow-lg outline-none',\n sideClasses[side],\n )}\n style={{ width }}\n >\n {title && <DrawerHeader title={title} />}\n <div className=\"flex-1 overflow-auto p-5\">{children}</div>\n </RadixDialog.Content>\n </DialogPortal>\n </DialogRoot>\n );\n});\n\nDrawer.displayName = 'Drawer';\n","import * as RadixDialog from '@radix-ui/react-dialog';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nimport { DialogOverlay, DialogPortal, DialogRoot } from './Dialog';\n\nexport interface SheetProps extends RadixDialog.DialogProps {\n /** Optional title rendered above the body. */\n title?: ReactNode;\n /** Width override. Defaults to `min(640px, 90vw)`. */\n width?: number | string;\n children?: ReactNode;\n}\n\n/**\n * Bottom sheet overlay. Slides up from the bottom edge of the viewport, with a\n * subtle drag-handle. Useful for quick actions on mobile-leaning surfaces.\n */\nexport const Sheet = forwardRef<HTMLDivElement, SheetProps>(function Sheet(\n { title, width = 'min(640px, 90vw)', children, ...rootProps },\n ref,\n) {\n return (\n <DialogRoot {...rootProps}>\n <DialogPortal>\n <DialogOverlay />\n <RadixDialog.Content\n ref={ref}\n className={cn(\n 'fixed bottom-0 left-1/2 z-[51] -translate-x-1/2 p-5',\n 'bg-panel border-border-strong rounded-tl-lg rounded-tr-lg border-t shadow-lg outline-none',\n 'data-[state=open]:animate-[ship-slide-in-bottom_220ms_var(--easing-out)]',\n )}\n style={{ width }}\n >\n <div className=\"bg-border mx-auto mb-[14px] h-1 w-9 rounded-full\" aria-hidden />\n {title && (\n <RadixDialog.Title className=\"mb-1 text-[15px] font-medium\">{title}</RadixDialog.Title>\n )}\n {children}\n </RadixDialog.Content>\n </DialogPortal>\n </DialogRoot>\n );\n});\n\nSheet.displayName = 'Sheet';\n","import * as RadixAlert from '@radix-ui/react-alert-dialog';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Confirmation dialog. Stricter than Dialog: cannot be closed by clicking the\n * backdrop, requires an explicit cancel/confirm action.\n */\n\nexport const AlertDialogRoot = RadixAlert.Root;\nexport const AlertDialogTrigger = RadixAlert.Trigger;\nexport const AlertDialogAction = RadixAlert.Action;\nexport const AlertDialogCancel = RadixAlert.Cancel;\n\nexport interface AlertDialogProps extends RadixAlert.AlertDialogProps {\n title: ReactNode;\n description?: ReactNode;\n /** Confirm + cancel buttons or any custom footer slot. */\n footer?: ReactNode;\n width?: number | string;\n}\n\nexport const AlertDialog = forwardRef<HTMLDivElement, AlertDialogProps>(function AlertDialog(\n { title, description, footer, width = 460, children, ...rootProps },\n ref,\n) {\n return (\n <AlertDialogRoot {...rootProps}>\n <RadixAlert.Portal>\n <RadixAlert.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/55 backdrop-blur-[4px]',\n 'data-[state=open]:animate-[ship-fade-in_150ms_ease]',\n )}\n />\n <RadixAlert.Content\n ref={ref}\n style={{ maxWidth: width }}\n className={cn(\n 'fixed top-1/2 left-1/2 z-[51] w-[calc(100%-40px)] -translate-x-1/2 -translate-y-1/2 p-6',\n 'bg-panel border-border-strong rounded-lg border shadow-lg outline-none',\n 'data-[state=open]:animate-[ship-dialog-in_180ms_var(--easing-out)]',\n )}\n >\n <RadixAlert.Title\n className={cn('text-[16px] font-medium', description ? 'mb-[6px]' : 'mb-4')}\n >\n {title}\n </RadixAlert.Title>\n {description && (\n <RadixAlert.Description className=\"text-text-muted mb-[18px] text-[13px] leading-[1.55]\">\n {description}\n </RadixAlert.Description>\n )}\n {children}\n {footer && <div className=\"mt-5 flex justify-end gap-2\">{footer}</div>}\n </RadixAlert.Content>\n </RadixAlert.Portal>\n </AlertDialogRoot>\n );\n});\n\nAlertDialog.displayName = 'AlertDialog';\n","import * as RadixMenu from '@radix-ui/react-dropdown-menu';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport const DropdownMenuRoot = RadixMenu.Root;\nexport const DropdownMenuTrigger = RadixMenu.Trigger;\nexport const DropdownMenuPortal = RadixMenu.Portal;\nexport const DropdownMenuGroup = RadixMenu.Group;\nexport const DropdownMenuLabel = RadixMenu.Label;\nexport const DropdownMenuRadioGroup = RadixMenu.RadioGroup;\n\nexport const DropdownMenuContent = forwardRef<HTMLDivElement, RadixMenu.DropdownMenuContentProps>(\n function DropdownMenuContent({ className, sideOffset = 6, align = 'start', ...props }, ref) {\n return (\n <RadixMenu.Portal>\n <RadixMenu.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'bg-panel border-border-strong z-40 min-w-[180px] rounded-md border p-1 shadow-lg outline-none',\n 'data-[state=open]:animate-[ship-pop-in_140ms_var(--easing-out)]',\n className,\n )}\n {...props}\n />\n </RadixMenu.Portal>\n );\n },\n);\n\nDropdownMenuContent.displayName = 'DropdownMenuContent';\n\nexport interface MenuItemProps extends RadixMenu.DropdownMenuItemProps {\n /** Icon rendered to the left of the label. */\n icon?: ReactNode;\n /** Trailing hint — typically a kbd shortcut. */\n trailing?: ReactNode;\n /** Style as destructive (red). Doesn't change behavior. */\n destructive?: boolean;\n}\n\nconst itemBase = cn(\n 'flex items-center gap-2 px-[10px] py-[6px] rounded-sm text-[12px] cursor-pointer outline-none',\n 'data-[highlighted]:bg-panel-2',\n 'data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed',\n);\n\nexport const MenuItem = forwardRef<HTMLDivElement, MenuItemProps>(function MenuItem(\n { icon, trailing, destructive, className, children, ...props },\n ref,\n) {\n return (\n <RadixMenu.Item\n ref={ref}\n className={cn(itemBase, destructive ? 'text-err' : 'text-text', className)}\n {...props}\n >\n {icon && <span className=\"w-[14px] text-[12px] opacity-70\">{icon}</span>}\n <span className=\"flex-1\">{children}</span>\n {trailing && <span className=\"text-text-dim font-mono text-[10px]\">{trailing}</span>}\n </RadixMenu.Item>\n );\n});\n\nMenuItem.displayName = 'MenuItem';\n\nexport const MenuCheckboxItem = forwardRef<HTMLDivElement, RadixMenu.DropdownMenuCheckboxItemProps>(\n function MenuCheckboxItem({ className, children, ...props }, ref) {\n return (\n <RadixMenu.CheckboxItem\n ref={ref}\n className={cn(itemBase, 'text-text relative pl-[26px]', className)}\n {...props}\n >\n <RadixMenu.ItemIndicator className=\"text-accent absolute top-1/2 left-2 -translate-y-1/2 text-[10px]\">\n ✓\n </RadixMenu.ItemIndicator>\n {children}\n </RadixMenu.CheckboxItem>\n );\n },\n);\n\nMenuCheckboxItem.displayName = 'MenuCheckboxItem';\n\nexport const MenuSeparator = forwardRef<HTMLDivElement, RadixMenu.DropdownMenuSeparatorProps>(\n function MenuSeparator({ className, ...props }, ref) {\n return (\n <RadixMenu.Separator\n ref={ref}\n className={cn('bg-border my-1 h-[1px]', className)}\n {...props}\n />\n );\n },\n);\n\nMenuSeparator.displayName = 'MenuSeparator';\n\n/** Convenience export so consumers can `<DropdownMenu>...</DropdownMenu>`. */\nexport const DropdownMenu = RadixMenu.Root;\n","import * as RadixHoverCard from '@radix-ui/react-hover-card';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport const HoverCardRoot = RadixHoverCard.Root;\nexport const HoverCardTrigger = RadixHoverCard.Trigger;\nexport const HoverCardPortal = RadixHoverCard.Portal;\n\nexport const HoverCardContent = forwardRef<HTMLDivElement, RadixHoverCard.HoverCardContentProps>(\n function HoverCardContent({ className, sideOffset = 4, ...props }, ref) {\n return (\n <RadixHoverCard.Portal>\n <RadixHoverCard.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'rounded-base bg-panel border-border-strong z-40 border p-[14px] shadow-lg outline-none',\n 'data-[state=open]:animate-[ship-pop-in_140ms_var(--easing-out)]',\n className,\n )}\n {...props}\n />\n </RadixHoverCard.Portal>\n );\n },\n);\n\nHoverCardContent.displayName = 'HoverCardContent';\n\nexport interface HoverCardProps extends RadixHoverCard.HoverCardProps {\n trigger: ReactNode;\n content: ReactNode;\n}\n\n/** Convenience wrapper — pass `trigger` and `content` as props. */\nexport function HoverCard({ trigger, content, ...rootProps }: HoverCardProps) {\n return (\n <RadixHoverCard.Root openDelay={200} closeDelay={120} {...rootProps}>\n <RadixHoverCard.Trigger asChild>{trigger}</RadixHoverCard.Trigger>\n <HoverCardContent>{content}</HoverCardContent>\n </RadixHoverCard.Root>\n );\n}\n","import * as RadixPopover from '@radix-ui/react-popover';\nimport { forwardRef } from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport const PopoverRoot = RadixPopover.Root;\nexport const PopoverTrigger = RadixPopover.Trigger;\nexport const PopoverAnchor = RadixPopover.Anchor;\nexport const PopoverPortal = RadixPopover.Portal;\nexport const PopoverClose = RadixPopover.Close;\nexport const PopoverArrow = RadixPopover.Arrow;\n\nexport const PopoverContent = forwardRef<HTMLDivElement, RadixPopover.PopoverContentProps>(\n function PopoverContent({ className, align = 'start', sideOffset = 6, ...props }, ref) {\n return (\n <RadixPopover.Portal>\n <RadixPopover.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-panel border-border-strong z-40 rounded-md border p-[6px] shadow-lg outline-none',\n 'data-[state=open]:animate-[ship-pop-in_140ms_var(--easing-out)]',\n className,\n )}\n {...props}\n />\n </RadixPopover.Portal>\n );\n },\n);\n\nPopoverContent.displayName = 'PopoverContent';\n\n/**\n * Convenience export — the Radix Root with our default styles applied to Content.\n *\n * <Popover>\n * <PopoverTrigger asChild><Button>Open</Button></PopoverTrigger>\n * <PopoverContent>…</PopoverContent>\n * </Popover>\n */\nexport const Popover = RadixPopover.Root;\n","import * as RadixToast from '@radix-ui/react-toast';\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../../utils/cn';\n\nexport type ToastVariant = 'default' | 'info' | 'ok' | 'warn' | 'err';\n\nexport interface ToastInput {\n /** Optional ID; auto-generated when omitted. Useful for `dismiss(id)`. */\n id?: string;\n variant?: ToastVariant;\n title: ReactNode;\n description?: ReactNode;\n /** Inline action — typically a Button. */\n action?: ReactNode;\n /** Auto-dismiss after N ms. Default 4000. Set to 0 to require manual dismiss. */\n duration?: number;\n}\n\ninterface ToastEntry extends ToastInput {\n id: string;\n}\n\ninterface ToastContextValue {\n toast: (t: ToastInput) => string;\n dismiss: (id: string) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nconst variantIcon: Record<ToastVariant, string> = {\n default: '●',\n info: 'ℹ',\n ok: '✓',\n warn: '!',\n err: '×',\n};\n\nconst variantTextColor: Record<ToastVariant, string> = {\n default: 'text-text-dim',\n info: 'text-accent',\n ok: 'text-ok',\n warn: 'text-warn',\n err: 'text-err',\n};\n\nconst variantBorderLeft: Record<ToastVariant, string> = {\n default: 'border-l-border',\n info: 'border-l-accent',\n ok: 'border-l-ok',\n warn: 'border-l-warn',\n err: 'border-l-err',\n};\n\n/**\n * Wrap your app once at the root. Components inside can call `useToast()` to\n * push transient messages from anywhere.\n */\nexport function ToastProvider({ children }: { children: ReactNode }) {\n const [toasts, setToasts] = useState<ToastEntry[]>([]);\n\n const toast = useCallback((t: ToastInput) => {\n const id = t.id ?? Math.random().toString(36).slice(2);\n setToasts((prev) => [...prev, { ...t, id }]);\n return id;\n }, []);\n\n const dismiss = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id));\n }, []);\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n <RadixToast.Provider swipeDirection=\"right\">\n {children}\n {toasts.map((t) => (\n <ToastCard key={t.id} toast={t} onDismiss={() => dismiss(t.id)} />\n ))}\n <RadixToast.Viewport className=\"fixed right-5 bottom-5 z-[70] flex w-[380px] max-w-[calc(100vw-40px)] flex-col gap-2 outline-none\" />\n </RadixToast.Provider>\n </ToastContext.Provider>\n );\n}\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error('useToast must be inside <ToastProvider>');\n return ctx;\n}\n\ninterface ToastCardProps {\n toast: ToastEntry;\n onDismiss: () => void;\n}\n\nexport const ToastCard = forwardRef<HTMLLIElement, ToastCardProps>(function ToastCard(\n { toast, onDismiss },\n ref,\n) {\n const variant = toast.variant ?? 'default';\n return (\n <RadixToast.Root\n ref={ref}\n duration={toast.duration ?? 4000}\n onOpenChange={(open) => {\n if (!open) onDismiss();\n }}\n className={cn(\n 'bg-panel border-border pointer-events-auto rounded-md border border-l-[2px] p-3 shadow-lg',\n 'flex items-start gap-[10px]',\n 'data-[state=open]:animate-[ship-toast-in_220ms_var(--easing-out)]',\n variantBorderLeft[variant],\n )}\n >\n <span className={cn('mt-px text-[14px] leading-none', variantTextColor[variant])}>\n {variantIcon[variant]}\n </span>\n <div className=\"min-w-0 flex-1\">\n <RadixToast.Title className=\"text-text text-[13px] font-medium\">\n {toast.title}\n </RadixToast.Title>\n {toast.description && (\n <RadixToast.Description className=\"text-text-muted mt-[2px] text-[12px] leading-[1.5]\">\n {toast.description}\n </RadixToast.Description>\n )}\n {toast.action && <div className=\"mt-2\">{toast.action}</div>}\n </div>\n <RadixToast.Close\n aria-label=\"Dismiss\"\n className=\"text-text-dim hover:text-text -mt-px text-[15px] leading-none\"\n >\n ×\n </RadixToast.Close>\n </RadixToast.Root>\n );\n});\n\nToastCard.displayName = 'ToastCard';\n","import * as RadixTooltip from '@radix-ui/react-tooltip';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Tooltip — small, transient label that appears on hover/focus.\n *\n * Wrap your app once in `<TooltipProvider>` (Radix's provider) for shared delay\n * configuration; a single tooltip can be used standalone via `<Tooltip>` shorthand.\n */\n\nexport const TooltipProvider = RadixTooltip.Provider;\nexport const TooltipRoot = RadixTooltip.Root;\nexport const TooltipTrigger = RadixTooltip.Trigger;\nexport const TooltipPortal = RadixTooltip.Portal;\nexport const TooltipArrow = RadixTooltip.Arrow;\n\nexport const TooltipContent = forwardRef<HTMLDivElement, RadixTooltip.TooltipContentProps>(\n function TooltipContent({ className, sideOffset = 6, ...props }, ref) {\n return (\n <RadixTooltip.Portal>\n <RadixTooltip.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'pointer-events-none z-[60] rounded-sm px-2 py-[5px] text-[11px] whitespace-nowrap',\n 'bg-text text-bg',\n 'data-[state=delayed-open]:animate-[ship-pop-in_120ms_var(--easing-out)]',\n className,\n )}\n {...props}\n />\n </RadixTooltip.Portal>\n );\n },\n);\n\nTooltipContent.displayName = 'TooltipContent';\n\nexport interface TooltipProps {\n /** Tooltip text/content. */\n content: ReactNode;\n /** Trigger element — usually a Button or IconButton. */\n children: ReactNode;\n /** Side: top (default) | right | bottom | left. */\n side?: RadixTooltip.TooltipContentProps['side'];\n /** Open/close delay in ms (overrides provider default). */\n delayDuration?: number;\n}\n\n/**\n * One-liner tooltip wrapper. Wraps a trigger child with the full Radix stack.\n * For composition (multiple triggers in a list), use the lower-level exports.\n */\nexport function Tooltip({ content, children, side = 'top', delayDuration = 400 }: TooltipProps) {\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <TooltipRoot>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side}>{content}</TooltipContent>\n </TooltipRoot>\n </TooltipProvider>\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Alert — inline messaging block. Four tones (info / ok / warn / err) with a\n * matching glyph, a left accent rule, and an optional dismiss action.\n *\n * For interrupting alerts (errors that need acknowledgment) use AlertDialog.\n * For transient feedback use Toast.\n */\n\nexport type AlertVariant = 'info' | 'ok' | 'warn' | 'err';\n\nconst alertStyles = cva('flex items-start gap-3 rounded-base border bg-panel p-3 text-[13px]', {\n variants: {\n variant: {\n info: 'border-border border-l-2 border-l-accent',\n ok: 'border-border border-l-2 border-l-ok',\n warn: 'border-border border-l-2 border-l-warn',\n err: 'border-border border-l-2 border-l-err',\n },\n },\n defaultVariants: { variant: 'info' },\n});\n\nconst iconColorClass: Record<AlertVariant, string> = {\n info: 'text-accent',\n ok: 'text-ok',\n warn: 'text-warn',\n err: 'text-err',\n};\n\nconst defaultGlyph: Record<AlertVariant, string> = {\n info: 'ℹ',\n ok: '✓',\n warn: '!',\n err: '×',\n};\n\nexport interface AlertProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, VariantProps<typeof alertStyles> {\n /** Bold title text. */\n title?: ReactNode;\n /** Body description. */\n description?: ReactNode;\n /** Icon override; defaults to a glyph matched to the variant. */\n icon?: ReactNode;\n /** Optional trailing actions (rendered to the right of the description). */\n action?: ReactNode;\n}\n\nexport const Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n { variant = 'info', title, description, icon, action, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n role={variant === 'err' || variant === 'warn' ? 'alert' : 'status'}\n className={cn(alertStyles({ variant }), className)}\n {...props}\n >\n <span\n aria-hidden\n className={cn('mt-[1px] text-[14px] leading-none', iconColorClass[variant!])}\n >\n {icon ?? defaultGlyph[variant!]}\n </span>\n <div className=\"min-w-0 flex-1\">\n {title && <div className=\"font-medium\">{title}</div>}\n {description && <div className=\"text-text-muted mt-[2px] text-[12px]\">{description}</div>}\n {children}\n </div>\n {action && <div className=\"ml-1 shrink-0\">{action}</div>}\n </div>\n );\n});\n\nAlert.displayName = 'Alert';\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Banner — top-of-page notice. Spans the full width of its container, uses a\n * tinted background derived from the variant color, and supports `sticky`\n * positioning so it stays at the top of the viewport on scroll.\n */\n\nexport type BannerVariant = 'info' | 'ok' | 'warn' | 'err';\n\nconst bannerStyles = cva(\n 'flex items-center gap-[10px] border-b border-border px-[14px] py-2 text-[12px]',\n {\n variants: {\n variant: {\n info: 'bg-[color-mix(in_oklab,var(--color-accent),transparent_82%)] text-accent',\n ok: 'bg-[color-mix(in_oklab,var(--color-ok),transparent_82%)] text-ok',\n warn: 'bg-[color-mix(in_oklab,var(--color-warn),transparent_82%)] text-warn',\n err: 'bg-[color-mix(in_oklab,var(--color-err),transparent_82%)] text-err',\n },\n sticky: {\n true: 'sticky top-0 z-30',\n false: '',\n },\n },\n defaultVariants: { variant: 'info', sticky: false },\n },\n);\n\nconst defaultGlyph: Record<BannerVariant, string> = {\n info: '✦',\n ok: '✓',\n warn: '!',\n err: '×',\n};\n\nexport interface BannerProps\n extends HTMLAttributes<HTMLDivElement>, VariantProps<typeof bannerStyles> {\n /** Override the leading glyph. */\n icon?: ReactNode;\n /** Optional trailing action (e.g., a link). Rendered with `ml-auto`. */\n action?: ReactNode;\n}\n\nexport const Banner = forwardRef<HTMLDivElement, BannerProps>(function Banner(\n { variant = 'info', sticky, icon, action, className, children, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n role={variant === 'err' || variant === 'warn' ? 'alert' : 'status'}\n className={cn(bannerStyles({ variant, sticky }), className)}\n {...props}\n >\n <span aria-hidden className=\"leading-none\">\n {icon ?? defaultGlyph[variant!]}\n </span>\n <div className=\"min-w-0 flex-1\">{children}</div>\n {action && <div className=\"ml-auto\">{action}</div>}\n </div>\n );\n});\n\nBanner.displayName = 'Banner';\n","import {\n Children,\n forwardRef,\n isValidElement,\n type AnchorHTMLAttributes,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Breadcrumbs — composed of `<Crumb>` children. The last crumb is treated as\n * the current page (rendered as plain text with `aria-current=\"page\"`); earlier\n * crumbs render as links if `href` is provided. Pass `separator` to swap the\n * default `/` divider.\n */\n\nexport interface BreadcrumbsProps extends HTMLAttributes<HTMLElement> {\n /** Element to render between crumbs. Defaults to a dim `/`. */\n separator?: ReactNode;\n}\n\nexport const Breadcrumbs = forwardRef<HTMLElement, BreadcrumbsProps>(function Breadcrumbs(\n { separator = '/', className, children, ...props },\n ref,\n) {\n const crumbs = Children.toArray(children).filter(isValidElement) as ReactElement<CrumbProps>[];\n const last = crumbs.length - 1;\n return (\n <nav ref={ref} aria-label=\"Breadcrumb\" className={cn('text-[13px]', className)} {...props}>\n <ol className=\"text-text-muted flex flex-wrap items-center gap-[6px]\">\n {crumbs.map((crumb, i) => {\n const isCurrent = i === last;\n return (\n <li key={i} className=\"inline-flex items-center gap-[6px]\">\n {/* eslint-disable-next-line @typescript-eslint/no-explicit-any */}\n {isCurrent ? <Crumb {...(crumb.props as any)} current /> : crumb}\n {!isCurrent && (\n <span aria-hidden className=\"text-text-dim\">\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n});\n\nBreadcrumbs.displayName = 'Breadcrumbs';\n\nexport interface CrumbProps extends AnchorHTMLAttributes<HTMLAnchorElement> {\n /** Marks this crumb as the current page — disables the link and applies emphasis styling. */\n current?: boolean;\n}\n\nexport const Crumb = forwardRef<HTMLAnchorElement, CrumbProps>(function Crumb(\n { current, className, href, children, ...props },\n ref,\n) {\n if (current) {\n return (\n <span aria-current=\"page\" className={cn('text-text', className)}>\n {children}\n </span>\n );\n }\n return (\n <a\n ref={ref}\n href={href ?? '#'}\n className={cn('hover:text-text transition-colors duration-(--duration-micro)', className)}\n {...props}\n >\n {children}\n </a>\n );\n});\n\nCrumb.displayName = 'Crumb';\n","import {\n forwardRef,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type ReactNode,\n} from 'react';\n\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { useKeyboardList } from '../../hooks/useKeyboardList';\nimport { useOutsideClick } from '../../hooks/useOutsideClick';\nimport { cn } from '../../utils/cn';\n\n/**\n * Combobox — text input with an attached, type-to-filter listbox. Implements\n * the WAI-ARIA combobox pattern (input owns focus; listbox is referenced via\n * aria-controls; highlighted option via aria-activedescendant).\n *\n * Selection (`value`) and the visible query are independent. Selecting an\n * option syncs the query to the option's label so the user sees what was\n * picked; subsequent typing reopens the list and re-filters.\n */\n\nexport type ComboboxOption =\n | string\n | {\n value: string;\n label?: ReactNode;\n description?: ReactNode;\n /** Disable selection without removing the option from the list. */\n disabled?: boolean;\n };\n\nexport interface ComboboxProps {\n /** Available options. Strings are normalized to `{ value, label: value }`. */\n options: ReadonlyArray<ComboboxOption>;\n /** Controlled selected option value. */\n value?: string;\n /** Default selected value (uncontrolled). */\n defaultValue?: string;\n /** Fires with the option's `value` when a selection is committed. */\n onValueChange?: (value: string) => void;\n /** Controlled query. */\n query?: string;\n /** Default query (uncontrolled). */\n defaultQuery?: string;\n /** Fires whenever the query changes. */\n onQueryChange?: (query: string) => void;\n placeholder?: string;\n /** Custom matcher. Default: case-insensitive substring on label/description. */\n filter?: (option: NormalizedOption, query: string) => boolean;\n /** Empty-state node rendered when filtering yields nothing. */\n emptyState?: ReactNode;\n /** Pixel or CSS width of the wrapper. Default 260. */\n width?: number | string;\n disabled?: boolean;\n name?: string;\n id?: string;\n 'aria-label'?: string;\n}\n\nexport interface NormalizedOption {\n value: string;\n label: ReactNode;\n description?: ReactNode;\n searchText: string;\n disabled?: boolean;\n}\n\nfunction normalize(option: ComboboxOption): NormalizedOption {\n if (typeof option === 'string') {\n return { value: option, label: option, searchText: option.toLowerCase() };\n }\n const labelString =\n typeof option.label === 'string'\n ? option.label\n : typeof option.label === 'undefined'\n ? option.value\n : '';\n const descriptionString = typeof option.description === 'string' ? option.description : '';\n return {\n value: option.value,\n label: option.label ?? option.value,\n description: option.description,\n searchText: `${labelString} ${descriptionString}`.toLowerCase(),\n disabled: option.disabled,\n };\n}\n\nconst defaultFilter = (option: NormalizedOption, query: string) =>\n option.searchText.includes(query.toLowerCase());\n\nexport const Combobox = forwardRef<HTMLInputElement, ComboboxProps>(function Combobox(\n {\n options,\n value: valueProp,\n defaultValue,\n onValueChange,\n query: queryProp,\n defaultQuery,\n onQueryChange,\n placeholder,\n filter = defaultFilter,\n emptyState,\n width = 260,\n disabled,\n name,\n id,\n 'aria-label': ariaLabel,\n },\n ref,\n) {\n const reactId = useId();\n const listboxId = `${id ?? reactId}-listbox`;\n const inputId = id ?? `${reactId}-input`;\n\n const normalized = useMemo(() => options.map(normalize), [options]);\n\n const [value, setValue] = useControllableState<string>({\n value: valueProp,\n defaultValue,\n onChange: onValueChange,\n });\n\n const initialQuery = useMemo(() => {\n if (defaultQuery !== undefined) return defaultQuery;\n if (defaultValue !== undefined) {\n const opt = normalized.find((o) => o.value === defaultValue);\n if (opt && typeof opt.label === 'string') return opt.label;\n }\n return '';\n }, [defaultQuery, defaultValue, normalized]);\n\n const [query, setQuery] = useControllableState<string>({\n value: queryProp,\n defaultValue: initialQuery,\n onChange: onQueryChange,\n });\n\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n useOutsideClick(wrapperRef, () => setOpen(false));\n\n const filtered = useMemo(\n () => (query ? normalized.filter((o) => filter(o, query)) : normalized),\n [normalized, query, filter],\n );\n\n const { cursor, setCursor, onKeyDown } = useKeyboardList({\n count: filtered.length,\n defaultCursor: 0,\n onSelect: (i) => {\n const item = filtered[i];\n if (item && !item.disabled) commit(item);\n },\n });\n\n useEffect(() => {\n setCursor(0);\n }, [query, setCursor]);\n\n function commit(option: NormalizedOption) {\n setValue(option.value);\n if (typeof option.label === 'string') setQuery(option.label);\n setOpen(false);\n }\n\n const handleKey = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Escape') {\n setOpen(false);\n return;\n }\n if (!open && (event.key === 'ArrowDown' || event.key === 'ArrowUp')) {\n setOpen(true);\n }\n onKeyDown(event);\n };\n\n const handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.relatedTarget as Node | null)) {\n setOpen(false);\n }\n };\n\n return (\n <div ref={wrapperRef} className=\"relative\" style={{ width }}>\n <input\n ref={ref}\n id={inputId}\n name={name}\n type=\"text\"\n role=\"combobox\"\n autoComplete=\"off\"\n aria-autocomplete=\"list\"\n aria-expanded={open}\n aria-controls={listboxId}\n aria-activedescendant={\n open && filtered.length > 0 ? `${listboxId}-option-${cursor}` : undefined\n }\n aria-label={ariaLabel}\n disabled={disabled}\n placeholder={placeholder}\n value={query ?? ''}\n onChange={(e) => {\n setQuery(e.target.value);\n setOpen(true);\n if (value !== undefined) setValue('');\n }}\n onFocus={() => setOpen(true)}\n onBlur={handleBlur}\n onKeyDown={handleKey}\n className={cn(\n 'border-border bg-panel text-text block w-full rounded-md border px-3 py-2 text-[13px] outline-none',\n 'transition-[border,box-shadow] duration-(--duration-micro)',\n 'placeholder:text-text-dim',\n 'focus-visible:border-accent focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n )}\n />\n {open && (\n <ul\n id={listboxId}\n role=\"listbox\"\n aria-label={ariaLabel ?? 'Suggestions'}\n className={cn(\n 'absolute top-full right-0 left-0 z-30 mt-1 max-h-[220px] overflow-auto',\n 'border-border bg-panel rounded-md border p-1 shadow-lg',\n )}\n >\n {filtered.length === 0 ? (\n <li className=\"text-text-dim px-2 py-3 text-center text-[12px]\" role=\"presentation\">\n {emptyState ?? 'No matches'}\n </li>\n ) : (\n filtered.map((option, i) => {\n const isActive = i === cursor;\n return (\n <li\n key={option.value}\n id={`${listboxId}-option-${i}`}\n role=\"option\"\n aria-selected={isActive}\n aria-disabled={option.disabled || undefined}\n onMouseEnter={() => setCursor(i)}\n onMouseDown={(e) => {\n e.preventDefault(); // keep focus on input\n if (!option.disabled) commit(option);\n }}\n className={cn(\n 'text-text cursor-pointer rounded-sm px-[10px] py-2 text-[12px]',\n isActive && 'bg-accent-dim text-accent',\n option.disabled && 'pointer-events-none opacity-40',\n )}\n >\n <div>{option.label}</div>\n {option.description && (\n <div className=\"text-text-dim text-[11px]\">{option.description}</div>\n )}\n </li>\n );\n })\n )}\n </ul>\n )}\n {name && <input type=\"hidden\" name={name} value={value ?? ''} readOnly />}\n </div>\n );\n});\n\nCombobox.displayName = 'Combobox';\n","import * as RadixDialog from '@radix-ui/react-dialog';\nimport { forwardRef, useEffect, useMemo, type ReactNode } from 'react';\n\nimport { useKeyboardList } from '../../hooks/useKeyboardList';\nimport { cn } from '../../utils/cn';\n\n/**\n * CommandPalette — keyboard-driven command launcher. Built on Radix Dialog\n * (focus trap, Esc, scroll lock for free) with a controlled query input,\n * grouped results, and arrow-key navigation provided by `useKeyboardList`.\n *\n * The component is presentation-only over its results: the consumer owns the\n * query state and is responsible for filtering. Pass already-matched groups\n * via `groups`. For the common substring case, `filterCommandItems(query, …)`\n * is exported as a one-liner.\n */\n\nexport interface CommandPaletteItem {\n /** Stable id passed back to `onSelect`. */\n id: string;\n /** Visible label / title. */\n label: ReactNode;\n /** Secondary line beneath the label. */\n description?: ReactNode;\n /** Leading glyph or icon node. */\n glyph?: ReactNode;\n /** Trailing hint, often a kbd shortcut. */\n trailing?: ReactNode;\n /** Lower-cased haystack used by `filterCommandItems`. Defaults to `label + description`. */\n searchText?: string;\n}\n\nexport interface CommandPaletteGroup {\n /** Group heading label. */\n label?: ReactNode;\n items: ReadonlyArray<CommandPaletteItem>;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n query: string;\n onQueryChange: (query: string) => void;\n /** Already-matched, ready-to-render groups. Use `filterCommandItems` for the simple case. */\n groups: ReadonlyArray<CommandPaletteGroup>;\n /** Called with the item id when the user picks an item (click or Enter). */\n onSelect: (id: string) => void;\n /** Placeholder text for the search input. */\n placeholder?: string;\n /** Footer hint row (kbd legend). Accepts free-form children. */\n footer?: ReactNode;\n /** Empty-state node when groups resolve to zero items. */\n emptyState?: ReactNode;\n /** Pixel width of the palette panel. Default 540. */\n width?: number;\n}\n\nfunction flatItems(groups: ReadonlyArray<CommandPaletteGroup>): CommandPaletteItem[] {\n return groups.flatMap((g) => g.items as CommandPaletteItem[]);\n}\n\nexport const CommandPalette = forwardRef<HTMLDivElement, CommandPaletteProps>(\n function CommandPalette(\n {\n open,\n onOpenChange,\n query,\n onQueryChange,\n groups,\n onSelect,\n placeholder = 'Search…',\n footer,\n emptyState,\n width = 540,\n },\n ref,\n ) {\n const flat = useMemo(() => flatItems(groups), [groups]);\n const { cursor, setCursor, onKeyDown } = useKeyboardList({\n count: flat.length,\n defaultCursor: 0,\n onSelect: (i) => {\n const item = flat[i];\n if (item) onSelect(item.id);\n },\n });\n\n // Reset the cursor whenever the query or groups shape changes.\n useEffect(() => {\n setCursor(0);\n }, [query, groups, setCursor]);\n\n return (\n <RadixDialog.Root open={open} onOpenChange={onOpenChange}>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/55 backdrop-blur-[4px]',\n 'data-[state=open]:animate-[ship-fade-in_150ms_ease]',\n )}\n />\n <RadixDialog.Content\n ref={ref}\n aria-label=\"Command palette\"\n aria-describedby={undefined}\n style={{ width }}\n className={cn(\n 'fixed top-[20%] left-1/2 z-[51] max-w-[calc(100%-40px)] -translate-x-1/2',\n 'border-border-strong bg-panel overflow-hidden rounded-xl border shadow-lg',\n 'outline-none data-[state=open]:animate-[ship-dialog-in_180ms_var(--easing-out)]',\n )}\n onKeyDown={onKeyDown}\n >\n <RadixDialog.Title className=\"sr-only\">Command palette</RadixDialog.Title>\n <div className=\"border-border flex items-center gap-[10px] border-b px-4 py-[14px]\">\n <span aria-hidden className=\"text-text-dim\">\n ⌕\n </span>\n <input\n // Command palettes are launched via keyboard (⌘K); autofocusing\n // the search input is the entire point of the pattern.\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus\n type=\"text\"\n value={query}\n onChange={(e) => onQueryChange(e.target.value)}\n placeholder={placeholder}\n aria-label=\"Search\"\n aria-autocomplete=\"list\"\n className=\"text-text placeholder:text-text-dim flex-1 border-0 bg-transparent text-[14px] outline-none\"\n />\n <span className=\"border-border text-text-dim rounded-xs border px-[6px] py-[2px] font-mono text-[10px]\">\n ESC\n </span>\n </div>\n <div className=\"min-h-[220px] p-2\" role=\"listbox\" aria-label=\"Results\">\n {flat.length === 0 ? (\n (emptyState ?? (\n <div className=\"text-text-dim px-3 py-5 text-center text-[12px]\">No matches</div>\n ))\n ) : (\n <CommandGroups\n groups={groups}\n cursor={cursor}\n setCursor={setCursor}\n onSelect={onSelect}\n />\n )}\n </div>\n {footer && (\n <div className=\"border-border text-text-dim flex gap-4 border-t px-[14px] py-[10px] font-mono text-[10px]\">\n {footer}\n </div>\n )}\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n },\n);\n\nCommandPalette.displayName = 'CommandPalette';\n\ninterface CommandGroupsProps {\n groups: ReadonlyArray<CommandPaletteGroup>;\n cursor: number;\n setCursor: (i: number) => void;\n onSelect: (id: string) => void;\n}\n\nfunction CommandGroups({ groups, cursor, setCursor, onSelect }: CommandGroupsProps) {\n let runningIndex = 0;\n return (\n <>\n {groups.map((group, gIdx) => {\n if (group.items.length === 0) return null;\n return (\n <div key={gIdx}>\n {group.label && (\n <div className=\"text-text-dim px-2 pt-2 pb-1 font-mono text-[9px] tracking-[1.4px] uppercase\">\n {group.label} · {group.items.length}\n </div>\n )}\n {group.items.map((item) => {\n const myIndex = runningIndex++;\n const isActive = cursor === myIndex;\n return (\n <button\n key={item.id}\n type=\"button\"\n role=\"option\"\n aria-selected={isActive}\n onClick={() => onSelect(item.id)}\n onMouseEnter={() => setCursor(myIndex)}\n className={cn(\n 'flex w-full cursor-pointer items-center gap-[10px] rounded-md border-0 bg-transparent px-[10px] py-2 text-left outline-none',\n isActive ? 'bg-accent-dim text-accent' : 'text-text hover:bg-panel-2',\n )}\n >\n {item.glyph != null && (\n <span\n aria-hidden\n className={cn(\n 'font-mono text-[12px]',\n isActive ? 'text-accent' : 'text-text-muted',\n )}\n >\n {item.glyph}\n </span>\n )}\n <span className=\"min-w-0 flex-1\">\n <span className=\"block truncate text-[13px]\">{item.label}</span>\n {item.description && (\n <span className=\"text-text-dim block truncate text-[11px]\">\n {item.description}\n </span>\n )}\n </span>\n {item.trailing && (\n <span className=\"text-text-dim font-mono text-[10px]\">{item.trailing}</span>\n )}\n </button>\n );\n })}\n </div>\n );\n })}\n </>\n );\n}\n\n/**\n * Substring filter helper. Lower-cases `query` and matches any item whose\n * `searchText` (or computed `label + description`) contains it. Preserves\n * groups; drops empty ones.\n */\nexport function filterCommandItems(\n query: string,\n groups: ReadonlyArray<CommandPaletteGroup>,\n): CommandPaletteGroup[] {\n const q = query.trim().toLowerCase();\n if (!q) return groups.map((g) => ({ ...g, items: [...g.items] }));\n return groups\n .map((g) => ({\n ...g,\n items: g.items.filter((item) => {\n const haystack =\n item.searchText ??\n `${typeof item.label === 'string' ? item.label : ''} ${typeof item.description === 'string' ? item.description : ''}`;\n return haystack.toLowerCase().includes(q);\n }),\n }))\n .filter((g) => g.items.length > 0);\n}\n","import { type Ref, useEffect, useMemo, useRef, type ReactNode } from 'react';\n\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { cn } from '../../utils/cn';\n\n/**\n * DataTable — generic, sortable, selectable table. The component is a\n * \"headless-with-defaults\": you bring your data and column definitions, the\n * table handles sort state, selection (with indeterminate \"select-all\"),\n * sticky header, and basic ARIA.\n *\n * Sort: if a column declares an `accessor`, clicking its header toggles the\n * direction. Selection: pass `selectable` to render a checkbox column with a\n * select-all in the header.\n */\n\nexport interface DataTableColumn<T> {\n /** Stable id used for sorting state. */\n key: string;\n /** Header content. */\n header: ReactNode;\n /** Custom cell renderer. Defaults to the accessor's stringified value. */\n cell?: (row: T) => ReactNode;\n /** Returns the sort key for `row`. When omitted, the column is not sortable. */\n accessor?: (row: T) => string | number;\n align?: 'left' | 'right' | 'center';\n /** CSS width — string or number (px). */\n width?: number | string;\n}\n\nexport interface DataTableSort {\n key: string;\n direction: 'asc' | 'desc';\n}\n\nexport interface DataTableProps<T> {\n data: ReadonlyArray<T>;\n columns: ReadonlyArray<DataTableColumn<T>>;\n /** Returns a stable id for `row`. Required for selection + React keys. */\n rowKey: (row: T) => string;\n /** Controlled sort state. */\n sort?: DataTableSort | null;\n defaultSort?: DataTableSort | null;\n onSortChange?: (sort: DataTableSort | null) => void;\n /** Show the leading checkbox column. */\n selectable?: boolean;\n /** Controlled selection. */\n selected?: ReadonlySet<string>;\n defaultSelected?: ReadonlyArray<string>;\n onSelectionChange?: (selection: Set<string>) => void;\n /** Rendered when `data` is empty. */\n emptyState?: ReactNode;\n /** Sticky table header (requires the table to live in a scroll container). */\n stickyHeader?: boolean;\n /** Caption for screen readers. */\n caption?: ReactNode;\n className?: string;\n}\n\nconst alignClass = {\n left: 'text-left',\n right: 'text-right',\n center: 'text-center',\n} as const;\n\n// Note: this is a generic component. The forwardRef helper loses the generic\n// type, so we keep it as a plain function and accept an optional ref via props.\nexport function DataTable<T>(props: DataTableProps<T> & { ref?: Ref<HTMLTableElement> }) {\n const {\n data,\n columns,\n rowKey,\n sort: sortProp,\n defaultSort,\n onSortChange,\n selectable,\n selected: selectedProp,\n defaultSelected,\n onSelectionChange,\n emptyState,\n stickyHeader,\n caption,\n className,\n ref,\n } = props;\n\n const [sort, setSort] = useControllableState<DataTableSort | null>({\n value: sortProp,\n defaultValue: defaultSort ?? null,\n onChange: onSortChange,\n });\n\n const [selected, setSelected] = useControllableState<Set<string>>({\n value: selectedProp instanceof Set ? selectedProp : (selectedProp as Set<string> | undefined),\n defaultValue: new Set(defaultSelected ?? []),\n onChange: onSelectionChange,\n });\n\n const sortableMap = useMemo(() => {\n const m = new Map<string, DataTableColumn<T>>();\n for (const c of columns) if (c.accessor) m.set(c.key, c);\n return m;\n }, [columns]);\n\n const sortedData = useMemo(() => {\n if (!sort) return [...data];\n const col = sortableMap.get(sort.key);\n if (!col || !col.accessor) return [...data];\n const factor = sort.direction === 'asc' ? 1 : -1;\n return [...data].sort((a, b) => {\n const av = col.accessor!(a);\n const bv = col.accessor!(b);\n if (typeof av === 'number' && typeof bv === 'number') return (av - bv) * factor;\n return String(av).localeCompare(String(bv)) * factor;\n });\n }, [data, sort, sortableMap]);\n\n const allIds = useMemo(() => sortedData.map(rowKey), [sortedData, rowKey]);\n const allSelected = allIds.length > 0 && allIds.every((id) => selected!.has(id));\n const someSelected = !allSelected && allIds.some((id) => selected!.has(id));\n\n const headerCheckRef = useRef<HTMLInputElement>(null);\n useEffect(() => {\n if (headerCheckRef.current) headerCheckRef.current.indeterminate = someSelected;\n }, [someSelected]);\n\n const toggleSort = (key: string) => {\n const col = sortableMap.get(key);\n if (!col) return;\n setSort((prev) => {\n if (prev?.key !== key) return { key, direction: 'asc' };\n if (prev.direction === 'asc') return { key, direction: 'desc' };\n return null;\n });\n };\n\n const toggleAll = () => {\n setSelected((prev) => {\n const next = new Set(prev ?? []);\n if (allSelected) {\n for (const id of allIds) next.delete(id);\n } else {\n for (const id of allIds) next.add(id);\n }\n return next;\n });\n };\n\n const toggleRow = (id: string) => {\n setSelected((prev) => {\n const next = new Set(prev ?? []);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n };\n\n return (\n <table ref={ref} className={cn('w-full border-collapse text-[12px]', className)}>\n {caption && <caption className=\"sr-only\">{caption}</caption>}\n <thead className={cn('bg-panel-2', stickyHeader && 'sticky top-0 z-10')}>\n <tr>\n {selectable && (\n <th scope=\"col\" className=\"border-border w-8 border-b px-3 py-2 text-left\">\n <input\n ref={headerCheckRef}\n type=\"checkbox\"\n aria-label=\"Select all rows\"\n checked={allSelected}\n onChange={toggleAll}\n className=\"cursor-pointer accent-[var(--color-accent)]\"\n />\n </th>\n )}\n {columns.map((col) => {\n const sortable = !!col.accessor;\n const isSorted = sort?.key === col.key;\n const ariaSort = !sortable\n ? undefined\n : isSorted\n ? sort?.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n const align = col.align ?? 'left';\n return (\n <th\n key={col.key}\n scope=\"col\"\n aria-sort={ariaSort}\n onClick={sortable ? () => toggleSort(col.key) : undefined}\n style={col.width != null ? { width: col.width } : undefined}\n className={cn(\n 'border-border border-b px-3 py-2 font-mono text-[10px] font-medium tracking-[1.4px] uppercase select-none',\n alignClass[align],\n sortable && 'cursor-pointer',\n isSorted ? 'text-accent' : 'text-text-dim',\n )}\n >\n {col.header}\n {sortable && isSorted && (\n <span aria-hidden className=\"ml-1\">\n {sort?.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {sortedData.length === 0 && (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n className=\"text-text-dim px-3 py-8 text-center\"\n >\n {emptyState ?? 'No data'}\n </td>\n </tr>\n )}\n {sortedData.map((row) => {\n const id = rowKey(row);\n const isSelected = selected!.has(id);\n return (\n <tr\n key={id}\n data-state={isSelected ? 'selected' : undefined}\n className={cn(\n 'border-border border-b transition-colors duration-(--duration-micro) last:border-0',\n isSelected ? 'bg-accent-dim/50' : 'hover:bg-panel-2',\n )}\n >\n {selectable && (\n <td className=\"px-3 py-[10px]\">\n <input\n type=\"checkbox\"\n aria-label={`Select row ${id}`}\n checked={isSelected}\n onChange={() => toggleRow(id)}\n className=\"cursor-pointer accent-[var(--color-accent)]\"\n />\n </td>\n )}\n {columns.map((col) => (\n <td key={col.key} className={cn('px-3 py-[10px]', alignClass[col.align ?? 'left'])}>\n {col.cell ? col.cell(row) : col.accessor ? String(col.accessor(row)) : null}\n </td>\n ))}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n}\n","import { forwardRef, useState, type HTMLAttributes } from 'react';\n\nimport { IconButton } from '../../components/Button/IconButton';\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { cn } from '../../utils/cn';\n\n/**\n * Calendar — single-month date grid. Displays the month named by\n * `month`/`year` (0-indexed month) and surfaces the selected date via\n * `selected` / `onSelect`.\n *\n * Uses native `Date` only (no external date lib). Days outside the current\n * month are not rendered (ShipIt's design uses leading whitespace, not\n * leading-/trailing-month grays).\n */\n\nconst MONTHS = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'April',\n 'May',\n 'June',\n 'July',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst DAYS = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];\n\nexport interface CalendarProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {\n /** Currently selected date. */\n selected?: Date;\n /** Default selected date (uncontrolled). */\n defaultSelected?: Date;\n /** Fires with the selected date. */\n onSelect?: (date: Date) => void;\n /** Currently visible month (0-indexed) and year. */\n month?: number;\n year?: number;\n /** Default visible month (0-indexed) and year (uncontrolled). */\n defaultMonth?: number;\n defaultYear?: number;\n /** Fires when the visible month changes. */\n onVisibleMonthChange?: (params: { month: number; year: number }) => void;\n /** Optional disable predicate. */\n isDateDisabled?: (date: Date) => boolean;\n}\n\nfunction isSameDay(a: Date | undefined, b: Date) {\n if (!a) return false;\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nexport const Calendar = forwardRef<HTMLDivElement, CalendarProps>(function Calendar(\n {\n selected,\n defaultSelected,\n onSelect,\n month: monthProp,\n year: yearProp,\n defaultMonth,\n defaultYear,\n onVisibleMonthChange,\n isDateDisabled,\n className,\n ...props\n },\n ref,\n) {\n const today = new Date();\n\n const [selectedDate, setSelectedDate] = useControllableState<Date>({\n value: selected,\n defaultValue: defaultSelected,\n onChange: onSelect,\n });\n\n const initialMonth = defaultMonth ?? defaultSelected?.getMonth() ?? today.getMonth();\n const initialYear = defaultYear ?? defaultSelected?.getFullYear() ?? today.getFullYear();\n const [internalMonth, setInternalMonth] = useState(initialMonth);\n const [internalYear, setInternalYear] = useState(initialYear);\n\n const month = monthProp ?? internalMonth;\n const year = yearProp ?? internalYear;\n const isControlled = monthProp !== undefined && yearProp !== undefined;\n\n const setVisible = (m: number, y: number) => {\n if (!isControlled) {\n setInternalMonth(m);\n setInternalYear(y);\n }\n onVisibleMonthChange?.({ month: m, year: y });\n };\n\n const goPrev = () => {\n const m = month === 0 ? 11 : month - 1;\n const y = month === 0 ? year - 1 : year;\n setVisible(m, y);\n };\n const goNext = () => {\n const m = month === 11 ? 0 : month + 1;\n const y = month === 11 ? year + 1 : year;\n setVisible(m, y);\n };\n\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n const firstDayOfMonth = new Date(year, month, 1).getDay();\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-label={`${MONTHS[month]} ${year}`}\n className={cn(\n 'rounded-base border-border bg-panel w-[280px] border p-4 shadow-lg',\n className,\n )}\n {...props}\n >\n <div className=\"mb-3 flex items-center justify-between\">\n <span className=\"text-[13px] font-medium\" aria-live=\"polite\">\n {MONTHS[month]} {year}\n </span>\n <div className=\"flex gap-1\">\n <IconButton\n size=\"sm\"\n variant=\"ghost\"\n icon=\"‹\"\n aria-label=\"Previous month\"\n onClick={goPrev}\n />\n <IconButton size=\"sm\" variant=\"ghost\" icon=\"›\" aria-label=\"Next month\" onClick={goNext} />\n </div>\n </div>\n <div className=\"grid grid-cols-7 gap-[2px]\">\n {DAYS.map((d, i) => (\n <div key={i} aria-hidden className=\"text-text-dim p-1 text-center font-mono text-[10px]\">\n {d}\n </div>\n ))}\n {Array.from({ length: firstDayOfMonth }).map((_, i) => (\n <div key={`pad-${i}`} aria-hidden />\n ))}\n {Array.from({ length: daysInMonth }).map((_, i) => {\n const d = i + 1;\n const date = new Date(year, month, d);\n const isSelected = isSameDay(selectedDate, date);\n const isToday = isSameDay(today, date);\n const disabled = isDateDisabled?.(date) ?? false;\n return (\n <button\n key={d}\n type=\"button\"\n disabled={disabled}\n aria-pressed={isSelected}\n aria-current={isToday ? 'date' : undefined}\n aria-label={date.toDateString()}\n onClick={() => setSelectedDate(date)}\n className={cn(\n 'cursor-pointer rounded-xs border-0 bg-transparent py-[6px] text-center text-[12px] outline-none',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-30',\n !isSelected && !disabled && 'text-text hover:bg-panel-2',\n isSelected && 'bg-accent text-on-accent font-semibold',\n !isSelected && isToday && 'border-border-strong border',\n )}\n >\n {d}\n </button>\n );\n })}\n </div>\n </div>\n );\n});\n\nCalendar.displayName = 'Calendar';\n","import * as RadixPopover from '@radix-ui/react-popover';\nimport { forwardRef, useState, type ReactNode } from 'react';\n\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { cn } from '../../utils/cn';\n\nimport { Calendar } from './Calendar';\n\n/**\n * DatePicker — a button-style trigger that opens a popover containing a\n * `Calendar`. Pass `value` / `onValueChange` for the selected date.\n */\n\nexport interface DatePickerProps {\n value?: Date;\n defaultValue?: Date;\n onValueChange?: (value: Date) => void;\n placeholder?: string;\n /** Format the selected date for display. Default: `toLocaleDateString()`. */\n format?: (date: Date) => string;\n /** Optional disable predicate forwarded to Calendar. */\n isDateDisabled?: (date: Date) => boolean;\n /** Pixel width of the trigger button. Default 200. */\n width?: number | string;\n disabled?: boolean;\n /** Content for the trigger when no date is selected. Defaults to `placeholder`. */\n emptyLabel?: ReactNode;\n 'aria-label'?: string;\n id?: string;\n name?: string;\n}\n\nconst defaultFormat = (d: Date) => d.toLocaleDateString();\n\nexport const DatePicker = forwardRef<HTMLButtonElement, DatePickerProps>(function DatePicker(\n {\n value: valueProp,\n defaultValue,\n onValueChange,\n placeholder = 'Pick a date',\n format = defaultFormat,\n isDateDisabled,\n width = 200,\n disabled,\n emptyLabel,\n 'aria-label': ariaLabel,\n id,\n name,\n },\n ref,\n) {\n const [open, setOpen] = useState(false);\n const [value, setValue] = useControllableState<Date>({\n value: valueProp,\n defaultValue,\n onChange: onValueChange,\n });\n\n return (\n <RadixPopover.Root open={open} onOpenChange={setOpen}>\n <RadixPopover.Trigger asChild>\n <button\n ref={ref}\n id={id}\n type=\"button\"\n disabled={disabled}\n aria-label={ariaLabel ?? placeholder}\n className={cn(\n 'border-border bg-panel text-text flex cursor-pointer items-center gap-2 rounded-md border px-3 py-2 text-left text-[13px] outline-none',\n 'transition-[border,box-shadow] duration-(--duration-micro)',\n 'hover:bg-panel-2',\n 'focus-visible:border-accent focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n )}\n style={{ width }}\n >\n <span aria-hidden className=\"text-text-dim\">\n ▢\n </span>\n <span className={cn('flex-1 truncate', !value && 'text-text-dim')}>\n {value ? format(value) : (emptyLabel ?? placeholder)}\n </span>\n </button>\n </RadixPopover.Trigger>\n <RadixPopover.Portal>\n <RadixPopover.Content\n align=\"start\"\n sideOffset={6}\n className=\"z-40 outline-none data-[state=open]:animate-[ship-pop-in_140ms_var(--easing-out)]\"\n >\n <Calendar\n selected={value}\n defaultMonth={value?.getMonth()}\n defaultYear={value?.getFullYear()}\n onSelect={(date) => {\n setValue(date);\n setOpen(false);\n }}\n isDateDisabled={isDateDisabled}\n />\n </RadixPopover.Content>\n </RadixPopover.Portal>\n {name && (\n <input type=\"hidden\" name={name} value={value ? value.toISOString() : ''} readOnly />\n )}\n </RadixPopover.Root>\n );\n});\n\nDatePicker.displayName = 'DatePicker';\n","import { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Dots — progress dots for carousels and onboarding tours. The current dot\n * widens into a pill (per the handoff spec); the rest stay circular.\n */\n\nexport interface DotsProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Total dot count. */\n total: number;\n /** Zero-based index of the active dot. */\n current: number;\n /** Optional click handler — when provided, dots become focusable buttons. */\n onChange?: (index: number) => void;\n /** Accessible label. Defaults to `Progress`. */\n 'aria-label'?: string;\n}\n\nexport const Dots = forwardRef<HTMLElement, DotsProps>(function Dots(\n { total, current, onChange, className, 'aria-label': ariaLabel = 'Progress', ...props },\n ref,\n) {\n const interactive = typeof onChange === 'function';\n return (\n <nav\n ref={ref}\n aria-label={ariaLabel}\n className={cn('inline-flex items-center gap-[6px]', className)}\n {...props}\n >\n {Array.from({ length: total }).map((_, i) => {\n const isActive = i === current;\n const sharedClass = cn(\n 'h-[6px] rounded-full transition-[width,background] duration-(--duration-micro)',\n isActive ? 'w-[18px] bg-accent' : 'w-[6px] bg-panel-2',\n );\n if (interactive) {\n return (\n <button\n key={i}\n type=\"button\"\n aria-label={`Go to slide ${i + 1}`}\n aria-current={isActive ? 'true' : undefined}\n onClick={() => onChange?.(i)}\n className={cn(\n sharedClass,\n 'cursor-pointer outline-none',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n !isActive && 'hover:bg-border-strong',\n )}\n />\n );\n }\n return <span key={i} aria-hidden className={sharedClass} />;\n })}\n </nav>\n );\n});\n\nDots.displayName = 'Dots';\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * EmptyState — placeholder for empty lists, no-results states, and error\n * surfaces. A 48×48 icon plate sits above a title + description and an\n * optional action area (button or chip stack).\n */\n\nconst plateStyles = cva('grid h-12 w-12 place-items-center rounded-base text-[22px]', {\n variants: {\n tone: {\n accent: 'bg-accent-dim text-accent',\n danger: 'bg-[color-mix(in_oklab,var(--color-err),transparent_85%)] text-err',\n muted: 'bg-panel-2 text-text-muted',\n },\n },\n defaultVariants: { tone: 'accent' },\n});\n\nexport interface EmptyStateProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, VariantProps<typeof plateStyles> {\n /** Glyph or icon node shown in the rounded plate. */\n icon?: ReactNode;\n /** Title heading. */\n title: ReactNode;\n /** Body description. */\n description?: ReactNode;\n /** Optional primary action (e.g., a Button) below the description. */\n action?: ReactNode;\n /** Optional list of chip-style suggestions instead of (or below) the action. */\n chips?: ReadonlyArray<{ label: ReactNode; onClick?: () => void }>;\n}\n\nexport const EmptyState = forwardRef<HTMLDivElement, EmptyStateProps>(function EmptyState(\n { icon, title, description, action, chips, tone, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-base border-border bg-panel flex flex-col items-center gap-[10px] border border-dashed p-6 text-center',\n className,\n )}\n {...props}\n >\n {icon != null && (\n <span aria-hidden className={plateStyles({ tone })}>\n {icon}\n </span>\n )}\n <div className=\"text-[14px] font-medium\">{title}</div>\n {description && (\n <div className=\"text-text-muted max-w-[260px] text-[12px] leading-[1.5]\">{description}</div>\n )}\n {chips && chips.length > 0 && (\n <div className=\"flex w-full flex-col gap-1\">\n {chips.map((c, i) => (\n <button\n key={i}\n type=\"button\"\n onClick={c.onClick}\n className={cn(\n 'border-border bg-panel-2 text-text-muted cursor-pointer rounded-md border px-[10px] py-[6px] text-[11px]',\n 'hover:border-border-strong hover:text-text outline-none',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n )}\n >\n {c.label}\n </button>\n ))}\n </div>\n )}\n {action}\n </div>\n );\n});\n\nEmptyState.displayName = 'EmptyState';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * FileChip — file attachment chip with thumb, name, size, optional progress\n * bar, and a remove affordance. The thumb defaults to the file extension; pass\n * `icon` to override.\n */\n\nexport interface FileChipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Filename to display. */\n name: string;\n /** Right-of-name label (size, status). Often `2.4 MB` or `failed`. */\n size?: ReactNode;\n /** When set, renders a progress bar at the bottom (0..100). Used for upload UX. */\n progress?: number;\n /** Replace the file-extension thumb. */\n icon?: ReactNode;\n /** When provided, renders a remove (×) button. */\n onRemove?: () => void;\n /** When true, signals an error state (red status text + red bar). */\n failed?: boolean;\n}\n\nfunction deriveExt(name: string) {\n const dot = name.lastIndexOf('.');\n if (dot < 0) return 'FILE';\n return name\n .slice(dot + 1)\n .slice(0, 4)\n .toUpperCase();\n}\n\nexport const FileChip = forwardRef<HTMLDivElement, FileChipProps>(function FileChip(\n { name, size, progress, icon, onRemove, failed, className, ...props },\n ref,\n) {\n const ext = deriveExt(name);\n const showProgress = typeof progress === 'number';\n const isComplete = showProgress && progress >= 100;\n\n return (\n <div\n ref={ref}\n className={cn(\n 'border-border bg-panel-2 flex max-w-[320px] items-center gap-[10px] rounded-md border px-3 py-2',\n className,\n )}\n {...props}\n >\n <span\n aria-hidden\n className=\"border-border bg-panel text-text-dim grid h-6 w-6 shrink-0 place-items-center rounded-xs border font-mono text-[9px]\"\n >\n {icon ?? ext}\n </span>\n <div className=\"min-w-0 flex-1\">\n <div className=\"truncate text-[12px] font-medium\">{name}</div>\n <div className={cn('font-mono text-[10px]', failed ? 'text-err' : 'text-text-dim')}>\n {size}\n {showProgress && !isComplete && <span> · {Math.round(progress)}%</span>}\n </div>\n {showProgress && !isComplete && (\n <div className=\"bg-panel mt-1 h-[2px] overflow-hidden rounded-full\">\n <div\n className={cn(\n 'h-full transition-[width] duration-(--duration-step)',\n failed ? 'bg-err' : 'bg-accent',\n )}\n style={{ width: `${Math.max(0, Math.min(100, progress))}%` }}\n />\n </div>\n )}\n </div>\n {onRemove && (\n <button\n type=\"button\"\n aria-label={`Remove ${name}`}\n onClick={onRemove}\n className={cn(\n 'text-text-dim cursor-pointer border-0 bg-transparent p-0 text-[14px] leading-none',\n 'hover:text-text focus-visible:ring-accent-dim rounded-xs outline-none focus-visible:ring-[3px]',\n )}\n >\n ×\n </button>\n )}\n </div>\n );\n});\n\nFileChip.displayName = 'FileChip';\n","import * as RadixMenubar from '@radix-ui/react-menubar';\nimport { forwardRef, type FC, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Menubar — desktop-style horizontal menu strip (File, Edit, View, …) built on\n * Radix Menubar. Owns ARIA + keyboard semantics; ShipIt owns styling.\n *\n * Compose with `<MenubarMenu>` per top-level entry. Inside each menu use\n * `<MenubarTrigger>` (the visible button), `<MenubarContent>` (the dropdown),\n * and `<MenuItem>` / `<MenuSeparator>` from the existing primitive surface.\n */\n\nexport const Menubar = forwardRef<HTMLDivElement, RadixMenubar.MenubarProps>(function Menubar(\n { className, ...props },\n ref,\n) {\n return (\n <RadixMenubar.Root\n ref={ref}\n className={cn(\n 'border-border bg-panel flex h-[30px] items-center gap-[2px] border-b px-3',\n className,\n )}\n {...props}\n />\n );\n});\n\nMenubar.displayName = 'Menubar';\n\nexport const MenubarMenu: FC<RadixMenubar.MenubarMenuProps> = RadixMenubar.Menu;\n\nexport const MenubarTrigger = forwardRef<HTMLButtonElement, RadixMenubar.MenubarTriggerProps>(\n function MenubarTrigger({ className, ...props }, ref) {\n return (\n <RadixMenubar.Trigger\n ref={ref}\n className={cn(\n 'text-text cursor-pointer rounded-xs border-0 bg-transparent px-[10px] py-1 text-[12px] outline-none',\n 'transition-colors duration-(--duration-micro)',\n 'data-[state=open]:bg-panel-2 hover:bg-panel-2',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nMenubarTrigger.displayName = 'MenubarTrigger';\n\nexport const MenubarContent = forwardRef<HTMLDivElement, RadixMenubar.MenubarContentProps>(\n function MenubarContent({ className, sideOffset = 6, align = 'start', ...props }, ref) {\n return (\n <RadixMenubar.Portal>\n <RadixMenubar.Content\n ref={ref}\n sideOffset={sideOffset}\n align={align}\n className={cn(\n 'border-border-strong bg-panel z-40 min-w-[180px] rounded-md border p-1 shadow-lg outline-none',\n 'data-[state=open]:animate-[ship-pop-in_140ms_var(--easing-out)]',\n className,\n )}\n {...props}\n />\n </RadixMenubar.Portal>\n );\n },\n);\n\nMenubarContent.displayName = 'MenubarContent';\n\nconst itemBase = cn(\n 'flex items-center gap-2 rounded-sm px-[10px] py-[6px] text-[12px] cursor-pointer outline-none',\n 'data-[highlighted]:bg-panel-2',\n 'data-[disabled]:opacity-40 data-[disabled]:cursor-not-allowed',\n);\n\nexport interface MenubarItemProps extends RadixMenubar.MenubarItemProps {\n /** Trailing hint — typically a kbd shortcut. */\n trailing?: ReactNode;\n /** Style as destructive (red). */\n destructive?: boolean;\n}\n\nexport const MenubarItem = forwardRef<HTMLDivElement, MenubarItemProps>(function MenubarItem(\n { trailing, destructive, className, children, ...props },\n ref,\n) {\n return (\n <RadixMenubar.Item\n ref={ref}\n className={cn(itemBase, destructive ? 'text-err' : 'text-text', className)}\n {...props}\n >\n <span className=\"flex-1\">{children}</span>\n {trailing && <span className=\"text-text-dim font-mono text-[10px]\">{trailing}</span>}\n </RadixMenubar.Item>\n );\n});\n\nMenubarItem.displayName = 'MenubarItem';\n\nexport const MenubarSeparator = forwardRef<HTMLDivElement, RadixMenubar.MenubarSeparatorProps>(\n function MenubarSeparator({ className, ...props }, ref) {\n return (\n <RadixMenubar.Separator\n ref={ref}\n className={cn('bg-border my-1 h-px', className)}\n {...props}\n />\n );\n },\n);\n\nMenubarSeparator.displayName = 'MenubarSeparator';\n","import { forwardRef, type HTMLAttributes } from 'react';\n\nimport { IconButton } from '../../components/Button/IconButton';\nimport { cn } from '../../utils/cn';\n\n/**\n * Pagination — page selector for paginated lists/tables. Renders prev/next\n * arrows plus a compact range of numbered pages. Use `siblings` to control how\n * many pages flank the current page; ellipses are inserted automatically.\n */\n\nexport interface PaginationProps extends Omit<HTMLAttributes<HTMLElement>, 'onChange'> {\n /** Currently selected page (1-indexed). */\n page: number;\n /** Total number of pages. */\n total: number;\n /** Called with the new page when the user clicks a page or arrow. */\n onPageChange: (page: number) => void;\n /** How many sibling pages to show on each side of the current page. Default 1. */\n siblings?: number;\n}\n\ntype PageItem = number | 'start-ellipsis' | 'end-ellipsis';\n\nfunction buildRange(page: number, total: number, siblings: number): PageItem[] {\n if (total <= 0) return [];\n const items: PageItem[] = [];\n const left = Math.max(2, page - siblings);\n const right = Math.min(total - 1, page + siblings);\n\n items.push(1);\n if (left > 2) items.push('start-ellipsis');\n for (let i = left; i <= right; i++) items.push(i);\n if (right < total - 1) items.push('end-ellipsis');\n if (total > 1) items.push(total);\n return items;\n}\n\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(function Pagination(\n { page, total, onPageChange, siblings = 1, className, ...props },\n ref,\n) {\n const items = buildRange(page, total, siblings);\n\n return (\n <nav\n ref={ref}\n aria-label=\"Pagination\"\n className={cn('inline-flex items-center gap-1', className)}\n {...props}\n >\n <IconButton\n size=\"sm\"\n variant=\"ghost\"\n icon=\"‹\"\n aria-label=\"Previous page\"\n disabled={page <= 1}\n onClick={() => onPageChange(Math.max(1, page - 1))}\n />\n {items.map((item, i) => {\n if (item === 'start-ellipsis' || item === 'end-ellipsis') {\n return (\n <span\n key={`ellipsis-${i}`}\n aria-hidden\n className=\"text-text-dim grid h-[26px] min-w-[26px] place-items-center px-2 font-mono text-[12px]\"\n >\n …\n </span>\n );\n }\n const isActive = item === page;\n return (\n <button\n key={item}\n type=\"button\"\n aria-label={`Go to page ${item}`}\n aria-current={isActive ? 'page' : undefined}\n onClick={() => onPageChange(item)}\n className={cn(\n 'h-[26px] min-w-[26px] rounded-[5px] px-2 font-mono text-[12px] outline-none',\n 'cursor-pointer transition-colors duration-(--duration-micro)',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n isActive\n ? 'bg-accent-dim text-accent border-accent border'\n : 'text-text-muted hover:bg-panel-2 hover:text-text border border-transparent',\n )}\n >\n {item}\n </button>\n );\n })}\n <IconButton\n size=\"sm\"\n variant=\"ghost\"\n icon=\"›\"\n aria-label=\"Next page\"\n disabled={page >= total}\n onClick={() => onPageChange(Math.min(total, page + 1))}\n />\n </nav>\n );\n});\n\nPagination.displayName = 'Pagination';\n","import { cva, type VariantProps } from 'class-variance-authority';\nimport { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Progress — linear bar in determinate (`value`) or `indeterminate` mode.\n * Pass `label` for an accessible name and a visible label row above the bar.\n *\n * For value rounding: the bar's width is the raw value clamped to [0, max];\n * the label/aria-valuenow are rounded to whole percent.\n */\n\nconst trackStyles = cva('w-full rounded-full bg-panel-2 overflow-hidden', {\n variants: {\n size: {\n sm: 'h-[3px]',\n md: 'h-[4px]',\n lg: 'h-[6px]',\n },\n },\n defaultVariants: { size: 'md' },\n});\n\nconst fillStyles = cva('h-full rounded-full transition-[width] duration-(--duration-step)', {\n variants: {\n tone: {\n accent: 'bg-accent',\n ok: 'bg-ok',\n warn: 'bg-warn',\n err: 'bg-err',\n },\n },\n defaultVariants: { tone: 'accent' },\n});\n\nexport interface ProgressProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'role'>,\n VariantProps<typeof trackStyles>,\n VariantProps<typeof fillStyles> {\n /** Numeric progress, 0..max. Ignored when `indeterminate`. */\n value?: number;\n /** Maximum value. Default 100. */\n max?: number;\n /** When true, shows an indeterminate sliding pill instead of a determinate fill. */\n indeterminate?: boolean;\n /** Optional visible label (rendered above the bar with the percent). */\n label?: ReactNode;\n /** When false, hides the percent readout next to the label. Default true. */\n showValue?: boolean;\n}\n\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value = 0,\n max = 100,\n indeterminate = false,\n label,\n showValue = true,\n tone,\n size,\n className,\n ...props\n },\n ref,\n) {\n const clamped = Math.min(max, Math.max(0, value));\n const pct = max > 0 ? (clamped / max) * 100 : 0;\n const display = Math.round(pct);\n\n return (\n <div ref={ref} className={cn('flex w-full flex-col gap-2', className)} {...props}>\n {label != null && (\n <div className=\"flex text-[12px]\">\n <span className=\"text-text-muted\">{label}</span>\n {showValue && !indeterminate && (\n <span className=\"text-text ml-auto font-mono tabular-nums\">{display}%</span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : display}\n aria-label={typeof label === 'string' ? label : undefined}\n className={trackStyles({ size })}\n >\n {indeterminate ? (\n <span\n aria-hidden\n className={cn(\n 'block h-full w-[40%] rounded-full',\n fillStyles({ tone }),\n 'animate-[ship-indeterminate_1.4s_linear_infinite]',\n )}\n />\n ) : (\n <span aria-hidden className={fillStyles({ tone })} style={{ width: `${pct}%` }} />\n )}\n </div>\n </div>\n );\n});\n\nProgress.displayName = 'Progress';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * RadialProgress — circular SVG progress ring. Renders the percent label in the\n * center by default; pass `children` to override (e.g., a glyph or a count).\n *\n * Tones: accent (default) and ok (auto-applied when value === max).\n */\n\nexport type RadialTone = 'accent' | 'ok' | 'warn' | 'err';\n\nexport interface RadialProgressProps extends HTMLAttributes<HTMLDivElement> {\n /** Current value, 0..max. */\n value: number;\n /** Maximum value. Default 100. */\n max?: number;\n /** Pixel size of the SVG. Default 64. */\n size?: number;\n /** Stroke width. Default 4. */\n thickness?: number;\n /** Color tone. Auto-flips to `ok` on completion unless explicitly set. */\n tone?: RadialTone;\n /** Replaces the centered percent label. */\n children?: ReactNode;\n /** Accessible label. Falls back to `${pct}%`. */\n 'aria-label'?: string;\n}\n\nconst toneStrokeClass: Record<RadialTone, string> = {\n accent: 'stroke-accent',\n ok: 'stroke-ok',\n warn: 'stroke-warn',\n err: 'stroke-err',\n};\n\nexport const RadialProgress = forwardRef<HTMLDivElement, RadialProgressProps>(\n function RadialProgress(\n {\n value,\n max = 100,\n size = 64,\n thickness = 4,\n tone,\n children,\n className,\n 'aria-label': ariaLabel,\n ...props\n },\n ref,\n ) {\n const clamped = Math.min(max, Math.max(0, value));\n const pct = max > 0 ? (clamped / max) * 100 : 0;\n const r = (size - thickness) / 2;\n const c = 2 * Math.PI * r;\n const dash = (pct / 100) * c;\n const resolvedTone: RadialTone = tone ?? (clamped >= max ? 'ok' : 'accent');\n\n return (\n <div\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={Math.round(pct)}\n aria-label={ariaLabel ?? `${Math.round(pct)}%`}\n className={cn('relative inline-grid place-items-center', className)}\n style={{ width: size, height: size }}\n {...props}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n strokeWidth={thickness}\n className=\"stroke-panel-2\"\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={r}\n fill=\"none\"\n strokeWidth={thickness}\n strokeLinecap=\"round\"\n strokeDasharray={`${dash} ${c}`}\n transform={`rotate(-90 ${size / 2} ${size / 2})`}\n className={cn(\n 'transition-[stroke-dasharray] duration-(--duration-step)',\n toneStrokeClass[resolvedTone],\n )}\n />\n </svg>\n <div className=\"absolute inset-0 grid place-items-center font-mono text-[11px] font-medium tabular-nums\">\n {children ?? `${Math.round(pct)}%`}\n </div>\n </div>\n );\n },\n);\n\nRadialProgress.displayName = 'RadialProgress';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Sidebar — primary app navigation column. A simple flex column with the\n * panel background and a right border. Compose with `<NavItem>` and\n * `<NavSection>` for the standard ShipIt sidebar shape.\n */\n\nexport interface SidebarProps extends HTMLAttributes<HTMLElement> {\n /** Width in pixels. Default 240. */\n width?: number;\n}\n\nexport const Sidebar = forwardRef<HTMLElement, SidebarProps>(function Sidebar(\n { width = 240, className, style, ...props },\n ref,\n) {\n return (\n <aside\n ref={ref}\n style={{ width, ...style }}\n className={cn(\n 'border-border bg-panel flex h-full flex-col gap-2 border-r p-[14px]',\n className,\n )}\n {...props}\n />\n );\n});\n\nSidebar.displayName = 'Sidebar';\n\nexport interface NavItemProps extends HTMLAttributes<HTMLAnchorElement> {\n /** Left-side glyph or icon node. */\n icon?: ReactNode;\n /** Visible label. */\n label: ReactNode;\n /** Highlights the row in the accent palette. */\n active?: boolean;\n /** Optional trailing badge text. */\n badge?: ReactNode;\n /** Optional href — when omitted, the row is rendered as a button. */\n href?: string;\n /** Disabled / read-only display. */\n disabled?: boolean;\n}\n\nexport const NavItem = forwardRef<HTMLAnchorElement, NavItemProps>(function NavItem(\n { icon, label, active, badge, href, disabled, className, onClick, ...props },\n ref,\n) {\n const inner = (\n <>\n {icon && (\n <span aria-hidden className=\"w-[14px] text-center opacity-80\">\n {icon}\n </span>\n )}\n <span className=\"flex-1 truncate\">{label}</span>\n {badge != null && (\n <span\n className={cn(\n 'rounded-xs px-[6px] py-px font-mono text-[10px]',\n active ? 'bg-accent text-on-accent' : 'bg-panel-2 text-text-muted',\n )}\n >\n {badge}\n </span>\n )}\n </>\n );\n const baseClass = cn(\n 'flex cursor-pointer items-center gap-[10px] rounded-xs px-2 py-[6px] text-[13px] outline-none',\n 'transition-colors duration-(--duration-micro)',\n 'focus-visible:ring-[3px] focus-visible:ring-accent-dim',\n active ? 'bg-accent-dim text-accent' : 'text-text hover:bg-panel-2',\n disabled && 'opacity-50 pointer-events-none',\n className,\n );\n if (href) {\n return (\n <a\n ref={ref}\n href={href}\n aria-current={active ? 'page' : undefined}\n aria-disabled={disabled || undefined}\n className={baseClass}\n onClick={onClick}\n {...props}\n >\n {inner}\n </a>\n );\n }\n return (\n <a\n ref={ref}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-current={active ? 'page' : undefined}\n aria-disabled={disabled || undefined}\n className={baseClass}\n onClick={onClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n (e.currentTarget as HTMLAnchorElement).click();\n }\n }}\n {...props}\n >\n {inner}\n </a>\n );\n});\n\nNavItem.displayName = 'NavItem';\n\nexport interface NavSectionProps extends HTMLAttributes<HTMLDivElement> {\n /** Eyebrow heading. Rendered uppercase, mono, dim. */\n label: ReactNode;\n /** Optional trailing element next to the heading (e.g., a `+` add affordance). */\n action?: ReactNode;\n}\n\nexport const NavSection = forwardRef<HTMLDivElement, NavSectionProps>(function NavSection(\n { label, action, className, children, ...props },\n ref,\n) {\n return (\n <div ref={ref} className={cn('flex flex-col gap-1', className)} {...props}>\n <div className=\"text-text-dim flex items-center px-2 pt-2 font-mono text-[9px] tracking-[1.4px] uppercase\">\n <span className=\"flex-1\">{label}</span>\n {action}\n </div>\n <div className=\"flex flex-col gap-[2px]\">{children}</div>\n </div>\n );\n});\n\nNavSection.displayName = 'NavSection';\n","import { forwardRef, useMemo, type SVGAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Sparkline — small inline SVG chart for showing trend at a glance. Computes\n * a polyline path from `values`; optionally fills the area under the line.\n *\n * The only chart we ship — the design system's stance on charting is that\n * production apps should bring their own (Recharts, Visx, etc.) when they\n * need anything more than a quiet trend cue.\n */\n\nexport interface SparklineProps extends Omit<\n SVGAttributes<SVGSVGElement>,\n 'children' | 'fill' | 'values'\n> {\n /** Numeric series. Drawn at uniform horizontal spacing. */\n values: ReadonlyArray<number>;\n /** Pixel width. Default 160. */\n width?: number;\n /** Pixel height. Default 32. */\n height?: number;\n /** Stroke color (CSS color or var). Defaults to `currentColor`. */\n stroke?: string;\n /** Stroke width. Default 1.5. */\n strokeWidth?: number;\n /** When true, fills the area under the line at 16% opacity. */\n fill?: boolean;\n /** Accessible label. Defaults to `Trend`. */\n 'aria-label'?: string;\n}\n\nfunction buildPath(values: ReadonlyArray<number>, w: number, h: number) {\n if (values.length === 0) return { line: '', area: '' };\n const pad = 2;\n const min = Math.min(...values);\n const max = Math.max(...values);\n const range = max - min || 1;\n const stepX = values.length === 1 ? 0 : (w - pad * 2) / (values.length - 1);\n const points = values.map((v, i) => {\n const x = pad + i * stepX;\n const y = pad + (1 - (v - min) / range) * (h - pad * 2);\n return `${x.toFixed(2)},${y.toFixed(2)}`;\n });\n const line = `M${points.join(' L')}`;\n const area = `${line} L${(pad + (values.length - 1) * stepX).toFixed(2)},${(h - pad).toFixed(\n 2,\n )} L${pad.toFixed(2)},${(h - pad).toFixed(2)} Z`;\n return { line, area };\n}\n\nexport const Sparkline = forwardRef<SVGSVGElement, SparklineProps>(function Sparkline(\n {\n values,\n width = 160,\n height = 32,\n stroke = 'currentColor',\n strokeWidth = 1.5,\n fill = false,\n className,\n 'aria-label': ariaLabel = 'Trend',\n ...props\n },\n ref,\n) {\n const { line, area } = useMemo(() => buildPath(values, width, height), [values, width, height]);\n\n return (\n <svg\n ref={ref}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n className={cn('inline-block', className)}\n {...props}\n >\n {fill && <path d={area} fill={stroke} fillOpacity={0.16} stroke=\"none\" />}\n <path\n d={line}\n fill=\"none\"\n stroke={stroke}\n strokeWidth={strokeWidth}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n});\n\nSparkline.displayName = 'Sparkline';\n","import { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Spinner — circular loading indicator. Three sizes; respects\n * `prefers-reduced-motion` via the global motion override in `tokens.css`.\n */\n\nconst sizes = {\n sm: { box: 'h-3 w-3', border: 'border-[2px]' },\n md: { box: 'h-4 w-4', border: 'border-[2px]' },\n lg: { box: 'h-5 w-5', border: 'border-[2px]' },\n} as const;\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLSpanElement> {\n size?: keyof typeof sizes;\n /** Accessible label. Defaults to `Loading`. */\n label?: string;\n}\n\nexport const Spinner = forwardRef<HTMLSpanElement, SpinnerProps>(function Spinner(\n { size = 'md', label = 'Loading', className, ...props },\n ref,\n) {\n const s = sizes[size];\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={label}\n className={cn('inline-block', className)}\n {...props}\n >\n <span\n aria-hidden\n className={cn(\n 'border-panel-2 border-t-accent block animate-[ship-spin_0.7s_linear_infinite] rounded-full',\n s.box,\n s.border,\n )}\n />\n </span>\n );\n});\n\nSpinner.displayName = 'Spinner';\n","import { forwardRef, Fragment, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Stepper — wizard / multi-step progress indicator. Computes done / current /\n * upcoming state from the `current` index so the consumer just passes labels.\n */\n\nexport type StepState = 'done' | 'current' | 'upcoming';\n\nexport interface StepperProps extends HTMLAttributes<HTMLDivElement> {\n /** Ordered step labels. */\n steps: ReadonlyArray<string>;\n /** Zero-based index of the current step. Steps before are `done`, after are `upcoming`. */\n current: number;\n}\n\nconst dotBase =\n 'h-6 w-6 rounded-full grid place-items-center text-[11px] font-mono font-semibold border';\n\nconst dotStateClass: Record<StepState, string> = {\n done: 'bg-accent text-on-accent border-accent',\n current: 'bg-accent-dim text-accent border-accent',\n upcoming: 'bg-panel text-text-dim border-border',\n};\n\nconst labelStateClass: Record<StepState, string> = {\n done: 'text-text',\n current: 'text-text font-medium',\n upcoming: 'text-text-dim',\n};\n\nfunction stateFor(index: number, current: number): StepState {\n if (index < current) return 'done';\n if (index === current) return 'current';\n return 'upcoming';\n}\n\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(function Stepper(\n { steps, current, className, ...props },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"list\"\n aria-label=\"Progress\"\n className={cn('flex w-full items-center', className)}\n {...props}\n >\n {steps.map((label, i) => {\n const state = stateFor(i, current);\n const connectorActive = i < current;\n return (\n <Fragment key={label}>\n <div\n role=\"listitem\"\n aria-current={state === 'current' ? 'step' : undefined}\n className=\"flex items-center gap-2\"\n >\n <span aria-hidden className={cn(dotBase, dotStateClass[state])}>\n {state === 'done' ? '✓' : i + 1}\n </span>\n <span className={cn('text-[12px]', labelStateClass[state])}>{label}</span>\n </div>\n {i < steps.length - 1 && (\n <span\n aria-hidden\n className={cn('mx-3 h-px flex-1', connectorActive ? 'bg-accent' : 'bg-border')}\n />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n});\n\nStepper.displayName = 'Stepper';\n","import * as RadixTabs from '@radix-ui/react-tabs';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { createContext, forwardRef, useContext, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Tabs — two visual styles built on Radix Tabs.\n *\n * `variant=\"underline\"` (default) is the navigation tab style: text labels with\n * a moving 2px underline. `variant=\"pill\"` is the segmented-control style: a\n * rounded panel housing pill buttons. Both share Radix's keyboard semantics\n * (←/→ to move, Home/End to jump, Enter/Space to activate when activation is\n * manual).\n */\n\ntype TabsVariant = 'underline' | 'pill';\n\nconst TabsVariantContext = createContext<TabsVariant>('underline');\n\nconst tabsListStyles = cva('', {\n variants: {\n variant: {\n underline: 'flex gap-6 border-b border-border',\n pill: 'inline-flex gap-1 rounded-base border border-border bg-panel-2 p-[3px]',\n },\n },\n});\n\nconst tabsTriggerStyles = cva(\n 'cursor-pointer outline-none transition-colors duration-(--duration-micro) focus-visible:ring-[3px] focus-visible:ring-accent-dim',\n {\n variants: {\n variant: {\n underline: cn(\n 'relative -mb-px inline-flex items-center px-[2px] py-2 text-[13px]',\n 'border-b-2 border-transparent text-text-muted',\n 'hover:text-text',\n 'data-[state=active]:border-accent data-[state=active]:text-text data-[state=active]:font-medium',\n ),\n pill: cn(\n 'inline-flex items-center rounded-sm px-[14px] py-[6px] text-[12px] font-normal',\n 'text-text-muted hover:text-text',\n 'data-[state=active]:bg-panel data-[state=active]:text-text data-[state=active]:font-medium',\n 'data-[state=active]:shadow-sm',\n ),\n },\n },\n },\n);\n\nexport interface TabsProps extends RadixTabs.TabsProps {\n /** Visual style — `underline` (default) or segmented `pill`. */\n variant?: TabsVariant;\n}\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs(\n { variant = 'underline', className, ...props },\n ref,\n) {\n return (\n <TabsVariantContext.Provider value={variant}>\n <RadixTabs.Root\n ref={ref}\n className={cn('flex flex-col', variant === 'underline' && 'gap-3', className)}\n {...props}\n />\n </TabsVariantContext.Provider>\n );\n});\n\nTabs.displayName = 'Tabs';\n\nexport const TabsList = forwardRef<HTMLDivElement, RadixTabs.TabsListProps>(function TabsList(\n { className, ...props },\n ref,\n) {\n const variant = useContext(TabsVariantContext);\n return (\n <RadixTabs.List ref={ref} className={cn(tabsListStyles({ variant }), className)} {...props} />\n );\n});\n\nTabsList.displayName = 'TabsList';\n\nexport interface TabProps extends RadixTabs.TabsTriggerProps {\n children?: ReactNode;\n}\n\nexport const Tab = forwardRef<HTMLButtonElement, TabProps>(function Tab(\n { className, ...props },\n ref,\n) {\n const variant = useContext(TabsVariantContext);\n return (\n <RadixTabs.Trigger\n ref={ref}\n className={cn(tabsTriggerStyles({ variant }), className)}\n {...props}\n />\n );\n});\n\nTab.displayName = 'Tab';\n\nexport const TabsContent = forwardRef<HTMLDivElement, RadixTabs.TabsContentProps>(\n function TabsContent({ className, ...props }, ref) {\n return (\n <RadixTabs.Content\n ref={ref}\n className={cn(\n 'focus-visible:ring-accent-dim outline-none focus-visible:ring-[3px]',\n className,\n )}\n {...props}\n />\n );\n },\n);\n\nTabsContent.displayName = 'TabsContent';\n\nexport type TabsVariantProps = VariantProps<typeof tabsTriggerStyles>;\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Timeline — vertical event list with a connecting rule between markers.\n * Pass `events` (preferred) for the simple shape, or compose with\n * `<TimelineItem>` children for custom layouts.\n */\n\nexport type TimelineEventTone = 'accent' | 'ok' | 'warn' | 'err' | 'muted';\n\nexport interface TimelineEvent {\n title: ReactNode;\n description?: ReactNode;\n /** Time label rendered in mono. */\n time?: ReactNode;\n /** Marker color tone. Defaults to `accent`. */\n tone?: TimelineEventTone;\n}\n\nexport interface TimelineProps extends HTMLAttributes<HTMLOListElement> {\n /** Convenience prop — when provided, renders `<TimelineItem>` for each event. */\n events?: ReadonlyArray<TimelineEvent>;\n}\n\nconst ringClass: Record<TimelineEventTone, string> = {\n accent: 'border-accent',\n ok: 'border-ok',\n warn: 'border-warn',\n err: 'border-err',\n muted: 'border-text-dim',\n};\n\nexport const Timeline = forwardRef<HTMLOListElement, TimelineProps>(function Timeline(\n { events, className, children, ...props },\n ref,\n) {\n return (\n <ol\n ref={ref}\n className={cn(\n 'relative pl-6',\n 'before:bg-border before:absolute before:top-[6px] before:bottom-[6px] before:left-[7px] before:w-px',\n className,\n )}\n {...props}\n >\n {events\n ? events.map((e, i) => (\n <TimelineItem key={i} tone={e.tone} time={e.time} description={e.description}>\n {e.title}\n </TimelineItem>\n ))\n : children}\n </ol>\n );\n});\n\nTimeline.displayName = 'Timeline';\n\nexport interface TimelineItemProps extends HTMLAttributes<HTMLLIElement> {\n tone?: TimelineEventTone;\n description?: ReactNode;\n time?: ReactNode;\n}\n\nexport const TimelineItem = forwardRef<HTMLLIElement, TimelineItemProps>(function TimelineItem(\n { tone = 'accent', description, time, className, children, ...props },\n ref,\n) {\n return (\n <li ref={ref} className={cn('relative mb-[18px] last:mb-0', className)} {...props}>\n <span\n aria-hidden\n className={cn(\n 'bg-bg absolute top-[4px] -left-6 h-[14px] w-[14px] rounded-full border-2',\n ringClass[tone],\n )}\n />\n <div className=\"text-[13px] font-medium\">{children}</div>\n {description && <div className=\"text-text-muted text-[12px]\">{description}</div>}\n {time && <div className=\"text-text-dim mt-[2px] font-mono text-[10px]\">{time}</div>}\n </li>\n );\n});\n\nTimelineItem.displayName = 'TimelineItem';\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { cn } from '../../utils/cn';\n\n/**\n * Topbar — slim header strip across the top of an app surface. The title\n * lives on the left, the rest of the row is yours via `actions` (search,\n * settings, avatar, etc.).\n */\n\nexport interface TopbarProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n /** Title rendered on the left. */\n title?: ReactNode;\n /** Left-of-title slot — typically a logo or breadcrumbs. */\n leading?: ReactNode;\n /** Right-side action group. Rendered with `gap-3`. */\n actions?: ReactNode;\n}\n\nexport const Topbar = forwardRef<HTMLElement, TopbarProps>(function Topbar(\n { title, leading, actions, className, children, ...props },\n ref,\n) {\n return (\n <header\n ref={ref}\n className={cn(\n 'border-border bg-panel flex h-[52px] items-center gap-4 border-b px-5',\n className,\n )}\n {...props}\n >\n {leading}\n {title && <div className=\"text-[13px] font-medium\">{title}</div>}\n <div className=\"flex flex-1 items-center\" />\n {actions && <div className=\"flex items-center gap-3\">{actions}</div>}\n {children}\n </header>\n );\n});\n\nTopbar.displayName = 'Topbar';\n","import { forwardRef, useCallback, type HTMLAttributes, type ReactNode } from 'react';\n\nimport { useControllableState } from '../../hooks/useControllableState';\nimport { cn } from '../../utils/cn';\n\n/**\n * Tree — recursive expandable list. Pass a nested `items` tree; the component\n * handles expand/collapse and selection state. Both can be uncontrolled\n * (`defaultExpanded` / `defaultSelected`) or controlled (`expanded` /\n * `selected` + change callbacks).\n *\n * Implements the simple `aria-tree` pattern: `role=\"tree\"` on the container,\n * `role=\"treeitem\"` on each row, `aria-level`, `aria-expanded`, `aria-selected`.\n */\n\nexport interface TreeItem {\n id: string;\n label: ReactNode;\n /** Leading glyph or icon node. */\n icon?: ReactNode;\n /** Trailing badge / hint. */\n trailing?: ReactNode;\n children?: ReadonlyArray<TreeItem>;\n}\n\nexport interface TreeProps extends Omit<HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Tree data. */\n items: ReadonlyArray<TreeItem>;\n /** Controlled set of expanded node ids. */\n expanded?: ReadonlySet<string>;\n /** Default expanded ids (uncontrolled). */\n defaultExpanded?: ReadonlyArray<string>;\n /** Fires with the new expanded set whenever a node toggles. */\n onExpandedChange?: (expanded: Set<string>) => void;\n /** Controlled selected node id. */\n selected?: string;\n /** Default selected (uncontrolled). */\n defaultSelected?: string;\n /** Fires with the selected node id. */\n onSelect?: (id: string) => void;\n}\n\nexport const Tree = forwardRef<HTMLUListElement, TreeProps>(function Tree(\n {\n items,\n expanded: expandedProp,\n defaultExpanded,\n onExpandedChange,\n selected: selectedProp,\n defaultSelected,\n onSelect,\n className,\n ...props\n },\n ref,\n) {\n const [expanded, setExpanded] = useControllableState<Set<string>>({\n value: expandedProp instanceof Set ? expandedProp : (expandedProp as Set<string> | undefined),\n defaultValue: defaultExpanded ? new Set(defaultExpanded) : new Set<string>(),\n onChange: onExpandedChange,\n });\n\n const [selected, setSelected] = useControllableState<string>({\n value: selectedProp,\n defaultValue: defaultSelected,\n onChange: onSelect,\n });\n\n const toggle = useCallback(\n (id: string) => {\n setExpanded((prev) => {\n const next = new Set(prev ?? []);\n if (next.has(id)) next.delete(id);\n else next.add(id);\n return next;\n });\n },\n [setExpanded],\n );\n\n return (\n <ul\n ref={ref}\n role=\"tree\"\n className={cn('flex flex-col gap-px text-[12px]', className)}\n {...props}\n >\n {items.map((item) => (\n <TreeItemRow\n key={item.id}\n item={item}\n level={1}\n expanded={expanded ?? new Set()}\n selected={selected}\n onToggle={toggle}\n onSelect={(id) => setSelected(id)}\n />\n ))}\n </ul>\n );\n});\n\nTree.displayName = 'Tree';\n\ninterface TreeItemRowProps {\n item: TreeItem;\n level: number;\n expanded: ReadonlySet<string>;\n selected: string | undefined;\n onToggle: (id: string) => void;\n onSelect: (id: string) => void;\n}\n\nfunction TreeItemRow({ item, level, expanded, selected, onToggle, onSelect }: TreeItemRowProps) {\n const hasChildren = !!item.children && item.children.length > 0;\n const isExpanded = hasChildren && expanded.has(item.id);\n const isSelected = selected === item.id;\n\n return (\n <li role=\"none\">\n <div\n role=\"treeitem\"\n aria-level={level}\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={isSelected}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n onSelect(item.id);\n if (hasChildren) onToggle(item.id);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect(item.id);\n if (hasChildren) onToggle(item.id);\n } else if (e.key === 'ArrowRight' && hasChildren && !isExpanded) {\n e.preventDefault();\n onToggle(item.id);\n } else if (e.key === 'ArrowLeft' && hasChildren && isExpanded) {\n e.preventDefault();\n onToggle(item.id);\n }\n }}\n style={{ paddingLeft: 4 + (level - 1) * 16 }}\n className={cn(\n 'flex cursor-pointer items-center gap-[6px] rounded-xs py-[5px] pr-2 outline-none',\n 'focus-visible:ring-accent-dim focus-visible:ring-[3px]',\n isSelected ? 'bg-accent-dim text-accent' : 'text-text hover:bg-panel-2',\n )}\n >\n <span aria-hidden className=\"text-text-dim grid w-3 place-items-center text-[10px]\">\n {hasChildren ? (isExpanded ? '▾' : '▸') : ''}\n </span>\n {item.icon && (\n <span aria-hidden className=\"text-[12px] opacity-80\">\n {item.icon}\n </span>\n )}\n <span className=\"flex-1 truncate\">{item.label}</span>\n {item.trailing}\n </div>\n {hasChildren && isExpanded && (\n <ul role=\"group\" className=\"flex flex-col gap-px\">\n {item.children!.map((child) => (\n <TreeItemRow\n key={child.id}\n item={child}\n level={level + 1}\n expanded={expanded}\n selected={selected}\n onToggle={onToggle}\n onSelect={onSelect}\n />\n ))}\n </ul>\n )}\n </li>\n );\n}\n"]}
|