@jinaan/uikit 0.1.53 → 0.1.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils.ts","../src/spinner.tsx","../src/button.tsx","../src/agent-prompt.tsx","../src/avatar.tsx","../src/badge.tsx","../src/callout.tsx","../src/table.tsx","../src/table-surface.tsx","../src/card.tsx","../src/checkbox.tsx","../src/dialog-motion.ts","../src/dialog.tsx","../src/radio-group.tsx","../src/choice-dialog.tsx","../src/code-block.tsx","../src/input.tsx","../src/combobox.tsx","../src/item-count.ts","../src/dropdown-menu.tsx","../src/select.tsx","../src/table-empty-state.tsx","../src/data-table.tsx","../src/empty-state.tsx","../src/input-select.tsx","../src/kbd.tsx","../src/label.tsx","../src/segmented.tsx","../src/separator.tsx","../src/skeleton.tsx","../src/tooltip.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merge conditional class names with Tailwind conflict resolution. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\n/** Move the id at `from` so it sits at `to`; no-op when indexes match. */\nexport function reorderIds(ids: string[], from: number, to: number): string[] {\n if (from === to || from < 0 || to < 0 || from >= ids.length || to >= ids.length) {\n return ids;\n }\n const next = [...ids];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n return next;\n}\n","import { CircleNotch } from \"@phosphor-icons/react\";\n\nimport { cn } from \"./utils\";\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <CircleNotch\n className={cn(\"size-4 animate-spin text-muted\", className)}\n weight=\"bold\"\n aria-hidden\n />\n );\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\n\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"./utils\";\n\nconst buttonVariants = cva(\n \"relative inline-flex select-none items-center justify-center gap-[var(--control-gap)] whitespace-nowrap rounded-[var(--control-radius)] border border-transparent font-medium transition-[color,background-color,border-color,box-shadow,transform] duration-[120ms] active:scale-[0.97] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-primary-inner)] bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] hover:bg-[var(--button-primary-hover)] active:bg-[var(--button-primary-active)]\",\n secondary:\n \"btn-fill btn-inner-border btn-interactive border-0 bg-[var(--button-secondary-bg)] text-fg hover:bg-[var(--button-surface-hover)] active:bg-[var(--button-surface-active)]\",\n outline:\n \"btn-interactive border-[var(--button-outline-border)] bg-transparent text-fg hover:border-fg/12 hover:bg-[var(--button-surface-hover)] active:border-fg/12 active:bg-[var(--button-surface-active)] dark:hover:border-[var(--button-outline-border)] dark:active:border-[var(--button-outline-border)]\",\n ghost:\n \"btn-inner-border btn-interactive border-0 text-muted hover:bg-[var(--button-surface-hover)] hover:text-fg active:bg-[var(--button-surface-active)]\",\n destructive:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-destructive-inner)] bg-[var(--button-destructive-bg)] text-[var(--button-destructive-fg)] hover:bg-[var(--button-destructive-hover)] active:bg-[var(--button-destructive-active)]\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-[var(--control-h-xs)] [--control-gap:var(--control-gap-xs)] px-[var(--control-pad-x-xs)] text-xs [&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"h-[var(--control-h-sm)] px-[var(--control-pad-x-sm)] text-sm [&_svg]:size-[var(--control-icon-sm)]\",\n md: \"h-[var(--control-h-md)] px-[var(--control-pad-x-md)] text-sm [&_svg]:size-[var(--control-icon-md)]\",\n lg: \"h-[var(--control-h-lg)] px-[var(--control-pad-x-lg)] text-sm [&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"rounded-[var(--control-radius-xl)] h-[var(--control-h-xl)] px-[var(--control-pad-x-xl)] text-base [&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"h-[var(--control-h-md)] w-[var(--control-h-md)] p-0 [&_svg]:size-[var(--control-icon-md)]\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\n/** Icon metrics per size, applied to icon wrappers so both stay aligned. */\nconst iconSize: Record<string, string> = {\n xs: \"[&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"[&_svg]:size-[var(--control-icon-sm)]\",\n md: \"[&_svg]:size-[var(--control-icon-md)]\",\n lg: \"[&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"[&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"[&_svg]:size-[var(--control-icon-md)]\",\n};\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n /** Optional icon rendered before the label. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered after the label (e.g. a chevron). */\n trailingIcon?: ReactNode;\n /** Square, content-free button. Provide `aria-label`. */\n iconOnly?: boolean;\n /** Show a spinner and block interaction while an action runs. */\n loading?: boolean;\n /** Stretch to the container width. */\n fullWidth?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n asChild = false,\n leadingIcon,\n trailingIcon,\n iconOnly = false,\n loading = false,\n fullWidth = false,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const icon = iconSize[size ?? \"md\"];\n\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n disabled={asChild ? undefined : disabled || loading}\n className={cn(\n buttonVariants({ variant, size }),\n iconOnly && \"aspect-square px-0\",\n fullWidth && \"w-full\",\n loading && \"disabled:opacity-100\",\n className,\n )}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <span className=\"relative inline-flex w-full items-center [justify-content:inherit] gap-(--control-gap)\">\n <span\n className={cn(\n \"inline-flex w-full items-center [justify-content:inherit] gap-(--control-gap) transition-[opacity,translate] duration-150 ease-out motion-reduce:transition-none\",\n loading && \"translate-y-2 opacity-0\",\n )}\n aria-hidden={loading || undefined}\n >\n {!loading && leadingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {leadingIcon}\n </span>\n ) : null}\n {children}\n {!loading && trailingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {trailingIcon}\n </span>\n ) : null}\n </span>\n <span\n data-button-spinner\n className={cn(\n \"pointer-events-none absolute inset-0 flex items-center justify-center transition-[opacity,translate] duration-150 ease-out motion-reduce:transition-none\",\n loading ? \"translate-y-0 opacity-100\" : \"-translate-y-2 opacity-0\",\n )}\n aria-hidden\n >\n <Spinner className={cn(\"text-current\", icon)} />\n </span>\n </span>\n )}\n </Comp>\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import { Check, Copy, Robot, Terminal } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport { cn } from \"./utils\";\n\ninterface AgentPromptProps {\n /** Command or prompt text; copy copies this verbatim. */\n command: string;\n /** Overlapping dark tag above the pill. */\n tag?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\n/**\n * The \"Add Jinaan auth to my app\" prompt pill: a dark tag overlapping a\n * rounded command field with a copy button.\n */\nexport function AgentPrompt({\n command,\n tag = \"Build with agents\",\n icon,\n className,\n}: AgentPromptProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <div className={cn(\"relative inline-flex max-w-full\", className)}>\n <span className=\"absolute -top-2.5 left-4 z-10 inline-flex items-center gap-1.5 rounded-md bg-fg px-2 py-1 text-[11px] font-medium text-canvas shadow-sm\">\n {icon ?? <Robot className=\"size-3.5\" weight=\"fill\" />}\n {tag}\n </span>\n <div className=\"mt-2 flex w-full items-center gap-2 rounded-xl border border-line bg-surface py-2 pl-3 pr-2 shadow-sm\">\n <Terminal className=\"size-4 shrink-0 text-subtle\" aria-hidden />\n <span className=\"truncate font-mono text-sm text-fg\">{command}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n aria-label=\"Copy prompt\"\n className=\"ml-auto\"\n onClick={copy}\n >\n {copied ? <Check className=\"text-success\" weight=\"bold\" /> : <Copy />}\n </Button>\n </div>\n </div>\n );\n}\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Avatar = forwardRef<\n ElementRef<typeof AvatarPrimitive.Root>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full border border-line\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = \"Avatar\";\n\nexport const AvatarImage = forwardRef<\n ElementRef<typeof AvatarPrimitive.Image>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square size-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\nexport const AvatarFallback = forwardRef<\n ElementRef<typeof AvatarPrimitive.Fallback>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex size-full items-center justify-center bg-elevated text-xs font-medium text-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-medium\",\n {\n variants: {\n variant: {\n neutral: \"border-line bg-elevated text-muted\",\n outline: \"border-line bg-transparent text-muted\",\n success: \"border-success/30 bg-success/10 text-success\",\n warning: \"border-warning/30 bg-warning/10 text-warning\",\n error: \"border-error/30 bg-error/10 text-error\",\n info: \"border-info/30 bg-info/10 text-info\",\n primary: \"border-primary/30 bg-primary/10 text-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n },\n);\n\nconst dotVariants = cva(\"size-1.5 shrink-0 rounded-full\", {\n variants: {\n variant: {\n neutral: \"bg-subtle\",\n outline: \"bg-subtle\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n error: \"bg-error\",\n info: \"bg-info\",\n primary: \"bg-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n});\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n dot?: boolean;\n}\n\nexport function Badge({ className, variant, dot = false, children, ...props }: BadgeProps) {\n return (\n <span className={cn(badgeVariants({ variant }), className)} {...props}>\n {dot ? <span className={cn(dotVariants({ variant }))} aria-hidden /> : null}\n {children}\n </span>\n );\n}\n\nexport { badgeVariants };\n","import {\n CheckCircle,\n Info,\n Warning,\n XCircle,\n} from \"@phosphor-icons/react\";\nimport type { Icon } from \"@phosphor-icons/react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype CalloutVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst variants: Record<\n CalloutVariant,\n { Icon: Icon; className: string; iconClassName: string }\n> = {\n info: {\n Icon: Info,\n className: \"border-info/30 bg-info/10\",\n iconClassName: \"text-info\",\n },\n success: {\n Icon: CheckCircle,\n className: \"border-success/30 bg-success/10\",\n iconClassName: \"text-success\",\n },\n warning: {\n Icon: Warning,\n className: \"border-warning/30 bg-warning/10\",\n iconClassName: \"text-warning\",\n },\n error: {\n Icon: XCircle,\n className: \"border-error/30 bg-error/10\",\n iconClassName: \"text-error\",\n },\n};\n\ninterface CalloutProps {\n variant?: CalloutVariant;\n title?: ReactNode;\n children?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\nexport function Callout({\n variant = \"info\",\n title,\n children,\n icon,\n className,\n}: CalloutProps) {\n const { Icon: DefaultIcon, className: tone, iconClassName } = variants[variant];\n return (\n <div\n role={variant === \"error\" ? \"alert\" : undefined}\n className={cn(\n \"flex items-start gap-2.5 rounded-lg border px-3.5 py-3 text-sm\",\n \"animate-in fade-in-0 slide-in-from-top-1 duration-200 motion-reduce:animate-none\",\n tone,\n className,\n )}\n >\n <span className={cn(\"mt-0.5 shrink-0 [&_svg]:size-4\", iconClassName)}>\n {icon ?? <DefaultIcon weight=\"fill\" />}\n </span>\n <div className=\"min-w-0 space-y-0.5\">\n {title ? <p className=\"font-medium text-fg\">{title}</p> : null}\n {children ? <div className=\"text-muted\">{children}</div> : null}\n </div>\n </div>\n );\n}\n","import type { HTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Outer table shell: near-black surface with generous rounding that holds the\n * header row and the inset inner panel. Surface contrast, not borders/shadows.\n */\nexport function TableContainer({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-(--table-radius-outer) bg-table-container p-(--table-inset)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Inset panel holding the table body (and its empty/loading/error states). */\nexport function TablePanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-(--table-radius-panel) border border-table-panel-border bg-table-panel\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function Table({ className, ...props }: HTMLAttributes<HTMLTableElement>) {\n return (\n <table\n className={cn(\"w-full table-fixed border-collapse caption-bottom text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport function TableHeader({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <thead className={className} {...props} />;\n}\n\nexport function TableBody({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <tbody className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\n\nexport function TableRow({ className, ...props }: HTMLAttributes<HTMLTableRowElement>) {\n return (\n <tr\n className={cn(\n \"border-b border-table-panel-border transition-colors last:border-0 hover:bg-table-row-hover data-[state=selected]:bg-table-row-selected\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableHead({ className, ...props }: ThHTMLAttributes<HTMLTableCellElement>) {\n return (\n <th\n className={cn(\n \"h-(--table-header-h) whitespace-nowrap px-(--table-pad-x) text-left align-middle text-[0.8125rem] font-medium text-table-header\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableCell({ className, ...props }: TdHTMLAttributes<HTMLTableCellElement>) {\n return (\n <td\n className={cn(\n \"whitespace-nowrap px-(--table-pad-x) py-3 align-middle text-sm text-table-row data-numeric:font-numeric data-numeric:tabular-nums\",\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ReactNode, Ref } from \"react\";\n\nimport { Button } from \"./button\";\nimport { TableContainer, TablePanel } from \"./table\";\nimport { cn } from \"./utils\";\n\nexport type TableSurfaceTone = \"default\" | \"muted\" | \"transparent\";\n\nexport interface TableSurfaceAction {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"ghost\" | \"destructive\";\n onClick?: () => void;\n href?: string;\n disabled?: boolean;\n}\n\ninterface TableSurfaceProps {\n /** Title above the header row. */\n title?: ReactNode;\n /** Supporting text under the title. */\n description?: ReactNode;\n /** Header row content (a single row of column cells). */\n header?: ReactNode;\n /** Panel content: the body table, or an empty / loading / error state. */\n children: ReactNode;\n /** Optional action at the top-right of the header band. */\n action?: ReactNode | TableSurfaceAction;\n /** Surface preset; `className` / `headerClassName` / `panelClassName` win. */\n tone?: TableSurfaceTone;\n /** Outer shell overrides (background, radius, padding, …). */\n className?: string;\n /** Header band overrides (background, text color, …). */\n headerClassName?: string;\n /** Inner panel overrides (background, border color, …). */\n panelClassName?: string;\n /** Optional footer strip in the outer shell, below the panel (hairline top border). */\n footer?: ReactNode;\n /** Footer strip overrides (padding, colors, …). */\n footerClassName?: string;\n /** Minimum panel height; keeps empty states from collapsing. */\n minHeight?: string;\n /**\n * Where horizontal scrolling lives. `surface` (default) scrolls band and\n * panel together — right for short content. `panel` keeps both shells fixed\n * while the caller puts the scroller inside the panel; the band content is\n * then expected to translate in lockstep via `headerContentRef`.\n */\n scrollMode?: \"surface\" | \"panel\";\n /** Panel mode only: ref for the band's translating inner wrapper. */\n headerContentRef?: Ref<HTMLDivElement>;\n}\n\nconst SHELL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-container\",\n muted: \"bg-surface border border-line\",\n transparent: \"bg-transparent\",\n};\n\nconst PANEL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-panel border-table-panel-border\",\n muted: \"bg-elevated border-line\",\n transparent: \"bg-transparent border-line\",\n};\n\nfunction isActionConfig(\n action: ReactNode | TableSurfaceAction,\n): action is TableSurfaceAction {\n return (\n typeof action === \"object\" &&\n action !== null &&\n \"label\" in action &&\n typeof (action as TableSurfaceAction).label === \"string\"\n );\n}\n\n/**\n * Layered table surface: an outer shell holding a header band and an inset\n * inner panel. Header and panel share one horizontal scroller so their columns\n * stay aligned; the optional action stays pinned to the header's top-right.\n * Colors come from the `--table-*` tokens and can be adjusted per surface with\n * `tone` plus `headerClassName` / `panelClassName`.\n */\nexport function TableSurface({\n title,\n description,\n header,\n children,\n action,\n tone = \"default\",\n className,\n headerClassName,\n panelClassName,\n footer,\n footerClassName,\n minHeight,\n scrollMode = \"surface\",\n headerContentRef,\n}: TableSurfaceProps) {\n const hasTitle = Boolean(title || description);\n const panelScroll = scrollMode === \"panel\";\n const actionNode = isActionConfig(action) ? (\n <Button\n variant={action.variant ?? \"primary\"}\n size=\"xs\"\n leadingIcon={action.href ? undefined : action.icon}\n onClick={action.onClick}\n disabled={action.disabled}\n asChild={Boolean(action.href)}\n >\n {action.href ? (\n <a href={action.href}>\n {action.icon}\n {action.label}\n </a>\n ) : (\n action.label\n )}\n </Button>\n ) : (\n action\n );\n\n const band =\n header || hasTitle ? (\n // Header rows must not inherit the body row hover surface. Panel mode\n // clips the band instead of scrolling it; the caller translates the\n // inner wrapper so titles track the row content. px-px mirrors the\n // panel's 1px border so band and body share the same width context —\n // identical fixed-layout distribution keeps every column aligned.\n <div\n className={cn(\n \"[--table-row-hover:transparent] text-table-header\",\n panelScroll && \"overflow-hidden px-px\",\n headerClassName,\n )}\n >\n {hasTitle ? (\n <div\n className={cn(\n \"px-(--table-pad-x) pb-3 pt-4\",\n actionNode && \"pr-28\",\n )}\n >\n {title ? (\n <div className=\"text-sm font-semibold text-fg\">{title}</div>\n ) : null}\n {description ? (\n <div className=\"mt-0.5 text-sm text-muted\">{description}</div>\n ) : null}\n </div>\n ) : null}\n {panelScroll ? <div ref={headerContentRef}>{header}</div> : header}\n </div>\n ) : null;\n\n const panel = (\n <TablePanel\n className={cn(PANEL_TONE[tone], panelClassName)}\n style={minHeight ? { minHeight } : undefined}\n >\n {children}\n </TablePanel>\n );\n\n return (\n <TableContainer className={cn(\"relative\", SHELL_TONE[tone], className)}>\n {panelScroll ? (\n <>\n {band}\n {panel}\n </>\n ) : (\n <div className=\"overflow-x-auto\">\n {band}\n {panel}\n </div>\n )}\n {footer ? (\n <div\n className={cn(\n \"border-t border-line px-(--table-pad-x) py-3 text-table-header\",\n footerClassName,\n )}\n >\n {footer}\n </div>\n ) : null}\n {actionNode ? (\n <div className=\"pointer-events-none absolute right-4 top-(--table-inset) flex h-(--table-header-h) items-center\">\n <div className=\"pointer-events-auto\">{actionNode}</div>\n </div>\n ) : null}\n </TableContainer>\n );\n}\n","import {\n Children,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\nimport { cn } from \"./utils\";\n\nfunction splitCardChildren(children: ReactNode): {\n header: ReactNode;\n body: ReactNode;\n} {\n const nodes = Children.toArray(children);\n const headers = nodes.filter(\n (child) => isValidElement(child) && child.type === CardHeader,\n );\n return {\n header: headers.length > 0 ? <>{headers}</> : undefined,\n body: nodes.filter((child) => !headers.includes(child)),\n };\n}\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { header, body } = splitCardChildren(children);\n return (\n <div ref={ref} {...props}>\n <TableSurface className={cn(\"shadow-xs\", className)} header={header}>\n {body}\n </TableSurface>\n </div>\n );\n },\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-1 px-5 py-4\",\n className,\n )}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<\n HTMLHeadingElement,\n HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-sm font-semibold text-fg\", className)}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"mt-1 border-t border-card-divider pt-2 text-sm text-muted\",\n \"first:mt-0 first:border-t-0 first:pt-0\",\n className,\n )}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-5 py-4\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-3 border-t border-line px-5 py-3\",\n className,\n )}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"@phosphor-icons/react\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer size-4 shrink-0 rounded border border-line-strong bg-transparent transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus/40\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:border-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] [--button-inner:var(--button-primary-inner)]\">\n {props.checked === \"indeterminate\" ? (\n <Minus className=\"size-3\" weight=\"bold\" />\n ) : (\n <Check className=\"size-3\" weight=\"bold\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = \"Checkbox\";\n","export interface DialogOriginRect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nexport interface DialogFlight {\n dx: number;\n dy: number;\n sx: number;\n sy: number;\n}\n\nfunction usable(rect: DialogOriginRect): boolean {\n return rect.width > 0 && rect.height > 0;\n}\n\nfunction clampScale(value: number): number {\n return Math.min(1, Math.max(0.1, value));\n}\n\n/**\n * Computes the transform that places a centered dialog over its caller.\n * `dx`/`dy` are viewport deltas; `sx`/`sy` scale the dialog down to the caller.\n */\nexport function computeDialogFlight(\n origin: DialogOriginRect,\n target: DialogOriginRect,\n): DialogFlight | null {\n if (!usable(origin) || !usable(target)) return null;\n return {\n dx: origin.left + origin.width / 2 - (target.left + target.width / 2),\n dy: origin.top + origin.height / 2 - (target.top + target.height / 2),\n sx: clampScale(origin.width / target.width),\n sy: clampScale(origin.height / target.height),\n };\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"@phosphor-icons/react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\n\nimport { Button, type ButtonProps } from \"./button\";\nimport { computeDialogFlight, type DialogOriginRect } from \"./dialog-motion\";\nimport { cn } from \"./utils\";\n\nconst SOURCE_SELECTOR =\n 'button, a, [role=\"button\"], [role=\"menuitem\"], [data-dialog-origin]';\n\nlet lastSource: { rect: DialogOriginRect; at: number } | null = null;\nlet trackerInstalled = false;\n\nfunction rectOf(element: Element): DialogOriginRect | null {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return null;\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction rememberSource(target: EventTarget | null) {\n if (!(target instanceof Element)) return;\n const element = target.closest(SOURCE_SELECTOR);\n if (!element) return;\n const rect = rectOf(element);\n if (rect) lastSource = { rect, at: Date.now() };\n}\n\nfunction installSourceTracker() {\n if (trackerInstalled || typeof document === \"undefined\") return;\n trackerInstalled = true;\n document.addEventListener(\n \"pointerdown\",\n (event) => rememberSource(event.target),\n true,\n );\n document.addEventListener(\n \"keydown\",\n (event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n rememberSource(document.activeElement);\n },\n true,\n );\n}\n\nfunction resolveOrigin(content: HTMLElement): DialogOriginRect | null {\n if (lastSource && Date.now() - lastSource.at < 2000) {\n const rect = lastSource.rect;\n lastSource = null;\n return rect;\n }\n lastSource = null;\n\n const active = document.activeElement;\n if (\n active instanceof Element &&\n active !== content &&\n !content.contains(active) &&\n active.matches(SOURCE_SELECTOR)\n ) {\n return rectOf(active);\n }\n return null;\n}\n\nconst DIALOG_CLOSE_MS = 250;\nconst DialogClosingContext = createContext(false);\nconst DialogRequestCloseContext = createContext<() => void>(() => {});\nconst InDialogContext = createContext(false);\n\n/** Dialog root; owns the delayed close so the fly-out can finish. */\nexport function Dialog({\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof DialogPrimitive.Root>) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(\n defaultOpen ?? false,\n );\n const [closing, setClosing] = useState(false);\n const closingRef = useRef(false);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const open = controlledOpen ?? uncontrolledOpen;\n const openRef = useRef(open);\n openRef.current = open;\n const controlled = controlledOpen !== undefined;\n\n useEffect(() => installSourceTracker(), []);\n\n useEffect(() => {\n if (!controlledOpen) return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n closingRef.current = false;\n setClosing(false);\n }, [controlledOpen]);\n\n useEffect(\n () => () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n },\n [],\n );\n\n const handleOpenChange = (next: boolean) => {\n if (next) {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n closingRef.current = false;\n setClosing(false);\n if (!controlled) setUncontrolledOpen(true);\n onOpenChange?.(true);\n return;\n }\n if (!open || closingRef.current) return;\n\n const reduced =\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (reduced) {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n return;\n }\n\n closingRef.current = true;\n setClosing(true);\n closeTimer.current = setTimeout(() => {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n requestAnimationFrame(() => {\n // Restore the overlay only when a controlled parent vetoed the close.\n if (openRef.current) {\n closingRef.current = false;\n setClosing(false);\n }\n });\n }, DIALOG_CLOSE_MS);\n };\n\n return (\n <DialogRequestCloseContext.Provider value={() => handleOpenChange(false)}>\n <DialogClosingContext.Provider value={closing}>\n <InDialogContext.Provider value={true}>\n <DialogPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </DialogPrimitive.Root>\n </InDialogContext.Provider>\n </DialogClosingContext.Provider>\n </DialogRequestCloseContext.Provider>\n );\n}\n\nexport const DialogTrigger = forwardRef<\n ElementRef<typeof DialogPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>\n>(({ onClick, ...props }, ref) => (\n <DialogPrimitive.Trigger\n ref={ref}\n onClick={(event) => {\n rememberSource(event.currentTarget);\n onClick?.(event);\n }}\n {...props}\n />\n));\nDialogTrigger.displayName = \"DialogTrigger\";\n\nexport const DialogClose = DialogPrimitive.Close;\n\n/** Secondary action that closes through the animated dialog close path. */\nexport const DialogCancel = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"secondary\", children = \"Cancel\", ...props }, ref) => (\n <DialogPrimitive.Close asChild>\n <Button ref={ref} type=\"button\" variant={variant} {...props}>\n {children}\n </Button>\n </DialogPrimitive.Close>\n ),\n);\nDialogCancel.displayName = \"DialogCancel\";\n\nfunction startDialogMotion(content: HTMLDivElement, retry = true) {\n if (content.dataset.dialogMotionStarted === \"true\") return;\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ) {\n return;\n }\n\n const target = rectOf(content);\n if (!target) {\n if (retry) {\n window.requestAnimationFrame(() => startDialogMotion(content, false));\n }\n return;\n }\n\n content.dataset.dialogMotionStarted = \"true\";\n const origin = resolveOrigin(content);\n const flight = origin ? computeDialogFlight(origin, target) : null;\n if (flight) {\n content.style.setProperty(\"--dialog-dx\", `${flight.dx}px`);\n content.style.setProperty(\"--dialog-dy\", `${flight.dy}px`);\n content.style.setProperty(\"--dialog-sx\", String(flight.sx));\n content.style.setProperty(\"--dialog-sy\", String(flight.sy));\n content.classList.add(\"dialog-fly-in\");\n } else {\n // No caller to return to; drop stale flight vars so close fades in place.\n content.style.removeProperty(\"--dialog-dx\");\n content.style.removeProperty(\"--dialog-dy\");\n content.style.removeProperty(\"--dialog-sx\");\n content.style.removeProperty(\"--dialog-sy\");\n content.classList.add(\"dialog-pop-in\");\n }\n\n // Keep the flight vars: the close animation flies back to the same caller.\n const clear = () => {\n content.classList.remove(\"dialog-fly-in\", \"dialog-pop-in\");\n };\n const onEnd = (event: AnimationEvent) => {\n if (event.target !== content) return;\n if (\n event.animationName !== \"dialog-fly-in\" &&\n event.animationName !== \"dialog-pop-in\"\n ) {\n return;\n }\n content.removeEventListener(\"animationend\", onEnd);\n clear();\n };\n content.addEventListener(\"animationend\", onEnd);\n}\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Vertical placement: centered (default) or anchored near the viewport top. */\n placement?: \"center\" | \"top\";\n /** Top edge offset for top placement. Defaults to 11dvh. */\n topOffset?: string;\n /**\n * Entry/exit motion. `auto` flies from the caller when one is known, while\n * `command` uses the compact spring used by command palettes.\n */\n motion?: \"auto\" | \"command\";\n}\n\nfunction dialogTopFallback(offset: string): string {\n return offset.replace(/dvh\\b/g, \"vh\");\n}\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n placement = \"center\",\n topOffset = \"11dvh\",\n motion = \"auto\",\n style,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...props\n },\n ref,\n ) => {\n const closing = useContext(DialogClosingContext);\n const top = placement === \"top\";\n const placementStyle: CSSProperties | undefined = top\n ? ({\n \"--dialog-top-offset\": topOffset,\n \"--dialog-top-offset-fallback\": dialogTopFallback(topOffset),\n } as CSSProperties)\n : undefined;\n const requestClose = useContext(DialogRequestCloseContext);\n const contentRef = useRef<HTMLDivElement>(null);\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n contentRef.current = node;\n if (node && motion === \"auto\") startDialogMotion(node);\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n if (ref) {\n (ref as { current: HTMLDivElement | null }).current = node;\n }\n },\n [motion, ref],\n );\n\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 overflow-hidden bg-overlay backdrop-blur-[3px] data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n !closing &&\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n closing && \"opacity-0 transition-opacity duration-200\",\n )}\n >\n <span\n aria-hidden=\"true\"\n className=\"dialog-noise pointer-events-none absolute inset-0\"\n />\n </DialogPrimitive.Overlay>\n <div\n className={cn(\n \"pointer-events-none fixed inset-0 z-50 flex justify-center overflow-y-auto p-4\",\n top ? \"items-start\" : \"items-center\",\n )}\n >\n <DialogPrimitive.Content\n ref={setRef}\n style={placementStyle ? { ...placementStyle, ...style } : style}\n className={cn(\n \"dialog-content pointer-events-auto relative flex max-h-[min(85vh,44rem)] w-full max-w-[22.4rem] flex-col gap-0 overflow-hidden will-change-[transform,opacity]\",\n \"rounded-2xl border border-(--dialog-shell-border) bg-(--dialog-shell-bg) pb-3 shadow-(--dialog-shell-shadow) sm:pb-4\",\n top && \"dialog-anchor-top\",\n motion === \"command\" && \"dialog-command-motion\",\n closing && \"dialog-closing\",\n \"focus:outline-none\",\n className,\n )}\n onEscapeKeyDown={(event) => {\n onEscapeKeyDown?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n requestClose();\n }}\n onPointerDownOutside={(event) => {\n onPointerDownOutside?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n requestClose();\n }}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3.5 top-3.5 z-10 rounded-sm text-subtle transition-colors hover:text-fg focus-visible:outline-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n );\n },\n);\nDialogContent.displayName = \"DialogContent\";\n\n/**\n * Elevated inner card inside the dialog shell. Flush to the shell's left, top\n * and right edges (the shell clips its top corners); the footer stays below on\n * the shell so the two surfaces read as distinct layers.\n */\nexport function DialogPanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"panel\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col overflow-hidden rounded-b-2xl border-x-0 border-t-0 border-b border-(--dialog-panel-border) bg-(--dialog-panel-bg) shadow-(--dialog-panel-shadow)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Scrollable region inside `DialogPanel`; keeps the footer pinned. */\nexport function DialogBody({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"body\"\n className={cn(\"min-h-0 flex-1 overflow-y-auto px-5 py-4\", className)}\n {...props}\n />\n );\n}\n\nexport function DialogHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"header\"\n className={cn(\n \"flex shrink-0 flex-col gap-1.5 border-b border-(--dialog-panel-border) px-5 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"footer\"\n className={cn(\n \"flex shrink-0 flex-col-reverse gap-2 px-3 pt-3 sm:flex-row sm:px-4 sm:pt-3.5 sm:*:flex-1\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Dialog heading. Standalone-safe: outside a `Dialog` root it renders a plain\n * heading with the same classes (Radix's Title requires a dialog context).\n */\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => {\n const Comp = useContext(InDialogContext)\n ? DialogPrimitive.Title\n : \"h2\";\n return (\n <Comp\n ref={ref}\n className={cn(\"text-base font-semibold text-fg\", className)}\n {...props}\n />\n );\n});\nDialogTitle.displayName = \"DialogTitle\";\n\n/**\n * Dialog body copy. Standalone-safe: outside a `Dialog` root it renders a\n * plain paragraph with the same classes (Radix's Description requires a\n * dialog context).\n */\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => {\n const Comp = useContext(InDialogContext)\n ? DialogPrimitive.Description\n : \"p\";\n return (\n <Comp\n ref={ref}\n className={cn(\"text-sm text-muted\", className)}\n {...props}\n />\n );\n});\nDialogDescription.displayName = \"DialogDescription\";\n","import {\n createContext,\n useContext,\n useId,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { Badge } from \"./badge\";\nimport { cn } from \"./utils\";\n\ninterface RadioGroupContextValue {\n name: string;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps\n extends Omit<HTMLAttributes<HTMLFieldSetElement>, \"onChange\"> {\n /** Accessible group name; also the shared `name` for the native radios. */\n label: string;\n /** Selected value (controlled). */\n value?: string;\n /** Called with the newly selected value. */\n onChange?: (value: string) => void;\n /** Disables every option in the group. */\n disabled?: boolean;\n /** Shared `name` for the native inputs; generated when omitted. */\n name?: string;\n}\n\n/**\n * Vertical group of `RadioCard` options. Built on native `<input type=\"radio\">`\n * inside a `<fieldset>`, so arrow-key navigation, labels and forms work without\n * a dependency. Controlled via `value` / `onChange`.\n */\nexport function RadioGroup({\n label,\n value,\n onChange,\n disabled = false,\n name,\n className,\n children,\n ...props\n}: RadioGroupProps) {\n const generated = useId();\n const groupName = name ?? generated;\n\n return (\n <RadioGroupContext.Provider value={{ name: groupName, value, onChange, disabled }}>\n <fieldset className={cn(\"flex flex-col gap-6\", className)} {...props}>\n <legend className=\"sr-only\">{label}</legend>\n {children}\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioCardProps {\n /** Value reported when this option is selected. */\n value: string;\n /** Primary label. */\n title: ReactNode;\n /** Supporting copy shown under the title. */\n description?: ReactNode;\n /** Optional pill rendered next to the title (e.g. \"Easiest\"). */\n badge?: ReactNode;\n /** Disables just this option. */\n disabled?: boolean;\n className?: string;\n}\n\n/** A single selectable option: radio indicator, title, optional badge + copy. */\nexport function RadioCard({\n value,\n title,\n description,\n badge,\n disabled = false,\n className,\n}: RadioCardProps) {\n const ctx = useContext(RadioGroupContext);\n const describedById = useId();\n if (!ctx) {\n throw new Error(\"RadioCard must be rendered inside a RadioGroup\");\n }\n\n const isDisabled = disabled || ctx.disabled;\n const isChecked = ctx.value === value;\n\n return (\n <label\n className={cn(\n \"group relative flex items-start gap-3\",\n isDisabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <input\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => ctx.onChange?.(value)}\n aria-describedby={description ? describedById : undefined}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden\n className={cn(\n \"mt-[5px] grid size-3.5 shrink-0 place-items-center rounded-full border-2 border-transparent bg-line-strong transition-colors\",\n \"peer-checked:border-4 peer-checked:border-primary peer-checked:bg-primary-fg\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-focus/40 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-canvas\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-base font-semibold text-fg\">{title}</span>\n {badge ? <Badge variant=\"primary\">{badge}</Badge> : null}\n </span>\n {description ? (\n <span id={describedById} className=\"mt-1 block text-sm text-muted\">\n {description}\n </span>\n ) : null}\n </span>\n </label>\n );\n}\n","import { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogPanel,\n DialogTitle,\n DialogTrigger,\n} from \"./dialog\";\nimport { RadioCard, RadioGroup } from \"./radio-group\";\n\nexport interface ChoiceOption {\n value: string;\n title: ReactNode;\n description?: ReactNode;\n badge?: ReactNode;\n}\n\nexport interface ChoiceDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Optional element that opens the dialog. */\n trigger?: ReactNode;\n /** Dialog heading. */\n title: string;\n /** Selectable options, rendered as radio cards. */\n options: ChoiceOption[];\n /** Initially selected value (uncontrolled). */\n defaultValue?: string;\n /** Selected value (controlled). */\n value?: string;\n onValueChange?: (value: string) => void;\n /** Footer labels. */\n cancelLabel?: string;\n confirmLabel?: string;\n /** Called with the selected value when the confirm button is pressed. */\n onConfirm?: (value: string) => void;\n}\n\n/**\n * Dialog for picking one option from a small set, styled as the\n * \"Create production instance\" reference: divided header, radio cards, and a\n * footer with an equal-width secondary Cancel plus primary Continue.\n */\nexport function ChoiceDialog({\n open,\n onOpenChange,\n trigger,\n title,\n options,\n defaultValue,\n value,\n onValueChange,\n cancelLabel = \"Cancel\",\n confirmLabel = \"Continue\",\n onConfirm,\n}: ChoiceDialogProps) {\n const [internal, setInternal] = useState(defaultValue ?? options[0]?.value ?? \"\");\n const selected = value ?? internal;\n\n const select = (next: string) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent\n aria-describedby={undefined}\n className=\"max-w-[29.4rem] [&>button]:hidden\"\n >\n <DialogPanel>\n <DialogHeader>\n <DialogTitle className=\"text-xl\">{title}</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <RadioGroup label={title} value={selected} onChange={select}>\n {options.map((option) => (\n <RadioCard\n key={option.value}\n value={option.value}\n title={option.title}\n description={option.description}\n badge={option.badge}\n />\n ))}\n </RadioGroup>\n </DialogBody>\n </DialogPanel>\n <DialogFooter className=\"gap-3 pt-2.5\">\n <DialogCancel className=\"flex-1\">{cancelLabel}</DialogCancel>\n <Button className=\"flex-1\" onClick={() => onConfirm?.(selected)}>\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { Check, Copy } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface CodeBlockProps {\n code: string;\n /** Short label shown in the header (e.g. a filename or request line). */\n label?: ReactNode;\n language?: string;\n className?: string;\n}\n\nexport function CodeBlock({ code, label, className }: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <TableSurface\n className={className}\n header={\n <div className=\"flex h-(--table-header-h) items-center px-(--table-pad-x) pr-28\">\n <span className=\"truncate text-[13px] font-medium text-table-header\">\n {label}\n </span>\n </div>\n }\n action={{\n label: copied ? \"Copied\" : \"Copy\",\n icon: copied ? (\n <Check className=\"text-success\" weight=\"bold\" />\n ) : (\n <Copy />\n ),\n variant: \"ghost\",\n onClick: copy,\n }}\n panelClassName=\"min-w-0\"\n >\n <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-fg\">\n <code>{code}</code>\n </pre>\n </TableSurface>\n );\n}\n","import { X } from \"@phosphor-icons/react\";\nimport { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype InputSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst HEIGHT: Record<InputSize, string> = {\n sm: \"h-[var(--control-h-sm)] text-sm\",\n md: \"h-[var(--control-h-md)] text-sm\",\n lg: \"h-[var(--control-h-lg)] text-sm\",\n xl: \"h-[var(--control-h-xl)] rounded-lg text-base\",\n};\n\nconst PAD_X: Record<InputSize, string> = {\n sm: \"px-[var(--control-pad-x-sm)]\",\n md: \"px-[var(--control-pad-x-md)]\",\n lg: \"px-[var(--control-pad-x-lg)]\",\n xl: \"px-[var(--control-pad-x-xl)]\",\n};\n\nconst LEAD_INSET: Record<InputSize, string> = {\n sm: \"left-[var(--control-pad-x-sm)]\",\n md: \"left-[var(--control-pad-x-md)]\",\n lg: \"left-[var(--control-pad-x-lg)]\",\n xl: \"left-[var(--control-pad-x-xl)]\",\n};\n\nconst TRAIL_INSET: Record<InputSize, string> = {\n sm: \"right-[var(--control-pad-x-sm)]\",\n md: \"right-[var(--control-pad-x-md)]\",\n lg: \"right-[var(--control-pad-x-lg)]\",\n xl: \"right-[var(--control-pad-x-xl)]\",\n};\n\nconst ICON: Record<InputSize, string> = {\n sm: \"size-[var(--control-icon-sm)]\",\n md: \"size-[var(--control-icon-md)]\",\n lg: \"size-[var(--control-icon-lg)]\",\n xl: \"size-[var(--control-icon-xl)]\",\n};\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /** Control height preset. Defaults to `md`. */\n size?: InputSize;\n /** Optional icon rendered inside the field, before the text. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered inside the field, after the text. */\n trailingIcon?: ReactNode;\n /** Shows a real clear button when the field has a value. */\n onClear?: () => void;\n /** Error styling; also pairs with `helperText` for the message. */\n error?: boolean;\n /** Helper or error message shown below the field (wired to aria-describedby). */\n helperText?: string;\n /** Wrapper class when icons or a helper message render a container. */\n containerClassName?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n containerClassName,\n type = \"text\",\n size = \"md\",\n leadingIcon,\n trailingIcon,\n onClear,\n value,\n defaultValue,\n error = false,\n helperText,\n id,\n \"aria-describedby\": ariaDescribedBy,\n disabled,\n readOnly,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hasMessage = Boolean(helperText);\n const showClear = Boolean(onClear && (value !== undefined ? String(value).length > 0 : defaultValue !== undefined ? String(defaultValue).length > 0 : false));\n const messageId = hasMessage ? `${inputId}-description` : undefined;\n const describedBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n const field = (\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={error || undefined}\n aria-describedby={describedBy}\n style={\n leadingIcon || trailingIcon || showClear\n ? {\n paddingInlineStart: leadingIcon\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n paddingInlineEnd:\n trailingIcon || showClear\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n }\n : undefined\n }\n className={cn(\n \"flex w-full rounded-md border bg-(--input-bg) text-(--input-fg) transition-colors\",\n HEIGHT[size],\n PAD_X[size],\n \"placeholder:text-(--input-placeholder)\",\n \"hover:border-(--input-border-hover)\",\n \"focus-visible:outline-none focus-visible:border-(--input-border-focus) focus-visible:ring-2 focus-visible:ring-focus/30\",\n error &&\n \"border-error hover:border-error focus-visible:border-error focus-visible:ring-error/30\",\n !error && \"border-(--input-border)\",\n type === \"search\" &&\n \"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-ms-clear]:hidden\",\n disabled &&\n \"cursor-not-allowed bg-(--input-bg-disabled) opacity-60 hover:border-(--input-border)\",\n readOnly && \"cursor-default focus-visible:ring-0\",\n className,\n )}\n value={value}\n defaultValue={defaultValue}\n {...props}\n />\n );\n\n // Bare input keeps the historical API when no compositional features are used.\n if (!leadingIcon && !trailingIcon && !showClear && !hasMessage) {\n return field;\n }\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n <div className=\"relative\">\n {leadingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n LEAD_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {leadingIcon}\n </span>\n </span>\n ) : null}\n {field}\n {showClear ? (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 flex items-center text-(--input-placeholder) transition-colors hover:text-(--input-fg)\",\n TRAIL_INSET[size],\n )}\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n <X />\n </span>\n </button>\n ) : trailingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n TRAIL_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {trailingIcon}\n </span>\n </span>\n ) : null}\n </div>\n {hasMessage ? (\n <p\n id={messageId}\n className={cn(\"mt-1.5 text-xs\", error ? \"text-error\" : \"text-muted\")}\n >\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\nInput.displayName = \"Input\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { CaretDown, MagnifyingGlass } from \"@phosphor-icons/react\";\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\n\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"./utils\";\n\nexport interface ComboboxItem {\n value: string;\n label: string;\n /** Secondary line under the label (e.g. an email address). */\n description?: string;\n /** Small pill rendered after the label (e.g. \"Default\"). */\n badge?: string;\n}\n\nexport interface ComboboxProps {\n items: ComboboxItem[];\n /** Selected item value; null shows the placeholder. */\n value: string | null;\n onValueChange: (item: ComboboxItem) => void;\n /**\n * Debounced + trimmed search term (fires after `debounceMs` once the term\n * reaches `minSearchLength`). Omit to filter `items` client-side instead.\n */\n onSearchChange?: (term: string) => void;\n /** True while an async search is running; shows a centered spinner. */\n loading?: boolean;\n /** Minimum search term length before searching/filtering. Default 3. */\n minSearchLength?: number;\n /** Debounce window for the search term, in ms. Default 300. */\n debounceMs?: number;\n placeholder?: string;\n searchPlaceholder?: string;\n /** Shown when a completed search yields no rows. Default \"No results found\". */\n emptyMessage?: string;\n /** Hint below `minSearchLength`; defaults to \"Type at least N characters to search\". */\n hintMessage?: string;\n /** Custom row content; falls back to label + description + badge. */\n renderItem?: (item: ComboboxItem) => ReactNode;\n /** Custom selected-value content; falls back to the item label. */\n renderValue?: (item: ComboboxItem) => ReactNode;\n className?: string;\n contentClassName?: string;\n disabled?: boolean;\n}\n\n/**\n * Searchable select (Clerk \"Select…\" parity): an inline secondary trigger that\n * opens the standard dropdown surface with a search field and item rows.\n * Searching debounces internally; render `items` either pre-filtered by the\n * parent (async search through `onSearchChange` + `loading`) or let the\n * component filter locally when `onSearchChange` is omitted. The content\n * portals and anchors to the trigger with collision flip, so it overlays —\n * it never grows the surrounding layout, and it nests safely inside dialogs.\n */\nexport function Combobox({\n items,\n value,\n onValueChange,\n onSearchChange,\n loading = false,\n minSearchLength = 3,\n debounceMs = 300,\n placeholder = \"Select...\",\n searchPlaceholder = \"Search\",\n emptyMessage = \"No results found\",\n hintMessage,\n renderItem,\n renderValue,\n className,\n contentClassName,\n disabled = false,\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [debounced, setDebounced] = useState(\"\");\n\n // Debounce the search term.\n useEffect(() => {\n const trimmed = query.trim();\n const id = setTimeout(() => setDebounced(trimmed), debounceMs);\n return () => clearTimeout(id);\n }, [query, debounceMs]);\n\n // Report settled debounced terms to async search consumers.\n useEffect(() => {\n if (!onSearchChange) return;\n if (open && debounced.length >= minSearchLength) {\n onSearchChange(debounced);\n }\n }, [debounced, open, minSearchLength, onSearchChange]);\n\n const selected = items.find((item) => item.value === value) ?? null;\n const trimmed = query.trim();\n // Empty query → empty message; 1–2 chars → minimum-length hint;\n // ≥3 chars → spinner while the debounce timer (or parent fetch) is pending.\n const showHint = trimmed.length > 0 && trimmed.length < minSearchLength;\n const pending =\n onSearchChange !== undefined &&\n trimmed.length >= minSearchLength &&\n debounced !== trimmed;\n const hint = hintMessage ?? `Type at least ${minSearchLength} characters to search`;\n\n // Local mode: filter live; async mode: parent owns items.\n const filtered = useMemo(() => {\n if (onSearchChange || trimmed.length === 0) return items;\n const needle = trimmed.toLowerCase();\n return items.filter(\n (item) =>\n item.label.toLowerCase().includes(needle) ||\n (item.description ?? \"\").toLowerCase().includes(needle),\n );\n }, [items, trimmed, onSearchChange]);\n\n const pick = (item: ComboboxItem) => {\n onValueChange(item);\n setOpen(false);\n setQuery(\"\");\n setDebounced(\"\");\n };\n\n const clear = () => {\n setQuery(\"\");\n setDebounced(\"\");\n };\n\n return (\n <PopoverPrimitive.Root\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) clear();\n }}\n >\n <PopoverPrimitive.Trigger\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n className={cn(\n \"group btn-fill btn-inner-border btn-interactive flex h-(--control-h-md) w-full items-center justify-between gap-2 rounded-(--control-radius) bg-(--button-secondary-bg) px-(--control-pad-x-sm) font-medium text-fg hover:bg-(--button-surface-hover) active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n {selected ? (\n renderValue ? (\n renderValue(selected)\n ) : (\n <span className=\"min-w-0 truncate\">{selected.label}</span>\n )\n ) : (\n <span className=\"font-normal text-muted\">{placeholder}</span>\n )}\n <CaretDown\n aria-hidden\n className=\"size-3.5 shrink-0 text-muted transition-transform duration-200 ease-out group-data-[state=open]:rotate-180 motion-reduce:transition-none\"\n />\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n role=\"listbox\"\n aria-label={placeholder}\n align=\"start\"\n sideOffset={4}\n className={cn(\n \"menu-surface btn-inner-border z-50 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"w-(--radix-popper-anchor-width)\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"duration-150 ease-out\",\n contentClassName,\n )}\n onKeyDown={(event) => {\n // Escape closes the combobox, not a surrounding dialog.\n if (event.key === \"Escape\") {\n event.stopPropagation();\n setOpen(false);\n clear();\n }\n }}\n >\n <div className=\"pb-1\">\n <Input\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onClear={() => clear()}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n leadingIcon={<MagnifyingGlass className=\"size-3.5\" />}\n size=\"sm\"\n className=\"h-(--control-h-xs) border-0 bg-(--combobox-search-bg) focus-visible:border-muted focus-visible:ring-0\"\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto\" role=\"presentation\">\n {showHint ? (\n <p className=\"px-2 py-3 text-center text-sm text-muted\">{hint}</p>\n ) : filtered.length > 0 ? (\n filtered.map((item) => (\n <button\n key={item.value}\n type=\"button\"\n role=\"option\"\n aria-selected={item.value === value}\n onClick={() => pick(item)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-2 py-2 text-left transition-colors\",\n item.value === value\n ? \"bg-(--button-surface-active)\"\n : \"hover:bg-(--button-surface-hover)\",\n )}\n >\n {renderItem ? (\n renderItem(item)\n ) : (\n <span className=\"min-w-0\">\n <span className=\"flex items-center gap-1.5\">\n <span className=\"truncate text-sm font-medium text-fg\">\n {item.label}\n </span>\n {item.badge && (\n <span className=\"rounded bg-elevated px-1.5 py-0.5 text-[11px] text-muted\">\n {item.badge}\n </span>\n )}\n </span>\n {item.description && (\n <span className=\"block truncate text-[13px] text-muted\">\n {item.description}\n </span>\n )}\n </span>\n )}\n </button>\n ))\n ) : loading || pending ? (\n <div className=\"flex justify-center py-4\">\n <Spinner className=\"size-5 text-muted\" />\n </div>\n ) : (\n <p className=\"px-2 py-3 text-center text-sm text-muted\">\n {emptyMessage}\n </p>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n","import { Children, isValidElement, type ReactNode } from \"react\";\n\n/** Count matching elements anywhere in a static React children tree. */\nexport function countDescendants(\n children: ReactNode,\n types: readonly unknown[],\n): number {\n let count = 0;\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n if (types.some((type) => type === child.type)) {\n count += 1;\n return;\n }\n const nested = (child.props as { children?: ReactNode }).children;\n if (nested) count += countDescendants(nested, types);\n });\n\n return count;\n}\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { CaretDown, CaretRight, Check } from \"@phosphor-icons/react\";\nimport {\n createContext,\n forwardRef,\n useContext,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { countDescendants } from \"./item-count\";\nimport { cn } from \"./utils\";\n\nconst DropdownMenuEmptyContext = createContext(false);\n\n/** Menu root; disables its trigger when there are no items. */\nexport function DropdownMenu({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>) {\n const empty =\n countDescendants(children, [\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuSubTrigger,\n ]) === 0;\n\n return (\n <DropdownMenuEmptyContext.Provider value={empty}>\n <DropdownMenuPrimitive.Root {...props}>{children}</DropdownMenuPrimitive.Root>\n </DropdownMenuEmptyContext.Provider>\n );\n}\n\nexport const DropdownMenuTrigger = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>\n>(({ className, disabled, ...props }, ref) => {\n const empty = useContext(DropdownMenuEmptyContext);\n\n return (\n <DropdownMenuPrimitive.Trigger\n ref={ref}\n // `group` lets DropdownMenuChevron rotate with the open state, even\n // when the trigger renders through asChild onto a custom button.\n className={cn(\"group\", className)}\n disabled={disabled || empty}\n {...props}\n />\n );\n});\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\nexport const DropdownMenuChevron = forwardRef<\n SVGSVGElement,\n ComponentPropsWithoutRef<typeof CaretDown>\n>(({ className, ...props }, ref) => (\n <CaretDown\n ref={ref}\n aria-hidden\n className={cn(\n \"ml-auto size-3.5 shrink-0 text-subtle transition-transform duration-200 ease-out group-data-[state=open]:rotate-180 motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuChevron.displayName = \"DropdownMenuChevron\";\n\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-fg outline-none transition-colors\",\n \"focus:bg-(--menu-highlight) data-disabled:pointer-events-none data-disabled:opacity-50\",\n \"[&_svg]:size-4 [&_svg]:text-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"group relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none transition-colors focus:bg-(--menu-highlight)\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 shrink-0 items-center justify-center rounded border border-line-strong bg-transparent transition-colors group-data-[state=checked]:border-primary\">\n <DropdownMenuPrimitive.ItemIndicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-(--button-primary-bg) text-(--button-primary-fg) [--button-inner:var(--button-primary-inner)]\">\n <Check className=\"size-3\" weight=\"bold\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nexport const DropdownMenuSubTrigger = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-fg outline-none transition-colors\",\n \"focus:bg-(--menu-highlight) data-[state=open]:bg-(--menu-highlight)\",\n \"[&_svg]:size-4 [&_svg]:text-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <CaretRight className=\"ml-auto shrink-0\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\";\n\nexport const DropdownMenuSubContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n sideOffset={8}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\";\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-line-strong\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CaretDown, Check } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { countDescendants } from \"./item-count\";\nimport { cn } from \"./utils\";\n\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\n/** Select root; disabled when there are no items to choose from. */\nexport function Select({\n children,\n disabled,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Root>) {\n const empty = countDescendants(children, [SelectItem]) === 0;\n\n return (\n <SelectPrimitive.Root disabled={disabled || empty} {...props}>\n {children}\n </SelectPrimitive.Root>\n );\n}\n\nexport interface SelectTriggerProps extends ComponentPropsWithoutRef<\n typeof SelectPrimitive.Trigger\n> {\n /** `field` fills a form; `inline` mimics the compact app dropdown; `ghost` mirrors a ghost button. */\n variant?: \"field\" | \"inline\" | \"ghost\";\n}\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, children, variant = \"field\", ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group flex items-center justify-between gap-2 text-sm text-fg\",\n \"focus:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n variant === \"field\" &&\n \"h-(--control-h-md) w-full rounded-md border border-line bg-surface px-3 focus:border-primary focus:ring-2 focus:ring-focus/30\",\n variant === \"inline\" &&\n \"btn-fill btn-inner-border btn-interactive h-(--control-h-md) w-auto rounded-(--control-radius) border-0 bg-(--button-secondary-bg) px-(--control-pad-x-sm) font-medium text-fg hover:bg-(--button-surface-hover) active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n variant === \"ghost\" &&\n \"btn-inner-border btn-interactive h-(--control-h-md) w-auto rounded-(--control-radius) border-0 px-(--control-pad-x-sm) text-muted hover:bg-(--button-surface-hover) hover:text-fg active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n className,\n )}\n {...props}\n >\n <span className=\"min-w-0 flex-1 truncate text-left\">{children}</span>\n <SelectPrimitive.Icon asChild>\n <span className=\"flex size-4 shrink-0 items-center justify-center\">\n <CaretDown className=\"size-3.5 text-muted transition-transform duration-200 ease-out group-data-[state=open]:rotate-180 motion-reduce:transition-none\" />\n </span>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(\n (\n { className, children, position = \"popper\", sideOffset = 8, ...props },\n ref,\n ) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"p-0\">\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n ),\n);\nSelectContent.displayName = \"SelectContent\";\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none focus:bg-(--menu-highlight) data-disabled:pointer-events-none data-disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\nexport const SelectLabel = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ninterface TableEmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\n/**\n * Centered, contextual empty state for a table panel: an icon chip, a compact\n * heading, supporting text, and an optional action. Typography matches the\n * onboarding empty cards (e.g. the MCP servers card) so tables never shout\n * louder than the surrounding surface.\n */\nexport function TableEmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: TableEmptyStateProps) {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center gap-4 px-6 py-12 text-center\",\n className,\n )}\n >\n {icon ? (\n <div className=\"flex size-12 items-center justify-center rounded-xl border border-line bg-elevated text-subtle [&_svg]:size-5\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-1\">\n <p className=\"text-base font-medium text-table-header-active\">{title}</p>\n {description ? (\n <p className=\"mx-auto max-w-md text-[13px] leading-5 text-table-muted\">\n {description}\n </p>\n ) : null}\n </div>\n {action ? <div className=\"text-table-accent\">{action}</div> : null}\n </div>\n );\n}\n","import {\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n CaretUpDown,\n Columns as ColumnsIcon,\n DotsSixVertical,\n FunnelSimple,\n Lock,\n MagnifyingGlass,\n WarningCircle,\n X,\n} from \"@phosphor-icons/react\";\nimport {\n Fragment,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport { Button } from \"./button\";\nimport { Checkbox } from \"./checkbox\";\nimport { Input } from \"./input\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuChevron,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { TableBody, TableCell, TableRow } from \"./table\";\nimport { TableEmptyState } from \"./table-empty-state\";\nimport {\n TableSurface,\n type TableSurfaceAction,\n type TableSurfaceTone,\n} from \"./table-surface\";\nimport { cn, reorderIds } from \"./utils\";\n\nexport interface Column<T> {\n id: string;\n header: string;\n cell: (row: T) => ReactNode;\n sortable?: boolean;\n sortValue?: (row: T) => string | number | null | undefined;\n numeric?: boolean;\n defaultHidden?: boolean;\n align?: \"left\" | \"right\";\n className?: string;\n /** Advisory only: columns are content-sized; the layout ignores this. */\n width?: string;\n /** Required columns stay visible and cannot be hidden. */\n required?: boolean;\n}\n\nexport interface DataTableFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DataTableFilter<T> {\n id: string;\n label: string;\n options: DataTableFilterOption[];\n value: string[];\n onChange: (value: string[]) => void;\n /** Return true when the row matches the selected filter values. */\n match: (row: T, values: string[]) => boolean;\n}\n\nexport interface BulkAction<T> {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"destructive\";\n onRun: (rows: T[]) => void | Promise<void>;\n disabled?: boolean;\n}\n\nexport interface TabDef {\n id: string;\n label: string;\n}\n\nexport interface DataTableError {\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\ninterface DataTableProps<T> {\n rows: T[];\n columns: Column<T>[];\n getRowId: (row: T) => string;\n\n loading?: boolean;\n error?: DataTableError | null;\n empty?: {\n icon?: ReactNode;\n title: string;\n description?: ReactNode;\n action?: ReactNode;\n };\n\n search?: {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n keys: (row: T) => string;\n };\n filters?: DataTableFilter<T>[];\n toolbarStart?: ReactNode;\n toolbarEnd?: ReactNode;\n /** Show the \"Columns\" visibility/reorder picker in the toolbar. Default true. */\n columnPicker?: boolean;\n\n tabs?: TabDef[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n\n infoBanner?: ReactNode;\n\n selectable?: boolean;\n bulkActions?: BulkAction<T>[];\n\n rowActions?: (row: T) => ReactNode;\n /**\n * Expanding rows: renders a chevron toggle cell at the row start and the\n * returned content in a full-width muted band beneath the row.\n */\n renderExpanded?: (row: T) => ReactNode;\n onRowClick?: (row: T) => void;\n\n defaultSort?: { id: string; dir: \"asc\" | \"desc\" };\n /**\n * Controlled sort state. Pass together with `onSortChange`: header caret\n * clicks then report through the callback instead of mutating internal\n * state, so an external control (e.g. a toolbar \"Sort by\" select) and the\n * headers can drive one shared state.\n */\n sort?: { id: string; dir: \"asc\" | \"desc\" };\n onSortChange?: (sort: { id: string; dir: \"asc\" | \"desc\" } | null) => void;\n pageSize?: number;\n pageSizeOptions?: number[];\n\n /**\n * `auto` (default) hides the pagination footer when all rows fit on one\n * page; `always` keeps it visible whenever there is at least one row.\n */\n pagination?: \"auto\" | \"always\";\n\n /** Surface preset for the table card. */\n tone?: TableSurfaceTone;\n /** Title shown in the card's top band, above the column header. */\n title?: ReactNode;\n /** Supporting text under the title band. */\n description?: ReactNode;\n /** Optional action pinned to the top-right of the header band. */\n headerAction?: ReactNode | TableSurfaceAction;\n /** Header band color/style overrides. */\n headerClassName?: string;\n /** Inner panel color/style overrides. */\n panelClassName?: string;\n\n className?: string;\n}\n\nconst HEADER_CELL =\n \"h-[var(--table-header-h)] whitespace-nowrap px-[var(--table-pad-x)] text-left align-middle text-[0.8125rem] font-medium text-table-header\";\n\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .slice(0, 2)\n .map((p) => p[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n}\n\n/** Jinaan-style identity cell: avatar + primary name + secondary line. */\nexport function DataTableIdentity({\n name,\n secondary,\n image,\n}: {\n name: string;\n secondary?: ReactNode;\n image?: string;\n}) {\n return (\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-8\">\n {image ? <AvatarImage src={image} alt=\"\" /> : null}\n <AvatarFallback>{initials(name)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"truncate font-medium text-table-header-active\">{name}</div>\n {secondary ? <div className=\"truncate text-xs text-table-muted\">{secondary}</div> : null}\n </div>\n </div>\n );\n}\n\n/**\n * Toolbar + single content-sized table inside a TableSurface. Columns fit\n * their widest content (never clipping or overlapping cells) and the surface\n * scrolls horizontally when the columns exceed the viewport.\n */\nexport function DataTable<T>({\n rows,\n columns,\n getRowId,\n loading = false,\n error,\n empty,\n search,\n filters,\n toolbarStart,\n toolbarEnd,\n columnPicker = true,\n tabs,\n activeTab,\n onTabChange,\n infoBanner,\n selectable = false,\n bulkActions,\n rowActions,\n renderExpanded,\n onRowClick,\n defaultSort,\n sort: sortProp,\n onSortChange,\n pageSize: initialPageSize = 25,\n pageSizeOptions = [10, 25, 50, 100],\n pagination = \"auto\",\n tone,\n title,\n description,\n headerAction,\n headerClassName,\n panelClassName,\n className,\n}: DataTableProps<T>) {\n const [hidden, setHidden] = useState<Record<string, boolean>>(() =>\n Object.fromEntries(\n columns.filter((c) => c.defaultHidden && !c.required).map((c) => [c.id, true]),\n ),\n );\n // Column order and runtime pins are per-mount, like `hidden`.\n const [order, setOrder] = useState<string[] | null>(null);\n const [dragId, setDragId] = useState<string | null>(null);\n const [internalSort, setInternalSort] = useState<{ id: string; dir: \"asc\" | \"desc\" } | null>(\n defaultSort ?? null,\n );\n // Controlled when the caller passes onSortChange; uncontrolled otherwise.\n const sort = onSortChange ? sortProp ?? null : internalSort;\n const setSort = (next: { id: string; dir: \"asc\" | \"desc\" } | null) => {\n if (onSortChange) onSortChange(next);\n else setInternalSort(next);\n };\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n const toggleExpanded = (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 const [activeFilterIds, setActiveFilterIds] = useState<string[]>([]);\n\n const propOrder = columns.map((c) => c.id);\n const byId = new Map(columns.map((c) => [c.id, c] as const));\n const orderedColumns = order\n ? order.map((id) => byId.get(id)).filter((c): c is Column<T> => Boolean(c))\n : columns;\n const visibleColumns = orderedColumns.filter((c) => !hidden[c.id]);\n const hiddenColumns = orderedColumns.filter((c) => hidden[c.id] && !c.required);\n // ponytail: mouse-only drag reorder; add keyboard move (Alt+Arrow) if asked.\n const isPinned = (c: Column<T>) => Boolean(c.required);\n const columnAt = (id: string) => byId.get(id);\n\n const moveBefore = (draggedId: string, targetId: string) => {\n const target = targetId ? columnAt(targetId) : undefined;\n if (!target || isPinned(target) || draggedId === targetId) return;\n setOrder((prev) => {\n const ids = prev ?? propOrder;\n return reorderIds(ids, ids.indexOf(draggedId), ids.indexOf(targetId));\n });\n };\n\n const showColumn = (id: string) => {\n setHidden((prev) => ({ ...prev, [id]: false }));\n // Re-showing appends at the end of the current order.\n setOrder((prev) => (prev && prev.includes(id) ? prev : [...(prev ?? propOrder), id]));\n };\n const activeFilters = (filters ?? []).filter((f) => activeFilterIds.includes(f.id));\n const filterSignature = (filters ?? [])\n .map((f) => `${f.id}:${f.value.join(\",\")}`)\n .join(\"|\");\n\n const filtered = useMemo(() => {\n let next = rows;\n for (const filter of filters ?? []) {\n if (filter.value.length > 0) {\n next = next.filter((row) => filter.match(row, filter.value));\n }\n }\n if (!search || !search.value.trim()) return next;\n const q = search.value.trim().toLowerCase();\n return next.filter((r) => search.keys(r).toLowerCase().includes(q));\n }, [rows, search, filters]);\n\n const sorted = useMemo(() => {\n if (!sort) return filtered;\n const col = columns.find((c) => c.id === sort.id);\n if (!col?.sortValue) return filtered;\n const dir = sort.dir === \"asc\" ? 1 : -1;\n return [...filtered].sort((a, b) => {\n const av = col.sortValue!(a);\n const bv = col.sortValue!(b);\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n if (typeof av === \"number\" && typeof bv === \"number\") return (av - bv) * dir;\n return String(av).localeCompare(String(bv)) * dir;\n });\n }, [filtered, sort, columns]);\n\n const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));\n const showPagination =\n !loading && !error && sorted.length > 0 && (pagination === \"always\" || sorted.length > pageSize);\n\n useEffect(() => {\n setPage(0);\n }, [search?.value, pageSize, sort?.id, sort?.dir, activeTab, filterSignature]);\n\n useEffect(() => {\n if (page > pageCount - 1) setPage(pageCount - 1);\n }, [page, pageCount]);\n\n const start = page * pageSize;\n const pageRows = sorted.slice(start, start + pageSize);\n\n const toggleSort = (col: Column<T>) => {\n if (!col.sortable) return;\n const prev = sort;\n setSort(\n prev?.id === col.id\n ? prev.dir === \"asc\"\n ? { id: col.id, dir: \"desc\" }\n : null\n : { id: col.id, dir: \"asc\" },\n );\n };\n\n const allSelected = pageRows.length > 0 && pageRows.every((r) => selected.has(getRowId(r)));\n const someSelected = pageRows.some((r) => selected.has(getRowId(r)));\n const selectedRows = rows.filter((r) => selected.has(getRowId(r)));\n\n const toggleAll = () => {\n setSelected((prev) => {\n const next = new Set(prev);\n if (allSelected) pageRows.forEach((r) => next.delete(getRowId(r)));\n else pageRows.forEach((r) => next.add(getRowId(r)));\n return next;\n });\n };\n\n const toggleOne = (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 const hasToolbar = Boolean(search || filters?.length || toolbarStart || toolbarEnd);\n\n const ariaSort = (c: Column<T>) =>\n sort?.id === c.id ? (sort.dir === \"asc\" ? \"ascending\" : \"descending\") : undefined;\n\n // The visible header lives in the TableSurface band while the body table\n // sizes its columns to their content (table-auto). Keep the band aligned by\n // measuring the rendered body columns and pinning the band colgroup to the\n // same pixel widths; both tables share the surface's horizontal scroller.\n const bodyTableRef = useRef<HTMLTableElement | null>(null);\n const bandTableRef = useRef<HTMLTableElement | null>(null);\n const bandContentRef = useRef<HTMLDivElement | null>(null);\n const scrollerRef = useRef<HTMLDivElement | null>(null);\n const [columnWidths, setColumnWidths] = useState<number[]>([]);\n // Deps must be primitives: visibleColumns is a fresh array every render and\n // would re-run this effect (and its setState) in a loop.\n const columnKey = visibleColumns.map((c) => c.id).join(\"\\u0000\");\n // Identity of the rendered column set (selection, actions, visibility,\n // order). The pinned colgroup maps positionally onto the columns, so any\n // structural change invalidates the measured widths — otherwise the new\n // column steals its neighbor's width and every column shifts by one.\n const structureKey = `${selectable ? \"s\" : \"-\"}|${rowActions ? \"a\" : \"-\"}|${renderExpanded ? \"e\" : \"-\"}|${columnKey}`;\n const structureRef = useRef(structureKey);\n // Column widths are measured from the rendered rows, so any data change\n // (renamed key, new row with longer content) must invalidate the pinned\n // widths — otherwise the stale widths truncate the new content.\n const contentKey = useMemo(() => {\n try {\n return JSON.stringify(rows);\n } catch {\n return `rows:${rows.length}`;\n }\n }, [rows]);\n const contentRef = useRef(contentKey);\n const pinned = columnWidths.length > 0;\n\n // Panel-scroll mode: the band stays fixed to the shell and cannot scroll\n // natively, so it translates by the row scroller's scrollLeft to keep every\n // title over its column. Direct DOM write — no re-render per scroll event.\n const syncBandScroll = useCallback(() => {\n const band = bandContentRef.current;\n const scroller = scrollerRef.current;\n if (band && scroller) band.style.transform = `translateX(${-scroller.scrollLeft}px)`;\n }, []);\n\n useLayoutEffect(() => {\n const table = bodyTableRef.current;\n if (!table) return;\n\n const measure = () => {\n const cells = table.tBodies[0]?.rows.item(0)?.cells;\n if (!cells || cells.length === 0) {\n setColumnWidths((prev) => (prev.length === 0 ? prev : []));\n return;\n }\n // Widths cover every rendered column — including the selection checkbox\n // and row-actions cells — in order, so one <col> per entry maps 1:1 in\n // both colgroups. Never add extra <col> elements alongside these.\n //\n // Header floor: read the th's sizer span, never the th/cell layout\n // itself. Once pinned with w-full, fixed-layout columns render wider\n // than their content (surplus distribution) and reading them back would\n // ratchet totalWidth up to the container size — after any container\n // shrink the stale minWidth would keep a scrollbar alive forever. The\n // sizer span is intrinsic in every state. Widths stay unrounded so the\n // sum is the exact content requirement.\n const bandThs = bandTableRef.current?.querySelectorAll(\"thead th\");\n const widths = Array.from(cells, (cell, i) =>\n Math.max(\n cell.getBoundingClientRect().width,\n bandThs?.item(i)?.querySelector(\"[data-col-sizer]\")?.getBoundingClientRect().width ?? 0,\n ),\n );\n // Bail out when nothing changed: a new array would re-render, and the\n // re-render would re-run this effect, looping forever.\n setColumnWidths((prev) =>\n prev.length === widths.length && prev.every((w, i) => w === widths[i]) ? prev : widths,\n );\n };\n if (structureRef.current !== structureKey || contentRef.current !== contentKey) {\n // Column set or row content changed: drop the pinned widths so the body\n // re-renders content-sized (table-auto) and the next pass measures\n // intrinsic widths again. Without this, the effect would measure the\n // stale colgroup's shifted layout and pin the wrong (truncating) widths.\n structureRef.current = structureKey;\n contentRef.current = contentKey;\n if (pinned) {\n // The widths -> [] state flip re-runs this effect (see `pinned` in the\n // deps); measuring now would read the still-pinned layout.\n setColumnWidths([]);\n return;\n }\n // Already unpinned: no state flip would re-run the effect, so measure\n // the content-sized layout right away.\n }\n\n measure();\n syncBandScroll();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n observer.observe(table);\n return () => observer.disconnect();\n // `pinned` re-runs this effect after the structure reset clears the\n // widths (false) and again after re-pinning (true). Safe to measure in\n // the pinned state because the floor reads sizer spans — intrinsic in\n // every state — never the pinned layout itself.\n }, [structureKey, contentKey, pinned, loading, error, syncBandScroll]);\n\n const totalWidth = columnWidths.reduce((sum, width) => sum + width, 0);\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {tabs && tabs.length > 0 && (\n <div className=\"flex items-center gap-1 border-b border-line\" role=\"tablist\">\n {tabs.map((t) => {\n const active = t.id === activeTab;\n return (\n <button\n key={t.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onTabChange?.(t.id)}\n className={cn(\n \"-mb-px border-b-2 px-3 py-2 text-sm transition-colors\",\n active\n ? \"border-fg font-medium text-fg\"\n : \"border-transparent text-muted hover:text-fg\",\n )}\n >\n {t.label}\n </button>\n );\n })}\n </div>\n )}\n\n {hasToolbar && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {search && (\n <Input\n type=\"search\"\n aria-label={search.placeholder ?? \"Search\"}\n placeholder={search.placeholder ?? \"Search...\"}\n value={search.value}\n onChange={(e) => search.onChange(e.target.value)}\n onClear={() => search.onChange(\"\")}\n leadingIcon={<MagnifyingGlass />}\n containerClassName=\"w-full sm:w-[280px]\"\n className=\"rounded-[6px] border-0 bg-surface shadow-xs ring-1 ring-line\"\n />\n )}\n {toolbarStart}\n {columnPicker && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n leadingIcon={<ColumnsIcon />}\n trailingIcon={<DropdownMenuChevron />}\n >\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-54\">\n <DropdownMenuLabel className=\"text-[13px]\">Active columns</DropdownMenuLabel>\n {visibleColumns.map((c) => {\n const pinned = isPinned(c);\n return (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked\n draggable={!pinned}\n onDragStart={(e) => {\n if (pinned) {\n e.preventDefault();\n return;\n }\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", c.id);\n setDragId(c.id);\n }}\n onDragOver={(e) => {\n if (dragId) {\n e.preventDefault();\n moveBefore(dragId, c.id);\n }\n }}\n onDrop={(e) => e.preventDefault()}\n onDragEnd={() => setDragId(null)}\n onCheckedChange={(next) => {\n if (!next && !pinned) {\n setHidden((prev) => ({ ...prev, [c.id]: true }));\n }\n }}\n onSelect={(e) => e.preventDefault()}\n className=\"justify-between\"\n >\n <span className=\"truncate\">{c.header}</span>\n {pinned ? (\n <Lock className=\"size-3.5 shrink-0 text-subtle\" aria-hidden />\n ) : (\n <DotsSixVertical\n aria-hidden\n className={cn(\n \"size-3.5 shrink-0\",\n dragId === c.id ? \"text-primary\" : \"text-subtle\",\n )}\n />\n )}\n </DropdownMenuCheckboxItem>\n );\n })}\n {hiddenColumns.length > 0 ? (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel className=\"text-[13px]\">Available columns</DropdownMenuLabel>\n {hiddenColumns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked={false}\n onCheckedChange={() => showColumn(c.id)}\n onSelect={(e) => e.preventDefault()}\n >\n {c.header}\n </DropdownMenuCheckboxItem>\n ))}\n </>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {filters && filters.length > 0 ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label=\"Add filter\"\n >\n <FunnelSimple />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-54\">\n {filters.map((filter) => (\n <DropdownMenuItem\n key={filter.id}\n onSelect={() =>\n setActiveFilterIds((prev) =>\n prev.includes(filter.id) ? prev : [...prev, filter.id],\n )\n }\n >\n {filter.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n {toolbarEnd ? <div className=\"flex-0 sm:ml-auto\">{toolbarEnd}</div> : null}\n </div>\n )}\n\n {activeFilters.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeFilters.map((filter) => {\n const clear = () => {\n filter.onChange([]);\n setActiveFilterIds((prev) => prev.filter((id) => id !== filter.id));\n };\n\n return (\n <div key={filter.id} className=\"inline-flex items-center\">\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label={`Remove ${filter.label} filter`}\n className=\"rounded-r-none\"\n onClick={clear}\n >\n <X />\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"secondary\" size=\"md\" className=\"rounded-l-none pl-2\">\n <FunnelSimple />\n <span className=\"font-medium\">{filter.label}</span>\n <span className=\"h-4 w-px bg-line\" aria-hidden />\n <span className=\"text-muted\">\n {filter.value.length > 0\n ? `${filter.value.length} selected`\n : \"Enter value\"}\n </span>\n <CaretDown className=\"text-muted\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-56\">\n <DropdownMenuLabel className=\"text-[13px]\">\n Filter by {filter.label}\n </DropdownMenuLabel>\n {filter.options.map((option) => {\n const checked = filter.value.includes(option.value);\n return (\n <DropdownMenuCheckboxItem\n key={option.value}\n checked={checked}\n onCheckedChange={() =>\n filter.onChange(\n checked\n ? filter.value.filter((value) => value !== option.value)\n : [...filter.value, option.value],\n )\n }\n onSelect={(e) => e.preventDefault()}\n >\n {option.label}\n </DropdownMenuCheckboxItem>\n );\n })}\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={clear}>Clear filter</DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n })}\n <button\n type=\"button\"\n onClick={() => {\n for (const filter of activeFilters) filter.onChange([]);\n setActiveFilterIds([]);\n }}\n className=\"text-sm text-muted transition-colors hover:text-fg\"\n >\n Clear filters\n </button>\n </div>\n ) : null}\n\n {infoBanner}\n\n {selectable && selected.size > 0 && (\n <div className=\"flex flex-wrap items-center gap-3 rounded-lg border border-line bg-elevated px-3 py-2 text-sm\">\n <span className=\"font-medium text-fg\">{selected.size} selected</span>\n <div className=\"flex items-center gap-2\">\n {(bulkActions ?? []).map((a) => (\n <Button\n key={a.label}\n size=\"md\"\n variant={a.variant ?? \"outline\"}\n disabled={a.disabled}\n onClick={() => void a.onRun(selectedRows)}\n >\n {a.icon}\n {a.label}\n </Button>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => setSelected(new Set())}\n className=\"ml-auto inline-flex items-center gap-1 text-xs text-muted hover:text-fg\"\n >\n <X className=\"size-3.5\" />\n Clear\n </button>\n </div>\n )}\n\n <TableSurface\n scrollMode=\"panel\"\n headerContentRef={bandContentRef}\n action={headerAction}\n tone={tone}\n title={title}\n description={description}\n headerClassName={headerClassName}\n panelClassName={panelClassName}\n header={\n // Visible header band. Presentational (aria-sort lives on the body's\n // sr-only thead); widths are pinned to the measured body columns and\n // hidden until the first measurement lands so columns never flash.\n <table\n ref={bandTableRef}\n role=\"presentation\"\n className=\"w-full table-fixed border-collapse\"\n style={{\n // Fill the container when it fits; force totalWidth (and the\n // shared scroller) only when the columns need more room.\n minWidth: totalWidth > 0 ? totalWidth : undefined,\n visibility: totalWidth > 0 ? undefined : \"hidden\",\n }}\n >\n <colgroup>\n {columnWidths.map((width, i) => (\n <col key={i} style={{ width }} />\n ))}\n </colgroup>\n <thead>\n <tr>\n {/* text-left: UA stylesheets center th content; without this\n the select-all checkbox centers in its (surplus-widened)\n column and drifts right of the row checkboxes. */}\n {selectable && (\n <th className=\"h-(--table-header-h) w-11 px-(--table-pad-x) text-left align-middle\">\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected ? true : someSelected ? \"indeterminate\" : false}\n onCheckedChange={toggleAll}\n />\n </th>\n )}\n {renderExpanded && <th className=\"h-(--table-header-h) w-9 px-1.5\" />}\n {visibleColumns.map((c) => (\n <th\n key={c.id}\n className={cn(HEADER_CELL, c.align === \"right\" && \"text-right\", c.className)}\n >\n {/* Sizer: shrink-wraps the title (sort carets included) so\n its rect is the column's intrinsic header width even\n while the fixed layout squeezes the th. The negative\n margins cancel the cell padding the span adds, so the\n measured width is directly comparable to cell widths. */}\n <span\n data-col-sizer\n className=\"inline-block whitespace-nowrap px-(--table-pad-x) -mx-(--table-pad-x)\"\n >\n {c.sortable ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Sort by ${c.header}`}\n onClick={() => toggleSort(c)}\n className={cn(\n \"h-auto gap-1.5 rounded-none px-0 py-0 text-[0.8125rem] text-table-header transition-colors [&_svg]:size-3.5\",\n \"hover:bg-transparent hover:text-table-header-active hover:shadow-none\",\n \"active:scale-100 active:bg-transparent active:shadow-none\",\n sort?.id === c.id && \"text-table-header-active\",\n )}\n >\n {c.header}\n {sort?.id === c.id ? (\n sort.dir === \"asc\" ? (\n <CaretUp className=\"size-3.5\" weight=\"bold\" />\n ) : (\n <CaretDown className=\"size-3.5\" weight=\"bold\" />\n )\n ) : (\n <CaretUpDown className=\"size-3.5 opacity-50\" />\n )}\n </Button>\n ) : (\n c.header\n )}\n </span>\n </th>\n ))}\n {rowActions && (\n <th className=\"h-(--table-header-h) w-44 px-4 align-middle\">\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n </thead>\n </table>\n }\n >\n {/* The scroller lives inside the panel: both shells stay fixed while\n only the row content scrolls, and onScroll keeps the band titles\n translated in lockstep with the rows. */}\n <div ref={scrollerRef} className=\"overflow-x-auto\" onScroll={syncBandScroll}>\n {loading ? (\n <div className=\"space-y-2 p-4\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-11 w-full animate-pulse rounded-lg bg-table-row-hover\" />\n ))}\n </div>\n ) : error ? (\n <div className=\"flex min-h-88 flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n <div className=\"flex size-(--table-empty-icon) items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-error [&_svg]:size-8\">\n <WarningCircle weight=\"duotone\" />\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-[1.75rem] font-semibold text-table-header-active\">\n {error.title}\n </p>\n {error.description ? (\n <p className=\"mx-auto max-w-md text-base leading-relaxed text-table-muted\">\n {error.description}\n </p>\n ) : null}\n </div>\n {error.action}\n </div>\n ) : pageRows.length === 0 ? (\n <TableEmptyState\n icon={empty?.icon}\n title={empty?.title ?? \"No results\"}\n description={empty?.description}\n action={empty?.action}\n />\n ) : (\n <table\n ref={bodyTableRef}\n className={cn(\n \"border-collapse text-left\",\n // Unmeasured: content-sized so intrinsic column widths can be\n // measured (w-full would squeeze columns into the container).\n // Measured: fill the container, pinned to the band's colgroup\n // pixel widths; minWidth forces the shared scroller open only\n // when the columns need more room than the container has.\n columnWidths.length > 0 ? \"w-full table-fixed\" : \"table-auto\",\n )}\n style={{ minWidth: totalWidth > 0 ? totalWidth : undefined }}\n >\n {columnWidths.length > 0 && (\n <colgroup>\n {columnWidths.map((width, i) => (\n <col key={i} style={{ width }} />\n ))}\n </colgroup>\n )}\n {/* Semantic headers for assistive tech; the visible band is presentational. */}\n <thead className=\"sr-only\">\n <tr>\n {selectable && <th scope=\"col\">Select</th>}\n {renderExpanded && <th scope=\"col\">Details</th>}\n {visibleColumns.map((c) => (\n <th key={c.id} scope=\"col\" aria-sort={ariaSort(c)}>\n {c.header}\n </th>\n ))}\n {rowActions && <th scope=\"col\">Actions</th>}\n </tr>\n </thead>\n <TableBody>\n {pageRows.map((row) => {\n const id = getRowId(row);\n const isSelected = selected.has(id);\n const isExpanded = expanded.has(id);\n const columnCount =\n visibleColumns.length +\n (selectable ? 1 : 0) +\n (renderExpanded ? 1 : 0) +\n (rowActions ? 1 : 0);\n return (\n <Fragment key={id}>\n <TableRow\n data-state={isSelected ? \"selected\" : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"cursor-pointer\" : undefined}\n >\n {selectable && (\n <TableCell className=\"w-11\" onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label=\"Select row\"\n checked={isSelected}\n onCheckedChange={() => toggleOne(id)}\n />\n </TableCell>\n )}\n {renderExpanded && (\n <TableCell className=\"w-9 px-1.5\" onClick={(e) => e.stopPropagation()}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n aria-expanded={isExpanded}\n onClick={() => toggleExpanded(id)}\n >\n <CaretDown\n className={cn(\n \"size-3.5 text-muted transition-transform motion-safe:duration-200\",\n isExpanded ? \"\" : \"-rotate-90\",\n )}\n weight=\"bold\"\n />\n </Button>\n </TableCell>\n )}\n {visibleColumns.map((c) => (\n <TableCell\n key={c.id}\n data-numeric={c.numeric ? \"\" : undefined}\n className={cn(c.align === \"right\" && \"text-right\", c.className)}\n >\n {c.cell(row)}\n </TableCell>\n ))}\n {rowActions && (\n <TableCell\n className=\"w-44 px-4 text-right\"\n onClick={(e) => {\n // Dead-zone fix: only swallow clicks on the\n // action controls themselves (menus, buttons);\n // the cell's padding stays part of the clickable\n // row.\n if ((e.target as HTMLElement).closest(\"button, a, input, [role='menuitem']\")) {\n e.stopPropagation();\n }\n }}\n >\n {rowActions(row)}\n </TableCell>\n )}\n </TableRow>\n {renderExpanded && isExpanded ? (\n <TableRow className=\"hover:bg-inherit\" data-expanded=\"\">\n <TableCell\n colSpan={columnCount}\n className=\"border-t border-line bg-elevated/60 px-(--table-pad-x) py-3 align-top text-[13px] text-muted\"\n >\n {renderExpanded(row)}\n </TableCell>\n </TableRow>\n ) : null}\n </Fragment>\n );\n })}\n </TableBody>\n </table>\n )}\n </div>\n </TableSurface>\n\n {showPagination && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 text-sm\">\n <span className=\"text-muted\">\n {start + 1}–{Math.min(start + pageSize, sorted.length)} of {sorted.length}\n </span>\n <div className=\"flex items-center gap-2\">\n <Select value={String(pageSize)} onValueChange={(v) => setPageSize(Number(v))}>\n <SelectTrigger aria-label=\"Rows per page\" className=\"w-27.5\" variant=\"inline\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"secondary\"\n size=\"icon\"\n aria-label=\"Previous page\"\n disabled={page <= 0}\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n >\n <CaretLeft />\n </Button>\n <Button\n variant=\"secondary\"\n size=\"icon\"\n aria-label=\"Next page\"\n disabled={page >= pageCount - 1}\n onClick={() => setPage((p) => Math.min(pageCount - 1, p + 1))}\n >\n <CaretRight />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <TableSurface className={className}>\n <div className=\"flex flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n {icon ? (\n <div className=\"flex size-11 items-center justify-center rounded-xl border border-line bg-elevated text-subtle [&_svg]:size-6\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n {description ? (\n <p className=\"mx-auto max-w-sm text-sm text-muted\">{description}</p>\n ) : null}\n </div>\n {action}\n </div>\n </TableSurface>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { Input, type InputProps } from \"./input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { cn } from \"./utils\";\n\nexport interface InputSelectOption {\n value: string;\n label: string;\n}\n\nexport interface InputSelectProps\n extends Omit<InputProps, \"className\" | \"containerClassName\" | \"onClear\"> {\n /** Selected value for the right-hand inline dropdown. */\n selectValue: string;\n onSelectChange: (value: string) => void;\n selectOptions: InputSelectOption[];\n selectAriaLabel: string;\n selectPlaceholder?: string;\n /** Outer wrapper class. */\n className?: string;\n inputClassName?: string;\n selectClassName?: string;\n}\n\n/**\n * Joined text/number input with an inline select on the right. The input keeps\n * its right corners square and the dropdown keeps its left corners square so\n * they read as one control.\n */\nexport const InputSelect = forwardRef<HTMLInputElement, InputSelectProps>(\n (\n {\n className,\n inputClassName,\n selectClassName,\n selectValue,\n onSelectChange,\n selectOptions,\n selectAriaLabel,\n selectPlaceholder,\n id,\n size,\n disabled,\n ...inputProps\n },\n ref,\n ) => (\n <div className={cn(\"flex w-full items-stretch\", className)}>\n <Input\n {...inputProps}\n ref={ref}\n id={id}\n size={size}\n disabled={disabled}\n className={cn(\n \"min-w-0 rounded-l-(--control-radius) rounded-r-none\",\n inputClassName,\n )}\n />\n <Select\n value={selectValue}\n onValueChange={onSelectChange}\n disabled={disabled}\n >\n <SelectTrigger\n aria-label={selectAriaLabel}\n variant=\"ghost\"\n className={cn(\n \"min-w-28 shrink-0 rounded-l-none border border-(--input-border) border-l-0 px-3 text-[13px] font-normal\",\n selectClassName,\n )}\n >\n <SelectValue placeholder={selectPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {selectOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ),\n);\nInputSelect.displayName = \"InputSelect\";\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/** Inline keyboard hint chip. */\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n \"inline-flex h-5 min-w-5 items-center justify-center rounded border border-line bg-elevated px-1.5 font-mono text-[11px] font-medium text-subtle\",\n className,\n )}\n {...props}\n />\n );\n}\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"mb-2.5 block text-sm font-medium text-fg leading-none last:mb-0 peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n","import { useId, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport interface SegmentedOption<T extends string> {\n value: T;\n label: ReactNode;\n icon?: ReactNode;\n}\n\ninterface SegmentedProps<T extends string> {\n value: T;\n onValueChange: (value: T) => void;\n options: SegmentedOption<T>[];\n size?: \"sm\" | \"md\";\n className?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Single-choice control for a small set of options, styled after the Jinaan\n * dashboard: a recessed track with an elevated selected pill. Implemented as a\n * `radiogroup` of native radios, so arrow-key roving and forms work natively.\n */\nexport function Segmented<T extends string>({\n value,\n onValueChange,\n options,\n size = \"sm\",\n className,\n ...rest\n}: SegmentedProps<T>) {\n const name = useId();\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={rest[\"aria-label\"]}\n className={cn(\n \"inline-flex w-fit items-center rounded-lg border border-line bg-canvas\",\n size === \"sm\" ? \"h-(--control-h-sm)\" : \"h-(--control-h-md)\",\n className,\n )}\n >\n {options.map((option) => {\n const active = option.value === value;\n return (\n <label\n key={option.value}\n className={cn(\n \"inline-flex h-full cursor-pointer items-center justify-center gap-1.5 rounded-md text-sm font-medium transition-colors\",\n \"has-focus-visible:ring-2 has-focus-visible:ring-focus/40\",\n size === \"sm\"\n ? \"px-(--control-pad-x-sm) [&_svg]:size-(--control-icon-sm)\"\n : \"px-(--control-pad-x-md) [&_svg]:size-(--control-icon-md)\",\n active\n ? \"btn-fill bg-(--button-secondary-bg) text-fg\"\n : \"text-muted hover:text-fg\",\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={active}\n onChange={() => onValueChange(option.value)}\n className=\"sr-only\"\n />\n {option.icon}\n {option.label}\n </label>\n );\n })}\n </div>\n );\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-line\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n));\nSeparator.displayName = \"Separator\";\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-elevated\", className)}\n {...props}\n />\n );\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border border-line bg-elevated px-2 py-1 text-xs text-fg shadow-md\",\n \"data-[state=delayed-open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=delayed-open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=delayed-open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1\",\n \"data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = \"TooltipContent\";\n"],"names":["cn","inputs","twMerge","clsx","reorderIds","ids","from","to","next","moved","Spinner","className","jsx","CircleNotch","buttonVariants","cva","iconSize","Button","forwardRef","variant","size","asChild","leadingIcon","trailingIcon","iconOnly","loading","fullWidth","disabled","children","props","ref","Comp","Slot","icon","jsxs","AgentPrompt","command","tag","copied","setCopied","useState","copy","Robot","Terminal","Check","Copy","Avatar","AvatarPrimitive","AvatarImage","AvatarFallback","badgeVariants","dotVariants","Badge","dot","variants","Info","CheckCircle","Warning","XCircle","Callout","title","DefaultIcon","tone","iconClassName","TableContainer","TablePanel","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","SHELL_TONE","PANEL_TONE","isActionConfig","action","TableSurface","description","header","headerClassName","panelClassName","footer","footerClassName","minHeight","scrollMode","headerContentRef","hasTitle","panelScroll","actionNode","band","panel","Fragment","splitCardChildren","nodes","Children","headers","child","isValidElement","CardHeader","Card","body","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","CheckboxPrimitive","Minus","usable","rect","clampScale","value","computeDialogFlight","origin","target","SOURCE_SELECTOR","lastSource","trackerInstalled","rectOf","element","rememberSource","installSourceTracker","event","resolveOrigin","content","active","DIALOG_CLOSE_MS","DialogClosingContext","createContext","DialogRequestCloseContext","InDialogContext","Dialog","controlledOpen","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","closing","setClosing","closingRef","useRef","closeTimer","open","openRef","controlled","useEffect","handleOpenChange","DialogPrimitive","DialogTrigger","onClick","DialogClose","DialogCancel","startDialogMotion","retry","flight","clear","onEnd","dialogTopFallback","offset","DialogContent","placement","topOffset","motion","style","onEscapeKeyDown","onPointerDownOutside","useContext","top","placementStyle","requestClose","contentRef","setRef","useCallback","node","X","DialogPanel","DialogBody","DialogHeader","DialogFooter","DialogTitle","DialogDescription","RadioGroupContext","RadioGroup","label","onChange","name","generated","useId","groupName","RadioCard","badge","ctx","describedById","isDisabled","isChecked","_a","ChoiceDialog","trigger","options","defaultValue","onValueChange","cancelLabel","confirmLabel","onConfirm","internal","setInternal","selected","option","CodeBlock","code","HEIGHT","PAD_X","LEAD_INSET","TRAIL_INSET","ICON","Input","containerClassName","type","onClear","error","helperText","id","ariaDescribedBy","readOnly","autoId","inputId","hasMessage","showClear","messageId","describedBy","field","Combobox","items","onSearchChange","minSearchLength","debounceMs","placeholder","searchPlaceholder","emptyMessage","hintMessage","renderItem","renderValue","contentClassName","setOpen","query","setQuery","debounced","setDebounced","trimmed","item","showHint","pending","hint","filtered","useMemo","needle","pick","PopoverPrimitive","CaretDown","MagnifyingGlass","countDescendants","types","count","nested","DropdownMenuEmptyContext","DropdownMenu","empty","DropdownMenuItem","DropdownMenuCheckboxItem","DropdownMenuSubTrigger","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuChevron","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuContent","sideOffset","inset","checked","DropdownMenuLabel","DropdownMenuSub","CaretRight","DropdownMenuSubContent","DropdownMenuSeparator","SelectGroup","SelectPrimitive","SelectValue","Select","SelectItem","SelectTrigger","SelectContent","position","SelectLabel","TableEmptyState","HEADER_CELL","initials","p","DataTableIdentity","secondary","image","DataTable","rows","columns","getRowId","search","filters","toolbarStart","toolbarEnd","columnPicker","tabs","activeTab","onTabChange","infoBanner","selectable","bulkActions","rowActions","renderExpanded","onRowClick","defaultSort","sortProp","onSortChange","initialPageSize","pageSizeOptions","pagination","headerAction","hidden","setHidden","c","order","setOrder","dragId","setDragId","internalSort","setInternalSort","sort","setSort","page","setPage","pageSize","setPageSize","setSelected","expanded","setExpanded","toggleExpanded","prev","activeFilterIds","setActiveFilterIds","propOrder","byId","orderedColumns","visibleColumns","hiddenColumns","isPinned","columnAt","moveBefore","draggedId","targetId","showColumn","activeFilters","f","filterSignature","filter","row","q","r","sorted","col","dir","a","b","av","bv","pageCount","showPagination","start","pageRows","toggleSort","allSelected","someSelected","selectedRows","toggleAll","toggleOne","hasToolbar","ariaSort","bodyTableRef","bandTableRef","bandContentRef","scrollerRef","columnWidths","setColumnWidths","columnKey","structureKey","structureRef","contentKey","pinned","syncBandScroll","scroller","useLayoutEffect","table","measure","cells","_b","bandThs","_c","widths","cell","i","w","observer","totalWidth","sum","width","t","e","ColumnsIcon","Lock","DotsSixVertical","FunnelSimple","CaretUp","CaretUpDown","WarningCircle","isSelected","isExpanded","columnCount","v","n","CaretLeft","EmptyState","InputSelect","inputClassName","selectClassName","selectValue","onSelectChange","selectOptions","selectAriaLabel","selectPlaceholder","inputProps","Kbd","Label","LabelPrimitive","Segmented","rest","Separator","orientation","decorative","SeparatorPrimitive","Skeleton","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils.ts","../src/spinner.tsx","../src/button.tsx","../src/agent-prompt.tsx","../src/avatar.tsx","../src/badge.tsx","../src/callout.tsx","../src/table.tsx","../src/table-surface.tsx","../src/card.tsx","../src/checkbox.tsx","../src/dialog-motion.ts","../src/dialog.tsx","../src/radio-group.tsx","../src/choice-dialog.tsx","../src/code-block.tsx","../src/input.tsx","../src/combobox.tsx","../src/item-count.ts","../src/dropdown-menu.tsx","../src/select.tsx","../src/table-empty-state.tsx","../src/data-table.tsx","../src/empty-state.tsx","../src/input-select.tsx","../src/kbd.tsx","../src/label.tsx","../src/segmented.tsx","../src/separator.tsx","../src/skeleton.tsx","../src/tooltip.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/** Merge conditional class names with Tailwind conflict resolution. */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n\n/** Move the id at `from` so it sits at `to`; no-op when indexes match. */\nexport function reorderIds(ids: string[], from: number, to: number): string[] {\n if (from === to || from < 0 || to < 0 || from >= ids.length || to >= ids.length) {\n return ids;\n }\n const next = [...ids];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n return next;\n}\n","import { CircleNotch } from \"@phosphor-icons/react\";\n\nimport { cn } from \"./utils\";\n\nexport function Spinner({ className }: { className?: string }) {\n return (\n <CircleNotch\n className={cn(\"size-4 animate-spin text-muted\", className)}\n weight=\"bold\"\n aria-hidden\n />\n );\n}\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { forwardRef, type ButtonHTMLAttributes, type ReactNode } from \"react\";\n\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"./utils\";\n\nconst buttonVariants = cva(\n \"relative inline-flex select-none items-center justify-center gap-[var(--control-gap)] whitespace-nowrap rounded-[var(--control-radius)] border border-transparent font-medium transition-[color,background-color,border-color,box-shadow,transform] duration-[120ms] active:scale-[0.97] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong disabled:pointer-events-none disabled:opacity-50\",\n {\n variants: {\n variant: {\n primary:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-primary-inner)] bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] hover:bg-[var(--button-primary-hover)] active:bg-[var(--button-primary-active)]\",\n secondary:\n \"btn-fill btn-inner-border btn-interactive border-0 bg-[var(--button-secondary-bg)] text-fg hover:bg-[var(--button-surface-hover)] active:bg-[var(--button-surface-active)]\",\n outline:\n \"btn-interactive border-[var(--button-outline-border)] bg-transparent text-fg hover:border-fg/12 hover:bg-[var(--button-surface-hover)] active:border-fg/12 active:bg-[var(--button-surface-active)] dark:hover:border-[var(--button-outline-border)] dark:active:border-[var(--button-outline-border)]\",\n ghost:\n \"btn-inner-border btn-interactive border-0 text-muted hover:bg-[var(--button-surface-hover)] hover:text-fg active:bg-[var(--button-surface-active)]\",\n destructive:\n \"btn-fill btn-inner-border border-0 [--button-inner:var(--button-destructive-inner)] bg-[var(--button-destructive-bg)] text-[var(--button-destructive-fg)] hover:bg-[var(--button-destructive-hover)] active:bg-[var(--button-destructive-active)]\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-[var(--control-h-xs)] [--control-gap:var(--control-gap-xs)] px-[var(--control-pad-x-xs)] text-xs [&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"h-[var(--control-h-sm)] px-[var(--control-pad-x-sm)] text-sm [&_svg]:size-[var(--control-icon-sm)]\",\n md: \"h-[var(--control-h-md)] px-[var(--control-pad-x-md)] text-sm [&_svg]:size-[var(--control-icon-md)]\",\n lg: \"h-[var(--control-h-lg)] px-[var(--control-pad-x-lg)] text-sm [&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"rounded-[var(--control-radius-xl)] h-[var(--control-h-xl)] px-[var(--control-pad-x-xl)] text-base [&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"h-[var(--control-h-md)] w-[var(--control-h-md)] p-0 [&_svg]:size-[var(--control-icon-md)]\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\n/** Icon metrics per size, applied to icon wrappers so both stay aligned. */\nconst iconSize: Record<string, string> = {\n xs: \"[&_svg]:size-[var(--control-icon-xs)]\",\n sm: \"[&_svg]:size-[var(--control-icon-sm)]\",\n md: \"[&_svg]:size-[var(--control-icon-md)]\",\n lg: \"[&_svg]:size-[var(--control-icon-lg)]\",\n xl: \"[&_svg]:size-[var(--control-icon-xl)]\",\n icon: \"[&_svg]:size-[var(--control-icon-md)]\",\n};\n\nexport interface ButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n /** Optional icon rendered before the label. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered after the label (e.g. a chevron). */\n trailingIcon?: ReactNode;\n /** Square, content-free button. Provide `aria-label`. */\n iconOnly?: boolean;\n /** Show a spinner and block interaction while an action runs. */\n loading?: boolean;\n /** Stretch to the container width. */\n fullWidth?: boolean;\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size = \"md\",\n asChild = false,\n leadingIcon,\n trailingIcon,\n iconOnly = false,\n loading = false,\n fullWidth = false,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : \"button\";\n const icon = iconSize[size ?? \"md\"];\n\n return (\n <Comp\n ref={ref}\n aria-busy={loading || undefined}\n disabled={asChild ? undefined : disabled || loading}\n className={cn(\n buttonVariants({ variant, size }),\n iconOnly && \"aspect-square px-0\",\n fullWidth && \"w-full\",\n loading && \"disabled:opacity-100\",\n className,\n )}\n {...props}\n >\n {asChild ? (\n children\n ) : (\n <span className=\"relative inline-flex w-full items-center [justify-content:inherit] gap-(--control-gap)\">\n <span\n className={cn(\n \"inline-flex w-full items-center [justify-content:inherit] gap-(--control-gap) transition-[opacity,translate] duration-150 ease-out motion-reduce:transition-none\",\n loading && \"translate-y-2 opacity-0\",\n )}\n aria-hidden={loading || undefined}\n >\n {!loading && leadingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {leadingIcon}\n </span>\n ) : null}\n {children}\n {!loading && trailingIcon ? (\n <span className={cn(\"inline-flex shrink-0\", icon)} aria-hidden>\n {trailingIcon}\n </span>\n ) : null}\n </span>\n <span\n data-button-spinner\n className={cn(\n \"pointer-events-none absolute inset-0 flex items-center justify-center transition-[opacity,translate] duration-150 ease-out motion-reduce:transition-none\",\n loading ? \"translate-y-0 opacity-100\" : \"-translate-y-2 opacity-0\",\n )}\n aria-hidden\n >\n <Spinner className={cn(\"text-current\", icon)} />\n </span>\n </span>\n )}\n </Comp>\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { buttonVariants };\n","import { Check, Copy, Robot, Terminal } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport { cn } from \"./utils\";\n\ninterface AgentPromptProps {\n /** Command or prompt text; copy copies this verbatim. */\n command: string;\n /** Overlapping dark tag above the pill. */\n tag?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\n/**\n * The \"Add Jinaan auth to my app\" prompt pill: a dark tag overlapping a\n * rounded command field with a copy button.\n */\nexport function AgentPrompt({\n command,\n tag = \"Build with agents\",\n icon,\n className,\n}: AgentPromptProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(command);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <div className={cn(\"relative inline-flex max-w-full\", className)}>\n <span className=\"absolute -top-2.5 left-4 z-10 inline-flex items-center gap-1.5 rounded-md bg-fg px-2 py-1 text-[11px] font-medium text-canvas shadow-sm\">\n {icon ?? <Robot className=\"size-3.5\" weight=\"fill\" />}\n {tag}\n </span>\n <div className=\"mt-2 flex w-full items-center gap-2 rounded-xl border border-line bg-surface py-2 pl-3 pr-2 shadow-sm\">\n <Terminal className=\"size-4 shrink-0 text-subtle\" aria-hidden />\n <span className=\"truncate font-mono text-sm text-fg\">{command}</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n iconOnly\n aria-label=\"Copy prompt\"\n className=\"ml-auto\"\n onClick={copy}\n >\n {copied ? <Check className=\"text-success\" weight=\"bold\" /> : <Copy />}\n </Button>\n </div>\n </div>\n );\n}\n","import * as AvatarPrimitive from \"@radix-ui/react-avatar\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Avatar = forwardRef<\n ElementRef<typeof AvatarPrimitive.Root>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn(\n \"relative flex size-8 shrink-0 overflow-hidden rounded-full border border-line\",\n className,\n )}\n {...props}\n />\n));\nAvatar.displayName = \"Avatar\";\n\nexport const AvatarImage = forwardRef<\n ElementRef<typeof AvatarPrimitive.Image>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn(\"aspect-square size-full object-cover\", className)}\n {...props}\n />\n));\nAvatarImage.displayName = \"AvatarImage\";\n\nexport const AvatarFallback = forwardRef<\n ElementRef<typeof AvatarPrimitive.Fallback>,\n ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n \"flex size-full items-center justify-center bg-elevated text-xs font-medium text-muted\",\n className,\n )}\n {...props}\n />\n));\nAvatarFallback.displayName = \"AvatarFallback\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center gap-1.5 rounded-md border px-2 py-0.5 text-xs font-medium\",\n {\n variants: {\n variant: {\n neutral: \"border-line bg-elevated text-muted\",\n outline: \"border-line bg-transparent text-muted\",\n success: \"border-success/30 bg-success/10 text-success\",\n warning: \"border-warning/30 bg-warning/10 text-warning\",\n error: \"border-error/30 bg-error/10 text-error\",\n info: \"border-info/30 bg-info/10 text-info\",\n primary: \"border-primary/30 bg-primary/10 text-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n },\n);\n\nconst dotVariants = cva(\"size-1.5 shrink-0 rounded-full\", {\n variants: {\n variant: {\n neutral: \"bg-subtle\",\n outline: \"bg-subtle\",\n success: \"bg-success\",\n warning: \"bg-warning\",\n error: \"bg-error\",\n info: \"bg-info\",\n primary: \"bg-primary\",\n },\n },\n defaultVariants: { variant: \"neutral\" },\n});\n\nexport interface BadgeProps\n extends HTMLAttributes<HTMLSpanElement>,\n VariantProps<typeof badgeVariants> {\n dot?: boolean;\n}\n\nexport function Badge({ className, variant, dot = false, children, ...props }: BadgeProps) {\n return (\n <span className={cn(badgeVariants({ variant }), className)} {...props}>\n {dot ? <span className={cn(dotVariants({ variant }))} aria-hidden /> : null}\n {children}\n </span>\n );\n}\n\nexport { badgeVariants };\n","import {\n CheckCircle,\n Info,\n Warning,\n XCircle,\n} from \"@phosphor-icons/react\";\nimport type { Icon } from \"@phosphor-icons/react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype CalloutVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nconst variants: Record<\n CalloutVariant,\n { Icon: Icon; className: string; iconClassName: string }\n> = {\n info: {\n Icon: Info,\n className: \"border-info/30 bg-info/10\",\n iconClassName: \"text-info\",\n },\n success: {\n Icon: CheckCircle,\n className: \"border-success/30 bg-success/10\",\n iconClassName: \"text-success\",\n },\n warning: {\n Icon: Warning,\n className: \"border-warning/30 bg-warning/10\",\n iconClassName: \"text-warning\",\n },\n error: {\n Icon: XCircle,\n className: \"border-error/30 bg-error/10\",\n iconClassName: \"text-error\",\n },\n};\n\ninterface CalloutProps {\n variant?: CalloutVariant;\n title?: ReactNode;\n children?: ReactNode;\n icon?: ReactNode;\n className?: string;\n}\n\nexport function Callout({\n variant = \"info\",\n title,\n children,\n icon,\n className,\n}: CalloutProps) {\n const { Icon: DefaultIcon, className: tone, iconClassName } = variants[variant];\n return (\n <div\n role={variant === \"error\" ? \"alert\" : undefined}\n className={cn(\n \"flex items-start gap-2.5 rounded-lg border px-3.5 py-3 text-sm\",\n \"animate-in fade-in-0 slide-in-from-top-1 duration-200 motion-reduce:animate-none\",\n tone,\n className,\n )}\n >\n <span className={cn(\"mt-0.5 shrink-0 [&_svg]:size-4\", iconClassName)}>\n {icon ?? <DefaultIcon weight=\"fill\" />}\n </span>\n <div className=\"min-w-0 space-y-0.5\">\n {title ? <p className=\"font-medium text-fg\">{title}</p> : null}\n {children ? <div className=\"text-muted\">{children}</div> : null}\n </div>\n </div>\n );\n}\n","import type { HTMLAttributes, TdHTMLAttributes, ThHTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/**\n * Outer table shell: near-black surface with generous rounding that holds the\n * header row and the inset inner panel. Surface contrast, not borders/shadows.\n */\nexport function TableContainer({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"w-full overflow-hidden rounded-(--table-radius-outer) bg-table-container p-(--table-inset)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Inset panel holding the table body (and its empty/loading/error states). */\nexport function TablePanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\n \"overflow-hidden rounded-(--table-radius-panel) border border-table-panel-border bg-table-panel\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function Table({ className, ...props }: HTMLAttributes<HTMLTableElement>) {\n return (\n <table\n className={cn(\"w-full table-fixed border-collapse caption-bottom text-sm\", className)}\n {...props}\n />\n );\n}\n\nexport function TableHeader({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <thead className={className} {...props} />;\n}\n\nexport function TableBody({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>) {\n return <tbody className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />;\n}\n\nexport function TableRow({ className, ...props }: HTMLAttributes<HTMLTableRowElement>) {\n return (\n <tr\n className={cn(\n \"border-b border-table-panel-border transition-colors last:border-0 hover:bg-table-row-hover data-[state=selected]:bg-table-row-selected\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableHead({ className, ...props }: ThHTMLAttributes<HTMLTableCellElement>) {\n return (\n <th\n className={cn(\n \"h-(--table-header-h) whitespace-nowrap px-(--table-pad-x) text-left align-middle text-[0.8125rem] font-medium text-table-header\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function TableCell({ className, ...props }: TdHTMLAttributes<HTMLTableCellElement>) {\n return (\n <td\n className={cn(\n \"whitespace-nowrap px-(--table-pad-x) py-3 align-middle text-sm text-table-row data-numeric:font-numeric data-numeric:tabular-nums\",\n className,\n )}\n {...props}\n />\n );\n}\n","import type { ReactNode, Ref } from \"react\";\n\nimport { Button } from \"./button\";\nimport { TableContainer, TablePanel } from \"./table\";\nimport { cn } from \"./utils\";\n\nexport type TableSurfaceTone = \"default\" | \"muted\" | \"transparent\";\n\nexport interface TableSurfaceAction {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"ghost\" | \"destructive\";\n onClick?: () => void;\n href?: string;\n disabled?: boolean;\n}\n\ninterface TableSurfaceProps {\n /** Title above the header row. */\n title?: ReactNode;\n /** Supporting text under the title. */\n description?: ReactNode;\n /** Header row content (a single row of column cells). */\n header?: ReactNode;\n /** Panel content: the body table, or an empty / loading / error state. */\n children: ReactNode;\n /** Optional action at the top-right of the header band. */\n action?: ReactNode | TableSurfaceAction;\n /** Surface preset; `className` / `headerClassName` / `panelClassName` win. */\n tone?: TableSurfaceTone;\n /** Outer shell overrides (background, radius, padding, …). */\n className?: string;\n /** Header band overrides (background, text color, …). */\n headerClassName?: string;\n /** Inner panel overrides (background, border color, …). */\n panelClassName?: string;\n /** Optional footer strip in the outer shell, below the panel (hairline top border). */\n footer?: ReactNode;\n /** Footer strip overrides (padding, colors, …). */\n footerClassName?: string;\n /** Minimum panel height; keeps empty states from collapsing. */\n minHeight?: string;\n /**\n * Where horizontal scrolling lives. `surface` (default) scrolls band and\n * panel together — right for short content. `panel` keeps both shells fixed\n * while the caller puts the scroller inside the panel; the band content is\n * then expected to translate in lockstep via `headerContentRef`.\n */\n scrollMode?: \"surface\" | \"panel\";\n /** Panel mode only: ref for the band's translating inner wrapper. */\n headerContentRef?: Ref<HTMLDivElement>;\n}\n\nconst SHELL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-container\",\n muted: \"bg-surface border border-line\",\n transparent: \"bg-transparent\",\n};\n\nconst PANEL_TONE: Record<TableSurfaceTone, string> = {\n default: \"bg-table-panel border-table-panel-border\",\n muted: \"bg-elevated border-line\",\n transparent: \"bg-transparent border-line\",\n};\n\nfunction isActionConfig(\n action: ReactNode | TableSurfaceAction,\n): action is TableSurfaceAction {\n return (\n typeof action === \"object\" &&\n action !== null &&\n \"label\" in action &&\n typeof (action as TableSurfaceAction).label === \"string\"\n );\n}\n\n/**\n * Layered table surface: an outer shell holding a header band and an inset\n * inner panel. Header and panel share one horizontal scroller so their columns\n * stay aligned; the optional action stays pinned to the header's top-right.\n * Colors come from the `--table-*` tokens and can be adjusted per surface with\n * `tone` plus `headerClassName` / `panelClassName`.\n */\nexport function TableSurface({\n title,\n description,\n header,\n children,\n action,\n tone = \"default\",\n className,\n headerClassName,\n panelClassName,\n footer,\n footerClassName,\n minHeight,\n scrollMode = \"surface\",\n headerContentRef,\n}: TableSurfaceProps) {\n const hasTitle = Boolean(title || description);\n const panelScroll = scrollMode === \"panel\";\n const actionNode = isActionConfig(action) ? (\n <Button\n variant={action.variant ?? \"primary\"}\n size=\"xs\"\n leadingIcon={action.href ? undefined : action.icon}\n onClick={action.onClick}\n disabled={action.disabled}\n asChild={Boolean(action.href)}\n >\n {action.href ? (\n <a href={action.href}>\n {action.icon}\n {action.label}\n </a>\n ) : (\n action.label\n )}\n </Button>\n ) : (\n action\n );\n\n const band =\n header || hasTitle ? (\n // Header rows must not inherit the body row hover surface. Panel mode\n // clips the band instead of scrolling it; the caller translates the\n // inner wrapper so titles track the row content. px-px mirrors the\n // panel's 1px border so band and body share the same width context —\n // identical fixed-layout distribution keeps every column aligned.\n <div\n className={cn(\n \"[--table-row-hover:transparent] text-table-header\",\n panelScroll && \"overflow-hidden px-px\",\n headerClassName,\n )}\n >\n {hasTitle ? (\n <div\n className={cn(\n \"px-(--table-pad-x) pb-3 pt-4\",\n actionNode && \"pr-28\",\n )}\n >\n {title ? (\n <div className=\"text-sm font-semibold text-fg\">{title}</div>\n ) : null}\n {description ? (\n <div className=\"mt-0.5 text-sm text-muted\">{description}</div>\n ) : null}\n </div>\n ) : null}\n {panelScroll ? <div ref={headerContentRef}>{header}</div> : header}\n </div>\n ) : null;\n\n const panel = (\n <TablePanel\n className={cn(PANEL_TONE[tone], panelClassName)}\n style={minHeight ? { minHeight } : undefined}\n >\n {children}\n </TablePanel>\n );\n\n return (\n <TableContainer className={cn(\"relative\", SHELL_TONE[tone], className)}>\n {panelScroll ? (\n <>\n {band}\n {panel}\n </>\n ) : (\n <div className=\"overflow-x-auto\">\n {band}\n {panel}\n </div>\n )}\n {footer ? (\n <div\n className={cn(\n \"border-t border-line px-(--table-pad-x) py-3 text-table-header\",\n footerClassName,\n )}\n >\n {footer}\n </div>\n ) : null}\n {actionNode ? (\n <div className=\"pointer-events-none absolute right-4 top-(--table-inset) flex h-(--table-header-h) items-center\">\n <div className=\"pointer-events-auto\">{actionNode}</div>\n </div>\n ) : null}\n </TableContainer>\n );\n}\n","import {\n Children,\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\nimport { cn } from \"./utils\";\n\nfunction splitCardChildren(children: ReactNode): {\n header: ReactNode;\n body: ReactNode;\n} {\n const nodes = Children.toArray(children);\n const headers = nodes.filter(\n (child) => isValidElement(child) && child.type === CardHeader,\n );\n return {\n header: headers.length > 0 ? <>{headers}</> : undefined,\n body: nodes.filter((child) => !headers.includes(child)),\n };\n}\n\nexport const Card = forwardRef<HTMLDivElement, HTMLAttributes<HTMLDivElement>>(\n ({ className, children, ...props }, ref) => {\n const { header, body } = splitCardChildren(children);\n return (\n <div ref={ref} {...props}>\n <TableSurface className={cn(\"shadow-xs\", className)} header={header}>\n {body}\n </TableSurface>\n </div>\n );\n },\n);\nCard.displayName = \"Card\";\n\nexport const CardHeader = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col gap-1 px-5 py-4\",\n className,\n )}\n {...props}\n />\n));\nCardHeader.displayName = \"CardHeader\";\n\nexport const CardTitle = forwardRef<\n HTMLHeadingElement,\n HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n <h2\n ref={ref}\n className={cn(\"text-sm font-semibold text-fg\", className)}\n {...props}\n />\n));\nCardTitle.displayName = \"CardTitle\";\n\nexport const CardDescription = forwardRef<\n HTMLParagraphElement,\n HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n ref={ref}\n className={cn(\n \"mt-1 border-t border-card-divider pt-2 text-sm text-muted\",\n \"first:mt-0 first:border-t-0 first:pt-0\",\n className,\n )}\n {...props}\n />\n));\nCardDescription.displayName = \"CardDescription\";\n\nexport const CardContent = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div ref={ref} className={cn(\"px-5 py-4\", className)} {...props} />\n));\nCardContent.displayName = \"CardContent\";\n\nexport const CardFooter = forwardRef<\n HTMLDivElement,\n HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(\n \"flex items-center gap-3 border-t border-line px-5 py-3\",\n className,\n )}\n {...props}\n />\n));\nCardFooter.displayName = \"CardFooter\";\n","import * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { Check, Minus } from \"@phosphor-icons/react\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Checkbox = forwardRef<\n ElementRef<typeof CheckboxPrimitive.Root>,\n ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n \"peer size-4 shrink-0 rounded border border-line-strong bg-transparent transition-colors\",\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus/40\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:border-primary\",\n \"data-[state=indeterminate]:border-primary\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-[var(--button-primary-bg)] text-[var(--button-primary-fg)] [--button-inner:var(--button-primary-inner)]\">\n {props.checked === \"indeterminate\" ? (\n <Minus className=\"size-3\" weight=\"bold\" />\n ) : (\n <Check className=\"size-3\" weight=\"bold\" />\n )}\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n));\nCheckbox.displayName = \"Checkbox\";\n","export interface DialogOriginRect {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nexport interface DialogFlight {\n dx: number;\n dy: number;\n sx: number;\n sy: number;\n}\n\nfunction usable(rect: DialogOriginRect): boolean {\n return rect.width > 0 && rect.height > 0;\n}\n\nfunction clampScale(value: number): number {\n return Math.min(1, Math.max(0.1, value));\n}\n\n/**\n * Computes the transform that places a centered dialog over its caller.\n * `dx`/`dy` are viewport deltas; `sx`/`sy` scale the dialog down to the caller.\n */\nexport function computeDialogFlight(\n origin: DialogOriginRect,\n target: DialogOriginRect,\n): DialogFlight | null {\n if (!usable(origin) || !usable(target)) return null;\n return {\n dx: origin.left + origin.width / 2 - (target.left + target.width / 2),\n dy: origin.top + origin.height / 2 - (target.top + target.height / 2),\n sx: clampScale(origin.width / target.width),\n sy: clampScale(origin.height / target.height),\n };\n}\n","import * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"@phosphor-icons/react\";\nimport {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n type CSSProperties,\n type ElementRef,\n type HTMLAttributes,\n} from \"react\";\n\nimport { Button, type ButtonProps } from \"./button\";\nimport { computeDialogFlight, type DialogOriginRect } from \"./dialog-motion\";\nimport { cn } from \"./utils\";\n\nconst SOURCE_SELECTOR =\n 'button, a, [role=\"button\"], [role=\"menuitem\"], [data-dialog-origin]';\n\nlet lastSource: { rect: DialogOriginRect; at: number } | null = null;\nlet trackerInstalled = false;\n\nfunction rectOf(element: Element): DialogOriginRect | null {\n const rect = element.getBoundingClientRect();\n if (rect.width <= 0 || rect.height <= 0) return null;\n return {\n left: rect.left,\n top: rect.top,\n width: rect.width,\n height: rect.height,\n };\n}\n\nfunction rememberSource(target: EventTarget | null) {\n if (!(target instanceof Element)) return;\n const element = target.closest(SOURCE_SELECTOR);\n if (!element) return;\n const rect = rectOf(element);\n if (rect) lastSource = { rect, at: Date.now() };\n}\n\nfunction installSourceTracker() {\n if (trackerInstalled || typeof document === \"undefined\") return;\n trackerInstalled = true;\n document.addEventListener(\n \"pointerdown\",\n (event) => rememberSource(event.target),\n true,\n );\n document.addEventListener(\n \"keydown\",\n (event) => {\n if (event.key !== \"Enter\" && event.key !== \" \") return;\n rememberSource(document.activeElement);\n },\n true,\n );\n}\n\nfunction resolveOrigin(content: HTMLElement): DialogOriginRect | null {\n if (lastSource && Date.now() - lastSource.at < 2000) {\n const rect = lastSource.rect;\n lastSource = null;\n return rect;\n }\n lastSource = null;\n\n const active = document.activeElement;\n if (\n active instanceof Element &&\n active !== content &&\n !content.contains(active) &&\n active.matches(SOURCE_SELECTOR)\n ) {\n return rectOf(active);\n }\n return null;\n}\n\nconst DIALOG_CLOSE_MS = 250;\nconst DialogClosingContext = createContext(false);\nconst DialogRequestCloseContext = createContext<() => void>(() => {});\nconst InDialogContext = createContext(false);\n\n/** Dialog root; owns the delayed close so the fly-out can finish. */\nexport function Dialog({\n open: controlledOpen,\n defaultOpen,\n onOpenChange,\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof DialogPrimitive.Root>) {\n const [uncontrolledOpen, setUncontrolledOpen] = useState(\n defaultOpen ?? false,\n );\n const [closing, setClosing] = useState(false);\n const closingRef = useRef(false);\n const closeTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const open = controlledOpen ?? uncontrolledOpen;\n const openRef = useRef(open);\n openRef.current = open;\n const controlled = controlledOpen !== undefined;\n\n useEffect(() => installSourceTracker(), []);\n\n useEffect(() => {\n if (!controlledOpen) return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n closingRef.current = false;\n setClosing(false);\n }, [controlledOpen]);\n\n useEffect(\n () => () => {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n },\n [],\n );\n\n const handleOpenChange = (next: boolean) => {\n if (next) {\n if (closeTimer.current) clearTimeout(closeTimer.current);\n closingRef.current = false;\n setClosing(false);\n if (!controlled) setUncontrolledOpen(true);\n onOpenChange?.(true);\n return;\n }\n if (!open || closingRef.current) return;\n\n const reduced =\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n if (reduced) {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n return;\n }\n\n closingRef.current = true;\n setClosing(true);\n closeTimer.current = setTimeout(() => {\n if (!controlled) setUncontrolledOpen(false);\n onOpenChange?.(false);\n requestAnimationFrame(() => {\n // Restore the overlay only when a controlled parent vetoed the close.\n if (openRef.current) {\n closingRef.current = false;\n setClosing(false);\n }\n });\n }, DIALOG_CLOSE_MS);\n };\n\n return (\n <DialogRequestCloseContext.Provider value={() => handleOpenChange(false)}>\n <DialogClosingContext.Provider value={closing}>\n <InDialogContext.Provider value={true}>\n <DialogPrimitive.Root\n open={open}\n onOpenChange={handleOpenChange}\n {...props}\n >\n {children}\n </DialogPrimitive.Root>\n </InDialogContext.Provider>\n </DialogClosingContext.Provider>\n </DialogRequestCloseContext.Provider>\n );\n}\n\nexport const DialogTrigger = forwardRef<\n ElementRef<typeof DialogPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Trigger>\n>(({ onClick, ...props }, ref) => (\n <DialogPrimitive.Trigger\n ref={ref}\n onClick={(event) => {\n rememberSource(event.currentTarget);\n onClick?.(event);\n }}\n {...props}\n />\n));\nDialogTrigger.displayName = \"DialogTrigger\";\n\nexport const DialogClose = DialogPrimitive.Close;\n\n/** Secondary action that closes through the animated dialog close path. */\nexport const DialogCancel = forwardRef<HTMLButtonElement, ButtonProps>(\n ({ variant = \"secondary\", children = \"Cancel\", ...props }, ref) => (\n <DialogPrimitive.Close asChild>\n <Button ref={ref} type=\"button\" variant={variant} {...props}>\n {children}\n </Button>\n </DialogPrimitive.Close>\n ),\n);\nDialogCancel.displayName = \"DialogCancel\";\n\nfunction startDialogMotion(content: HTMLDivElement, retry = true) {\n if (content.dataset.dialogMotionStarted === \"true\") return;\n if (\n typeof window !== \"undefined\" &&\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ) {\n return;\n }\n\n const target = rectOf(content);\n if (!target) {\n if (retry) {\n window.requestAnimationFrame(() => startDialogMotion(content, false));\n }\n return;\n }\n\n content.dataset.dialogMotionStarted = \"true\";\n const origin = resolveOrigin(content);\n const flight = origin ? computeDialogFlight(origin, target) : null;\n if (flight) {\n content.style.setProperty(\"--dialog-dx\", `${flight.dx}px`);\n content.style.setProperty(\"--dialog-dy\", `${flight.dy}px`);\n content.style.setProperty(\"--dialog-sx\", String(flight.sx));\n content.style.setProperty(\"--dialog-sy\", String(flight.sy));\n content.classList.add(\"dialog-fly-in\");\n } else {\n // No caller to return to; drop stale flight vars so close fades in place.\n content.style.removeProperty(\"--dialog-dx\");\n content.style.removeProperty(\"--dialog-dy\");\n content.style.removeProperty(\"--dialog-sx\");\n content.style.removeProperty(\"--dialog-sy\");\n content.classList.add(\"dialog-pop-in\");\n }\n\n // Keep the flight vars: the close animation flies back to the same caller.\n const clear = () => {\n content.classList.remove(\"dialog-fly-in\", \"dialog-pop-in\");\n };\n const onEnd = (event: AnimationEvent) => {\n if (event.target !== content) return;\n if (\n event.animationName !== \"dialog-fly-in\" &&\n event.animationName !== \"dialog-pop-in\"\n ) {\n return;\n }\n content.removeEventListener(\"animationend\", onEnd);\n clear();\n };\n content.addEventListener(\"animationend\", onEnd);\n}\n\nexport interface DialogContentProps\n extends ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n /** Vertical placement: centered (default) or anchored near the viewport top. */\n placement?: \"center\" | \"top\";\n /** Top edge offset for top placement. Defaults to 11dvh. */\n topOffset?: string;\n /**\n * Entry/exit motion. `auto` flies from the caller when one is known, while\n * `command` uses the compact spring used by command palettes.\n */\n motion?: \"auto\" | \"command\";\n}\n\nfunction dialogTopFallback(offset: string): string {\n return offset.replace(/dvh\\b/g, \"vh\");\n}\n\nexport const DialogContent = forwardRef<\n ElementRef<typeof DialogPrimitive.Content>,\n DialogContentProps\n>(\n (\n {\n className,\n children,\n placement = \"center\",\n topOffset = \"11dvh\",\n motion = \"auto\",\n style,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...props\n },\n ref,\n ) => {\n const closing = useContext(DialogClosingContext);\n const top = placement === \"top\";\n const placementStyle: CSSProperties | undefined = top\n ? ({\n \"--dialog-top-offset\": topOffset,\n \"--dialog-top-offset-fallback\": dialogTopFallback(topOffset),\n } as CSSProperties)\n : undefined;\n const requestClose = useContext(DialogRequestCloseContext);\n const contentRef = useRef<HTMLDivElement>(null);\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n contentRef.current = node;\n if (node && motion === \"auto\") startDialogMotion(node);\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n if (ref) {\n (ref as { current: HTMLDivElement | null }).current = node;\n }\n },\n [motion, ref],\n );\n\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n \"fixed inset-0 z-50 overflow-hidden bg-overlay backdrop-blur-[3px] data-[state=open]:animate-in data-[state=open]:fade-in-0\",\n !closing &&\n \"data-[state=closed]:animate-out data-[state=closed]:fade-out-0\",\n closing && \"opacity-0 transition-opacity duration-200\",\n )}\n >\n <span\n aria-hidden=\"true\"\n className=\"dialog-noise pointer-events-none absolute inset-0\"\n />\n </DialogPrimitive.Overlay>\n <div\n className={cn(\n \"pointer-events-none fixed inset-0 z-50 flex justify-center overflow-y-auto p-4\",\n top ? \"items-start\" : \"items-center\",\n )}\n >\n <DialogPrimitive.Content\n ref={setRef}\n style={placementStyle ? { ...placementStyle, ...style } : style}\n className={cn(\n \"dialog-content pointer-events-auto relative flex max-h-[min(85vh,44rem)] w-full max-w-[22.4rem] flex-col gap-0 overflow-hidden will-change-[transform,opacity]\",\n \"rounded-2xl border border-(--dialog-shell-border) bg-(--dialog-shell-bg) pb-3 shadow-(--dialog-shell-shadow) sm:pb-4\",\n top && \"dialog-anchor-top\",\n motion === \"command\" && \"dialog-command-motion\",\n closing && \"dialog-closing\",\n \"focus:outline-none\",\n className,\n )}\n onEscapeKeyDown={(event) => {\n onEscapeKeyDown?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n requestClose();\n }}\n onPointerDownOutside={(event) => {\n onPointerDownOutside?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n requestClose();\n }}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-3.5 top-3.5 z-10 rounded-sm text-subtle transition-colors hover:text-fg focus-visible:outline-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </div>\n </DialogPrimitive.Portal>\n );\n },\n);\nDialogContent.displayName = \"DialogContent\";\n\n/**\n * Elevated inner card inside the dialog shell. Flush to the shell's left, top\n * and right edges (the shell clips its top corners); the footer stays below on\n * the shell so the two surfaces read as distinct layers.\n */\nexport function DialogPanel({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"panel\"\n className={cn(\n \"flex min-h-0 flex-1 flex-col overflow-hidden rounded-b-2xl border-x-0 border-t-0 border-b border-(--dialog-panel-border) bg-(--dialog-panel-bg) shadow-(--dialog-panel-shadow)\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Scrollable region inside `DialogPanel`; keeps the footer pinned. */\nexport function DialogBody({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"body\"\n className={cn(\"min-h-0 flex-1 overflow-y-auto px-5 py-4\", className)}\n {...props}\n />\n );\n}\n\nexport function DialogHeader({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"header\"\n className={cn(\n \"flex shrink-0 flex-col gap-1.5 border-b border-(--dialog-panel-border) px-5 py-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function DialogFooter({\n className,\n ...props\n}: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n data-slot=\"footer\"\n className={cn(\n \"flex shrink-0 flex-col-reverse gap-2 px-3 pt-3 sm:flex-row sm:px-4 sm:pt-3.5 sm:*:flex-1\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * Dialog heading. Standalone-safe: outside a `Dialog` root it renders a plain\n * heading with the same classes (Radix's Title requires a dialog context).\n */\nexport const DialogTitle = forwardRef<\n ElementRef<typeof DialogPrimitive.Title>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => {\n const Comp = useContext(InDialogContext)\n ? DialogPrimitive.Title\n : \"h2\";\n return (\n <Comp\n ref={ref}\n className={cn(\"text-base font-semibold text-fg\", className)}\n {...props}\n />\n );\n});\nDialogTitle.displayName = \"DialogTitle\";\n\n/**\n * Dialog body copy. Standalone-safe: outside a `Dialog` root it renders a\n * plain paragraph with the same classes (Radix's Description requires a\n * dialog context).\n */\nexport const DialogDescription = forwardRef<\n ElementRef<typeof DialogPrimitive.Description>,\n ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => {\n const Comp = useContext(InDialogContext)\n ? DialogPrimitive.Description\n : \"p\";\n return (\n <Comp\n ref={ref}\n className={cn(\"text-sm text-muted\", className)}\n {...props}\n />\n );\n});\nDialogDescription.displayName = \"DialogDescription\";\n","import {\n createContext,\n useContext,\n useId,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\n\nimport { Badge } from \"./badge\";\nimport { cn } from \"./utils\";\n\ninterface RadioGroupContextValue {\n name: string;\n value?: string;\n onChange?: (value: string) => void;\n disabled?: boolean;\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\nexport interface RadioGroupProps\n extends Omit<HTMLAttributes<HTMLFieldSetElement>, \"onChange\"> {\n /** Accessible group name; also the shared `name` for the native radios. */\n label: string;\n /** Selected value (controlled). */\n value?: string;\n /** Called with the newly selected value. */\n onChange?: (value: string) => void;\n /** Disables every option in the group. */\n disabled?: boolean;\n /** Shared `name` for the native inputs; generated when omitted. */\n name?: string;\n}\n\n/**\n * Vertical group of `RadioCard` options. Built on native `<input type=\"radio\">`\n * inside a `<fieldset>`, so arrow-key navigation, labels and forms work without\n * a dependency. Controlled via `value` / `onChange`.\n */\nexport function RadioGroup({\n label,\n value,\n onChange,\n disabled = false,\n name,\n className,\n children,\n ...props\n}: RadioGroupProps) {\n const generated = useId();\n const groupName = name ?? generated;\n\n return (\n <RadioGroupContext.Provider value={{ name: groupName, value, onChange, disabled }}>\n <fieldset className={cn(\"flex flex-col gap-6\", className)} {...props}>\n <legend className=\"sr-only\">{label}</legend>\n {children}\n </fieldset>\n </RadioGroupContext.Provider>\n );\n}\n\nexport interface RadioCardProps {\n /** Value reported when this option is selected. */\n value: string;\n /** Primary label. */\n title: ReactNode;\n /** Supporting copy shown under the title. */\n description?: ReactNode;\n /** Optional pill rendered next to the title (e.g. \"Easiest\"). */\n badge?: ReactNode;\n /** Disables just this option. */\n disabled?: boolean;\n className?: string;\n}\n\n/** A single selectable option: radio indicator, title, optional badge + copy. */\nexport function RadioCard({\n value,\n title,\n description,\n badge,\n disabled = false,\n className,\n}: RadioCardProps) {\n const ctx = useContext(RadioGroupContext);\n const describedById = useId();\n if (!ctx) {\n throw new Error(\"RadioCard must be rendered inside a RadioGroup\");\n }\n\n const isDisabled = disabled || ctx.disabled;\n const isChecked = ctx.value === value;\n\n return (\n <label\n className={cn(\n \"group relative flex items-start gap-3\",\n isDisabled ? \"cursor-not-allowed opacity-50\" : \"cursor-pointer\",\n className,\n )}\n >\n <input\n type=\"radio\"\n name={ctx.name}\n value={value}\n checked={isChecked}\n disabled={isDisabled}\n onChange={() => ctx.onChange?.(value)}\n aria-describedby={description ? describedById : undefined}\n className=\"peer sr-only\"\n />\n <span\n aria-hidden\n className={cn(\n \"mt-[5px] grid size-3.5 shrink-0 place-items-center rounded-full border-2 border-transparent bg-line-strong transition-colors\",\n \"peer-checked:border-4 peer-checked:border-primary peer-checked:bg-primary-fg\",\n \"peer-focus-visible:ring-2 peer-focus-visible:ring-focus/40 peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-canvas\",\n )}\n />\n <span className=\"min-w-0 flex-1\">\n <span className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-base font-semibold text-fg\">{title}</span>\n {badge ? <Badge variant=\"primary\">{badge}</Badge> : null}\n </span>\n {description ? (\n <span id={describedById} className=\"mt-1 block text-sm text-muted\">\n {description}\n </span>\n ) : null}\n </span>\n </label>\n );\n}\n","import { useState, type ReactNode } from \"react\";\n\nimport { Button } from \"./button\";\nimport {\n Dialog,\n DialogBody,\n DialogCancel,\n DialogContent,\n DialogFooter,\n DialogHeader,\n DialogPanel,\n DialogTitle,\n DialogTrigger,\n} from \"./dialog\";\nimport { RadioCard, RadioGroup } from \"./radio-group\";\n\nexport interface ChoiceOption {\n value: string;\n title: ReactNode;\n description?: ReactNode;\n badge?: ReactNode;\n}\n\nexport interface ChoiceDialogProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Optional element that opens the dialog. */\n trigger?: ReactNode;\n /** Dialog heading. */\n title: string;\n /** Selectable options, rendered as radio cards. */\n options: ChoiceOption[];\n /** Initially selected value (uncontrolled). */\n defaultValue?: string;\n /** Selected value (controlled). */\n value?: string;\n onValueChange?: (value: string) => void;\n /** Footer labels. */\n cancelLabel?: string;\n confirmLabel?: string;\n /** Called with the selected value when the confirm button is pressed. */\n onConfirm?: (value: string) => void;\n}\n\n/**\n * Dialog for picking one option from a small set, styled as the\n * \"Create production instance\" reference: divided header, radio cards, and a\n * footer with an equal-width secondary Cancel plus primary Continue.\n */\nexport function ChoiceDialog({\n open,\n onOpenChange,\n trigger,\n title,\n options,\n defaultValue,\n value,\n onValueChange,\n cancelLabel = \"Cancel\",\n confirmLabel = \"Continue\",\n onConfirm,\n}: ChoiceDialogProps) {\n const [internal, setInternal] = useState(defaultValue ?? options[0]?.value ?? \"\");\n const selected = value ?? internal;\n\n const select = (next: string) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n {trigger ? <DialogTrigger asChild>{trigger}</DialogTrigger> : null}\n <DialogContent\n aria-describedby={undefined}\n className=\"max-w-[29.4rem] [&>button]:hidden\"\n >\n <DialogPanel>\n <DialogHeader>\n <DialogTitle className=\"text-xl\">{title}</DialogTitle>\n </DialogHeader>\n <DialogBody>\n <RadioGroup label={title} value={selected} onChange={select}>\n {options.map((option) => (\n <RadioCard\n key={option.value}\n value={option.value}\n title={option.title}\n description={option.description}\n badge={option.badge}\n />\n ))}\n </RadioGroup>\n </DialogBody>\n </DialogPanel>\n <DialogFooter className=\"gap-3 pt-2.5\">\n <DialogCancel className=\"flex-1\">{cancelLabel}</DialogCancel>\n <Button className=\"flex-1\" onClick={() => onConfirm?.(selected)}>\n {confirmLabel}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n );\n}\n","import { Check, Copy } from \"@phosphor-icons/react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface CodeBlockProps {\n code: string;\n /** Short label shown in the header (e.g. a filename or request line). */\n label?: ReactNode;\n language?: string;\n className?: string;\n}\n\nexport function CodeBlock({ code, label, className }: CodeBlockProps) {\n const [copied, setCopied] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n } catch {\n /* clipboard unavailable */\n }\n };\n\n return (\n <TableSurface\n className={className}\n header={\n <div className=\"flex h-(--table-header-h) items-center px-(--table-pad-x) pr-28\">\n <span className=\"truncate text-[13px] font-medium text-table-header\">\n {label}\n </span>\n </div>\n }\n action={{\n label: copied ? \"Copied\" : \"Copy\",\n icon: copied ? (\n <Check className=\"text-success\" weight=\"bold\" />\n ) : (\n <Copy />\n ),\n variant: \"ghost\",\n onClick: copy,\n }}\n panelClassName=\"min-w-0\"\n >\n <pre className=\"overflow-x-auto p-4 font-mono text-xs leading-relaxed text-fg\">\n <code>{code}</code>\n </pre>\n </TableSurface>\n );\n}\n","import { X } from \"@phosphor-icons/react\";\nimport { forwardRef, useId, type InputHTMLAttributes, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ntype InputSize = \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nconst HEIGHT: Record<InputSize, string> = {\n sm: \"h-[var(--control-h-sm)] text-sm\",\n md: \"h-[var(--control-h-md)] text-sm\",\n lg: \"h-[var(--control-h-lg)] text-sm\",\n xl: \"h-[var(--control-h-xl)] rounded-lg text-base\",\n};\n\nconst PAD_X: Record<InputSize, string> = {\n sm: \"px-[var(--control-pad-x-sm)]\",\n md: \"px-[var(--control-pad-x-md)]\",\n lg: \"px-[var(--control-pad-x-lg)]\",\n xl: \"px-[var(--control-pad-x-xl)]\",\n};\n\nconst LEAD_INSET: Record<InputSize, string> = {\n sm: \"left-[var(--control-pad-x-sm)]\",\n md: \"left-[var(--control-pad-x-md)]\",\n lg: \"left-[var(--control-pad-x-lg)]\",\n xl: \"left-[var(--control-pad-x-xl)]\",\n};\n\nconst TRAIL_INSET: Record<InputSize, string> = {\n sm: \"right-[var(--control-pad-x-sm)]\",\n md: \"right-[var(--control-pad-x-md)]\",\n lg: \"right-[var(--control-pad-x-lg)]\",\n xl: \"right-[var(--control-pad-x-xl)]\",\n};\n\nconst ICON: Record<InputSize, string> = {\n sm: \"size-[var(--control-icon-sm)]\",\n md: \"size-[var(--control-icon-md)]\",\n lg: \"size-[var(--control-icon-lg)]\",\n xl: \"size-[var(--control-icon-xl)]\",\n};\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n /** Control height preset. Defaults to `md`. */\n size?: InputSize;\n /** Optional icon rendered inside the field, before the text. */\n leadingIcon?: ReactNode;\n /** Optional icon rendered inside the field, after the text. */\n trailingIcon?: ReactNode;\n /** Shows a real clear button when the field has a value. */\n onClear?: () => void;\n /** Error styling; also pairs with `helperText` for the message. */\n error?: boolean;\n /** Helper or error message shown below the field (wired to aria-describedby). */\n helperText?: string;\n /** Wrapper class when icons or a helper message render a container. */\n containerClassName?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n className,\n containerClassName,\n type = \"text\",\n size = \"md\",\n leadingIcon,\n trailingIcon,\n onClear,\n value,\n defaultValue,\n error = false,\n helperText,\n id,\n \"aria-describedby\": ariaDescribedBy,\n disabled,\n readOnly,\n ...props\n },\n ref,\n ) => {\n const autoId = useId();\n const inputId = id ?? autoId;\n const hasMessage = Boolean(helperText);\n const showClear = Boolean(onClear && (value !== undefined ? String(value).length > 0 : defaultValue !== undefined ? String(defaultValue).length > 0 : false));\n const messageId = hasMessage ? `${inputId}-description` : undefined;\n const describedBy = [ariaDescribedBy, messageId].filter(Boolean).join(\" \") || undefined;\n\n const field = (\n <input\n ref={ref}\n id={inputId}\n type={type}\n disabled={disabled}\n readOnly={readOnly}\n aria-invalid={error || undefined}\n aria-describedby={describedBy}\n style={\n leadingIcon || trailingIcon || showClear\n ? {\n paddingInlineStart: leadingIcon\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n paddingInlineEnd:\n trailingIcon || showClear\n ? `calc(var(--control-pad-x-${size}) + var(--control-icon-${size}) + var(--control-gap))`\n : undefined,\n }\n : undefined\n }\n className={cn(\n \"flex w-full rounded-md border bg-(--input-bg) text-(--input-fg) transition-colors\",\n HEIGHT[size],\n PAD_X[size],\n \"placeholder:text-(--input-placeholder)\",\n \"hover:border-(--input-border-hover)\",\n \"focus-visible:outline-none focus-visible:border-(--input-border-focus) focus-visible:ring-2 focus-visible:ring-focus/30\",\n error &&\n \"border-error hover:border-error focus-visible:border-error focus-visible:ring-error/30\",\n !error && \"border-(--input-border)\",\n type === \"search\" &&\n \"[&::-webkit-search-cancel-button]:appearance-none [&::-webkit-search-decoration]:appearance-none [&::-ms-clear]:hidden\",\n disabled &&\n \"cursor-not-allowed bg-(--input-bg-disabled) opacity-60 hover:border-(--input-border)\",\n readOnly && \"cursor-default focus-visible:ring-0\",\n className,\n )}\n value={value}\n defaultValue={defaultValue}\n {...props}\n />\n );\n\n // Bare input keeps the historical API when no compositional features are used.\n if (!leadingIcon && !trailingIcon && !showClear && !hasMessage) {\n return field;\n }\n\n return (\n <div className={cn(\"w-full\", containerClassName)}>\n <div className=\"relative\">\n {leadingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n LEAD_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {leadingIcon}\n </span>\n </span>\n ) : null}\n {field}\n {showClear ? (\n <button\n type=\"button\"\n aria-label=\"Clear search\"\n onClick={onClear}\n className={cn(\n \"absolute inset-y-0 flex items-center text-(--input-placeholder) transition-colors hover:text-(--input-fg)\",\n TRAIL_INSET[size],\n )}\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n <X />\n </span>\n </button>\n ) : trailingIcon ? (\n <span\n className={cn(\n \"pointer-events-none absolute inset-y-0 flex items-center text-(--input-placeholder)\",\n TRAIL_INSET[size],\n )}\n aria-hidden\n >\n <span className={cn(\"inline-flex items-center justify-center\", ICON[size])}>\n {trailingIcon}\n </span>\n </span>\n ) : null}\n </div>\n {hasMessage ? (\n <p\n id={messageId}\n className={cn(\"mt-1.5 text-xs\", error ? \"text-error\" : \"text-muted\")}\n >\n {helperText}\n </p>\n ) : null}\n </div>\n );\n },\n);\nInput.displayName = \"Input\";\n","import * as PopoverPrimitive from \"@radix-ui/react-popover\";\nimport { CaretDown, MagnifyingGlass } from \"@phosphor-icons/react\";\nimport { useEffect, useMemo, useState, type ReactNode } from \"react\";\n\nimport { Input } from \"./input\";\nimport { Spinner } from \"./spinner\";\nimport { cn } from \"./utils\";\n\nexport interface ComboboxItem {\n value: string;\n label: string;\n /** Secondary line under the label (e.g. an email address). */\n description?: string;\n /** Small pill rendered after the label (e.g. \"Default\"). */\n badge?: string;\n}\n\nexport interface ComboboxProps {\n items: ComboboxItem[];\n /** Selected item value; null shows the placeholder. */\n value: string | null;\n onValueChange: (item: ComboboxItem) => void;\n /**\n * Debounced + trimmed search term (fires after `debounceMs` once the term\n * reaches `minSearchLength`). Omit to filter `items` client-side instead.\n */\n onSearchChange?: (term: string) => void;\n /** True while an async search is running; shows a centered spinner. */\n loading?: boolean;\n /** Minimum search term length before searching/filtering. Default 3. */\n minSearchLength?: number;\n /** Debounce window for the search term, in ms. Default 300. */\n debounceMs?: number;\n placeholder?: string;\n searchPlaceholder?: string;\n /** Shown when a completed search yields no rows. Default \"No results found\". */\n emptyMessage?: string;\n /** Hint below `minSearchLength`; defaults to \"Type at least N characters to search\". */\n hintMessage?: string;\n /** Custom row content; falls back to label + description + badge. */\n renderItem?: (item: ComboboxItem) => ReactNode;\n /** Custom selected-value content; falls back to the item label. */\n renderValue?: (item: ComboboxItem) => ReactNode;\n className?: string;\n contentClassName?: string;\n disabled?: boolean;\n}\n\n/**\n * Searchable select (Clerk \"Select…\" parity): an inline secondary trigger that\n * opens the standard dropdown surface with a search field and item rows.\n * Searching debounces internally; render `items` either pre-filtered by the\n * parent (async search through `onSearchChange` + `loading`) or let the\n * component filter locally when `onSearchChange` is omitted. The content\n * portals and anchors to the trigger with collision flip, so it overlays —\n * it never grows the surrounding layout, and it nests safely inside dialogs.\n */\nexport function Combobox({\n items,\n value,\n onValueChange,\n onSearchChange,\n loading = false,\n minSearchLength = 3,\n debounceMs = 300,\n placeholder = \"Select...\",\n searchPlaceholder = \"Search\",\n emptyMessage = \"No results found\",\n hintMessage,\n renderItem,\n renderValue,\n className,\n contentClassName,\n disabled = false,\n}: ComboboxProps) {\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [debounced, setDebounced] = useState(\"\");\n\n // Debounce the search term.\n useEffect(() => {\n const trimmed = query.trim();\n const id = setTimeout(() => setDebounced(trimmed), debounceMs);\n return () => clearTimeout(id);\n }, [query, debounceMs]);\n\n // Report settled debounced terms to async search consumers.\n useEffect(() => {\n if (!onSearchChange) return;\n if (open && debounced.length >= minSearchLength) {\n onSearchChange(debounced);\n }\n }, [debounced, open, minSearchLength, onSearchChange]);\n\n const selected = items.find((item) => item.value === value) ?? null;\n const trimmed = query.trim();\n // Empty query → empty message; 1–2 chars → minimum-length hint;\n // ≥3 chars → spinner while the debounce timer (or parent fetch) is pending.\n const showHint = trimmed.length > 0 && trimmed.length < minSearchLength;\n const pending =\n onSearchChange !== undefined &&\n trimmed.length >= minSearchLength &&\n debounced !== trimmed;\n const hint = hintMessage ?? `Type at least ${minSearchLength} characters to search`;\n\n // Local mode: filter live; async mode: parent owns items.\n const filtered = useMemo(() => {\n if (onSearchChange || trimmed.length === 0) return items;\n const needle = trimmed.toLowerCase();\n return items.filter(\n (item) =>\n item.label.toLowerCase().includes(needle) ||\n (item.description ?? \"\").toLowerCase().includes(needle),\n );\n }, [items, trimmed, onSearchChange]);\n\n const pick = (item: ComboboxItem) => {\n onValueChange(item);\n setOpen(false);\n setQuery(\"\");\n setDebounced(\"\");\n };\n\n const clear = () => {\n setQuery(\"\");\n setDebounced(\"\");\n };\n\n return (\n <PopoverPrimitive.Root\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) clear();\n }}\n >\n <PopoverPrimitive.Trigger\n type=\"button\"\n disabled={disabled}\n aria-haspopup=\"listbox\"\n className={cn(\n \"group btn-fill btn-inner-border btn-interactive flex h-(--control-h-md) w-full items-center justify-between gap-2 rounded-(--control-radius) bg-(--button-secondary-bg) px-(--control-pad-x-sm) font-medium text-fg hover:bg-(--button-surface-hover) active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n >\n {selected ? (\n renderValue ? (\n renderValue(selected)\n ) : (\n <span className=\"min-w-0 truncate\">{selected.label}</span>\n )\n ) : (\n <span className=\"font-normal text-muted\">{placeholder}</span>\n )}\n <CaretDown\n aria-hidden\n className=\"size-3.5 shrink-0 text-muted transition-transform duration-200 ease-out group-data-[state=open]:rotate-180 motion-reduce:transition-none\"\n />\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n role=\"listbox\"\n aria-label={placeholder}\n align=\"start\"\n sideOffset={4}\n className={cn(\n \"menu-surface btn-inner-border z-50 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"w-(--radix-popper-anchor-width)\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"duration-150 ease-out\",\n contentClassName,\n )}\n onKeyDown={(event) => {\n // Escape closes the combobox, not a surrounding dialog.\n if (event.key === \"Escape\") {\n event.stopPropagation();\n setOpen(false);\n clear();\n }\n }}\n >\n <div className=\"pb-1\">\n <Input\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onClear={() => clear()}\n placeholder={searchPlaceholder}\n aria-label={searchPlaceholder}\n leadingIcon={<MagnifyingGlass className=\"size-3.5\" />}\n size=\"sm\"\n className=\"h-(--control-h-xs) border-0 bg-(--combobox-search-bg) focus-visible:border-muted focus-visible:ring-0\"\n />\n </div>\n <div className=\"max-h-64 overflow-y-auto\" role=\"presentation\">\n {showHint ? (\n <p className=\"px-2 py-3 text-center text-sm text-muted\">{hint}</p>\n ) : filtered.length > 0 ? (\n filtered.map((item) => (\n <button\n key={item.value}\n type=\"button\"\n role=\"option\"\n aria-selected={item.value === value}\n onClick={() => pick(item)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg px-2 py-1.5 text-left transition-colors\",\n item.value === value\n ? \"bg-(--combobox-search-bg)\"\n : \"hover:bg-(--combobox-search-bg) focus:bg-(--combobox-search-bg) data-highlighted:bg-(--combobox-search-bg)\",\n )}\n >\n {renderItem ? (\n renderItem(item)\n ) : (\n <span className=\"min-w-0\">\n <span className=\"flex items-center gap-1.5\">\n <span className=\"truncate text-sm font-medium text-fg\">\n {item.label}\n </span>\n {item.badge && (\n <span className=\"rounded bg-elevated px-1.5 py-0.5 text-[11px] text-muted\">\n {item.badge}\n </span>\n )}\n </span>\n {item.description && (\n <span className=\"block truncate text-[13px] text-muted\">\n {item.description}\n </span>\n )}\n </span>\n )}\n </button>\n ))\n ) : loading || pending ? (\n <div className=\"flex justify-center py-4\">\n <Spinner className=\"size-5 text-muted\" />\n </div>\n ) : (\n <p className=\"px-2 py-3 text-center text-sm text-muted\">\n {emptyMessage}\n </p>\n )}\n </div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n </PopoverPrimitive.Root>\n );\n}\n","import { Children, isValidElement, type ReactNode } from \"react\";\n\n/** Count matching elements anywhere in a static React children tree. */\nexport function countDescendants(\n children: ReactNode,\n types: readonly unknown[],\n): number {\n let count = 0;\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) return;\n if (types.some((type) => type === child.type)) {\n count += 1;\n return;\n }\n const nested = (child.props as { children?: ReactNode }).children;\n if (nested) count += countDescendants(nested, types);\n });\n\n return count;\n}\n","import * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { CaretDown, CaretRight, Check } from \"@phosphor-icons/react\";\nimport {\n createContext,\n forwardRef,\n useContext,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { countDescendants } from \"./item-count\";\nimport { cn } from \"./utils\";\n\nconst DropdownMenuEmptyContext = createContext(false);\n\n/** Menu root; disables its trigger when there are no items. */\nexport function DropdownMenu({\n children,\n ...props\n}: ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root>) {\n const empty =\n countDescendants(children, [\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuSubTrigger,\n ]) === 0;\n\n return (\n <DropdownMenuEmptyContext.Provider value={empty}>\n <DropdownMenuPrimitive.Root {...props}>{children}</DropdownMenuPrimitive.Root>\n </DropdownMenuEmptyContext.Provider>\n );\n}\n\nexport const DropdownMenuTrigger = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Trigger>\n>(({ className, disabled, ...props }, ref) => {\n const empty = useContext(DropdownMenuEmptyContext);\n\n return (\n <DropdownMenuPrimitive.Trigger\n ref={ref}\n // `group` lets DropdownMenuChevron rotate with the open state, even\n // when the trigger renders through asChild onto a custom button.\n className={cn(\"group\", className)}\n disabled={disabled || empty}\n {...props}\n />\n );\n});\nDropdownMenuTrigger.displayName = \"DropdownMenuTrigger\";\n\nexport const DropdownMenuChevron = forwardRef<\n SVGSVGElement,\n ComponentPropsWithoutRef<typeof CaretDown>\n>(({ className, ...props }, ref) => (\n <CaretDown\n ref={ref}\n aria-hidden\n className={cn(\n \"ml-auto size-3.5 shrink-0 text-subtle transition-transform duration-200 ease-out group-data-[state=open]:rotate-180 motion-reduce:transition-none\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuChevron.displayName = \"DropdownMenuChevron\";\n\nexport const DropdownMenuGroup = DropdownMenuPrimitive.Group;\nexport const DropdownMenuPortal = DropdownMenuPrimitive.Portal;\n\nexport const DropdownMenuContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Content>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 8, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n));\nDropdownMenuContent.displayName = \"DropdownMenuContent\";\n\nexport const DropdownMenuItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Item>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-fg outline-none transition-colors\",\n \"focus:bg-(--menu-highlight) data-disabled:pointer-events-none data-disabled:opacity-50\",\n \"[&_svg]:size-4 [&_svg]:text-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuItem.displayName = \"DropdownMenuItem\";\n\nexport const DropdownMenuCheckboxItem = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"group relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none transition-colors focus:bg-(--menu-highlight)\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 shrink-0 items-center justify-center rounded border border-line-strong bg-transparent transition-colors group-data-[state=checked]:border-primary\">\n <DropdownMenuPrimitive.ItemIndicator className=\"btn-fill btn-inner-border flex size-full items-center justify-center rounded-[3px] border-0 bg-(--button-primary-bg) text-(--button-primary-fg) [--button-inner:var(--button-primary-inner)]\">\n <Check className=\"size-3\" weight=\"bold\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n));\nDropdownMenuCheckboxItem.displayName = \"DropdownMenuCheckboxItem\";\n\nexport const DropdownMenuLabel = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Label>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nDropdownMenuLabel.displayName = \"DropdownMenuLabel\";\n\nexport const DropdownMenuSub = DropdownMenuPrimitive.Sub;\n\nexport const DropdownMenuSubTrigger = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-fg outline-none transition-colors\",\n \"focus:bg-(--menu-highlight) data-[state=open]:bg-(--menu-highlight)\",\n \"[&_svg]:size-4 [&_svg]:text-muted\",\n inset && \"pl-8\",\n className,\n )}\n {...props}\n >\n {children}\n <CaretRight className=\"ml-auto shrink-0\" />\n </DropdownMenuPrimitive.SubTrigger>\n));\nDropdownMenuSubTrigger.displayName = \"DropdownMenuSubTrigger\";\n\nexport const DropdownMenuSubContent = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n sideOffset={8}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n));\nDropdownMenuSubContent.displayName = \"DropdownMenuSubContent\";\n\nexport const DropdownMenuSeparator = forwardRef<\n ElementRef<typeof DropdownMenuPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-line-strong\", className)}\n {...props}\n />\n));\nDropdownMenuSeparator.displayName = \"DropdownMenuSeparator\";\n","import * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CaretDown, Check } from \"@phosphor-icons/react\";\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from \"react\";\n\nimport { countDescendants } from \"./item-count\";\nimport { cn } from \"./utils\";\n\nexport const SelectGroup = SelectPrimitive.Group;\nexport const SelectValue = SelectPrimitive.Value;\n\n/** Select root; disabled when there are no items to choose from. */\nexport function Select({\n children,\n disabled,\n ...props\n}: ComponentPropsWithoutRef<typeof SelectPrimitive.Root>) {\n const empty = countDescendants(children, [SelectItem]) === 0;\n\n return (\n <SelectPrimitive.Root disabled={disabled || empty} {...props}>\n {children}\n </SelectPrimitive.Root>\n );\n}\n\nexport interface SelectTriggerProps extends ComponentPropsWithoutRef<\n typeof SelectPrimitive.Trigger\n> {\n /** `field` fills a form; `inline` mimics the compact app dropdown; `ghost` mirrors a ghost button. */\n variant?: \"field\" | \"inline\" | \"ghost\";\n}\n\nexport const SelectTrigger = forwardRef<\n ElementRef<typeof SelectPrimitive.Trigger>,\n SelectTriggerProps\n>(({ className, children, variant = \"field\", ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n \"group flex items-center justify-between gap-2 text-sm text-fg\",\n \"focus:outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n variant === \"field\" &&\n \"h-(--control-h-md) w-full rounded-md border border-line bg-surface px-3 focus:border-primary focus:ring-2 focus:ring-focus/30\",\n variant === \"inline\" &&\n \"btn-fill btn-inner-border btn-interactive h-(--control-h-md) w-auto rounded-(--control-radius) border-0 bg-(--button-secondary-bg) px-(--control-pad-x-sm) font-medium text-fg hover:bg-(--button-surface-hover) active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n variant === \"ghost\" &&\n \"btn-inner-border btn-interactive h-(--control-h-md) w-auto rounded-(--control-radius) border-0 px-(--control-pad-x-sm) text-muted hover:bg-(--button-surface-hover) hover:text-fg active:bg-(--button-surface-active) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-line-strong\",\n className,\n )}\n {...props}\n >\n <span className=\"min-w-0 flex-1 truncate text-left\">{children}</span>\n <SelectPrimitive.Icon asChild>\n <span className=\"flex size-4 shrink-0 items-center justify-center\">\n <CaretDown className=\"size-3.5 text-muted transition-transform duration-200 ease-out group-data-[state=open]:rotate-180 motion-reduce:transition-none\" />\n </span>\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n));\nSelectTrigger.displayName = \"SelectTrigger\";\n\nexport const SelectContent = forwardRef<\n ElementRef<typeof SelectPrimitive.Content>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(\n (\n { className, children, position = \"popper\", sideOffset = 8, ...props },\n ref,\n ) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n position={position}\n sideOffset={sideOffset}\n className={cn(\n \"menu-surface btn-inner-border z-50 min-w-48 overflow-hidden rounded-lg border border-line bg-(--button-secondary-bg) p-1\",\n \"data-[state=open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2\",\n \"data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n >\n <SelectPrimitive.Viewport className=\"p-0\">\n {children}\n </SelectPrimitive.Viewport>\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n ),\n);\nSelectContent.displayName = \"SelectContent\";\n\nexport const SelectItem = forwardRef<\n ElementRef<typeof SelectPrimitive.Item>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm text-fg outline-none focus:bg-(--menu-highlight) data-disabled:pointer-events-none data-disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex size-4 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"size-3.5\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n));\nSelectItem.displayName = \"SelectItem\";\n\nexport const SelectLabel = forwardRef<\n ElementRef<typeof SelectPrimitive.Label>,\n ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn(\"px-2 py-1.5 text-xs font-medium text-subtle\", className)}\n {...props}\n />\n));\nSelectLabel.displayName = \"SelectLabel\";\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\ninterface TableEmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: ReactNode;\n action?: ReactNode;\n className?: string;\n}\n\n/**\n * Centered, contextual empty state for a table panel: an icon chip, a compact\n * heading, supporting text, and an optional action. Typography matches the\n * onboarding empty cards (e.g. the MCP servers card) so tables never shout\n * louder than the surrounding surface.\n */\nexport function TableEmptyState({\n icon,\n title,\n description,\n action,\n className,\n}: TableEmptyStateProps) {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center gap-4 px-6 py-12 text-center\",\n className,\n )}\n >\n {icon ? (\n <div className=\"flex size-12 items-center justify-center rounded-xl border border-line bg-elevated text-subtle [&_svg]:size-5\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-1\">\n <p className=\"text-base font-medium text-table-header-active\">{title}</p>\n {description ? (\n <p className=\"mx-auto max-w-md text-[13px] leading-5 text-table-muted\">\n {description}\n </p>\n ) : null}\n </div>\n {action ? <div className=\"text-table-accent\">{action}</div> : null}\n </div>\n );\n}\n","import {\n CaretDown,\n CaretLeft,\n CaretRight,\n CaretUp,\n CaretUpDown,\n Columns as ColumnsIcon,\n DotsSixVertical,\n FunnelSimple,\n Lock,\n MagnifyingGlass,\n WarningCircle,\n X,\n} from \"@phosphor-icons/react\";\nimport {\n Fragment,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nimport { Avatar, AvatarFallback, AvatarImage } from \"./avatar\";\nimport { Button } from \"./button\";\nimport { Checkbox } from \"./checkbox\";\nimport { Input } from \"./input\";\nimport {\n DropdownMenu,\n DropdownMenuCheckboxItem,\n DropdownMenuContent,\n DropdownMenuChevron,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from \"./dropdown-menu\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { TableBody, TableCell, TableRow } from \"./table\";\nimport { TableEmptyState } from \"./table-empty-state\";\nimport {\n TableSurface,\n type TableSurfaceAction,\n type TableSurfaceTone,\n} from \"./table-surface\";\nimport { cn, reorderIds } from \"./utils\";\n\nexport interface Column<T> {\n id: string;\n header: string;\n cell: (row: T) => ReactNode;\n sortable?: boolean;\n sortValue?: (row: T) => string | number | null | undefined;\n numeric?: boolean;\n defaultHidden?: boolean;\n align?: \"left\" | \"right\";\n className?: string;\n /** Advisory only: columns are content-sized; the layout ignores this. */\n width?: string;\n /** Required columns stay visible and cannot be hidden. */\n required?: boolean;\n}\n\nexport interface DataTableFilterOption {\n value: string;\n label: string;\n}\n\nexport interface DataTableFilter<T> {\n id: string;\n label: string;\n options?: DataTableFilterOption[];\n value: string[];\n onChange: (value: string[]) => void;\n /** Return true when the row matches the selected filter values. */\n match: (row: T, values: string[]) => boolean;\n /** Use text input instead of checkbox options. */\n type?: \"text\" | \"select\";\n placeholder?: string;\n}\n\nexport interface BulkAction<T> {\n label: string;\n icon?: ReactNode;\n variant?: \"primary\" | \"outline\" | \"destructive\";\n onRun: (rows: T[]) => void | Promise<void>;\n disabled?: boolean;\n}\n\nexport interface TabDef {\n id: string;\n label: string;\n}\n\nexport interface DataTableError {\n title: string;\n description?: string;\n action?: ReactNode;\n}\n\ninterface DataTableProps<T> {\n rows: T[];\n columns: Column<T>[];\n getRowId: (row: T) => string;\n\n loading?: boolean;\n error?: DataTableError | null;\n empty?: {\n icon?: ReactNode;\n title: string;\n description?: ReactNode;\n action?: ReactNode;\n };\n\n search?: {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n keys: (row: T) => string;\n };\n filters?: DataTableFilter<T>[];\n toolbarStart?: ReactNode;\n toolbarEnd?: ReactNode;\n /** Show the \"Columns\" visibility/reorder picker in the toolbar. Default true. */\n columnPicker?: boolean;\n\n tabs?: TabDef[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n\n infoBanner?: ReactNode;\n\n selectable?: boolean;\n bulkActions?: BulkAction<T>[];\n\n rowActions?: (row: T) => ReactNode;\n /**\n * Expanding rows: renders a chevron toggle cell at the row start and the\n * returned content in a full-width muted band beneath the row.\n */\n renderExpanded?: (row: T) => ReactNode;\n onRowClick?: (row: T) => void;\n\n defaultSort?: { id: string; dir: \"asc\" | \"desc\" };\n /**\n * Controlled sort state. Pass together with `onSortChange`: header caret\n * clicks then report through the callback instead of mutating internal\n * state, so an external control (e.g. a toolbar \"Sort by\" select) and the\n * headers can drive one shared state.\n */\n sort?: { id: string; dir: \"asc\" | \"desc\" };\n onSortChange?: (sort: { id: string; dir: \"asc\" | \"desc\" } | null) => void;\n pageSize?: number;\n pageSizeOptions?: number[];\n\n /**\n * `auto` (default) hides the pagination footer when all rows fit on one\n * page; `always` keeps it visible whenever there is at least one row.\n */\n pagination?: \"auto\" | \"always\";\n\n /** Surface preset for the table card. */\n tone?: TableSurfaceTone;\n /** Title shown in the card's top band, above the column header. */\n title?: ReactNode;\n /** Supporting text under the title band. */\n description?: ReactNode;\n /** Optional action pinned to the top-right of the header band. */\n headerAction?: ReactNode | TableSurfaceAction;\n /** Header band color/style overrides. */\n headerClassName?: string;\n /** Inner panel color/style overrides. */\n panelClassName?: string;\n\n className?: string;\n}\n\nconst HEADER_CELL =\n \"h-[var(--table-header-h)] whitespace-nowrap px-[var(--table-pad-x)] text-left align-middle text-[0.8125rem] font-medium text-table-header\";\n\nfunction initials(name: string): string {\n return name\n .split(/\\s+/)\n .slice(0, 2)\n .map((p) => p[0]?.toUpperCase() ?? \"\")\n .join(\"\");\n}\n\n/** Jinaan-style identity cell: avatar + primary name + secondary line. */\nexport function DataTableIdentity({\n name,\n secondary,\n image,\n}: {\n name: string;\n secondary?: ReactNode;\n image?: string;\n}) {\n return (\n <div className=\"flex items-center gap-3\">\n <Avatar className=\"size-8\">\n {image ? <AvatarImage src={image} alt=\"\" /> : null}\n <AvatarFallback>{initials(name)}</AvatarFallback>\n </Avatar>\n <div className=\"min-w-0\">\n <div className=\"truncate font-medium text-table-header-active\">{name}</div>\n {secondary ? <div className=\"truncate text-xs text-table-muted\">{secondary}</div> : null}\n </div>\n </div>\n );\n}\n\n/**\n * Toolbar + single content-sized table inside a TableSurface. Columns fit\n * their widest content (never clipping or overlapping cells) and the surface\n * scrolls horizontally when the columns exceed the viewport.\n */\nexport function DataTable<T>({\n rows,\n columns,\n getRowId,\n loading = false,\n error,\n empty,\n search,\n filters,\n toolbarStart,\n toolbarEnd,\n columnPicker = true,\n tabs,\n activeTab,\n onTabChange,\n infoBanner,\n selectable = false,\n bulkActions,\n rowActions,\n renderExpanded,\n onRowClick,\n defaultSort,\n sort: sortProp,\n onSortChange,\n pageSize: initialPageSize = 25,\n pageSizeOptions = [10, 25, 50, 100],\n pagination = \"auto\",\n tone,\n title,\n description,\n headerAction,\n headerClassName,\n panelClassName,\n className,\n}: DataTableProps<T>) {\n const [hidden, setHidden] = useState<Record<string, boolean>>(() =>\n Object.fromEntries(\n columns.filter((c) => c.defaultHidden && !c.required).map((c) => [c.id, true]),\n ),\n );\n // Column order and runtime pins are per-mount, like `hidden`.\n const [order, setOrder] = useState<string[] | null>(null);\n const [dragId, setDragId] = useState<string | null>(null);\n const [internalSort, setInternalSort] = useState<{ id: string; dir: \"asc\" | \"desc\" } | null>(\n defaultSort ?? null,\n );\n // Controlled when the caller passes onSortChange; uncontrolled otherwise.\n const sort = onSortChange ? sortProp ?? null : internalSort;\n const setSort = (next: { id: string; dir: \"asc\" | \"desc\" } | null) => {\n if (onSortChange) onSortChange(next);\n else setInternalSort(next);\n };\n const [page, setPage] = useState(0);\n const [pageSize, setPageSize] = useState(initialPageSize);\n const [selected, setSelected] = useState<Set<string>>(new Set());\n const [expanded, setExpanded] = useState<Set<string>>(new Set());\n const toggleExpanded = (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 const [activeFilterIds, setActiveFilterIds] = useState<string[]>([]);\n\n const propOrder = columns.map((c) => c.id);\n const byId = new Map(columns.map((c) => [c.id, c] as const));\n const orderedColumns = order\n ? order.map((id) => byId.get(id)).filter((c): c is Column<T> => Boolean(c))\n : columns;\n const visibleColumns = orderedColumns.filter((c) => !hidden[c.id]);\n const hiddenColumns = orderedColumns.filter((c) => hidden[c.id] && !c.required);\n // ponytail: mouse-only drag reorder; add keyboard move (Alt+Arrow) if asked.\n const isPinned = (c: Column<T>) => Boolean(c.required);\n const columnAt = (id: string) => byId.get(id);\n\n const moveBefore = (draggedId: string, targetId: string) => {\n const target = targetId ? columnAt(targetId) : undefined;\n if (!target || isPinned(target) || draggedId === targetId) return;\n setOrder((prev) => {\n const ids = prev ?? propOrder;\n return reorderIds(ids, ids.indexOf(draggedId), ids.indexOf(targetId));\n });\n };\n\n const showColumn = (id: string) => {\n setHidden((prev) => ({ ...prev, [id]: false }));\n // Re-showing appends at the end of the current order.\n setOrder((prev) => (prev && prev.includes(id) ? prev : [...(prev ?? propOrder), id]));\n };\n const activeFilters = (filters ?? []).filter((f) => activeFilterIds.includes(f.id));\n const filterSignature = (filters ?? [])\n .map((f) => `${f.id}:${f.value.join(\",\")}`)\n .join(\"|\");\n\n const filtered = useMemo(() => {\n let next = rows;\n for (const filter of filters ?? []) {\n if (filter.value.length > 0) {\n next = next.filter((row) => filter.match(row, filter.value));\n }\n }\n if (!search || !search.value.trim()) return next;\n const q = search.value.trim().toLowerCase();\n return next.filter((r) => search.keys(r).toLowerCase().includes(q));\n }, [rows, search, filters]);\n\n const sorted = useMemo(() => {\n if (!sort) return filtered;\n const col = columns.find((c) => c.id === sort.id);\n if (!col?.sortValue) return filtered;\n const dir = sort.dir === \"asc\" ? 1 : -1;\n return [...filtered].sort((a, b) => {\n const av = col.sortValue!(a);\n const bv = col.sortValue!(b);\n if (av == null && bv == null) return 0;\n if (av == null) return 1;\n if (bv == null) return -1;\n if (typeof av === \"number\" && typeof bv === \"number\") return (av - bv) * dir;\n return String(av).localeCompare(String(bv)) * dir;\n });\n }, [filtered, sort, columns]);\n\n const pageCount = Math.max(1, Math.ceil(sorted.length / pageSize));\n const showPagination =\n !loading && !error && sorted.length > 0 && (pagination === \"always\" || sorted.length > pageSize);\n\n useEffect(() => {\n setPage(0);\n }, [search?.value, pageSize, sort?.id, sort?.dir, activeTab, filterSignature]);\n\n useEffect(() => {\n if (page > pageCount - 1) setPage(pageCount - 1);\n }, [page, pageCount]);\n\n const start = page * pageSize;\n const pageRows = sorted.slice(start, start + pageSize);\n\n const toggleSort = (col: Column<T>) => {\n if (!col.sortable) return;\n const prev = sort;\n setSort(\n prev?.id === col.id\n ? prev.dir === \"asc\"\n ? { id: col.id, dir: \"desc\" }\n : null\n : { id: col.id, dir: \"asc\" },\n );\n };\n\n const allSelected = pageRows.length > 0 && pageRows.every((r) => selected.has(getRowId(r)));\n const someSelected = pageRows.some((r) => selected.has(getRowId(r)));\n const selectedRows = rows.filter((r) => selected.has(getRowId(r)));\n\n const toggleAll = () => {\n setSelected((prev) => {\n const next = new Set(prev);\n if (allSelected) pageRows.forEach((r) => next.delete(getRowId(r)));\n else pageRows.forEach((r) => next.add(getRowId(r)));\n return next;\n });\n };\n\n const toggleOne = (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 const hasToolbar = Boolean(search || filters?.length || toolbarStart || toolbarEnd);\n\n const ariaSort = (c: Column<T>) =>\n sort?.id === c.id ? (sort.dir === \"asc\" ? \"ascending\" : \"descending\") : undefined;\n\n // The visible header lives in the TableSurface band while the body table\n // sizes its columns to their content (table-auto). Keep the band aligned by\n // measuring the rendered body columns and pinning the band colgroup to the\n // same pixel widths; both tables share the surface's horizontal scroller.\n const bodyTableRef = useRef<HTMLTableElement | null>(null);\n const bandTableRef = useRef<HTMLTableElement | null>(null);\n const bandContentRef = useRef<HTMLDivElement | null>(null);\n const scrollerRef = useRef<HTMLDivElement | null>(null);\n const [columnWidths, setColumnWidths] = useState<number[]>([]);\n // Deps must be primitives: visibleColumns is a fresh array every render and\n // would re-run this effect (and its setState) in a loop.\n const columnKey = visibleColumns.map((c) => c.id).join(\"\\u0000\");\n // Identity of the rendered column set (selection, actions, visibility,\n // order). The pinned colgroup maps positionally onto the columns, so any\n // structural change invalidates the measured widths — otherwise the new\n // column steals its neighbor's width and every column shifts by one.\n const structureKey = `${selectable ? \"s\" : \"-\"}|${rowActions ? \"a\" : \"-\"}|${renderExpanded ? \"e\" : \"-\"}|${columnKey}`;\n const structureRef = useRef(structureKey);\n // Column widths are measured from the rendered rows, so any data change\n // (renamed key, new row with longer content) must invalidate the pinned\n // widths — otherwise the stale widths truncate the new content.\n const contentKey = useMemo(() => {\n try {\n return JSON.stringify(rows);\n } catch {\n return `rows:${rows.length}`;\n }\n }, [rows]);\n const contentRef = useRef(contentKey);\n const pinned = columnWidths.length > 0;\n\n // Panel-scroll mode: the band stays fixed to the shell and cannot scroll\n // natively, so it translates by the row scroller's scrollLeft to keep every\n // title over its column. Direct DOM write — no re-render per scroll event.\n const syncBandScroll = useCallback(() => {\n const band = bandContentRef.current;\n const scroller = scrollerRef.current;\n if (band && scroller) band.style.transform = `translateX(${-scroller.scrollLeft}px)`;\n }, []);\n\n useLayoutEffect(() => {\n const table = bodyTableRef.current;\n if (!table) return;\n\n const measure = () => {\n const cells = table.tBodies[0]?.rows.item(0)?.cells;\n if (!cells || cells.length === 0) {\n setColumnWidths((prev) => (prev.length === 0 ? prev : []));\n return;\n }\n // Widths cover every rendered column — including the selection checkbox\n // and row-actions cells — in order, so one <col> per entry maps 1:1 in\n // both colgroups. Never add extra <col> elements alongside these.\n //\n // Header floor: read the th's sizer span, never the th/cell layout\n // itself. Once pinned with w-full, fixed-layout columns render wider\n // than their content (surplus distribution) and reading them back would\n // ratchet totalWidth up to the container size — after any container\n // shrink the stale minWidth would keep a scrollbar alive forever. The\n // sizer span is intrinsic in every state. Widths stay unrounded so the\n // sum is the exact content requirement.\n const bandThs = bandTableRef.current?.querySelectorAll(\"thead th\");\n const widths = Array.from(cells, (cell, i) =>\n Math.max(\n cell.getBoundingClientRect().width,\n bandThs?.item(i)?.querySelector(\"[data-col-sizer]\")?.getBoundingClientRect().width ?? 0,\n ),\n );\n // Bail out when nothing changed: a new array would re-render, and the\n // re-render would re-run this effect, looping forever.\n setColumnWidths((prev) =>\n prev.length === widths.length && prev.every((w, i) => w === widths[i]) ? prev : widths,\n );\n };\n if (structureRef.current !== structureKey || contentRef.current !== contentKey) {\n // Column set or row content changed: drop the pinned widths so the body\n // re-renders content-sized (table-auto) and the next pass measures\n // intrinsic widths again. Without this, the effect would measure the\n // stale colgroup's shifted layout and pin the wrong (truncating) widths.\n structureRef.current = structureKey;\n contentRef.current = contentKey;\n if (pinned) {\n // The widths -> [] state flip re-runs this effect (see `pinned` in the\n // deps); measuring now would read the still-pinned layout.\n setColumnWidths([]);\n return;\n }\n // Already unpinned: no state flip would re-run the effect, so measure\n // the content-sized layout right away.\n }\n\n measure();\n syncBandScroll();\n if (typeof ResizeObserver === \"undefined\") return;\n const observer = new ResizeObserver(measure);\n observer.observe(table);\n return () => observer.disconnect();\n // `pinned` re-runs this effect after the structure reset clears the\n // widths (false) and again after re-pinning (true). Safe to measure in\n // the pinned state because the floor reads sizer spans — intrinsic in\n // every state — never the pinned layout itself.\n }, [structureKey, contentKey, pinned, loading, error, syncBandScroll]);\n\n const totalWidth = columnWidths.reduce((sum, width) => sum + width, 0);\n\n return (\n <div className={cn(\"space-y-4\", className)}>\n {tabs && tabs.length > 0 && (\n <div className=\"flex items-center gap-1 border-b border-line\" role=\"tablist\">\n {tabs.map((t) => {\n const active = t.id === activeTab;\n return (\n <button\n key={t.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n onClick={() => onTabChange?.(t.id)}\n className={cn(\n \"-mb-px border-b-2 px-3 py-2 text-sm transition-colors\",\n active\n ? \"border-fg font-medium text-fg\"\n : \"border-transparent text-muted hover:text-fg\",\n )}\n >\n {t.label}\n </button>\n );\n })}\n </div>\n )}\n\n {hasToolbar && (\n <div className=\"flex flex-wrap items-center gap-2\">\n {search && (\n <Input\n type=\"search\"\n aria-label={search.placeholder ?? \"Search\"}\n placeholder={search.placeholder ?? \"Search...\"}\n value={search.value}\n onChange={(e) => search.onChange(e.target.value)}\n onClear={() => search.onChange(\"\")}\n leadingIcon={<MagnifyingGlass />}\n containerClassName=\"w-full sm:w-[280px]\"\n className=\"rounded-[6px] border-0 bg-surface shadow-xs ring-1 ring-line\"\n />\n )}\n {toolbarStart}\n {columnPicker && (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n leadingIcon={<ColumnsIcon />}\n trailingIcon={<DropdownMenuChevron />}\n >\n Columns\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\" className=\"w-54\">\n <DropdownMenuLabel className=\"text-[13px]\">Active columns</DropdownMenuLabel>\n {visibleColumns.map((c) => {\n const pinned = isPinned(c);\n return (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked\n draggable={!pinned}\n onDragStart={(e) => {\n if (pinned) {\n e.preventDefault();\n return;\n }\n e.dataTransfer.effectAllowed = \"move\";\n e.dataTransfer.setData(\"text/plain\", c.id);\n setDragId(c.id);\n }}\n onDragOver={(e) => {\n if (dragId) {\n e.preventDefault();\n moveBefore(dragId, c.id);\n }\n }}\n onDrop={(e) => e.preventDefault()}\n onDragEnd={() => setDragId(null)}\n onCheckedChange={(next) => {\n if (!next && !pinned) {\n setHidden((prev) => ({ ...prev, [c.id]: true }));\n }\n }}\n onSelect={(e) => e.preventDefault()}\n className=\"justify-between\"\n >\n <span className=\"truncate\">{c.header}</span>\n {pinned ? (\n <Lock className=\"size-3.5 shrink-0 text-subtle\" aria-hidden />\n ) : (\n <DotsSixVertical\n aria-hidden\n className={cn(\n \"size-3.5 shrink-0\",\n dragId === c.id ? \"text-primary\" : \"text-subtle\",\n )}\n />\n )}\n </DropdownMenuCheckboxItem>\n );\n })}\n {hiddenColumns.length > 0 ? (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuLabel className=\"text-[13px]\">Available columns</DropdownMenuLabel>\n {hiddenColumns.map((c) => (\n <DropdownMenuCheckboxItem\n key={c.id}\n checked={false}\n onCheckedChange={() => showColumn(c.id)}\n onSelect={(e) => e.preventDefault()}\n >\n {c.header}\n </DropdownMenuCheckboxItem>\n ))}\n </>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n )}\n {filters && filters.length > 0 ? (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label=\"Add filter\"\n >\n <FunnelSimple />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className=\"w-54\">\n {filters.map((filter) => (\n <DropdownMenuItem\n key={filter.id}\n onSelect={() =>\n setActiveFilterIds((prev) =>\n prev.includes(filter.id) ? prev : [...prev, filter.id],\n )\n }\n >\n {filter.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n ) : null}\n {toolbarEnd ? <div className=\"flex-0 sm:ml-auto\">{toolbarEnd}</div> : null}\n </div>\n )}\n\n {activeFilters.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n {activeFilters.map((filter) => {\n const clear = () => {\n filter.onChange([]);\n setActiveFilterIds((prev) => prev.filter((id) => id !== filter.id));\n };\n\n return (\n <div key={filter.id} className=\"inline-flex items-center\">\n <Button\n variant=\"secondary\"\n size=\"md\"\n iconOnly\n aria-label={`Remove ${filter.label} filter`}\n className=\"rounded-r-none\"\n onClick={clear}\n >\n <X />\n </Button>\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"secondary\" size=\"md\" className=\"rounded-l-none pl-2\">\n <FunnelSimple />\n <span className=\"font-medium\">{filter.label}</span>\n <span className=\"h-4 w-px bg-line\" aria-hidden />\n <span className=\"text-muted max-w-28 truncate\">\n {filter.value.length > 0\n ? filter.type === \"text\"\n ? filter.value[0]\n : `${filter.value.length} selected`\n : \"Enter value\"}\n </span>\n <CaretDown className=\"text-muted\" />\n </Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"start\" className={filter.type === \"text\" ? \"w-72\" : \"w-56\"}>\n <DropdownMenuLabel className=\"text-[13px]\">\n Filter by {filter.label}\n </DropdownMenuLabel>\n {filter.type === \"text\" ? (\n <div className=\"px-1 pb-1\">\n <Input\n value={filter.value[0] ?? \"\"}\n onChange={(e) => filter.onChange(e.target.value ? [e.target.value] : [])}\n onClear={filter.value[0] ? () => filter.onChange([]) : undefined}\n placeholder={filter.placeholder ?? `Search ${filter.label.toLowerCase()}...`}\n aria-label={filter.placeholder ?? `Search ${filter.label.toLowerCase()}...`}\n leadingIcon={<MagnifyingGlass className=\"size-3.5\" />}\n size=\"sm\"\n className=\"h-(--control-h-xs) border-0 bg-(--combobox-search-bg) focus-visible:border-muted focus-visible:ring-0\"\n />\n </div>\n ) : (\n <>\n {(filter.options ?? []).map((option) => {\n const checked = filter.value.includes(option.value);\n return (\n <DropdownMenuCheckboxItem\n key={option.value}\n checked={checked}\n onCheckedChange={() =>\n filter.onChange(\n checked\n ? filter.value.filter((value) => value !== option.value)\n : [...filter.value, option.value],\n )\n }\n onSelect={(e) => e.preventDefault()}\n >\n {option.label}\n </DropdownMenuCheckboxItem>\n );\n })}\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={clear}>Clear filter</DropdownMenuItem>\n </>\n )}\n {filter.type === \"text\" ? (\n <>\n <DropdownMenuSeparator />\n <DropdownMenuItem onSelect={clear}>Clear filter</DropdownMenuItem>\n </>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n </div>\n );\n })}\n <button\n type=\"button\"\n onClick={() => {\n for (const filter of activeFilters) filter.onChange([]);\n setActiveFilterIds([]);\n }}\n className=\"text-sm text-muted transition-colors hover:text-fg\"\n >\n Clear filters\n </button>\n </div>\n ) : null}\n\n {infoBanner}\n\n {selectable && selected.size > 0 && (\n <div className=\"flex flex-wrap items-center gap-3 rounded-lg border border-line bg-elevated px-3 py-2 text-sm\">\n <span className=\"font-medium text-fg\">{selected.size} selected</span>\n <div className=\"flex items-center gap-2\">\n {(bulkActions ?? []).map((a) => (\n <Button\n key={a.label}\n size=\"md\"\n variant={a.variant ?? \"outline\"}\n disabled={a.disabled}\n onClick={() => void a.onRun(selectedRows)}\n >\n {a.icon}\n {a.label}\n </Button>\n ))}\n </div>\n <button\n type=\"button\"\n onClick={() => setSelected(new Set())}\n className=\"ml-auto inline-flex items-center gap-1 text-xs text-muted hover:text-fg\"\n >\n <X className=\"size-3.5\" />\n Clear\n </button>\n </div>\n )}\n\n <TableSurface\n scrollMode=\"panel\"\n headerContentRef={bandContentRef}\n action={headerAction}\n tone={tone}\n title={title}\n description={description}\n headerClassName={headerClassName}\n panelClassName={panelClassName}\n header={\n // Visible header band. Presentational (aria-sort lives on the body's\n // sr-only thead); widths are pinned to the measured body columns and\n // hidden until the first measurement lands so columns never flash.\n <table\n ref={bandTableRef}\n role=\"presentation\"\n className=\"w-full table-fixed border-collapse\"\n style={{\n // Fill the container when it fits; force totalWidth (and the\n // shared scroller) only when the columns need more room.\n minWidth: totalWidth > 0 ? totalWidth : undefined,\n visibility: totalWidth > 0 ? undefined : \"hidden\",\n }}\n >\n <colgroup>\n {columnWidths.map((width, i) => (\n <col key={i} style={{ width }} />\n ))}\n </colgroup>\n <thead>\n <tr>\n {/* text-left: UA stylesheets center th content; without this\n the select-all checkbox centers in its (surplus-widened)\n column and drifts right of the row checkboxes. */}\n {selectable && (\n <th className=\"h-(--table-header-h) w-11 px-(--table-pad-x) text-left align-middle\">\n <Checkbox\n aria-label=\"Select all rows\"\n checked={allSelected ? true : someSelected ? \"indeterminate\" : false}\n onCheckedChange={toggleAll}\n />\n </th>\n )}\n {renderExpanded && <th className=\"h-(--table-header-h) w-9 px-1.5\" />}\n {visibleColumns.map((c) => (\n <th\n key={c.id}\n className={cn(HEADER_CELL, c.align === \"right\" && \"text-right\", c.className)}\n >\n {/* Sizer: shrink-wraps the title (sort carets included) so\n its rect is the column's intrinsic header width even\n while the fixed layout squeezes the th. The negative\n margins cancel the cell padding the span adds, so the\n measured width is directly comparable to cell widths. */}\n <span\n data-col-sizer\n className=\"inline-block whitespace-nowrap px-(--table-pad-x) -mx-(--table-pad-x)\"\n >\n {c.sortable ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"xs\"\n aria-label={`Sort by ${c.header}`}\n onClick={() => toggleSort(c)}\n className={cn(\n \"h-auto gap-1.5 rounded-none px-0 py-0 text-[0.8125rem] text-table-header transition-colors [&_svg]:size-3.5\",\n \"hover:bg-transparent hover:text-table-header-active hover:shadow-none\",\n \"active:scale-100 active:bg-transparent active:shadow-none\",\n sort?.id === c.id && \"text-table-header-active\",\n )}\n >\n {c.header}\n {sort?.id === c.id ? (\n sort.dir === \"asc\" ? (\n <CaretUp className=\"size-3.5\" weight=\"bold\" />\n ) : (\n <CaretDown className=\"size-3.5\" weight=\"bold\" />\n )\n ) : (\n <CaretUpDown className=\"size-3.5 opacity-50\" />\n )}\n </Button>\n ) : (\n c.header\n )}\n </span>\n </th>\n ))}\n {rowActions && (\n <th className=\"h-(--table-header-h) w-44 px-4 align-middle\">\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n </thead>\n </table>\n }\n >\n {/* The scroller lives inside the panel: both shells stay fixed while\n only the row content scrolls, and onScroll keeps the band titles\n translated in lockstep with the rows. */}\n <div ref={scrollerRef} className=\"overflow-x-auto\" onScroll={syncBandScroll}>\n {loading ? (\n <div className=\"space-y-2 p-4\">\n {[0, 1, 2].map((i) => (\n <div key={i} className=\"h-11 w-full animate-pulse rounded-lg bg-table-row-hover\" />\n ))}\n </div>\n ) : error ? (\n <div className=\"flex min-h-88 flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n <div className=\"flex size-(--table-empty-icon) items-center justify-center rounded-2xl border border-table-empty-icon-border bg-table-empty-icon text-error [&_svg]:size-8\">\n <WarningCircle weight=\"duotone\" />\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-[1.75rem] font-semibold text-table-header-active\">\n {error.title}\n </p>\n {error.description ? (\n <p className=\"mx-auto max-w-md text-base leading-relaxed text-table-muted\">\n {error.description}\n </p>\n ) : null}\n </div>\n {error.action}\n </div>\n ) : pageRows.length === 0 ? (\n <TableEmptyState\n icon={empty?.icon}\n title={empty?.title ?? \"No results\"}\n description={empty?.description}\n action={empty?.action}\n />\n ) : (\n <table\n ref={bodyTableRef}\n className={cn(\n \"border-collapse text-left\",\n // Unmeasured: content-sized so intrinsic column widths can be\n // measured (w-full would squeeze columns into the container).\n // Measured: fill the container, pinned to the band's colgroup\n // pixel widths; minWidth forces the shared scroller open only\n // when the columns need more room than the container has.\n columnWidths.length > 0 ? \"w-full table-fixed\" : \"table-auto\",\n )}\n style={{ minWidth: totalWidth > 0 ? totalWidth : undefined }}\n >\n {columnWidths.length > 0 && (\n <colgroup>\n {columnWidths.map((width, i) => (\n <col key={i} style={{ width }} />\n ))}\n </colgroup>\n )}\n {/* Semantic headers for assistive tech; the visible band is presentational. */}\n <thead className=\"sr-only\">\n <tr>\n {selectable && <th scope=\"col\">Select</th>}\n {renderExpanded && <th scope=\"col\">Details</th>}\n {visibleColumns.map((c) => (\n <th key={c.id} scope=\"col\" aria-sort={ariaSort(c)}>\n {c.header}\n </th>\n ))}\n {rowActions && <th scope=\"col\">Actions</th>}\n </tr>\n </thead>\n <TableBody>\n {pageRows.map((row) => {\n const id = getRowId(row);\n const isSelected = selected.has(id);\n const isExpanded = expanded.has(id);\n const columnCount =\n visibleColumns.length +\n (selectable ? 1 : 0) +\n (renderExpanded ? 1 : 0) +\n (rowActions ? 1 : 0);\n return (\n <Fragment key={id}>\n <TableRow\n data-state={isSelected ? \"selected\" : undefined}\n onClick={onRowClick ? () => onRowClick(row) : undefined}\n className={onRowClick ? \"cursor-pointer\" : undefined}\n >\n {selectable && (\n <TableCell className=\"w-11\" onClick={(e) => e.stopPropagation()}>\n <Checkbox\n aria-label=\"Select row\"\n checked={isSelected}\n onCheckedChange={() => toggleOne(id)}\n />\n </TableCell>\n )}\n {renderExpanded && (\n <TableCell className=\"w-9 px-1.5\" onClick={(e) => e.stopPropagation()}>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon\"\n className=\"size-7\"\n aria-label={isExpanded ? \"Collapse row\" : \"Expand row\"}\n aria-expanded={isExpanded}\n onClick={() => toggleExpanded(id)}\n >\n <CaretDown\n className={cn(\n \"size-3.5 text-muted transition-transform motion-safe:duration-200\",\n isExpanded ? \"\" : \"-rotate-90\",\n )}\n weight=\"bold\"\n />\n </Button>\n </TableCell>\n )}\n {visibleColumns.map((c) => (\n <TableCell\n key={c.id}\n data-numeric={c.numeric ? \"\" : undefined}\n className={cn(c.align === \"right\" && \"text-right\", c.className)}\n >\n {c.cell(row)}\n </TableCell>\n ))}\n {rowActions && (\n <TableCell\n className=\"w-44 px-4 text-right\"\n onClick={(e) => {\n // Dead-zone fix: only swallow clicks on the\n // action controls themselves (menus, buttons);\n // the cell's padding stays part of the clickable\n // row.\n if ((e.target as HTMLElement).closest(\"button, a, input, [role='menuitem']\")) {\n e.stopPropagation();\n }\n }}\n >\n {rowActions(row)}\n </TableCell>\n )}\n </TableRow>\n {renderExpanded && isExpanded ? (\n <TableRow className=\"hover:bg-inherit\" data-expanded=\"\">\n <TableCell\n colSpan={columnCount}\n className=\"border-t border-line bg-elevated/60 px-(--table-pad-x) py-3 align-top text-[13px] text-muted\"\n >\n {renderExpanded(row)}\n </TableCell>\n </TableRow>\n ) : null}\n </Fragment>\n );\n })}\n </TableBody>\n </table>\n )}\n </div>\n </TableSurface>\n\n {showPagination && (\n <div className=\"flex flex-wrap items-center justify-between gap-3 text-sm\">\n <span className=\"text-muted\">\n {start + 1}–{Math.min(start + pageSize, sorted.length)} of {sorted.length}\n </span>\n <div className=\"flex items-center gap-2\">\n <Select value={String(pageSize)} onValueChange={(v) => setPageSize(Number(v))}>\n <SelectTrigger aria-label=\"Rows per page\" className=\"w-27.5\" variant=\"inline\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((n) => (\n <SelectItem key={n} value={String(n)}>\n {n}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n <div className=\"flex items-center gap-1\">\n <Button\n variant=\"secondary\"\n size=\"icon\"\n aria-label=\"Previous page\"\n disabled={page <= 0}\n onClick={() => setPage((p) => Math.max(0, p - 1))}\n >\n <CaretLeft />\n </Button>\n <Button\n variant=\"secondary\"\n size=\"icon\"\n aria-label=\"Next page\"\n disabled={page >= pageCount - 1}\n onClick={() => setPage((p) => Math.min(pageCount - 1, p + 1))}\n >\n <CaretRight />\n </Button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nimport { TableSurface } from \"./table-surface\";\n\ninterface EmptyStateProps {\n icon?: ReactNode;\n title: string;\n description?: string;\n action?: ReactNode;\n className?: string;\n}\n\nexport function EmptyState({ icon, title, description, action, className }: EmptyStateProps) {\n return (\n <TableSurface className={className}>\n <div className=\"flex flex-col items-center justify-center gap-4 px-6 py-16 text-center\">\n {icon ? (\n <div className=\"flex size-11 items-center justify-center rounded-xl border border-line bg-elevated text-subtle [&_svg]:size-6\">\n {icon}\n </div>\n ) : null}\n <div className=\"space-y-1\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n {description ? (\n <p className=\"mx-auto max-w-sm text-sm text-muted\">{description}</p>\n ) : null}\n </div>\n {action}\n </div>\n </TableSurface>\n );\n}\n","import { forwardRef } from \"react\";\n\nimport { Input, type InputProps } from \"./input\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\nimport { cn } from \"./utils\";\n\nexport interface InputSelectOption {\n value: string;\n label: string;\n}\n\nexport interface InputSelectProps\n extends Omit<InputProps, \"className\" | \"containerClassName\" | \"onClear\"> {\n /** Selected value for the right-hand inline dropdown. */\n selectValue: string;\n onSelectChange: (value: string) => void;\n selectOptions: InputSelectOption[];\n selectAriaLabel: string;\n selectPlaceholder?: string;\n /** Outer wrapper class. */\n className?: string;\n inputClassName?: string;\n selectClassName?: string;\n}\n\n/**\n * Joined text/number input with an inline select on the right. The input keeps\n * its right corners square and the dropdown keeps its left corners square so\n * they read as one control.\n */\nexport const InputSelect = forwardRef<HTMLInputElement, InputSelectProps>(\n (\n {\n className,\n inputClassName,\n selectClassName,\n selectValue,\n onSelectChange,\n selectOptions,\n selectAriaLabel,\n selectPlaceholder,\n id,\n size,\n disabled,\n ...inputProps\n },\n ref,\n ) => (\n <div className={cn(\"flex w-full items-stretch\", className)}>\n <Input\n {...inputProps}\n ref={ref}\n id={id}\n size={size}\n disabled={disabled}\n className={cn(\n \"min-w-0 rounded-l-(--control-radius) rounded-r-none\",\n inputClassName,\n )}\n />\n <Select\n value={selectValue}\n onValueChange={onSelectChange}\n disabled={disabled}\n >\n <SelectTrigger\n aria-label={selectAriaLabel}\n variant=\"ghost\"\n className={cn(\n \"min-w-28 shrink-0 rounded-l-none border border-(--input-border) border-l-0 px-3 text-[13px] font-normal\",\n selectClassName,\n )}\n >\n <SelectValue placeholder={selectPlaceholder} />\n </SelectTrigger>\n <SelectContent>\n {selectOptions.map((option) => (\n <SelectItem key={option.value} value={option.value}>\n {option.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n ),\n);\nInputSelect.displayName = \"InputSelect\";\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\n/** Inline keyboard hint chip. */\nexport function Kbd({ className, ...props }: HTMLAttributes<HTMLElement>) {\n return (\n <kbd\n className={cn(\n \"inline-flex h-5 min-w-5 items-center justify-center rounded border border-line bg-elevated px-1.5 font-mono text-[11px] font-medium text-subtle\",\n className,\n )}\n {...props}\n />\n );\n}\n","import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Label = forwardRef<\n ElementRef<typeof LabelPrimitive.Root>,\n ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root\n ref={ref}\n className={cn(\n \"mb-2.5 block text-sm font-medium text-fg leading-none last:mb-0 peer-disabled:cursor-not-allowed peer-disabled:opacity-70\",\n className,\n )}\n {...props}\n />\n));\nLabel.displayName = \"Label\";\n","import { useId, type ReactNode } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport interface SegmentedOption<T extends string> {\n value: T;\n label: ReactNode;\n icon?: ReactNode;\n}\n\ninterface SegmentedProps<T extends string> {\n value: T;\n onValueChange: (value: T) => void;\n options: SegmentedOption<T>[];\n size?: \"sm\" | \"md\";\n className?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Single-choice control for a small set of options, styled after the Jinaan\n * dashboard: a recessed track with an elevated selected pill. Implemented as a\n * `radiogroup` of native radios, so arrow-key roving and forms work natively.\n */\nexport function Segmented<T extends string>({\n value,\n onValueChange,\n options,\n size = \"sm\",\n className,\n ...rest\n}: SegmentedProps<T>) {\n const name = useId();\n\n return (\n <div\n role=\"radiogroup\"\n aria-label={rest[\"aria-label\"]}\n className={cn(\n \"inline-flex w-fit items-center rounded-lg border border-line bg-canvas\",\n size === \"sm\" ? \"h-(--control-h-sm)\" : \"h-(--control-h-md)\",\n className,\n )}\n >\n {options.map((option) => {\n const active = option.value === value;\n return (\n <label\n key={option.value}\n className={cn(\n \"inline-flex h-full cursor-pointer items-center justify-center gap-1.5 rounded-md text-sm font-medium transition-colors\",\n \"has-focus-visible:ring-2 has-focus-visible:ring-focus/40\",\n size === \"sm\"\n ? \"px-(--control-pad-x-sm) [&_svg]:size-(--control-icon-sm)\"\n : \"px-(--control-pad-x-md) [&_svg]:size-(--control-icon-md)\",\n active\n ? \"btn-fill bg-(--button-secondary-bg) text-fg\"\n : \"text-muted hover:text-fg\",\n )}\n >\n <input\n type=\"radio\"\n name={name}\n value={option.value}\n checked={active}\n onChange={() => onValueChange(option.value)}\n className=\"sr-only\"\n />\n {option.icon}\n {option.label}\n </label>\n );\n })}\n </div>\n );\n}\n","import * as SeparatorPrimitive from \"@radix-ui/react-separator\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const Separator = forwardRef<\n ElementRef<typeof SeparatorPrimitive.Root>,\n ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = \"horizontal\", decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n \"shrink-0 bg-line\",\n orientation === \"horizontal\" ? \"h-px w-full\" : \"h-full w-px\",\n className,\n )}\n {...props}\n />\n));\nSeparator.displayName = \"Separator\";\n","import type { HTMLAttributes } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport function Skeleton({ className, ...props }: HTMLAttributes<HTMLDivElement>) {\n return (\n <div\n className={cn(\"animate-pulse rounded-md bg-elevated\", className)}\n {...props}\n />\n );\n}\n","import * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\nimport { forwardRef, type ComponentPropsWithoutRef, type ElementRef } from \"react\";\n\nimport { cn } from \"./utils\";\n\nexport const TooltipProvider = TooltipPrimitive.Provider;\nexport const Tooltip = TooltipPrimitive.Root;\nexport const TooltipTrigger = TooltipPrimitive.Trigger;\n\nexport const TooltipContent = forwardRef<\n ElementRef<typeof TooltipPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 6, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 overflow-hidden rounded-md border border-line bg-elevated px-2 py-1 text-xs text-fg shadow-md\",\n \"data-[state=delayed-open]:animate-in data-[state=closed]:animate-out\",\n \"data-[state=delayed-open]:fade-in-0 data-[state=closed]:fade-out-0\",\n \"data-[state=delayed-open]:zoom-in-95 data-[state=closed]:zoom-out-95\",\n \"data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1\",\n \"data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1\",\n \"duration-150 ease-out\",\n className,\n )}\n {...props}\n />\n </TooltipPrimitive.Portal>\n));\nTooltipContent.displayName = \"TooltipContent\";\n"],"names":["cn","inputs","twMerge","clsx","reorderIds","ids","from","to","next","moved","Spinner","className","jsx","CircleNotch","buttonVariants","cva","iconSize","Button","forwardRef","variant","size","asChild","leadingIcon","trailingIcon","iconOnly","loading","fullWidth","disabled","children","props","ref","Comp","Slot","icon","jsxs","AgentPrompt","command","tag","copied","setCopied","useState","copy","Robot","Terminal","Check","Copy","Avatar","AvatarPrimitive","AvatarImage","AvatarFallback","badgeVariants","dotVariants","Badge","dot","variants","Info","CheckCircle","Warning","XCircle","Callout","title","DefaultIcon","tone","iconClassName","TableContainer","TablePanel","Table","TableHeader","TableBody","TableRow","TableHead","TableCell","SHELL_TONE","PANEL_TONE","isActionConfig","action","TableSurface","description","header","headerClassName","panelClassName","footer","footerClassName","minHeight","scrollMode","headerContentRef","hasTitle","panelScroll","actionNode","band","panel","Fragment","splitCardChildren","nodes","Children","headers","child","isValidElement","CardHeader","Card","body","CardTitle","CardDescription","CardContent","CardFooter","Checkbox","CheckboxPrimitive","Minus","usable","rect","clampScale","value","computeDialogFlight","origin","target","SOURCE_SELECTOR","lastSource","trackerInstalled","rectOf","element","rememberSource","installSourceTracker","event","resolveOrigin","content","active","DIALOG_CLOSE_MS","DialogClosingContext","createContext","DialogRequestCloseContext","InDialogContext","Dialog","controlledOpen","defaultOpen","onOpenChange","uncontrolledOpen","setUncontrolledOpen","closing","setClosing","closingRef","useRef","closeTimer","open","openRef","controlled","useEffect","handleOpenChange","DialogPrimitive","DialogTrigger","onClick","DialogClose","DialogCancel","startDialogMotion","retry","flight","clear","onEnd","dialogTopFallback","offset","DialogContent","placement","topOffset","motion","style","onEscapeKeyDown","onPointerDownOutside","useContext","top","placementStyle","requestClose","contentRef","setRef","useCallback","node","X","DialogPanel","DialogBody","DialogHeader","DialogFooter","DialogTitle","DialogDescription","RadioGroupContext","RadioGroup","label","onChange","name","generated","useId","groupName","RadioCard","badge","ctx","describedById","isDisabled","isChecked","_a","ChoiceDialog","trigger","options","defaultValue","onValueChange","cancelLabel","confirmLabel","onConfirm","internal","setInternal","selected","option","CodeBlock","code","HEIGHT","PAD_X","LEAD_INSET","TRAIL_INSET","ICON","Input","containerClassName","type","onClear","error","helperText","id","ariaDescribedBy","readOnly","autoId","inputId","hasMessage","showClear","messageId","describedBy","field","Combobox","items","onSearchChange","minSearchLength","debounceMs","placeholder","searchPlaceholder","emptyMessage","hintMessage","renderItem","renderValue","contentClassName","setOpen","query","setQuery","debounced","setDebounced","trimmed","item","showHint","pending","hint","filtered","useMemo","needle","pick","PopoverPrimitive","CaretDown","MagnifyingGlass","countDescendants","types","count","nested","DropdownMenuEmptyContext","DropdownMenu","empty","DropdownMenuItem","DropdownMenuCheckboxItem","DropdownMenuSubTrigger","DropdownMenuPrimitive","DropdownMenuTrigger","DropdownMenuChevron","DropdownMenuGroup","DropdownMenuPortal","DropdownMenuContent","sideOffset","inset","checked","DropdownMenuLabel","DropdownMenuSub","CaretRight","DropdownMenuSubContent","DropdownMenuSeparator","SelectGroup","SelectPrimitive","SelectValue","Select","SelectItem","SelectTrigger","SelectContent","position","SelectLabel","TableEmptyState","HEADER_CELL","initials","p","DataTableIdentity","secondary","image","DataTable","rows","columns","getRowId","search","filters","toolbarStart","toolbarEnd","columnPicker","tabs","activeTab","onTabChange","infoBanner","selectable","bulkActions","rowActions","renderExpanded","onRowClick","defaultSort","sortProp","onSortChange","initialPageSize","pageSizeOptions","pagination","headerAction","hidden","setHidden","c","order","setOrder","dragId","setDragId","internalSort","setInternalSort","sort","setSort","page","setPage","pageSize","setPageSize","setSelected","expanded","setExpanded","toggleExpanded","prev","activeFilterIds","setActiveFilterIds","propOrder","byId","orderedColumns","visibleColumns","hiddenColumns","isPinned","columnAt","moveBefore","draggedId","targetId","showColumn","activeFilters","f","filterSignature","filter","row","q","r","sorted","col","dir","a","b","av","bv","pageCount","showPagination","start","pageRows","toggleSort","allSelected","someSelected","selectedRows","toggleAll","toggleOne","hasToolbar","ariaSort","bodyTableRef","bandTableRef","bandContentRef","scrollerRef","columnWidths","setColumnWidths","columnKey","structureKey","structureRef","contentKey","pinned","syncBandScroll","scroller","useLayoutEffect","table","measure","cells","_b","bandThs","_c","widths","cell","i","w","observer","totalWidth","sum","width","t","e","ColumnsIcon","Lock","DotsSixVertical","FunnelSimple","CaretUp","CaretUpDown","WarningCircle","isSelected","isExpanded","columnCount","v","CaretLeft","EmptyState","InputSelect","inputClassName","selectClassName","selectValue","onSelectChange","selectOptions","selectAriaLabel","selectPlaceholder","inputProps","Kbd","Label","LabelPrimitive","Segmented","rest","Separator","orientation","decorative","SeparatorPrimitive","Skeleton","TooltipProvider","TooltipPrimitive","Tooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}