@orangecheck/design 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chrome.d.mts +1 -1
- package/dist/chrome.d.ts +1 -1
- package/dist/chrome.js +0 -16
- package/dist/chrome.js.map +1 -1
- package/dist/chrome.mjs +0 -16
- package/dist/chrome.mjs.map +1 -1
- package/dist/components.js +18 -23
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +19 -24
- package/dist/components.mjs.map +1 -1
- package/dist/composites.d.mts +1 -1
- package/dist/composites.d.ts +1 -1
- package/dist/composites.js +18 -7
- package/dist/composites.js.map +1 -1
- package/dist/composites.mjs +19 -8
- package/dist/composites.mjs.map +1 -1
- package/dist/index.js +19 -28
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +20 -29
- package/dist/index.mjs.map +1 -1
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs.map +1 -1
- package/dist/tokens.d.mts +1 -1
- package/dist/tokens.d.ts +1 -1
- package/dist/tokens.js +1 -5
- package/dist/tokens.js.map +1 -1
- package/dist/tokens.mjs +1 -5
- package/dist/tokens.mjs.map +1 -1
- package/package.json +1 -1
package/dist/primitives.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tokens/cn.ts","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/label.tsx","../src/primitives/checkbox.tsx","../src/primitives/radio-group.tsx","../src/primitives/switch.tsx","../src/primitives/alert.tsx","../src/primitives/alert-with-action.tsx","../src/primitives/textarea.tsx","../src/primitives/theme-toggle.tsx","../src/primitives/working.tsx","../src/primitives/error-boundary.tsx","../src/primitives/skeleton.tsx","../src/primitives/separator.tsx","../src/primitives/sheet.tsx","../src/primitives/dialog.tsx","../src/primitives/confirm-dialog.tsx","../src/primitives/prompt-dialog.tsx","../src/primitives/modal.tsx","../src/primitives/pagination.tsx","../src/primitives/popover.tsx","../src/primitives/tooltip.tsx","../src/primitives/accordion.tsx","../src/primitives/select.tsx","../src/primitives/toaster.tsx","../src/primitives/surface.tsx","../src/primitives/icon-badge.tsx","../src/primitives/card.tsx","../src/primitives/sparkline.tsx","../src/primitives/stat-block.tsx","../src/primitives/bar.tsx","../src/primitives/status-pill.tsx","../src/primitives/tabs.tsx","../src/format/index.ts","../src/primitives/sats-amount.tsx","../src/primitives/copy-button.tsx","../src/primitives/bitcoin-address.tsx","../src/primitives/qr-code.tsx"],"names":["cva","Slot","jsx","Icon","jsxs","React","DialogPrimitive","useState","useEffect","Dialog2","NODE_ENV","pending","notifyHost","hostMountCount","useRef","useCallback","Dialog3","DialogPrimitive2","X","Popover2","React3","CheckIcon","useTheme","Sonner"],"mappings":"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","file":"primitives.mjs","sourcesContent":["import type { ClassValue } from 'clsx';\n\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Canonical class-name merge for the OrangeCheck family.\n * `clsx` for conditional composition, `tailwind-merge` to resolve\n * conflicting Tailwind utilities (last-wins by property).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',\n outline:\n 'bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n // For CTAs placed ON a saturated brand band or a dark section\n // (e.g. a terracotta hero / footer / a forced-dark block) where\n // the surface is dark+light-text in either mode. A neutral white\n // pill + a translucent-white ghost read on any such surface;\n // hardcoded white is deliberate (cf. destructive's text-white).\n onBrand: 'bg-white text-neutral-900 shadow-sm hover:bg-white/90',\n onBrandOutline:\n 'border border-white/40 bg-transparent text-white hover:bg-white/10',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst badgeVariants = cva(\n 'focus-visible:border-ring focus-visible:ring-ring/50 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',\n destructive:\n 'bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent',\n warning:\n 'bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent',\n success:\n 'bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent',\n info: 'bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent',\n brand: 'bg-brand-soft text-accent-foreground border-transparent',\n neutral:\n 'bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span';\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as LabelPrimitive from '@radix-ui/react-label';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex select-none items-center gap-2 text-sm font-medium leading-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","'use client';\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { CheckIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Checkbox — Radix-backed, skin-aware, accessible. Replaces raw\n * `<input type=\"checkbox\">` (the family had ~18 unstyled instances). Sharp\n * `rounded-sm` (skin radius), brand fill when checked, the family focus ring,\n * and `aria-invalid` error styling for parity with Input/Select/Textarea.\n */\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-input bg-input/30 size-4 shrink-0 rounded-sm border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current\"\n >\n <CheckIcon className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { CircleIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * RadioGroup + RadioGroupItem — Radix-backed, skin-aware, accessible. Replaces\n * raw `<input type=\"radio\">`. Circular (always `rounded-full`, independent of\n * skin radius — radios are round by convention), brand-filled dot when\n * selected, family focus ring, `aria-invalid` parity.\n */\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'border-input bg-input/30 text-primary aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:border-primary',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary text-primary absolute size-2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Switch — Radix-backed on/off toggle, skin-aware, accessible. For binary\n * settings (distinct from the domain-specific ThemeToggle). brand-on track,\n * family focus ring. Track is `rounded-full` by toggle convention; the thumb\n * follows suit.\n */\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background pointer-events-none block size-4 rounded-full shadow-sm ring-0 transition-transform',\n 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst alertVariants = cva(\n 'relative grid w-full grid-cols-[0_1fr] items-start gap-x-0 gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n success:\n 'text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90',\n warning:\n 'text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","import type { LucideIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Alert, AlertDescription, AlertTitle } from './alert';\nimport { Button } from './button';\n\ntype AlertVariant = 'default' | 'destructive' | 'warning' | 'success';\n\nexport interface AlertWithActionProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionVariant?: 'default' | 'outline' | 'ghost' | 'destructive';\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n actionContent?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Alert with an integrated action button. Standard Alert styling + variants,\n * optional title/icon, optional action button or custom action content.\n */\nexport function AlertWithAction({\n variant = 'default',\n icon: Icon,\n title,\n description,\n actionLabel,\n onAction,\n actionVariant = 'outline',\n actionIcon,\n actionDisabled,\n actionContent,\n className,\n}: AlertWithActionProps) {\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n {(actionLabel || actionContent) && (\n <div className=\"mt-3 flex items-center gap-2\">\n {actionContent}\n {actionLabel && onAction && (\n <Button\n size=\"sm\"\n variant={actionVariant}\n onClick={onAction}\n disabled={actionDisabled}\n className={cn(!actionContent && 'ml-auto')}\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n )}\n </AlertDescription>\n </Alert>\n );\n}\n\nexport interface AlertWithCountdownProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n countdown: number;\n countdownLabel?: string;\n countdownIcon?: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n className?: string;\n}\n\n/**\n * Alert with a countdown timer and action button. Auto-pluralizes \"second(s)\"\n * and supports a `{countdown}` placeholder in `countdownLabel`.\n */\nexport function AlertWithCountdown({\n variant = 'default',\n icon: Icon,\n title,\n description,\n countdown,\n countdownLabel,\n countdownIcon,\n actionLabel = 'Check Now',\n onAction,\n actionIcon,\n actionDisabled,\n className,\n}: AlertWithCountdownProps) {\n const label = countdownLabel\n ? countdownLabel.replace('{countdown}', countdown.toString())\n : `Rechecking in ${countdown} second${countdown !== 1 ? 's' : ''}...`;\n\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n <div className=\"mt-3 flex items-center gap-2 text-sm\">\n {countdownIcon}\n <span>{label}</span>\n {onAction && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onAction}\n disabled={actionDisabled}\n className=\"ml-auto\"\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n </AlertDescription>\n </Alert>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Sizing note, and it is load-bearing: `text-base md:text-xs`, not `text-xs`.\n *\n * iOS Safari zooms the viewport when a form field with text under 16px takes\n * focus, and the user is not zoomed back out afterwards — every textarea in\n * the family did this. `text-base` (16px) on mobile suppresses it; `md:text-xs`\n * keeps the 12px mono look on a pointer device, where the zoom behaviour does\n * not exist. Input already used this ladder (`text-base md:text-sm`); Textarea\n * was flat 12px with no responsive step.\n *\n * A consumer passing `text-xs` via className will re-break it — tailwind-merge\n * lets the caller win. Pass the ladder, not a single size.\n */\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'placeholder:text-muted-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 w-full min-w-0 rounded-md border px-3 py-2 font-mono text-base leading-relaxed shadow-xs md:text-xs transition-[color,box-shadow,background-color] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n // aria-invalid parity with Input — error styling when a consumer\n // marks the field invalid.\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","'use client';\n\nimport { Moon, Sun } from 'lucide-react';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button } from './button';\n\n/**\n * Compact icon-button light/dark toggle used in the desktop header. This is the\n * *mode* axis (next-themes `.dark` class) — orthogonal to `OcThemePicker`, which\n * is the named-theme (skin) axis.\n */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = resolvedTheme === 'dark';\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n title={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className={cn('text-muted-foreground hover:text-foreground', className)}\n >\n {!mounted ? (\n <span className=\"block size-4\" />\n ) : isDark ? (\n <Sun className=\"size-4\" />\n ) : (\n <Moon className=\"size-4\" />\n )}\n </Button>\n );\n}\n\n/**\n * Link-like variant for use inside the mobile drawer (matches other menu items).\n */\nexport function ThemeToggleLink() {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = mounted && resolvedTheme === 'dark';\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className=\"hover:text-foreground flex w-full items-center justify-between px-2 py-2 text-left text-xs tracking-wide uppercase transition-colors\"\n >\n <span className=\"tracking-wide lowercase\">\n {'> '}\n {mounted ? (isDark ? 'light mode' : 'dark mode') : 'theme'}\n </span>\n {mounted && (isDark ? <Sun className=\"size-3.5\" /> : <Moon className=\"size-3.5\" />)}\n </button>\n );\n}\n","'use client';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Cohesive \"working\" indicator used at every async hold-point. Two styles, same\n * DNA — a cypherpunk marching-cursor of three dots (no SVG spinner). The CSS\n * lives in `@orangecheck/design/styles.css` (`.oc-working-*`). Each indicator\n * carries an `aria-live=\"polite\"` region announcing the activity.\n */\nexport interface WorkingProps {\n /** Short verb phrase describing what's happening. Lowercase. */\n text: string;\n /** Compact (button-sized) or normal (inline block). */\n size?: 'sm' | 'md';\n /** Optional — show a progress ratio (e.g. \"2 of 4 relays\"). */\n progress?: string;\n className?: string;\n}\n\nexport function Working({ text, size = 'md', progress, className }: WorkingProps) {\n const isSmall = size === 'sm';\n return (\n <span\n aria-live=\"polite\"\n className={cn(\n 'inline-flex items-center gap-2 font-mono',\n isSmall ? 'text-[11px]' : 'text-xs',\n 'text-muted-foreground',\n className\n )}\n >\n <span className=\"oc-working-cursor\" aria-hidden>\n <span className=\"oc-working-dot\" style={{ animationDelay: '0ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '140ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '280ms' }}>\n ·\n </span>\n </span>\n <span className=\"oc-working-text\">\n {text}\n {progress && <span className=\"text-muted-foreground/60 ml-1.5\">[{progress}]</span>}\n </span>\n </span>\n );\n}\n\n/**\n * Full-panel working block. Use inside a terminal to take the whole card.\n */\nexport function WorkingPanel({ text, progress }: Pick<WorkingProps, 'text' | 'progress'>) {\n return (\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"ml-2\">in progress</span>\n </div>\n <div className=\"flex items-center gap-3 p-5\">\n <Working text={text} {...(progress ? { progress } : {})} />\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\ninterface Props {\n children: React.ReactNode;\n /** Full custom fallback. Takes precedence over `title`/`message`. */\n fallback?: (error: Error, reset: () => void) => React.ReactNode;\n /** Title shown in the default fallback's terminal strip (default \"! fatal\"). */\n title?: string;\n /** Reassurance line below the error (default \"this page crashed. reload to recover.\"). */\n message?: string;\n /** Called on catch — wire to Sentry/analytics. Runs alongside the console log. */\n onError?: (error: Error, info: React.ErrorInfo) => void;\n}\n\ninterface State {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends React.Component<Props, State> {\n state: State = { error: null };\n\n static getDerivedStateFromError(error: Error): State {\n return { error };\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n // Default behaviour logs; pass `onError` to forward to Sentry or similar.\n console.error('[ErrorBoundary]', error, info);\n this.props.onError?.(error, info);\n }\n\n reset = () => this.setState({ error: null });\n\n render() {\n if (this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback(this.state.error, this.reset);\n }\n return (\n <div className=\"container py-16\">\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"text-destructive flex items-center gap-1.5\">\n {this.props.title ?? '! fatal'}\n </span>\n </div>\n <div className=\"space-y-3 p-5 font-mono text-xs leading-relaxed\">\n <p>\n <span className=\"text-destructive\">{'> '}err:</span>{' '}\n {this.state.error.message || 'unknown error'}\n </p>\n <p className=\"text-muted-foreground\">\n {'> '}\n {this.props.message ?? 'this page crashed. reload to recover.'}\n </p>\n <button\n type=\"button\"\n onClick={this.reset}\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 mt-2 inline-flex items-center justify-center gap-2 rounded-md px-4 py-2 font-mono text-xs tracking-widest uppercase\"\n >\n retry\n </button>\n </div>\n </div>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SkeletonProps {\n className?: string;\n}\n\n/** Inert shimmer placeholder. Pulses subtly while data is loading. */\nexport function Skeleton({ className }: SkeletonProps) {\n return <div className={cn('bg-muted/40 animate-pulse rounded-sm', className)} />;\n}\n","'use client';\n\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","'use client';\n\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Sheet(props: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger(props: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose(props: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal(props: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'left' | 'right' | 'top' | 'bottom';\n}) {\n const sideClasses: Record<string, string> = {\n right: 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n top: 'inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom: 'inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n };\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=closed]:animate-out data-[state=open]:duration-500 data-[state=open]:animate-in',\n sideClasses[side],\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-1.5 p-4', className)} {...props} />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetPortal,\n SheetTitle,\n SheetTrigger,\n};\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-lg leading-none font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { AlertTriangle } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\n\n/**\n * Promise-based replacement for `window.confirm` in the house design language.\n * Call `confirm({...})` from anywhere; a single mounted `<ConfirmHost />` renders\n * it. Async (resolves to a boolean) and provider-less by design.\n */\n\nexport interface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n}\n\ninterface PendingConfirm extends ConfirmOptions {\n resolve: (ok: boolean) => void;\n}\n\n// Read NODE_ENV without depending on @types/node (this is a browser package).\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingConfirm | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\nexport function confirm(opts: ConfirmOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[ConfirmDialog] confirm() called but no <ConfirmHost /> is mounted');\n }\n });\n}\n\n/** Singleton dialog host. Mount once at the app root. */\nexport function ConfirmHost() {\n const [state, setState] = useState<PendingConfirm | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn(\n '[ConfirmDialog] multiple <ConfirmHost /> instances mounted — the last one wins'\n );\n }\n notifyHost = () => setState(pending);\n if (pending) setState(pending);\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (ok: boolean) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(ok);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(false)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\">\n <div className=\"terminal-title\">\n <span\n className={\n 'flex items-center gap-1.5 ' +\n (state.destructive ? 'text-destructive' : 'text-primary')\n }\n >\n <AlertTriangle className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap [overflow-wrap:anywhere]\">\n {state.message}\n </div>\n </Dialog.Description>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(false)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button\n onClick={() => close(true)}\n className={\n 'font-display tracking-wide uppercase ' +\n (state.destructive\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : '')\n }\n >\n {state.confirmLabel ?? 'confirm'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { Pencil } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Label } from './label';\n\n/**\n * Promise-based replacement for `window.prompt`, in the house design language.\n * Call `prompt({...})`; mount one `<PromptHost />` at the app root (alongside\n * `<ConfirmHost />`). Supports a masked `secret` input, a matching\n * `confirmField` (\"choose a passphrase, twice\"), and a `validate` hook.\n */\n\nexport interface PromptOptions {\n title: string;\n message?: string;\n label?: string;\n placeholder?: string;\n defaultValue?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n /** Mask the input. */\n secret?: boolean;\n /** Show a second input that must match the first. Implies validation. */\n confirmField?: boolean;\n /** Minimum accepted length. */\n minLength?: number;\n /** Return an error string to block submission, or null to allow it. */\n validate?: (value: string) => string | null;\n}\n\ninterface PendingPrompt extends PromptOptions {\n resolve: (value: string | null) => void;\n}\n\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingPrompt | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\n/** Open a prompt dialog. Resolves to the entered string, or null if cancelled. */\nexport function prompt(opts: PromptOptions): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[PromptDialog] prompt() called but no <PromptHost /> is mounted');\n }\n });\n}\n\nexport function PromptHost() {\n const [state, setState] = useState<PendingPrompt | null>(null);\n const [value, setValue] = useState('');\n const [confirmValue, setConfirmValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn('[PromptDialog] multiple <PromptHost /> instances mounted');\n }\n notifyHost = () => {\n setValue(pending?.defaultValue ?? '');\n setConfirmValue('');\n setError(null);\n setState(pending);\n };\n if (pending) notifyHost();\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (result: string | null) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(result);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n const submit = useCallback(() => {\n if (!state) return;\n const v = value;\n if (state.minLength && v.length < state.minLength) {\n setError(`must be at least ${state.minLength} characters`);\n return;\n }\n if (state.confirmField && v !== confirmValue) {\n setError('the two entries do not match');\n return;\n }\n if (state.validate) {\n const msg = state.validate(v);\n if (msg) {\n setError(msg);\n return;\n }\n }\n close(v);\n }, [state, value, confirmValue, close]);\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content\n className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n }}\n >\n <div className=\"terminal-title\">\n <span className=\"text-primary flex items-center gap-1.5\">\n <Pencil className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n {state.message && (\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap\">\n {state.message}\n </div>\n </Dialog.Description>\n )}\n <div>\n {state.label && <Label>{state.label}</Label>}\n <Input\n autoFocus\n type={state.secret ? 'password' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n placeholder={state.placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={\n (state.label ? 'mt-2 ' : '') + (state.secret ? 'font-mono' : '')\n }\n />\n </div>\n {state.confirmField && (\n <div>\n <Label>confirm</Label>\n <Input\n type={state.secret ? 'password' : 'text'}\n value={confirmValue}\n onChange={(e) => {\n setConfirmValue(e.target.value);\n setError(null);\n }}\n placeholder=\"re-enter to confirm\"\n autoComplete=\"off\"\n spellCheck={false}\n className={'mt-2 ' + (state.secret ? 'font-mono' : '')}\n />\n </div>\n )}\n {error && <p className=\"text-destructive font-mono text-xs\">{error}</p>}\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(null)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button onClick={submit} className=\"font-display tracking-wide uppercase\">\n {state.confirmLabel ?? 'ok'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n /** Optional toolbar slot rendered to the right of the title. */\n actions?: ReactNode;\n /** Bias narrower for input-focused modals. */\n width?: 'wide' | 'narrow';\n}\n\n/**\n * Family-standard near-fullscreen modal with terminal-window chrome. Dense data\n * gets room to breathe; ESC + backdrop close, focus trapped while open. Backed\n * by Radix Dialog. Visual: ~95vw × 90vh, scrollable body, pinned title strip.\n */\nexport function Modal({ open, onOpenChange, title, subtitle, children, actions, width = 'wide' }: ModalProps) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"bg-background/80 fixed inset-0 z-[100] backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <DialogPrimitive.Content\n className={cn(\n 'terminal fixed top-[5vh] left-1/2 z-[110] flex max-h-[90vh] -translate-x-1/2 flex-col overflow-hidden rounded-sm border',\n width === 'wide' ? 'w-[95vw] max-w-screen-2xl' : 'w-[80vw] max-w-3xl',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95'\n )}\n >\n <div className=\"terminal-title flex shrink-0 items-center justify-between gap-3\">\n {/* Same shrink priority as Card's header — the expanded\n view must not clip a title the collapsed one keeps. */}\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n <DialogPrimitive.Title className=\"ml-2 truncate [flex-shrink:1]\">{title}</DialogPrimitive.Title>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 min-w-0 truncate text-[10px] normal-case tracking-normal [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <DialogPrimitive.Close\n aria-label=\"close\"\n className=\"text-muted-foreground hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <X className=\"size-3.5\" />\n </DialogPrimitive.Close>\n </div>\n </div>\n <div className=\"flex-1 overflow-y-auto p-4 sm:p-6\">{children}</div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n","'use client';\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { Button } from './button';\n\nexport interface PaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPage: (page: number) => void;\n className?: string;\n}\n\n/**\n * The family's consistent pagination control: a \"start–end of total\" range\n * label plus prev / next chevron buttons. Page-index based (0-based). Renders\n * nothing when everything fits on one page.\n */\nexport function Pagination({ page, pageSize, total, onPage, className }: PaginationProps) {\n if (total <= pageSize) return null;\n const start = page * pageSize;\n const shown = Math.max(0, Math.min(pageSize, total - start));\n return (\n <div className={'flex items-center justify-between ' + (className ?? 'mt-3')}>\n <span className=\"text-muted-foreground/70 font-mono text-[10px]\">\n {start + 1}–{start + shown} of {total}\n </span>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => onPage(page - 1)} disabled={page === 0}>\n <ChevronLeft className=\"size-4\" /> prev\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPage(page + 1)}\n disabled={start + pageSize >= total}\n >\n next <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * `<Tooltip>` — the family's hover/focus tooltip primitive.\n *\n * Built on `@radix-ui/react-popover` (already a dependency — we do NOT add\n * `@radix-ui/react-tooltip`) but driven by a *controlled* open boolean so we\n * own the timing and gating Radix's popover doesn't give a tooltip:\n *\n * - hover-intent: opens after `openDelay`ms of sustained pointer hover,\n * closes after a short `closeDelay` grace (WCAG 1.4.13 hoverable).\n * - keyboard parity: also opens on keyboard focus (detected via input-\n * modality, since `:focus-visible` isn't applied yet inside the focus\n * event), closes on blur/Escape, never steals or traps focus.\n * - pointer-fine only: the hover path is gated behind\n * `(hover: hover) and (pointer: fine)` so it never fires on touch — by\n * pointer *type*, not a width breakpoint (a coarse tablet ≥ sm is touch).\n * - `disabled`: a hard force-close, used by `OcLogoDropdown` so the tip and\n * the family menu (which share a trigger) can never paint at once.\n *\n * The content is decorative reinforcement: it's `aria-hidden`, and\n * `pointer-events-none` so a mis-detected pointer can never intercept the\n * click path to the trigger. The authoritative accessible name belongs on the\n * trigger's own `aria-label`.\n */\n\nconst TOOLTIP_SURFACE_CLASS =\n 'bg-popover text-popover-foreground border-border rounded-md border p-2.5 shadow-md';\n\n// Same idiom as the popover/dialog primitives, a touch faster (tooltips are\n// lighter than dialogs) with a smaller 4px travel. Reduced-motion is handled\n// globally by the family `prefers-reduced-motion` reset — nothing to add here.\nconst TOOLTIP_MOTION_CLASS =\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 origin-(--radix-popover-content-transform-origin) duration-150 ease-out';\n\nexport interface TooltipProps {\n /** The tooltip body. */\n content: React.ReactNode;\n /** A single trigger element (a `<button>` etc.); receives the hover/focus wiring. */\n children: React.ReactElement;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n collisionPadding?: number;\n /** ms of sustained hover before opening. Default 300 (deliberate, not twitchy). */\n openDelay?: number;\n /** ms grace before closing on pointer-leave. Default 90. */\n closeDelay?: number;\n /** Force the tooltip closed regardless of hover/focus (e.g. while a shared menu is open). */\n disabled?: boolean;\n /** Portal to `<body>` (default true). Set false to keep content inline so it inherits a scoped `data-oc-theme`. */\n portal?: boolean;\n /** z-index utility for the content. Default `z-50`. */\n zIndexClassName?: string;\n contentClassName?: string;\n}\n\ninterface TriggerHandlerProps {\n onPointerEnter?: React.PointerEventHandler;\n onPointerLeave?: React.PointerEventHandler;\n onPointerDown?: React.PointerEventHandler;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n onKeyDown?: React.KeyboardEventHandler;\n}\n\nfunction compose<E>(theirs: ((e: E) => void) | undefined, ours: (e: E) => void) {\n return (e: E) => {\n theirs?.(e);\n ours(e);\n };\n}\n\n/**\n * Input-modality tracker (the `:focus-visible` polyfill heuristic).\n * `:focus-visible` is NOT reliably applied synchronously inside the `focus`\n * event, so reading `el.matches(':focus-visible')` there misses keyboard focus.\n * Instead we record the last input type from global capture-phase listeners\n * that fire BEFORE focus: a keydown means the focus that follows is keyboard-\n * driven (show the hint); a pointerdown means it's a click (don't — that would\n * flash the tip over the menu).\n */\nlet lastInputWasKeyboard = false;\nlet modalityInstalled = false;\nfunction installModalityTracking() {\n if (modalityInstalled || typeof window === 'undefined') return;\n modalityInstalled = true;\n window.addEventListener('keydown', () => (lastInputWasKeyboard = true), true);\n window.addEventListener('pointerdown', () => (lastInputWasKeyboard = false), true);\n}\n\nexport function Tooltip({\n content,\n children,\n side = 'bottom',\n align = 'start',\n sideOffset = 8,\n collisionPadding = 12,\n openDelay = 300,\n closeDelay = 90,\n disabled = false,\n portal = true,\n zIndexClassName = 'z-50',\n contentClassName,\n}: TooltipProps) {\n const [hovering, setHovering] = React.useState(false);\n const [focusing, setFocusing] = React.useState(false);\n const [isFinePointer, setIsFinePointer] = React.useState(false);\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Detect a true mouse (fine pointer + real hover). Defaults false for SSR\n // and first client render, then resolves in the effect — a normal post-mount\n // update, not a hydration mismatch.\n React.useEffect(() => {\n installModalityTracking();\n const mq = window.matchMedia('(hover: hover) and (pointer: fine)');\n const apply = () => setIsFinePointer(mq.matches);\n apply();\n mq.addEventListener('change', apply);\n return () => mq.removeEventListener('change', apply);\n }, []);\n\n const clearTimers = React.useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n React.useEffect(() => clearTimers, [clearTimers]);\n\n // When force-closed (e.g. the shared menu opened), drop the hover latch so\n // the tip doesn't snap back with no delay the instant the menu closes while\n // the pointer is still over the trigger. `focusing` is left alone — a\n // keyboard user who stays focused should still get the immediate hint.\n React.useEffect(() => {\n if (disabled) {\n clearTimers();\n setHovering(false);\n }\n }, [disabled, clearTimers]);\n\n const handlePointerEnter = () => {\n if (!isFinePointer) return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = setTimeout(() => setHovering(true), openDelay);\n };\n const handlePointerLeave = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n closeTimer.current = setTimeout(() => setHovering(false), closeDelay);\n };\n // The first press of EITHER a single- or double-click tears the tip down\n // before the trigger's own onClick toggles a menu, so it never overlaps.\n const handlePointerDown = () => {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n };\n const handleFocus = () => {\n // Only keyboard focus reveals the hint — a mouse click also focuses the\n // trigger, and re-popping the tip over an opening menu would be the bug.\n // Use the modality flag (set before focus fires) rather than\n // `:focus-visible`, which isn't applied yet inside the focus event.\n if (lastInputWasKeyboard) {\n clearTimers();\n setFocusing(true);\n }\n };\n const handleBlur = () => {\n clearTimers();\n setFocusing(false);\n };\n // Escape dismisses the focus-revealed tip without moving focus (WCAG 1.4.13).\n // Handled on the focused trigger directly — robust regardless of Radix's\n // dismissal internals (we suppress its focus-outside dismissal below).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n };\n\n const effectiveOpen = !disabled && ((isFinePointer && hovering) || focusing);\n\n const extra: TriggerHandlerProps = {};\n const childProps = children.props as TriggerHandlerProps;\n extra.onPointerEnter = compose(childProps.onPointerEnter, handlePointerEnter);\n extra.onPointerLeave = compose(childProps.onPointerLeave, handlePointerLeave);\n extra.onPointerDown = compose(childProps.onPointerDown, handlePointerDown);\n extra.onFocus = compose(childProps.onFocus, handleFocus);\n extra.onBlur = compose(childProps.onBlur, handleBlur);\n extra.onKeyDown = compose(childProps.onKeyDown, handleKeyDown);\n const trigger = React.cloneElement(children, extra);\n\n const contentEl = (\n <Popover.Content\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n aria-hidden\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n // The tip is aria-hidden + non-focusable, so focus legitimately\n // stays on the trigger (outside the content). Don't let Radix's\n // focus-outside dismissal close a focus-revealed tip; Escape and\n // pointer-down-outside still dismiss.\n onFocusOutside={(e) => e.preventDefault()}\n className={cn(\n TOOLTIP_SURFACE_CLASS,\n TOOLTIP_MOTION_CLASS,\n 'pointer-events-none',\n zIndexClassName,\n contentClassName\n )}\n >\n {content}\n </Popover.Content>\n );\n\n return (\n <Popover.Root\n open={effectiveOpen}\n onOpenChange={(o) => {\n // Radix requests close on Escape / outside interaction — sync our\n // own state so a re-hover re-arms cleanly. We never open via Radix.\n if (!o) {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n }}\n modal={false}\n >\n <Popover.Anchor asChild>{trigger}</Popover.Anchor>\n {portal ? <Popover.Portal>{contentEl}</Popover.Portal> : contentEl}\n </Popover.Root>\n );\n}\n","'use client';\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown, Plus } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />\n));\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & {\n /** Toggle glyph: a rotating chevron (default) or a marketing plus that\n * turns into an ✕ on open, tinted with the brand. */\n icon?: 'chevron' | 'plusMinus';\n }\n>(({ className, children, icon = 'chevron', ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline',\n icon === 'chevron'\n ? '[&[data-state=open]>svg]:rotate-180'\n : '[&[data-state=open]>svg]:rotate-45',\n className\n )}\n {...props}\n >\n {children}\n {icon === 'chevron' ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n ) : (\n <Plus className=\"text-primary h-5 w-5 shrink-0 transition-transform duration-200\" />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","'use client';\n\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow,background-color] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","'use client';\n\nimport { useTheme } from 'next-themes';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\n\n/**\n * Toast host in the house design language. Mount once at the app root, then\n * call `toast()` from `sonner` anywhere. Re-exported here for convenience.\n */\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast: 'group toast group-[.toaster]:bg-card group-[.toaster]:text-card-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-foreground group-[.toast]:text-background',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n error: 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n success:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n warning:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n info: 'group-[.toaster]:!bg-card group-[.toaster]:!text-muted-foreground group-[.toaster]:!border-border',\n },\n }}\n style={\n {\n '--normal-bg': 'var(--card)',\n '--normal-text': 'var(--card-foreground)',\n '--normal-border': 'var(--border)',\n '--error-bg': 'var(--card)',\n '--error-text': 'var(--foreground)',\n '--error-border': 'var(--border)',\n '--success-bg': 'var(--card)',\n '--success-text': 'var(--foreground)',\n '--success-border': 'var(--border)',\n '--warning-bg': 'var(--card)',\n '--warning-text': 'var(--foreground)',\n '--warning-border': 'var(--border)',\n '--info-bg': 'var(--card)',\n '--info-text': 'var(--muted-foreground)',\n '--info-border': 'var(--border)',\n } as React.CSSProperties\n }\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst surfaceVariants = cva('rounded-xl transition-colors', {\n variants: {\n tone: {\n /* Crisp panel floating on the page — the default soft card. */\n default: 'bg-card text-card-foreground',\n /* Warm-gray recessed panel. */\n muted: 'bg-muted text-foreground',\n /* Solid brand fill — small terracotta panel; inverts child text. */\n brand: 'bg-brand text-brand-foreground',\n /* High-contrast neutral panel (near-black in light, near-white in dark). */\n contrast: 'bg-foreground text-background',\n /* Translucent lightened tile for cards sitting ON a brand band. */\n onBrand:\n 'text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]',\n /* Frame only, transparent fill. */\n outline: 'bg-transparent text-foreground',\n },\n elevation: {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n },\n bordered: {\n true: 'border',\n false: '',\n },\n pad: {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5 sm:p-6',\n lg: 'p-6 sm:p-8',\n },\n },\n defaultVariants: {\n tone: 'default',\n elevation: 'sm',\n bordered: true,\n pad: 'md',\n },\n});\n\nexport interface SurfaceProps\n extends Omit<React.ComponentProps<'div'>, 'color'>,\n VariantProps<typeof surfaceVariants> {}\n\n/**\n * Surface — the soft, large-radius, elevated panel that the warm theme sits on.\n *\n * The package `Card` is a TERMINAL-window frame (mono title strip, terminal\n * dots) for dashboards; Surface is its plain marketing/consumer counterpart —\n * a bg-card panel with token-routed radius + soft elevation and no chrome.\n * Re-skins per skin via the radius + shadow tokens. Use this for feature cards,\n * sign-in cards, trust chips — anything that is NOT a terminal panel.\n */\nexport function Surface({\n className,\n tone,\n elevation,\n bordered,\n pad,\n ...props\n}: SurfaceProps) {\n return (\n <div\n data-slot=\"surface\"\n className={cn(surfaceVariants({ tone, elevation, bordered, pad }), className)}\n {...props}\n />\n );\n}\n\nexport { surfaceVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst iconBadgeVariants = cva(\n 'inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none',\n {\n variants: {\n tone: {\n /* The signature peach tile — soft accent fill, terracotta glyph.\n Auto-swaps to warm-dark + light-peach in dark mode via tokens. */\n peach: 'bg-accent text-accent-foreground',\n /* Inverted near-black tile, light glyph (\"never do\" promises). */\n dark: 'bg-foreground text-background',\n /* Solid brand tile. */\n brand: 'bg-primary text-primary-foreground',\n /* White tile on a brand band, terracotta glyph (numbered steps). */\n onBrand: 'bg-brand-foreground text-primary',\n /* Quiet neutral tile. */\n muted: 'bg-muted text-foreground',\n /* Crisp white (card-colored) tile with a terracotta glyph and a\n soft lift — the elevated icon chip on muted/colored cards. */\n surface: 'bg-card text-primary shadow-sm',\n },\n size: {\n sm: 'size-9 text-xs [&_svg]:size-4',\n md: 'size-11 text-sm [&_svg]:size-5',\n lg: 'size-12 text-base [&_svg]:size-6',\n xl: 'size-14 text-lg [&_svg]:size-7',\n },\n },\n defaultVariants: { tone: 'peach', size: 'md' },\n }\n);\n\nexport interface IconBadgeProps\n extends Omit<React.ComponentProps<'span'>, 'color'>,\n VariantProps<typeof iconBadgeVariants> {}\n\n/**\n * IconBadge — a rounded-square tile holding a lucide icon OR a number/short\n * label. The theme's most-reused decorative atom (feature-card icons, numbered\n * steps, the verified chip). Distinct from the text `Badge` pill: this is a\n * fixed-size square tile. Tones map to skin tokens so the same markup recolours\n * across skins and light/dark (peach ↔ warm-dark).\n *\n * <IconBadge tone=\"peach\"><Lock /></IconBadge>\n * <IconBadge tone=\"onBrand\" size=\"sm\">1</IconBadge>\n */\nexport function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps) {\n return (\n <span\n data-slot=\"icon-badge\"\n className={cn(iconBadgeVariants({ tone, size }), className)}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nexport { iconBadgeVariants };\n","\"use client\";\n\nimport { Maximize2 } from \"lucide-react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../tokens/cn\";\nimport { Modal } from \"./modal\";\n\nexport interface CardProps {\n id?: string;\n title: string;\n subtitle?: string;\n refreshedAt?: string | null;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n tone?: \"default\" | \"warning\" | \"destructive\" | \"muted\";\n /**\n * When true (default) renders a fullscreen-expand icon in the title strip;\n * clicking pops the same body content into a fullscreen Modal. Set false for\n * tiny cards where fullscreen adds nothing.\n */\n expandable?: boolean;\n}\n\n/**\n * Terminal-window framed card — title strip (terminal dots) + optional refresh\n * timestamp/actions + body. The canonical dashboard/cockpit panel. Expandable\n * by default: surfaces an expand icon that opens the same body in a fullscreen\n * Modal.\n */\nexport function Card({\n id,\n title,\n subtitle,\n refreshedAt,\n actions,\n children,\n className,\n tone = \"default\",\n expandable = true,\n}: CardProps) {\n const [expanded, setExpanded] = useState(false);\n\n const toneClass =\n tone === \"warning\"\n ? \"border-warning/60\"\n : tone === \"destructive\"\n ? \"border-destructive/60\"\n : tone === \"muted\"\n ? \"border-border opacity-90\"\n : \"border-border\";\n\n return (\n <>\n <section\n id={id}\n className={cn(\n \"terminal flex flex-col rounded-sm border scroll-mt-16\",\n toneClass,\n className,\n )}\n >\n <div className=\"terminal-title flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n {/* Shrink priority, not equal shrink. Both spans truncate, so with\n the default flex-shrink:1 a narrow card (any two-column grid)\n clipped the TITLE first — \"§ settlement · t…\" — losing the one\n word that says what the panel is while keeping a subtitle nobody\n can read either. The subtitle now absorbs ~100× the squeeze, so\n it collapses fully before the title gives up a character. */}\n <span className=\"ml-2 truncate [flex-shrink:1]\">{title}</span>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 min-w-0 truncate text-[10px] tracking-normal normal-case [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {refreshedAt && (\n <span className=\"text-muted-foreground/60 hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n )}\n {actions}\n {expandable && (\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n aria-label={`expand ${title}`}\n title=\"expand to fullscreen\"\n className=\"text-muted-foreground/70 hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <Maximize2 className=\"size-3\" />\n </button>\n )}\n </div>\n </div>\n <div className=\"flex-1 p-4 sm:p-5\">{children}</div>\n </section>\n\n {expandable && (\n <Modal\n open={expanded}\n onOpenChange={setExpanded}\n title={title}\n {...(subtitle ? { subtitle } : {})}\n actions={\n refreshedAt ? (\n <span className=\"text-muted-foreground/60 hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n ) : null\n }\n >\n {children}\n </Modal>\n )}\n </>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SparklineProps {\n data: ReadonlyArray<number>;\n width?: number;\n height?: number;\n className?: string;\n /** Render a soft area-fill under the line. */\n area?: boolean;\n}\n\n/**\n * Tiny inline SVG sparkline. No library — keeps the bundle small and the look\n * consistent with the cypherpunk family aesthetic. Degenerates gracefully to a\n * flat line for empty/single-point data.\n */\nexport function Sparkline({ data, width = 96, height = 24, area = false, className }: SparklineProps) {\n if (data.length === 0) {\n return (\n <svg width={width} height={height} className={cn(className)} aria-hidden>\n <line\n x1={0}\n x2={width}\n y1={height / 2}\n y2={height / 2}\n stroke=\"currentColor\"\n strokeWidth={1}\n opacity={0.25}\n />\n </svg>\n );\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const step = data.length === 1 ? width : width / (data.length - 1);\n\n const points = data.map((v, i) => {\n const x = i * step;\n const y = height - ((v - min) / range) * (height - 2) - 1;\n return [x, y] as const;\n });\n\n const linePath = points\n .map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(2)},${y.toFixed(2)}`)\n .join(' ');\n\n const areaPath = area\n ? `${linePath} L${width.toFixed(2)},${height.toFixed(2)} L0,${height.toFixed(2)} Z`\n : null;\n\n return (\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cn('text-primary', className)}\n aria-hidden\n >\n {areaPath && <path d={areaPath} fill=\"currentColor\" opacity={0.12} />}\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.25} />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface StatBlockProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional \"vs prior period\" delta — arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n className?: string;\n}\n\n/**\n * A single labelled value cell — the building block for every counter grid in a\n * dashboard. Optional delta arrow + colour for period-over-period deltas.\n * (Richer than StatTile: carries a delta. Use StatGrid for laid-out grids.)\n */\nexport function StatBlock({ label, value, sub, delta, tone = 'default', className }: StatBlockProps) {\n const toneClass =\n tone === 'success'\n ? 'text-success'\n : tone === 'warning'\n ? 'text-warning'\n : tone === 'destructive'\n ? 'text-destructive'\n : 'text-foreground';\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <span className=\"label-mono text-muted-foreground text-[10px]\">{label}</span>\n <span\n className={cn(\n 'font-display text-2xl font-bold tracking-tight tabular-nums',\n toneClass\n )}\n >\n {value}\n </span>\n <div className=\"flex items-baseline gap-2\">\n {sub && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide lowercase\">\n {sub}\n </span>\n )}\n {delta && (\n <span\n className={cn(\n 'font-mono text-[11px] tracking-wide',\n delta.value > 0\n ? 'text-success'\n : delta.value < 0\n ? 'text-destructive'\n : 'text-muted-foreground'\n )}\n >\n {delta.value > 0 ? '▲' : delta.value < 0 ? '▼' : '·'}{' '}\n {Math.abs(delta.value).toFixed(1)}\n {delta.suffix ?? '%'}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface BarProps {\n /** 0–100; clamped. */\n pct: number;\n accent?: 'primary' | 'warning' | 'destructive' | 'success';\n label?: string;\n right?: string;\n className?: string;\n}\n\nconst ACCENT: Record<NonNullable<BarProps['accent']>, string> = {\n primary: 'bg-primary',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n success: 'bg-success',\n};\n\n/** Horizontal capacity/progress bar with optional label + right-aligned value. */\nexport function Bar({ pct, accent = 'primary', label, right, className }: BarProps) {\n const clamped = Math.max(0, Math.min(100, pct));\n return (\n <div className={cn(className)}>\n {(label || right) && (\n <div className=\"flex items-baseline justify-between font-mono text-[10.5px] tracking-widest uppercase\">\n {label && <span className=\"text-muted-foreground\">{label}</span>}\n {right && <span className=\"text-foreground tabular-nums\">{right}</span>}\n </div>\n )}\n <div className=\"bg-muted mt-1.5 h-1.5 w-full overflow-hidden\">\n <div className={cn('h-full', ACCENT[accent])} style={{ width: `${clamped}%` }} />\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type StatusTone = 'success' | 'warning' | 'destructive' | 'muted' | 'primary' | 'info';\n\n/**\n * - `plain` (default): borderless, lowercase, tone-coloured text + optional icon.\n * - `bordered`: a bordered, uppercase badge (`border-{tone}/40 text-{tone}`) —\n * the variant fleet's PledgeStatusPill, www's StateBadge, and me's\n * compliance/severity pills all hand-roll.\n */\nexport type StatusPillVariant = 'plain' | 'bordered';\n\nexport interface StatusPillProps {\n /** Status label (rendered lowercase in `plain`, uppercase in `bordered`). */\n label: string;\n tone?: StatusTone;\n variant?: StatusPillVariant;\n /** `bordered` only: add a `bg-{tone}/10` fill for at-a-glance emphasis on\n * dense dashboards (me's compliance/severity pills). Ignored when `plain`. */\n filled?: boolean;\n /** Optional leading icon (e.g. a lucide icon sized size-3). */\n icon?: ReactNode;\n className?: string;\n}\n\nconst TONE: Record<StatusTone, string> = {\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n primary: 'text-primary',\n info: 'text-info',\n};\n\nconst BORDER_TONE: Record<StatusTone, string> = {\n success: 'border-success/40 text-success',\n warning: 'border-warning/40 text-warning',\n destructive: 'border-destructive/40 text-destructive',\n muted: 'border-muted-foreground/40 text-muted-foreground',\n primary: 'border-primary/40 text-primary',\n info: 'border-info/40 text-info',\n};\n\nconst FILL_TONE: Record<StatusTone, string> = {\n success: 'bg-success/10',\n warning: 'bg-warning/10',\n destructive: 'bg-destructive/10',\n muted: 'bg-muted/30',\n primary: 'bg-primary/10',\n info: 'bg-info/10',\n};\n\n/**\n * Generic state pill — the canonical form of the per-domain status pills that\n * fleet (agent/pledge/event), me (compliance/severity), and others reimplement.\n * Apps map their domain status → { tone, label, icon }; this renders it\n * consistently. Two variants: `plain` (borderless lowercase) and `bordered`\n * (uppercase badge with a tone-tinted border).\n */\nexport function StatusPill({\n label,\n tone = 'muted',\n variant = 'plain',\n filled = false,\n icon,\n className,\n}: StatusPillProps) {\n if (variant === 'bordered') {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 border px-1.5 py-0.5 font-mono text-[9px] tracking-widest uppercase',\n BORDER_TONE[tone],\n filled && FILL_TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n }\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 font-mono text-[11px] tracking-wider lowercase',\n TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n}\n\n/** One status → presentation entry. `label` defaults to the status key. */\nexport interface StatusPillSpec {\n tone: StatusTone;\n label?: string;\n icon?: ReactNode;\n}\n\n/**\n * makeStatusPill — build a domain-specific status pill from a status→spec map.\n * This is the ergonomic that fleet (AgentStatus, PledgeStatus), www\n * (StateBadge severity), and me (compliance/severity) each hand-roll. Instead\n * of re-deriving tone-class logic per site, declare the map once:\n *\n * const AgentStatusPill = makeStatusPill({\n * online: { tone: 'success' },\n * offline: { tone: 'destructive', label: 'down' },\n * pending: { tone: 'warning' },\n * });\n * <AgentStatusPill status={agent.status} />\n *\n * Pass `{ variant: 'bordered' }` for the uppercase-badge form (fleet pledge\n * states, www state badges, me compliance/severity).\n */\nexport function makeStatusPill<S extends string>(\n map: Record<S, StatusPillSpec>,\n options?: { variant?: StatusPillVariant; filled?: boolean; fallbackTone?: StatusTone }\n): (props: { status: S; className?: string }) => ReactNode {\n const variant = options?.variant ?? 'plain';\n const filled = options?.filled ?? false;\n const fallbackTone = options?.fallbackTone ?? 'muted';\n function DomainStatusPill({ status, className }: { status: S; className?: string }) {\n const spec = map[status];\n return (\n <StatusPill\n tone={spec?.tone ?? fallbackTone}\n label={spec?.label ?? status}\n icon={spec?.icon}\n filled={filled}\n variant={variant}\n className={className}\n />\n );\n }\n return DomainStatusPill;\n}\n","'use client';\n\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Tabs — accessible tabbed interface (Radix). Replaces the hand-rolled\n * `role=\"tablist\"` + manual `useState` toggles found in vault settings, the\n * www dashboard, me's SnippetCard, attest's CodeTabs, and others. Keyboard\n * nav, roving tabindex, and ARIA wiring come from Radix; the OC look (mono,\n * underline-on-active) is layered on top.\n */\nfunction Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n // A tab row is `flex`; a long set of triggers would overflow the page\n // horizontally on narrow screens. `flex-wrap` lets it wrap to a second\n // line instead. NOT `overflow-x-auto` — that forces overflow-y:auto,\n // which clips the active trigger's -mb-px/border-b-2 underline.\n className={cn(\n 'border-border -mb-px flex flex-wrap items-center gap-6 border-b',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'text-muted-foreground hover:text-foreground data-[state=active]:text-primary data-[state=active]:border-primary -mb-px border-b-2 border-transparent py-2 font-mono text-[11px] tracking-widest uppercase transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('mt-4 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","/**\n * @orangecheck/design/format — Bitcoin/money display + formatting utilities.\n *\n * Presentational only. Lifted from the canonical implementations across the\n * family (oc-me-web's utils, oc-vault-web's billing) and standardized so every\n * site formats sats, prices, addresses, and times identically. NOTE: crypto\n * (BIP-322 signing, bech32 validation) deliberately does NOT live here — that\n * belongs in a bitcoin/crypto library, not the design system.\n *\n * Includes the `useSpotPrice` React hook for live BTC/USD display. The hook\n * fetches a consumer-hosted endpoint — see `use-spot-price.ts` for the\n * one-route-per-consumer contract.\n */\n\nexport { useSpotPrice, type SpotPrice, type UseSpotPriceOptions } from './use-spot-price';\n\n/** Reference BTC/USD rate for sats↔USD display. Override per call when a live\n * rate is available; this is a display affordance, not a price oracle. */\nexport const REFERENCE_BTC_USD = 95_000;\n\n/** Format a satoshi integer as a thousands-separated string (\"12,408\"). */\nexport function formatSats(sats: number): string {\n return new Intl.NumberFormat('en-US').format(Math.round(sats));\n}\n\n/** Compact sats for buttons/chips: \"7k sats\", \"1.5k sats\", \"999 sats\". */\nexport function formatSatsCompact(sats: number): string {\n const n = Math.round(sats);\n if (n < 1000) return `${n} sats`;\n const k = n / 1000;\n return `${Number.isInteger(k) ? k : k.toFixed(1)}k sats`;\n}\n\n/** Convert sats to a USD currency string using the reference (or given) rate. */\nexport function satsToUsd(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n const usd = (sats / 100_000_000) * btcUsd;\n if (usd > 0 && usd < 0.01) return '< $0.01';\n // Whole dollars once >= $100, cents below. min must never exceed max.\n const fractionDigits = usd >= 100 ? 0 : 2;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: fractionDigits,\n maximumFractionDigits: fractionDigits,\n }).format(usd);\n}\n\n/** Convert a USD amount to sats using the reference (or given) rate. */\nexport function usdToSats(usd: number, btcUsd: number = REFERENCE_BTC_USD): number {\n return Math.round((usd / btcUsd) * 100_000_000);\n}\n\n/** Both denominations as one label: \"7,000 sats · $6.65\". */\nexport function priceBoth(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n return `${formatSats(sats)} sats · ${satsToUsd(sats, btcUsd)}`;\n}\n\n/**\n * \"as of HH:MM\" provenance footnote. Returns `null` for nullish or\n * unparseable input so callers can render nothing\n * (`{x && <span>{x}</span>}`) rather than gate on a magic empty\n * string. 24-hour, locale-aware. Pairs with `useSpotPrice().fetchedAt`\n * to caption a live-rate display.\n */\nexport function asOf(iso: string | null | undefined): string | null {\n if (!iso) return null;\n const t = new Date(iso);\n if (Number.isNaN(t.getTime())) return null;\n return `as of ${t.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n })}`;\n}\n\n/** Compact relative time — \"now\", \"3m ago\", \"2h ago\", \"4d ago\", or a date. */\nexport function relativeTime(when: string | number | Date): string {\n const t = when instanceof Date ? when.getTime() : new Date(when).getTime();\n if (Number.isNaN(t)) return '';\n const diff = Date.now() - t;\n const m = Math.floor(diff / 60_000);\n if (m < 1) return 'now';\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n\n/**\n * Truncate a Bitcoin/Lightning address (or any long id) for display:\n * \"bc1qxy…wxyz\". Defaults match the family's most common rule (8 head / 4 tail).\n */\nexport function shortenAddress(value: string, head = 8, tail = 4): string {\n if (!value) return '';\n if (value.length <= head + tail + 1) return value;\n return `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\nexport type ExplorerNetwork = 'mainnet' | 'testnet' | 'signet';\nexport type ExplorerTarget =\n | { address: string }\n | { tx: string }\n | { block: string | number };\n\n/** A mempool.space explorer URL for an address, tx, or block. */\nexport function explorerUrl(target: ExplorerTarget, network: ExplorerNetwork = 'mainnet'): string {\n const base =\n network === 'mainnet'\n ? 'https://mempool.space'\n : `https://mempool.space/${network}`;\n if ('address' in target) return `${base}/address/${target.address}`;\n if ('tx' in target) return `${base}/tx/${target.tx}`;\n return `${base}/block/${target.block}`;\n}\n","import { cn } from '../tokens/cn';\nimport { formatSats, satsToUsd } from '../format';\n\nexport interface SatsAmountProps {\n sats: number;\n /** Show the \"sats\" unit. Default true. */\n unit?: boolean;\n /** Append a muted USD conversion. Default false. */\n usd?: boolean;\n /** Override the reference BTC/USD rate for the USD conversion. */\n btcUsd?: number;\n className?: string;\n}\n\n/**\n * Canonical sats display: thousands-grouped, monospace, optional \"sats\" unit and\n * a muted USD conversion. The one true way to render an amount of sats across\n * the family (replaces scattered formatSats() + inline markup).\n */\nexport function SatsAmount({ sats, unit = true, usd = false, btcUsd, className }: SatsAmountProps) {\n return (\n <span className={cn('font-mono tabular-nums', className)}>\n {formatSats(sats)}\n {unit && <span className=\"text-muted-foreground\"> sats</span>}\n {usd && (\n <span className=\"text-muted-foreground\">\n {' · '}\n {satsToUsd(sats, btcUsd)}\n </span>\n )}\n </span>\n );\n}\n","'use client';\n\nimport { Check, Copy } from 'lucide-react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CopyButtonProps {\n /** Text to copy. */\n value: string;\n /** Optional visible label beside the icon. */\n label?: string;\n /**\n * Auto-wipe the clipboard after N seconds if it still holds `value`\n * (secrets-manager behaviour, à la 1Password). 0/undefined = never wipe.\n */\n clearAfter?: number;\n size?: 'sm' | 'md';\n className?: string;\n title?: string;\n onCopied?: () => void;\n}\n\n/**\n * Copy-to-clipboard control with \"copied\" feedback and optional auto-wipe.\n * Canonical form of the copy buttons scattered across the family (wallet\n * panels, address displays, share sheets, secret reveals).\n */\nexport function CopyButton({\n value,\n label,\n clearAfter,\n size = 'md',\n className,\n title,\n onCopied,\n}: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const resetRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const copy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopied?.();\n if (resetRef.current) clearTimeout(resetRef.current);\n resetRef.current = setTimeout(() => setCopied(false), 1500);\n if (clearAfter && clearAfter > 0) {\n setTimeout(() => void wipeIfUnchanged(value), clearAfter * 1000);\n }\n } catch {\n /* clipboard unavailable — no-op */\n }\n }, [value, clearAfter, onCopied]);\n\n const iconSize = size === 'sm' ? 'size-3' : 'size-3.5';\n\n return (\n <button\n type=\"button\"\n onClick={copy}\n aria-label={title ?? (copied ? 'copied' : 'copy')}\n title={title ?? 'copy'}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 rounded-sm transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n size === 'sm' ? 'text-[11px]' : 'text-xs',\n className\n )}\n >\n {copied ? (\n <Check className={cn(iconSize, 'text-success')} aria-hidden />\n ) : (\n <Copy className={iconSize} aria-hidden />\n )}\n {label && <span className=\"font-mono\">{copied ? 'copied' : label}</span>}\n </button>\n );\n}\n\nasync function wipeIfUnchanged(expected: string): Promise<void> {\n try {\n const current = await navigator.clipboard.readText();\n if (current !== expected) return;\n await navigator.clipboard.writeText('');\n } catch {\n try {\n await navigator.clipboard.writeText('');\n } catch {\n /* clipboard fully unavailable */\n }\n }\n}\n","import { cn } from '../tokens/cn';\nimport { shortenAddress } from '../format';\nimport { CopyButton } from './copy-button';\n\nexport interface BitcoinAddressProps {\n /** The full address (or any long id — Lightning, npub, did). */\n address: string;\n head?: number;\n tail?: number;\n /** Show a copy button that copies the FULL address. Default true. */\n copyable?: boolean;\n /** Render the full value untruncated. */\n full?: boolean;\n className?: string;\n}\n\n/**\n * Canonical truncated address display: monospace, `bc1qxy…wxyz`, with a copy\n * button that copies the full value. Replaces the per-site inline truncate+copy\n * patterns (IdentityChip, wallet panels, admin lists).\n */\nexport function BitcoinAddress({\n address,\n head = 8,\n tail = 4,\n copyable = true,\n full = false,\n className,\n}: BitcoinAddressProps) {\n return (\n <span className={cn('inline-flex items-center gap-1.5 font-mono text-xs', className)}>\n <span title={address}>{full ? address : shortenAddress(address, head, tail)}</span>\n {copyable && <CopyButton value={address} size=\"sm\" title=\"copy address\" />}\n </span>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport QRCode from 'qrcode';\n\nexport interface QrCodeProps {\n /** String to encode — Lightning invoices, BTC addresses, BIP-21 URIs all work. */\n value: string;\n /** Pixel size of the rendered SVG. Default 200. */\n size?: number;\n /** Accessible label for screen readers. */\n label?: string;\n className?: string;\n}\n\n/**\n * Client-side QR renderer (inline SVG via the `qrcode` package — no canvas, no\n * data-URI). Renders nothing during SSR; encodes on mount. Wrapped in role=\"img\"\n * with the supplied label. White quiet-zone background for reliable scanning in\n * any theme/mode.\n */\nexport function QrCode({ value, size = 200, label, className }: QrCodeProps) {\n const [svg, setSvg] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n QRCode.toString(value, {\n type: 'svg',\n errorCorrectionLevel: 'M',\n margin: 1,\n color: { dark: '#000000', light: '#ffffff' },\n })\n .then((out) => {\n if (!cancelled) setSvg(out);\n })\n .catch(() => {\n if (!cancelled) setSvg(null);\n });\n return () => {\n cancelled = true;\n };\n }, [value]);\n\n return (\n <div\n role=\"img\"\n aria-label={label ?? `QR code for ${value.slice(0, 24)}…`}\n className={'inline-block overflow-hidden rounded-md bg-white p-3 ' + (className ?? '')}\n style={{ width: size, height: size }}\n >\n {svg ? (\n <div\n className=\"size-full [&_svg]:block [&_svg]:size-full\"\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n ) : (\n <div className=\"bg-muted/40 size-full animate-pulse rounded\" aria-hidden />\n )}\n </div>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/tokens/cn.ts","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/label.tsx","../src/primitives/checkbox.tsx","../src/primitives/radio-group.tsx","../src/primitives/switch.tsx","../src/primitives/alert.tsx","../src/primitives/alert-with-action.tsx","../src/primitives/textarea.tsx","../src/primitives/theme-toggle.tsx","../src/primitives/working.tsx","../src/primitives/error-boundary.tsx","../src/primitives/skeleton.tsx","../src/primitives/separator.tsx","../src/primitives/sheet.tsx","../src/primitives/dialog.tsx","../src/primitives/confirm-dialog.tsx","../src/primitives/prompt-dialog.tsx","../src/primitives/modal.tsx","../src/primitives/pagination.tsx","../src/primitives/popover.tsx","../src/primitives/tooltip.tsx","../src/primitives/accordion.tsx","../src/primitives/select.tsx","../src/primitives/toaster.tsx","../src/primitives/surface.tsx","../src/primitives/icon-badge.tsx","../src/primitives/card.tsx","../src/primitives/sparkline.tsx","../src/primitives/stat-block.tsx","../src/primitives/bar.tsx","../src/primitives/status-pill.tsx","../src/primitives/tabs.tsx","../src/format/index.ts","../src/primitives/sats-amount.tsx","../src/primitives/copy-button.tsx","../src/primitives/bitcoin-address.tsx","../src/primitives/qr-code.tsx"],"names":["cva","Slot","jsx","Icon","jsxs","React","DialogPrimitive","useState","useEffect","Dialog2","NODE_ENV","pending","notifyHost","hostMountCount","useRef","useCallback","Dialog3","DialogPrimitive2","X","Popover2","React3","CheckIcon","useTheme","Sonner"],"mappings":"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","file":"primitives.mjs","sourcesContent":["import type { ClassValue } from 'clsx';\n\nimport { clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Canonical class-name merge for the OrangeCheck family.\n * `clsx` for conditional composition, `tailwind-merge` to resolve\n * conflicting Tailwind utilities (last-wins by property).\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst buttonVariants = cva(\n \"focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive:\n 'bg-destructive hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60 text-white',\n outline:\n 'bg-background hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 border shadow-xs',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50',\n link: 'text-primary underline-offset-4 hover:underline',\n // For CTAs placed ON a saturated brand band or a dark section\n // (e.g. a terracotta hero / footer / a forced-dark block) where\n // the surface is dark+light-text in either mode. A neutral white\n // pill + a translucent-white ghost read on any such surface;\n // hardcoded white is deliberate (cf. destructive's text-white).\n onBrand: 'bg-white text-neutral-900 shadow-sm hover:bg-white/90',\n onBrandOutline:\n 'border border-white/40 bg-transparent text-white hover:bg-white/10',\n },\n size: {\n default: 'h-9 px-4 py-2 has-[>svg]:px-3',\n sm: 'h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5',\n lg: 'h-10 rounded-md px-6 has-[>svg]:px-4',\n icon: 'size-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst badgeVariants = cva(\n 'focus-visible:border-ring focus-visible:ring-ring/50 inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] [&>svg]:pointer-events-none [&>svg]:size-3',\n {\n variants: {\n variant: {\n default:\n 'bg-primary text-primary-foreground [a&]:hover:bg-primary/90 border-transparent',\n secondary:\n 'bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90 border-transparent',\n destructive:\n 'bg-destructive text-destructive-foreground [a&]:hover:bg-destructive/90 border-transparent',\n warning:\n 'bg-warning text-warning-foreground [a&]:hover:bg-warning/90 border-transparent',\n success:\n 'bg-success text-success-foreground [a&]:hover:bg-success/90 border-transparent',\n info: 'bg-info text-info-foreground [a&]:hover:bg-info/90 border-transparent',\n brand: 'bg-brand-soft text-accent-foreground border-transparent',\n neutral:\n 'bg-foreground text-background [a&]:hover:bg-foreground/90 border-transparent',\n outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<'span'> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'span';\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nexport { Badge, badgeVariants };\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 h-9 w-full min-w-0 rounded-md border px-3 py-1 text-base shadow-xs transition-[color,box-shadow,background-color] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n","import * as LabelPrimitive from '@radix-ui/react-label';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n 'flex select-none items-center gap-2 text-sm font-medium leading-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","'use client';\n\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { CheckIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Checkbox — Radix-backed, skin-aware, accessible. Replaces raw\n * `<input type=\"checkbox\">` (the family had ~18 unstyled instances). Sharp\n * `rounded-sm` (skin radius), brand fill when checked, the family focus ring,\n * and `aria-invalid` error styling for parity with Input/Select/Textarea.\n */\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'peer border-input bg-input/30 size-4 shrink-0 rounded-sm border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:bg-primary data-[state=checked]:border-primary data-[state=checked]:text-primary-foreground',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current\"\n >\n <CheckIcon className=\"size-3.5\" strokeWidth={3} />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n","'use client';\n\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\nimport { CircleIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * RadioGroup + RadioGroupItem — Radix-backed, skin-aware, accessible. Replaces\n * raw `<input type=\"radio\">`. Circular (always `rounded-full`, independent of\n * skin radius — radios are round by convention), brand-filled dot when\n * selected, family focus ring, `aria-invalid` parity.\n */\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn('grid gap-2', className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n 'border-input bg-input/30 text-primary aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'data-[state=checked]:border-primary',\n 'aria-invalid:ring-2 aria-invalid:ring-destructive/50 aria-invalid:border-destructive',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <CircleIcon className=\"fill-primary text-primary absolute size-2\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Switch — Radix-backed on/off toggle, skin-aware, accessible. For binary\n * settings (distinct from the domain-specific ThemeToggle). brand-on track,\n * family focus ring. Track is `rounded-full` by toggle convention; the thumb\n * follows suit.\n */\nfunction Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-[color,box-shadow,background-color] outline-none',\n 'data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40',\n className\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background pointer-events-none block size-4 rounded-full shadow-sm ring-0 transition-transform',\n 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0.5'\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst alertVariants = cva(\n 'relative grid w-full grid-cols-[0_1fr] items-start gap-x-0 gap-y-0.5 rounded-md border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n {\n variants: {\n variant: {\n default: 'bg-card text-card-foreground',\n destructive:\n 'text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90',\n success:\n 'text-success bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-success/90',\n warning:\n 'text-warning bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-warning/90',\n },\n },\n defaultVariants: { variant: 'default' },\n }\n);\n\nfunction Alert({\n className,\n variant,\n ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n return (\n <div\n data-slot=\"alert\"\n role=\"alert\"\n className={cn(alertVariants({ variant }), className)}\n {...props}\n />\n );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-title\"\n className={cn('col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight', className)}\n {...props}\n />\n );\n}\n\nfunction AlertDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"alert-description\"\n className={cn(\n 'text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Alert, AlertTitle, AlertDescription };\n","import type { LucideIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Alert, AlertDescription, AlertTitle } from './alert';\nimport { Button } from './button';\n\ntype AlertVariant = 'default' | 'destructive' | 'warning' | 'success';\n\nexport interface AlertWithActionProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionVariant?: 'default' | 'outline' | 'ghost' | 'destructive';\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n actionContent?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Alert with an integrated action button. Standard Alert styling + variants,\n * optional title/icon, optional action button or custom action content.\n */\nexport function AlertWithAction({\n variant = 'default',\n icon: Icon,\n title,\n description,\n actionLabel,\n onAction,\n actionVariant = 'outline',\n actionIcon,\n actionDisabled,\n actionContent,\n className,\n}: AlertWithActionProps) {\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n {(actionLabel || actionContent) && (\n <div className=\"mt-3 flex items-center gap-2\">\n {actionContent}\n {actionLabel && onAction && (\n <Button\n size=\"sm\"\n variant={actionVariant}\n onClick={onAction}\n disabled={actionDisabled}\n className={cn(!actionContent && 'ml-auto')}\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n )}\n </AlertDescription>\n </Alert>\n );\n}\n\nexport interface AlertWithCountdownProps {\n variant?: AlertVariant;\n icon?: LucideIcon;\n title?: string;\n description: React.ReactNode;\n countdown: number;\n countdownLabel?: string;\n countdownIcon?: React.ReactNode;\n actionLabel?: string;\n onAction?: () => void;\n actionIcon?: React.ReactNode;\n actionDisabled?: boolean;\n className?: string;\n}\n\n/**\n * Alert with a countdown timer and action button. Auto-pluralizes \"second(s)\"\n * and supports a `{countdown}` placeholder in `countdownLabel`.\n */\nexport function AlertWithCountdown({\n variant = 'default',\n icon: Icon,\n title,\n description,\n countdown,\n countdownLabel,\n countdownIcon,\n actionLabel = 'Check Now',\n onAction,\n actionIcon,\n actionDisabled,\n className,\n}: AlertWithCountdownProps) {\n const label = countdownLabel\n ? countdownLabel.replace('{countdown}', countdown.toString())\n : `Rechecking in ${countdown} second${countdown !== 1 ? 's' : ''}...`;\n\n return (\n <Alert variant={variant} className={className}>\n {Icon && <Icon className=\"h-4 w-4\" />}\n {title && <AlertTitle>{title}</AlertTitle>}\n <AlertDescription>\n {description}\n <div className=\"mt-3 flex items-center gap-2 text-sm\">\n {countdownIcon}\n <span>{label}</span>\n {onAction && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={onAction}\n disabled={actionDisabled}\n className=\"ml-auto\"\n >\n {actionIcon}\n {actionLabel}\n </Button>\n )}\n </div>\n </AlertDescription>\n </Alert>\n );\n}\n","import * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Sizing note, and it is load-bearing: `text-base md:text-xs`, not `text-xs`.\n *\n * iOS Safari zooms the viewport when a form field with text under 16px takes\n * focus, and the user is not zoomed back out afterwards — every textarea in\n * the family did this. `text-base` (16px) on mobile suppresses it; `md:text-xs`\n * keeps the 12px mono look on a pointer device, where the zoom behaviour does\n * not exist. Input already used this ladder (`text-base md:text-sm`); Textarea\n * was flat 12px with no responsive step.\n *\n * A consumer passing `text-xs` via className will re-break it — tailwind-merge\n * lets the caller win. Pass the ladder, not a single size.\n */\nfunction Textarea({ className, ...props }: React.ComponentProps<'textarea'>) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n 'placeholder:text-muted-foreground border-input bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 w-full min-w-0 rounded-md border px-3 py-2 font-mono text-base leading-relaxed shadow-xs md:text-xs transition-[color,box-shadow,background-color] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n // aria-invalid parity with Input — error styling when a consumer\n // marks the field invalid.\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n","'use client';\n\nimport { Moon, Sun } from 'lucide-react';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\nimport { Button } from './button';\n\n/**\n * Compact icon-button light/dark toggle used in the desktop header. This is the\n * *mode* axis (next-themes `.dark` class) — orthogonal to `OcThemePicker`, which\n * is the named-theme (skin) axis.\n */\nexport function ThemeToggle({ className }: { className?: string }) {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = resolvedTheme === 'dark';\n return (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n aria-label={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n title={isDark ? 'Switch to light mode' : 'Switch to dark mode'}\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className={cn('text-muted-foreground hover:text-foreground', className)}\n >\n {!mounted ? (\n <span className=\"block size-4\" />\n ) : isDark ? (\n <Sun className=\"size-4\" />\n ) : (\n <Moon className=\"size-4\" />\n )}\n </Button>\n );\n}\n\n/**\n * Link-like variant for use inside the mobile drawer (matches other menu items).\n */\nexport function ThemeToggleLink() {\n const { resolvedTheme, setTheme } = useTheme();\n const [mounted, setMounted] = useState(false);\n useEffect(() => setMounted(true), []);\n\n const isDark = mounted && resolvedTheme === 'dark';\n return (\n <button\n type=\"button\"\n onClick={() => setTheme(isDark ? 'light' : 'dark')}\n className=\"hover:text-foreground flex w-full items-center justify-between px-2 py-2 text-left text-xs tracking-wide uppercase transition-colors\"\n >\n <span className=\"tracking-wide lowercase\">\n {'> '}\n {mounted ? (isDark ? 'light mode' : 'dark mode') : 'theme'}\n </span>\n {mounted && (isDark ? <Sun className=\"size-3.5\" /> : <Moon className=\"size-3.5\" />)}\n </button>\n );\n}\n","'use client';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Cohesive \"working\" indicator used at every async hold-point. Two styles, same\n * DNA — a cypherpunk marching-cursor of three dots (no SVG spinner). The CSS\n * lives in `@orangecheck/design/styles.css` (`.oc-working-*`). Each indicator\n * carries an `aria-live=\"polite\"` region announcing the activity.\n */\nexport interface WorkingProps {\n /** Short verb phrase describing what's happening. Lowercase. */\n text: string;\n /** Compact (button-sized) or normal (inline block). */\n size?: 'sm' | 'md';\n /** Optional — show a progress ratio (e.g. \"2 of 4 relays\"). */\n progress?: string;\n className?: string;\n}\n\nexport function Working({ text, size = 'md', progress, className }: WorkingProps) {\n const isSmall = size === 'sm';\n return (\n <span\n aria-live=\"polite\"\n className={cn(\n 'inline-flex items-center gap-2 font-mono',\n isSmall ? 'text-[11px]' : 'text-xs',\n 'text-muted-foreground',\n className\n )}\n >\n <span className=\"oc-working-cursor\" aria-hidden>\n <span className=\"oc-working-dot\" style={{ animationDelay: '0ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '140ms' }}>\n ·\n </span>\n <span className=\"oc-working-dot\" style={{ animationDelay: '280ms' }}>\n ·\n </span>\n </span>\n <span className=\"oc-working-text\">\n {text}\n {progress && <span className=\"text-muted-foreground/60 ml-1.5\">[{progress}]</span>}\n </span>\n </span>\n );\n}\n\n/**\n * Full-panel working block. Use inside a terminal to take the whole card.\n */\nexport function WorkingPanel({ text, progress }: Pick<WorkingProps, 'text' | 'progress'>) {\n return (\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"terminal-dot\" />\n <span className=\"ml-2\">in progress</span>\n </div>\n <div className=\"flex items-center gap-3 p-5\">\n <Working text={text} {...(progress ? { progress } : {})} />\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\ninterface Props {\n children: React.ReactNode;\n /** Full custom fallback. Takes precedence over `title`/`message`. */\n fallback?: (error: Error, reset: () => void) => React.ReactNode;\n /** Title shown in the default fallback's terminal strip (default \"! fatal\"). */\n title?: string;\n /** Reassurance line below the error (default \"this page crashed. reload to recover.\"). */\n message?: string;\n /** Called on catch — wire to Sentry/analytics. Runs alongside the console log. */\n onError?: (error: Error, info: React.ErrorInfo) => void;\n}\n\ninterface State {\n error: Error | null;\n}\n\nexport class ErrorBoundary extends React.Component<Props, State> {\n state: State = { error: null };\n\n static getDerivedStateFromError(error: Error): State {\n return { error };\n }\n\n componentDidCatch(error: Error, info: React.ErrorInfo) {\n // Default behaviour logs; pass `onError` to forward to Sentry or similar.\n console.error('[ErrorBoundary]', error, info);\n this.props.onError?.(error, info);\n }\n\n reset = () => this.setState({ error: null });\n\n render() {\n if (this.state.error) {\n if (this.props.fallback) {\n return this.props.fallback(this.state.error, this.reset);\n }\n return (\n <div className=\"container py-16\">\n <div className=\"terminal\">\n <div className=\"terminal-title\">\n <span className=\"text-destructive flex items-center gap-1.5\">\n {this.props.title ?? '! fatal'}\n </span>\n </div>\n <div className=\"space-y-3 p-5 font-mono text-xs leading-relaxed\">\n <p>\n <span className=\"text-destructive\">{'> '}err:</span>{' '}\n {this.state.error.message || 'unknown error'}\n </p>\n <p className=\"text-muted-foreground\">\n {'> '}\n {this.props.message ?? 'this page crashed. reload to recover.'}\n </p>\n <button\n type=\"button\"\n onClick={this.reset}\n className=\"bg-primary text-primary-foreground hover:bg-primary/90 mt-2 inline-flex items-center justify-center gap-2 rounded-md px-4 py-2 font-mono text-xs tracking-widest uppercase\"\n >\n retry\n </button>\n </div>\n </div>\n </div>\n );\n }\n return this.props.children;\n }\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SkeletonProps {\n className?: string;\n}\n\n/** Inert shimmer placeholder. Pulses subtly while data is loading. */\nexport function Skeleton({ className }: SkeletonProps) {\n return <div className={cn('bg-muted/40 animate-pulse rounded-sm', className)} />;\n}\n","'use client';\n\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Separator({\n className,\n orientation = 'horizontal',\n decorative = true,\n ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n return (\n <SeparatorPrimitive.Root\n data-slot=\"separator\"\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',\n className\n )}\n {...props}\n />\n );\n}\n\nexport { Separator };\n","'use client';\n\nimport * as SheetPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Sheet(props: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger(props: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose(props: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal(props: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nfunction SheetOverlay({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n 'fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction SheetContent({\n className,\n children,\n side = 'right',\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n side?: 'left' | 'right' | 'top' | 'bottom';\n}) {\n const sideClasses: Record<string, string> = {\n right: 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n top: 'inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n bottom: 'inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n };\n return (\n <SheetPortal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n 'bg-background fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=closed]:animate-out data-[state=open]:duration-500 data-[state=open]:animate-in',\n sideClasses[side],\n className\n )}\n {...props}\n >\n {children}\n <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n <X className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div data-slot=\"sheet-header\" className={cn('flex flex-col gap-1.5 p-4', className)} {...props} />\n );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn('mt-auto flex flex-col gap-2 p-4', className)}\n {...props}\n />\n );\n}\n\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('text-foreground font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetClose,\n SheetContent,\n SheetDescription,\n SheetFooter,\n SheetHeader,\n SheetOverlay,\n SheetPortal,\n SheetTitle,\n SheetTrigger,\n};\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { XIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Dialog({ ...props }: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogTrigger({ ...props }: React.ComponentProps<typeof DialogPrimitive.Trigger>) {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n}\n\nfunction DialogPortal({ ...props }: React.ComponentProps<typeof DialogPrimitive.Portal>) {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n}\n\nfunction DialogClose({ ...props }: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {\n return (\n <DialogPrimitive.Overlay\n data-slot=\"dialog-overlay\"\n className={cn(\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n className,\n children,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content> & {\n showCloseButton?: boolean;\n}) {\n return (\n <DialogPortal data-slot=\"dialog-portal\">\n <DialogOverlay />\n <DialogPrimitive.Content\n data-slot=\"dialog-content\"\n className={cn(\n 'bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg',\n className\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close\n data-slot=\"dialog-close\"\n className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\"\n >\n <XIcon />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n );\n}\n\nfunction DialogHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-header\"\n className={cn('flex flex-col gap-2 text-center sm:text-left', className)}\n {...props}\n />\n );\n}\n\nfunction DialogFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"dialog-footer\"\n className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}\n {...props}\n />\n );\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n data-slot=\"dialog-title\"\n className={cn('text-lg leading-none font-semibold', className)}\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-muted-foreground text-sm', className)}\n {...props}\n />\n );\n}\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n};\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { AlertTriangle } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\n\n/**\n * Promise-based replacement for `window.confirm` in the house design language.\n * Call `confirm({...})` from anywhere; a single mounted `<ConfirmHost />` renders\n * it. Async (resolves to a boolean) and provider-less by design.\n */\n\nexport interface ConfirmOptions {\n title: string;\n message: string;\n confirmLabel?: string;\n cancelLabel?: string;\n destructive?: boolean;\n}\n\ninterface PendingConfirm extends ConfirmOptions {\n resolve: (ok: boolean) => void;\n}\n\n// Read NODE_ENV without depending on @types/node (this is a browser package).\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingConfirm | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\nexport function confirm(opts: ConfirmOptions): Promise<boolean> {\n return new Promise<boolean>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[ConfirmDialog] confirm() called but no <ConfirmHost /> is mounted');\n }\n });\n}\n\n/** Singleton dialog host. Mount once at the app root. */\nexport function ConfirmHost() {\n const [state, setState] = useState<PendingConfirm | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn(\n '[ConfirmDialog] multiple <ConfirmHost /> instances mounted — the last one wins'\n );\n }\n notifyHost = () => setState(pending);\n if (pending) setState(pending);\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (ok: boolean) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(ok);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(false)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\">\n <div className=\"terminal-title\">\n <span\n className={\n 'flex items-center gap-1.5 ' +\n (state.destructive ? 'text-destructive' : 'text-primary')\n }\n >\n <AlertTriangle className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap [overflow-wrap:anywhere]\">\n {state.message}\n </div>\n </Dialog.Description>\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(false)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button\n onClick={() => close(true)}\n className={\n 'font-display tracking-wide uppercase ' +\n (state.destructive\n ? 'bg-destructive text-destructive-foreground hover:bg-destructive/90'\n : '')\n }\n >\n {state.confirmLabel ?? 'confirm'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as Dialog from '@radix-ui/react-dialog';\nimport { Pencil } from 'lucide-react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from './button';\nimport { Input } from './input';\nimport { Label } from './label';\n\n/**\n * Promise-based replacement for `window.prompt`, in the house design language.\n * Call `prompt({...})`; mount one `<PromptHost />` at the app root (alongside\n * `<ConfirmHost />`). Supports a masked `secret` input, a matching\n * `confirmField` (\"choose a passphrase, twice\"), and a `validate` hook.\n */\n\nexport interface PromptOptions {\n title: string;\n message?: string;\n label?: string;\n placeholder?: string;\n defaultValue?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n /** Mask the input. */\n secret?: boolean;\n /** Show a second input that must match the first. Implies validation. */\n confirmField?: boolean;\n /** Minimum accepted length. */\n minLength?: number;\n /** Return an error string to block submission, or null to allow it. */\n validate?: (value: string) => string | null;\n}\n\ninterface PendingPrompt extends PromptOptions {\n resolve: (value: string | null) => void;\n}\n\nconst NODE_ENV = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process?.env\n ?.NODE_ENV;\n\nlet pending: PendingPrompt | null = null;\nlet notifyHost: (() => void) | null = null;\nlet hostMountCount = 0;\n\n/** Open a prompt dialog. Resolves to the entered string, or null if cancelled. */\nexport function prompt(opts: PromptOptions): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n pending = { ...opts, resolve };\n if (notifyHost) {\n notifyHost();\n } else if (NODE_ENV !== 'production') {\n console.warn('[PromptDialog] prompt() called but no <PromptHost /> is mounted');\n }\n });\n}\n\nexport function PromptHost() {\n const [state, setState] = useState<PendingPrompt | null>(null);\n const [value, setValue] = useState('');\n const [confirmValue, setConfirmValue] = useState('');\n const [error, setError] = useState<string | null>(null);\n const submittingRef = useRef(false);\n\n useEffect(() => {\n hostMountCount += 1;\n if (hostMountCount > 1 && NODE_ENV !== 'production') {\n console.warn('[PromptDialog] multiple <PromptHost /> instances mounted');\n }\n notifyHost = () => {\n setValue(pending?.defaultValue ?? '');\n setConfirmValue('');\n setError(null);\n setState(pending);\n };\n if (pending) notifyHost();\n return () => {\n hostMountCount -= 1;\n notifyHost = null;\n };\n }, []);\n\n const close = useCallback(\n (result: string | null) => {\n if (submittingRef.current) return;\n submittingRef.current = true;\n state?.resolve(result);\n pending = null;\n setState(null);\n requestAnimationFrame(() => {\n submittingRef.current = false;\n });\n },\n [state]\n );\n\n const submit = useCallback(() => {\n if (!state) return;\n const v = value;\n if (state.minLength && v.length < state.minLength) {\n setError(`must be at least ${state.minLength} characters`);\n return;\n }\n if (state.confirmField && v !== confirmValue) {\n setError('the two entries do not match');\n return;\n }\n if (state.validate) {\n const msg = state.validate(v);\n if (msg) {\n setError(msg);\n return;\n }\n }\n close(v);\n }, [state, value, confirmValue, close]);\n\n if (!state) return null;\n\n return (\n <Dialog.Root open onOpenChange={(open) => !open && close(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"fixed inset-0 z-50 bg-black/50 backdrop-blur-sm\" />\n <Dialog.Content\n className=\"bg-card border-border fixed top-1/2 left-1/2 z-50 w-[90vw] max-w-md -translate-x-1/2 -translate-y-1/2 border shadow-lg outline-none\"\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n submit();\n }\n }}\n >\n <div className=\"terminal-title\">\n <span className=\"text-primary flex items-center gap-1.5\">\n <Pencil className=\"size-3.5\" />\n {state.title}\n </span>\n </div>\n <div className=\"space-y-4 p-4 sm:p-5\">\n <Dialog.Title className=\"sr-only\">{state.title}</Dialog.Title>\n {state.message && (\n <Dialog.Description asChild>\n <div className=\"text-muted-foreground font-mono text-xs leading-relaxed whitespace-pre-wrap\">\n {state.message}\n </div>\n </Dialog.Description>\n )}\n <div>\n {state.label && <Label>{state.label}</Label>}\n <Input\n autoFocus\n type={state.secret ? 'password' : 'text'}\n value={value}\n onChange={(e) => {\n setValue(e.target.value);\n setError(null);\n }}\n placeholder={state.placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={\n (state.label ? 'mt-2 ' : '') + (state.secret ? 'font-mono' : '')\n }\n />\n </div>\n {state.confirmField && (\n <div>\n <Label>confirm</Label>\n <Input\n type={state.secret ? 'password' : 'text'}\n value={confirmValue}\n onChange={(e) => {\n setConfirmValue(e.target.value);\n setError(null);\n }}\n placeholder=\"re-enter to confirm\"\n autoComplete=\"off\"\n spellCheck={false}\n className={'mt-2 ' + (state.secret ? 'font-mono' : '')}\n />\n </div>\n )}\n {error && <p className=\"text-destructive font-mono text-xs\">{error}</p>}\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <Button\n variant=\"outline\"\n onClick={() => close(null)}\n className=\"font-mono text-[11px] tracking-widest uppercase\"\n >\n {state.cancelLabel ?? 'cancel'}\n </Button>\n <Button onClick={submit} className=\"font-display tracking-wide uppercase\">\n {state.confirmLabel ?? 'ok'}\n </Button>\n </div>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n );\n}\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface ModalProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n title: string;\n subtitle?: string;\n children: ReactNode;\n /** Optional toolbar slot rendered to the right of the title. */\n actions?: ReactNode;\n /** Bias narrower for input-focused modals. */\n width?: 'wide' | 'narrow';\n}\n\n/**\n * Family-standard near-fullscreen modal with terminal-window chrome. Dense data\n * gets room to breathe; ESC + backdrop close, focus trapped while open. Backed\n * by Radix Dialog. Visual: ~95vw × 90vh, scrollable body, pinned title strip.\n */\nexport function Modal({ open, onOpenChange, title, subtitle, children, actions, width = 'wide' }: ModalProps) {\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay className=\"bg-background/80 fixed inset-0 z-[100] backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\" />\n <DialogPrimitive.Content\n className={cn(\n 'terminal fixed top-[5vh] left-1/2 z-[110] flex max-h-[90vh] -translate-x-1/2 flex-col overflow-hidden rounded-sm border',\n width === 'wide' ? 'w-[95vw] max-w-screen-2xl' : 'w-[80vw] max-w-3xl',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95'\n )}\n >\n <div className=\"terminal-title flex shrink-0 items-center justify-between gap-3\">\n {/* Same shrink priority as Card's header — the expanded\n view must not clip a title the collapsed one keeps. */}\n <div className=\"flex min-w-0 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n <DialogPrimitive.Title className=\"ml-2 truncate [flex-shrink:1]\">{title}</DialogPrimitive.Title>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 min-w-0 truncate text-[10px] normal-case tracking-normal [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {actions}\n <DialogPrimitive.Close\n aria-label=\"close\"\n className=\"text-muted-foreground hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <X className=\"size-3.5\" />\n </DialogPrimitive.Close>\n </div>\n </div>\n <div className=\"flex-1 overflow-y-auto p-4 sm:p-6\">{children}</div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n","'use client';\n\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { Button } from './button';\n\nexport interface PaginationProps {\n page: number;\n pageSize: number;\n total: number;\n onPage: (page: number) => void;\n className?: string;\n}\n\n/**\n * The family's consistent pagination control: a \"start–end of total\" range\n * label plus prev / next chevron buttons. Page-index based (0-based). Renders\n * nothing when everything fits on one page.\n */\nexport function Pagination({ page, pageSize, total, onPage, className }: PaginationProps) {\n if (total <= pageSize) return null;\n const start = page * pageSize;\n const shown = Math.max(0, Math.min(pageSize, total - start));\n return (\n <div className={'flex items-center justify-between ' + (className ?? 'mt-3')}>\n <span className=\"text-muted-foreground/70 font-mono text-[10px]\">\n {start + 1}–{start + shown} of {total}\n </span>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => onPage(page - 1)} disabled={page === 0}>\n <ChevronLeft className=\"size-4\" /> prev\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => onPage(page + 1)}\n disabled={start + pageSize >= total}\n >\n next <ChevronRight className=\"size-4\" />\n </Button>\n </div>\n </div>\n );\n}\n","'use client';\n\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Popover({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Root>) {\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\n}\n\nfunction PopoverTrigger({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\n}\n\nfunction PopoverContent({\n className,\n align = 'center',\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\n return (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n data-slot=\"popover-content\"\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n );\n}\n\nfunction PopoverAnchor({ ...props }: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\n}\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\n","'use client';\n\nimport * as Popover from '@radix-ui/react-popover';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * `<Tooltip>` — the family's hover/focus tooltip primitive.\n *\n * Built on `@radix-ui/react-popover` (already a dependency — we do NOT add\n * `@radix-ui/react-tooltip`) but driven by a *controlled* open boolean so we\n * own the timing and gating Radix's popover doesn't give a tooltip:\n *\n * - hover-intent: opens after `openDelay`ms of sustained pointer hover,\n * closes after a short `closeDelay` grace (WCAG 1.4.13 hoverable).\n * - keyboard parity: also opens on keyboard focus (detected via input-\n * modality, since `:focus-visible` isn't applied yet inside the focus\n * event), closes on blur/Escape, never steals or traps focus.\n * - pointer-fine only: the hover path is gated behind\n * `(hover: hover) and (pointer: fine)` so it never fires on touch — by\n * pointer *type*, not a width breakpoint (a coarse tablet ≥ sm is touch).\n * - `disabled`: a hard force-close, used by `OcLogoDropdown` so the tip and\n * the family menu (which share a trigger) can never paint at once.\n *\n * The content is decorative reinforcement: it's `aria-hidden`, and\n * `pointer-events-none` so a mis-detected pointer can never intercept the\n * click path to the trigger. The authoritative accessible name belongs on the\n * trigger's own `aria-label`.\n */\n\nconst TOOLTIP_SURFACE_CLASS =\n 'bg-popover text-popover-foreground border-border rounded-md border p-2.5 shadow-md';\n\n// Same idiom as the popover/dialog primitives, a touch faster (tooltips are\n// lighter than dialogs) with a smaller 4px travel. Reduced-motion is handled\n// globally by the family `prefers-reduced-motion` reset — nothing to add here.\nconst TOOLTIP_MOTION_CLASS =\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-1 data-[side=top]:slide-in-from-bottom-1 data-[side=left]:slide-in-from-right-1 data-[side=right]:slide-in-from-left-1 origin-(--radix-popover-content-transform-origin) duration-150 ease-out';\n\nexport interface TooltipProps {\n /** The tooltip body. */\n content: React.ReactNode;\n /** A single trigger element (a `<button>` etc.); receives the hover/focus wiring. */\n children: React.ReactElement;\n side?: 'top' | 'right' | 'bottom' | 'left';\n align?: 'start' | 'center' | 'end';\n sideOffset?: number;\n collisionPadding?: number;\n /** ms of sustained hover before opening. Default 300 (deliberate, not twitchy). */\n openDelay?: number;\n /** ms grace before closing on pointer-leave. Default 90. */\n closeDelay?: number;\n /** Force the tooltip closed regardless of hover/focus (e.g. while a shared menu is open). */\n disabled?: boolean;\n /** Portal to `<body>` (default true). Set false to keep content inline so it inherits a scoped `data-oc-theme`. */\n portal?: boolean;\n /** z-index utility for the content. Default `z-50`. */\n zIndexClassName?: string;\n contentClassName?: string;\n}\n\ninterface TriggerHandlerProps {\n onPointerEnter?: React.PointerEventHandler;\n onPointerLeave?: React.PointerEventHandler;\n onPointerDown?: React.PointerEventHandler;\n onFocus?: React.FocusEventHandler;\n onBlur?: React.FocusEventHandler;\n onKeyDown?: React.KeyboardEventHandler;\n}\n\nfunction compose<E>(theirs: ((e: E) => void) | undefined, ours: (e: E) => void) {\n return (e: E) => {\n theirs?.(e);\n ours(e);\n };\n}\n\n/**\n * Input-modality tracker (the `:focus-visible` polyfill heuristic).\n * `:focus-visible` is NOT reliably applied synchronously inside the `focus`\n * event, so reading `el.matches(':focus-visible')` there misses keyboard focus.\n * Instead we record the last input type from global capture-phase listeners\n * that fire BEFORE focus: a keydown means the focus that follows is keyboard-\n * driven (show the hint); a pointerdown means it's a click (don't — that would\n * flash the tip over the menu).\n */\nlet lastInputWasKeyboard = false;\nlet modalityInstalled = false;\nfunction installModalityTracking() {\n if (modalityInstalled || typeof window === 'undefined') return;\n modalityInstalled = true;\n window.addEventListener('keydown', () => (lastInputWasKeyboard = true), true);\n window.addEventListener('pointerdown', () => (lastInputWasKeyboard = false), true);\n}\n\nexport function Tooltip({\n content,\n children,\n side = 'bottom',\n align = 'start',\n sideOffset = 8,\n collisionPadding = 12,\n openDelay = 300,\n closeDelay = 90,\n disabled = false,\n portal = true,\n zIndexClassName = 'z-50',\n contentClassName,\n}: TooltipProps) {\n const [hovering, setHovering] = React.useState(false);\n const [focusing, setFocusing] = React.useState(false);\n const [isFinePointer, setIsFinePointer] = React.useState(false);\n const openTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const closeTimer = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Detect a true mouse (fine pointer + real hover). Defaults false for SSR\n // and first client render, then resolves in the effect — a normal post-mount\n // update, not a hydration mismatch.\n React.useEffect(() => {\n installModalityTracking();\n const mq = window.matchMedia('(hover: hover) and (pointer: fine)');\n const apply = () => setIsFinePointer(mq.matches);\n apply();\n mq.addEventListener('change', apply);\n return () => mq.removeEventListener('change', apply);\n }, []);\n\n const clearTimers = React.useCallback(() => {\n if (openTimer.current) clearTimeout(openTimer.current);\n if (closeTimer.current) clearTimeout(closeTimer.current);\n }, []);\n\n React.useEffect(() => clearTimers, [clearTimers]);\n\n // When force-closed (e.g. the shared menu opened), drop the hover latch so\n // the tip doesn't snap back with no delay the instant the menu closes while\n // the pointer is still over the trigger. `focusing` is left alone — a\n // keyboard user who stays focused should still get the immediate hint.\n React.useEffect(() => {\n if (disabled) {\n clearTimers();\n setHovering(false);\n }\n }, [disabled, clearTimers]);\n\n const handlePointerEnter = () => {\n if (!isFinePointer) return;\n if (closeTimer.current) clearTimeout(closeTimer.current);\n openTimer.current = setTimeout(() => setHovering(true), openDelay);\n };\n const handlePointerLeave = () => {\n if (openTimer.current) clearTimeout(openTimer.current);\n closeTimer.current = setTimeout(() => setHovering(false), closeDelay);\n };\n // The first press of EITHER a single- or double-click tears the tip down\n // before the trigger's own onClick toggles a menu, so it never overlaps.\n const handlePointerDown = () => {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n };\n const handleFocus = () => {\n // Only keyboard focus reveals the hint — a mouse click also focuses the\n // trigger, and re-popping the tip over an opening menu would be the bug.\n // Use the modality flag (set before focus fires) rather than\n // `:focus-visible`, which isn't applied yet inside the focus event.\n if (lastInputWasKeyboard) {\n clearTimers();\n setFocusing(true);\n }\n };\n const handleBlur = () => {\n clearTimers();\n setFocusing(false);\n };\n // Escape dismisses the focus-revealed tip without moving focus (WCAG 1.4.13).\n // Handled on the focused trigger directly — robust regardless of Radix's\n // dismissal internals (we suppress its focus-outside dismissal below).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n };\n\n const effectiveOpen = !disabled && ((isFinePointer && hovering) || focusing);\n\n const extra: TriggerHandlerProps = {};\n const childProps = children.props as TriggerHandlerProps;\n extra.onPointerEnter = compose(childProps.onPointerEnter, handlePointerEnter);\n extra.onPointerLeave = compose(childProps.onPointerLeave, handlePointerLeave);\n extra.onPointerDown = compose(childProps.onPointerDown, handlePointerDown);\n extra.onFocus = compose(childProps.onFocus, handleFocus);\n extra.onBlur = compose(childProps.onBlur, handleBlur);\n extra.onKeyDown = compose(childProps.onKeyDown, handleKeyDown);\n const trigger = React.cloneElement(children, extra);\n\n const contentEl = (\n <Popover.Content\n side={side}\n align={align}\n sideOffset={sideOffset}\n collisionPadding={collisionPadding}\n aria-hidden\n onOpenAutoFocus={(e) => e.preventDefault()}\n onCloseAutoFocus={(e) => e.preventDefault()}\n // The tip is aria-hidden + non-focusable, so focus legitimately\n // stays on the trigger (outside the content). Don't let Radix's\n // focus-outside dismissal close a focus-revealed tip; Escape and\n // pointer-down-outside still dismiss.\n onFocusOutside={(e) => e.preventDefault()}\n className={cn(\n TOOLTIP_SURFACE_CLASS,\n TOOLTIP_MOTION_CLASS,\n 'pointer-events-none',\n zIndexClassName,\n contentClassName\n )}\n >\n {content}\n </Popover.Content>\n );\n\n return (\n <Popover.Root\n open={effectiveOpen}\n onOpenChange={(o) => {\n // Radix requests close on Escape / outside interaction — sync our\n // own state so a re-hover re-arms cleanly. We never open via Radix.\n if (!o) {\n clearTimers();\n setHovering(false);\n setFocusing(false);\n }\n }}\n modal={false}\n >\n <Popover.Anchor asChild>{trigger}</Popover.Anchor>\n {portal ? <Popover.Portal>{contentEl}</Popover.Portal> : contentEl}\n </Popover.Root>\n );\n}\n","'use client';\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown, Plus } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst Accordion = AccordionPrimitive.Root;\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item ref={ref} className={cn('border-b', className)} {...props} />\n));\nAccordionItem.displayName = 'AccordionItem';\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> & {\n /** Toggle glyph: a rotating chevron (default) or a marketing plus that\n * turns into an ✕ on open, tinted with the brand. */\n icon?: 'chevron' | 'plusMinus';\n }\n>(({ className, children, icon = 'chevron', ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between gap-4 py-4 text-left font-medium transition-all hover:underline',\n icon === 'chevron'\n ? '[&[data-state=open]>svg]:rotate-180'\n : '[&[data-state=open]>svg]:rotate-45',\n className\n )}\n {...props}\n >\n {children}\n {icon === 'chevron' ? (\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n ) : (\n <Plus className=\"text-primary h-5 w-5 shrink-0 transition-transform duration-200\" />\n )}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n));\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm transition-all\"\n {...props}\n >\n <div className={cn('pt-0 pb-4', className)}>{children}</div>\n </AccordionPrimitive.Content>\n));\nAccordionContent.displayName = AccordionPrimitive.Content.displayName;\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent };\n","'use client';\n\nimport * as SelectPrimitive from '@radix-ui/react-select';\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from 'lucide-react';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = 'default',\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive bg-input/30 hover:bg-input/50 dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow,background-color] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = 'popper',\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n 'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","'use client';\n\nimport { useTheme } from 'next-themes';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\n\n/**\n * Toast host in the house design language. Mount once at the app root, then\n * call `toast()` from `sonner` anywhere. Re-exported here for convenience.\n */\nconst Toaster = ({ ...props }: ToasterProps) => {\n const { theme = 'system' } = useTheme();\n\n return (\n <Sonner\n theme={theme as ToasterProps['theme']}\n className=\"toaster group\"\n toastOptions={{\n classNames: {\n toast: 'group toast group-[.toaster]:bg-card group-[.toaster]:text-card-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg',\n description: 'group-[.toast]:text-muted-foreground',\n actionButton: 'group-[.toast]:bg-foreground group-[.toast]:text-background',\n cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground',\n error: 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n success:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n warning:\n 'group-[.toaster]:!bg-card group-[.toaster]:!text-foreground group-[.toaster]:!border-border',\n info: 'group-[.toaster]:!bg-card group-[.toaster]:!text-muted-foreground group-[.toaster]:!border-border',\n },\n }}\n style={\n {\n '--normal-bg': 'var(--card)',\n '--normal-text': 'var(--card-foreground)',\n '--normal-border': 'var(--border)',\n '--error-bg': 'var(--card)',\n '--error-text': 'var(--foreground)',\n '--error-border': 'var(--border)',\n '--success-bg': 'var(--card)',\n '--success-text': 'var(--foreground)',\n '--success-border': 'var(--border)',\n '--warning-bg': 'var(--card)',\n '--warning-text': 'var(--foreground)',\n '--warning-border': 'var(--border)',\n '--info-bg': 'var(--card)',\n '--info-text': 'var(--muted-foreground)',\n '--info-border': 'var(--border)',\n } as React.CSSProperties\n }\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst surfaceVariants = cva('rounded-xl transition-colors', {\n variants: {\n tone: {\n /* Crisp panel floating on the page — the default soft card. */\n default: 'bg-card text-card-foreground',\n /* Warm-gray recessed panel. */\n muted: 'bg-muted text-foreground',\n /* Solid brand fill — small terracotta panel; inverts child text. */\n brand: 'bg-brand text-brand-foreground',\n /* High-contrast neutral panel (near-black in light, near-white in dark). */\n contrast: 'bg-foreground text-background',\n /* Translucent lightened tile for cards sitting ON a brand band. */\n onBrand:\n 'text-brand-foreground [background:color-mix(in_oklch,white_16%,var(--brand))] [border-color:color-mix(in_oklch,white_24%,transparent)]',\n /* Frame only, transparent fill. */\n outline: 'bg-transparent text-foreground',\n },\n elevation: {\n none: 'shadow-none',\n sm: 'shadow-sm',\n md: 'shadow-md',\n lg: 'shadow-lg',\n xl: 'shadow-xl',\n },\n bordered: {\n true: 'border',\n false: '',\n },\n pad: {\n none: 'p-0',\n sm: 'p-4',\n md: 'p-5 sm:p-6',\n lg: 'p-6 sm:p-8',\n },\n },\n defaultVariants: {\n tone: 'default',\n elevation: 'sm',\n bordered: true,\n pad: 'md',\n },\n});\n\nexport interface SurfaceProps\n extends Omit<React.ComponentProps<'div'>, 'color'>,\n VariantProps<typeof surfaceVariants> {}\n\n/**\n * Surface — the soft, large-radius, elevated panel that the warm theme sits on.\n *\n * The package `Card` is a TERMINAL-window frame (mono title strip, terminal\n * dots) for dashboards; Surface is its plain marketing/consumer counterpart —\n * a bg-card panel with token-routed radius + soft elevation and no chrome.\n * Re-skins per skin via the radius + shadow tokens. Use this for feature cards,\n * sign-in cards, trust chips — anything that is NOT a terminal panel.\n */\nexport function Surface({\n className,\n tone,\n elevation,\n bordered,\n pad,\n ...props\n}: SurfaceProps) {\n return (\n <div\n data-slot=\"surface\"\n className={cn(surfaceVariants({ tone, elevation, bordered, pad }), className)}\n {...props}\n />\n );\n}\n\nexport { surfaceVariants };\n","import type { VariantProps } from 'class-variance-authority';\n\nimport { cva } from 'class-variance-authority';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\nconst iconBadgeVariants = cva(\n 'inline-flex shrink-0 items-center justify-center rounded-md font-semibold [&_svg]:pointer-events-none',\n {\n variants: {\n tone: {\n /* The signature peach tile — soft accent fill, terracotta glyph.\n Auto-swaps to warm-dark + light-peach in dark mode via tokens. */\n peach: 'bg-accent text-accent-foreground',\n /* Inverted near-black tile, light glyph (\"never do\" promises). */\n dark: 'bg-foreground text-background',\n /* Solid brand tile. */\n brand: 'bg-primary text-primary-foreground',\n /* White tile on a brand band, terracotta glyph (numbered steps). */\n onBrand: 'bg-brand-foreground text-primary',\n /* Quiet neutral tile. */\n muted: 'bg-muted text-foreground',\n /* Crisp white (card-colored) tile with a terracotta glyph and a\n soft lift — the elevated icon chip on muted/colored cards. */\n surface: 'bg-card text-primary shadow-sm',\n },\n size: {\n sm: 'size-9 text-xs [&_svg]:size-4',\n md: 'size-11 text-sm [&_svg]:size-5',\n lg: 'size-12 text-base [&_svg]:size-6',\n xl: 'size-14 text-lg [&_svg]:size-7',\n },\n },\n defaultVariants: { tone: 'peach', size: 'md' },\n }\n);\n\nexport interface IconBadgeProps\n extends Omit<React.ComponentProps<'span'>, 'color'>,\n VariantProps<typeof iconBadgeVariants> {}\n\n/**\n * IconBadge — a rounded-square tile holding a lucide icon OR a number/short\n * label. The theme's most-reused decorative atom (feature-card icons, numbered\n * steps, the verified chip). Distinct from the text `Badge` pill: this is a\n * fixed-size square tile. Tones map to skin tokens so the same markup recolours\n * across skins and light/dark (peach ↔ warm-dark).\n *\n * <IconBadge tone=\"peach\"><Lock /></IconBadge>\n * <IconBadge tone=\"onBrand\" size=\"sm\">1</IconBadge>\n */\nexport function IconBadge({ className, tone, size, children, ...props }: IconBadgeProps) {\n return (\n <span\n data-slot=\"icon-badge\"\n className={cn(iconBadgeVariants({ tone, size }), className)}\n {...props}\n >\n {children}\n </span>\n );\n}\n\nexport { iconBadgeVariants };\n","\"use client\";\n\nimport { Maximize2 } from \"lucide-react\";\nimport { useState, type ReactNode } from \"react\";\n\nimport { cn } from \"../tokens/cn\";\nimport { Modal } from \"./modal\";\n\nexport interface CardProps {\n id?: string;\n title: string;\n subtitle?: string;\n refreshedAt?: string | null;\n actions?: ReactNode;\n children: ReactNode;\n className?: string;\n tone?: \"default\" | \"warning\" | \"destructive\" | \"muted\";\n /**\n * When true (default) renders a fullscreen-expand icon in the title strip;\n * clicking pops the same body content into a fullscreen Modal. Set false for\n * tiny cards where fullscreen adds nothing.\n */\n expandable?: boolean;\n}\n\n/**\n * Terminal-window framed card — title strip (terminal dots) + optional refresh\n * timestamp/actions + body. The canonical dashboard/cockpit panel. Expandable\n * by default: surfaces an expand icon that opens the same body in a fullscreen\n * Modal.\n */\nexport function Card({\n id,\n title,\n subtitle,\n refreshedAt,\n actions,\n children,\n className,\n tone = \"default\",\n expandable = true,\n}: CardProps) {\n const [expanded, setExpanded] = useState(false);\n\n const toneClass =\n tone === \"warning\"\n ? \"border-warning/60\"\n : tone === \"destructive\"\n ? \"border-destructive/60\"\n : tone === \"muted\"\n ? \"border-border opacity-90\"\n : \"border-border\";\n\n return (\n <>\n <section\n id={id}\n className={cn(\n \"terminal flex flex-col rounded-sm border scroll-mt-16\",\n toneClass,\n className,\n )}\n >\n <div className=\"terminal-title flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"terminal-dot\" aria-hidden />\n <span className=\"terminal-dot opacity-70\" aria-hidden />\n <span className=\"terminal-dot opacity-50\" aria-hidden />\n {/* Shrink priority, not equal shrink. Both spans truncate, so with\n the default flex-shrink:1 a narrow card (any two-column grid)\n clipped the TITLE first — \"§ settlement · t…\" — losing the one\n word that says what the panel is while keeping a subtitle nobody\n can read either. The subtitle now absorbs ~100× the squeeze, so\n it collapses fully before the title gives up a character. */}\n <span className=\"ml-2 truncate [flex-shrink:1]\">{title}</span>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 min-w-0 truncate text-[10px] tracking-normal normal-case [flex-shrink:100]\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {refreshedAt && (\n <span className=\"text-muted-foreground/60 hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n )}\n {actions}\n {expandable && (\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n aria-label={`expand ${title}`}\n title=\"expand to fullscreen\"\n className=\"text-muted-foreground/70 hover:text-foreground inline-flex h-6 w-6 items-center justify-center rounded-sm\"\n >\n <Maximize2 className=\"size-3\" />\n </button>\n )}\n </div>\n </div>\n <div className=\"flex-1 p-4 sm:p-5\">{children}</div>\n </section>\n\n {expandable && (\n <Modal\n open={expanded}\n onOpenChange={setExpanded}\n title={title}\n {...(subtitle ? { subtitle } : {})}\n actions={\n refreshedAt ? (\n <span className=\"text-muted-foreground/60 hidden text-[10px] tracking-normal normal-case sm:inline\">\n {refreshedAt}\n </span>\n ) : null\n }\n >\n {children}\n </Modal>\n )}\n </>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface SparklineProps {\n data: ReadonlyArray<number>;\n width?: number;\n height?: number;\n className?: string;\n /** Render a soft area-fill under the line. */\n area?: boolean;\n}\n\n/**\n * Tiny inline SVG sparkline. No library — keeps the bundle small and the look\n * consistent with the cypherpunk family aesthetic. Degenerates gracefully to a\n * flat line for empty/single-point data.\n */\nexport function Sparkline({ data, width = 96, height = 24, area = false, className }: SparklineProps) {\n if (data.length === 0) {\n return (\n <svg width={width} height={height} className={cn(className)} aria-hidden>\n <line\n x1={0}\n x2={width}\n y1={height / 2}\n y2={height / 2}\n stroke=\"currentColor\"\n strokeWidth={1}\n opacity={0.25}\n />\n </svg>\n );\n }\n\n const min = Math.min(...data);\n const max = Math.max(...data);\n const range = max - min || 1;\n const step = data.length === 1 ? width : width / (data.length - 1);\n\n const points = data.map((v, i) => {\n const x = i * step;\n const y = height - ((v - min) / range) * (height - 2) - 1;\n return [x, y] as const;\n });\n\n const linePath = points\n .map(([x, y], i) => `${i === 0 ? 'M' : 'L'}${x.toFixed(2)},${y.toFixed(2)}`)\n .join(' ');\n\n const areaPath = area\n ? `${linePath} L${width.toFixed(2)},${height.toFixed(2)} L0,${height.toFixed(2)} Z`\n : null;\n\n return (\n <svg\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n className={cn('text-primary', className)}\n aria-hidden\n >\n {areaPath && <path d={areaPath} fill=\"currentColor\" opacity={0.12} />}\n <path d={linePath} fill=\"none\" stroke=\"currentColor\" strokeWidth={1.25} />\n </svg>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface StatBlockProps {\n label: string;\n value: ReactNode;\n sub?: ReactNode;\n /** Optional \"vs prior period\" delta — arrow + colour. */\n delta?: { value: number; suffix?: string } | null;\n tone?: 'default' | 'success' | 'warning' | 'destructive';\n className?: string;\n}\n\n/**\n * A single labelled value cell — the building block for every counter grid in a\n * dashboard. Optional delta arrow + colour for period-over-period deltas.\n * (Richer than StatTile: carries a delta. Use StatGrid for laid-out grids.)\n */\nexport function StatBlock({ label, value, sub, delta, tone = 'default', className }: StatBlockProps) {\n const toneClass =\n tone === 'success'\n ? 'text-success'\n : tone === 'warning'\n ? 'text-warning'\n : tone === 'destructive'\n ? 'text-destructive'\n : 'text-foreground';\n\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <span className=\"label-mono text-muted-foreground text-[10px]\">{label}</span>\n <span\n className={cn(\n 'font-display text-2xl font-bold tracking-tight tabular-nums',\n toneClass\n )}\n >\n {value}\n </span>\n <div className=\"flex items-baseline gap-2\">\n {sub && (\n <span className=\"text-muted-foreground font-mono text-[11px] tracking-wide lowercase\">\n {sub}\n </span>\n )}\n {delta && (\n <span\n className={cn(\n 'font-mono text-[11px] tracking-wide',\n delta.value > 0\n ? 'text-success'\n : delta.value < 0\n ? 'text-destructive'\n : 'text-muted-foreground'\n )}\n >\n {delta.value > 0 ? '▲' : delta.value < 0 ? '▼' : '·'}{' '}\n {Math.abs(delta.value).toFixed(1)}\n {delta.suffix ?? '%'}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import { cn } from '../tokens/cn';\n\nexport interface BarProps {\n /** 0–100; clamped. */\n pct: number;\n accent?: 'primary' | 'warning' | 'destructive' | 'success';\n label?: string;\n right?: string;\n className?: string;\n}\n\nconst ACCENT: Record<NonNullable<BarProps['accent']>, string> = {\n primary: 'bg-primary',\n warning: 'bg-warning',\n destructive: 'bg-destructive',\n success: 'bg-success',\n};\n\n/** Horizontal capacity/progress bar with optional label + right-aligned value. */\nexport function Bar({ pct, accent = 'primary', label, right, className }: BarProps) {\n const clamped = Math.max(0, Math.min(100, pct));\n return (\n <div className={cn(className)}>\n {(label || right) && (\n <div className=\"flex items-baseline justify-between font-mono text-[10.5px] tracking-widest uppercase\">\n {label && <span className=\"text-muted-foreground\">{label}</span>}\n {right && <span className=\"text-foreground tabular-nums\">{right}</span>}\n </div>\n )}\n <div className=\"bg-muted mt-1.5 h-1.5 w-full overflow-hidden\">\n <div className={cn('h-full', ACCENT[accent])} style={{ width: `${clamped}%` }} />\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport type StatusTone = 'success' | 'warning' | 'destructive' | 'muted' | 'primary' | 'info';\n\n/**\n * - `plain` (default): borderless, lowercase, tone-coloured text + optional icon.\n * - `bordered`: a bordered, uppercase badge (`border-{tone}/40 text-{tone}`) —\n * the variant www's StateBadge and me's\n * compliance/severity pills all hand-roll.\n */\nexport type StatusPillVariant = 'plain' | 'bordered';\n\nexport interface StatusPillProps {\n /** Status label (rendered lowercase in `plain`, uppercase in `bordered`). */\n label: string;\n tone?: StatusTone;\n variant?: StatusPillVariant;\n /** `bordered` only: add a `bg-{tone}/10` fill for at-a-glance emphasis on\n * dense dashboards (me's compliance/severity pills). Ignored when `plain`. */\n filled?: boolean;\n /** Optional leading icon (e.g. a lucide icon sized size-3). */\n icon?: ReactNode;\n className?: string;\n}\n\nconst TONE: Record<StatusTone, string> = {\n success: 'text-success',\n warning: 'text-warning',\n destructive: 'text-destructive',\n muted: 'text-muted-foreground',\n primary: 'text-primary',\n info: 'text-info',\n};\n\nconst BORDER_TONE: Record<StatusTone, string> = {\n success: 'border-success/40 text-success',\n warning: 'border-warning/40 text-warning',\n destructive: 'border-destructive/40 text-destructive',\n muted: 'border-muted-foreground/40 text-muted-foreground',\n primary: 'border-primary/40 text-primary',\n info: 'border-info/40 text-info',\n};\n\nconst FILL_TONE: Record<StatusTone, string> = {\n success: 'bg-success/10',\n warning: 'bg-warning/10',\n destructive: 'bg-destructive/10',\n muted: 'bg-muted/30',\n primary: 'bg-primary/10',\n info: 'bg-info/10',\n};\n\n/**\n * Generic state pill — the canonical form of the per-domain status pills that\n * me (compliance/severity) and others reimplement.\n * Apps map their domain status → { tone, label, icon }; this renders it\n * consistently. Two variants: `plain` (borderless lowercase) and `bordered`\n * (uppercase badge with a tone-tinted border).\n */\nexport function StatusPill({\n label,\n tone = 'muted',\n variant = 'plain',\n filled = false,\n icon,\n className,\n}: StatusPillProps) {\n if (variant === 'bordered') {\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 border px-1.5 py-0.5 font-mono text-[9px] tracking-widest uppercase',\n BORDER_TONE[tone],\n filled && FILL_TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n }\n return (\n <span\n className={cn(\n 'inline-flex items-center gap-1.5 font-mono text-[11px] tracking-wider lowercase',\n TONE[tone],\n className\n )}\n >\n {icon}\n {label}\n </span>\n );\n}\n\n/** One status → presentation entry. `label` defaults to the status key. */\nexport interface StatusPillSpec {\n tone: StatusTone;\n label?: string;\n icon?: ReactNode;\n}\n\n/**\n * makeStatusPill — build a domain-specific status pill from a status→spec map.\n * This is the ergonomic that www\n * (StateBadge severity), and me (compliance/severity) each hand-roll. Instead\n * of re-deriving tone-class logic per site, declare the map once:\n *\n * const AgentStatusPill = makeStatusPill({\n * online: { tone: 'success' },\n * offline: { tone: 'destructive', label: 'down' },\n * pending: { tone: 'warning' },\n * });\n * <AgentStatusPill status={agent.status} />\n *\n * Pass `{ variant: 'bordered' }` for the uppercase-badge form (pledge\n * states, www state badges, me compliance/severity).\n */\nexport function makeStatusPill<S extends string>(\n map: Record<S, StatusPillSpec>,\n options?: { variant?: StatusPillVariant; filled?: boolean; fallbackTone?: StatusTone }\n): (props: { status: S; className?: string }) => ReactNode {\n const variant = options?.variant ?? 'plain';\n const filled = options?.filled ?? false;\n const fallbackTone = options?.fallbackTone ?? 'muted';\n function DomainStatusPill({ status, className }: { status: S; className?: string }) {\n const spec = map[status];\n return (\n <StatusPill\n tone={spec?.tone ?? fallbackTone}\n label={spec?.label ?? status}\n icon={spec?.icon}\n filled={filled}\n variant={variant}\n className={className}\n />\n );\n }\n return DomainStatusPill;\n}\n","'use client';\n\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport * as React from 'react';\n\nimport { cn } from '../tokens/cn';\n\n/**\n * Tabs — accessible tabbed interface (Radix). Replaces the hand-rolled\n * `role=\"tablist\"` + manual `useState` toggles found in vault settings, the\n * www dashboard, me's SnippetCard, attest's CodeTabs, and others. Keyboard\n * nav, roving tabindex, and ARIA wiring come from Radix; the OC look (mono,\n * underline-on-active) is layered on top.\n */\nfunction Tabs({ ...props }: React.ComponentProps<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" {...props} />;\n}\n\nfunction TabsList({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n // A tab row is `flex`; a long set of triggers would overflow the page\n // horizontally on narrow screens. `flex-wrap` lets it wrap to a second\n // line instead. NOT `overflow-x-auto` — that forces overflow-y:auto,\n // which clips the active trigger's -mb-px/border-b-2 underline.\n className={cn(\n 'border-border -mb-px flex flex-wrap items-center gap-6 border-b',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n 'text-muted-foreground hover:text-foreground data-[state=active]:text-primary data-[state=active]:border-primary -mb-px border-b-2 border-transparent py-2 font-mono text-[11px] tracking-widest uppercase transition-colors outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n );\n}\n\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn('mt-4 outline-none', className)}\n {...props}\n />\n );\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","/**\n * @orangecheck/design/format — Bitcoin/money display + formatting utilities.\n *\n * Presentational only. Lifted from the canonical implementations across the\n * family (oc-me-web's utils, oc-vault-web's billing) and standardized so every\n * site formats sats, prices, addresses, and times identically. NOTE: crypto\n * (BIP-322 signing, bech32 validation) deliberately does NOT live here — that\n * belongs in a bitcoin/crypto library, not the design system.\n *\n * Includes the `useSpotPrice` React hook for live BTC/USD display. The hook\n * fetches a consumer-hosted endpoint — see `use-spot-price.ts` for the\n * one-route-per-consumer contract.\n */\n\nexport { useSpotPrice, type SpotPrice, type UseSpotPriceOptions } from './use-spot-price';\n\n/** Reference BTC/USD rate for sats↔USD display. Override per call when a live\n * rate is available; this is a display affordance, not a price oracle. */\nexport const REFERENCE_BTC_USD = 95_000;\n\n/** Format a satoshi integer as a thousands-separated string (\"12,408\"). */\nexport function formatSats(sats: number): string {\n return new Intl.NumberFormat('en-US').format(Math.round(sats));\n}\n\n/** Compact sats for buttons/chips: \"7k sats\", \"1.5k sats\", \"999 sats\". */\nexport function formatSatsCompact(sats: number): string {\n const n = Math.round(sats);\n if (n < 1000) return `${n} sats`;\n const k = n / 1000;\n return `${Number.isInteger(k) ? k : k.toFixed(1)}k sats`;\n}\n\n/** Convert sats to a USD currency string using the reference (or given) rate. */\nexport function satsToUsd(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n const usd = (sats / 100_000_000) * btcUsd;\n if (usd > 0 && usd < 0.01) return '< $0.01';\n // Whole dollars once >= $100, cents below. min must never exceed max.\n const fractionDigits = usd >= 100 ? 0 : 2;\n return new Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: fractionDigits,\n maximumFractionDigits: fractionDigits,\n }).format(usd);\n}\n\n/** Convert a USD amount to sats using the reference (or given) rate. */\nexport function usdToSats(usd: number, btcUsd: number = REFERENCE_BTC_USD): number {\n return Math.round((usd / btcUsd) * 100_000_000);\n}\n\n/** Both denominations as one label: \"7,000 sats · $6.65\". */\nexport function priceBoth(sats: number, btcUsd: number = REFERENCE_BTC_USD): string {\n return `${formatSats(sats)} sats · ${satsToUsd(sats, btcUsd)}`;\n}\n\n/**\n * \"as of HH:MM\" provenance footnote. Returns `null` for nullish or\n * unparseable input so callers can render nothing\n * (`{x && <span>{x}</span>}`) rather than gate on a magic empty\n * string. 24-hour, locale-aware. Pairs with `useSpotPrice().fetchedAt`\n * to caption a live-rate display.\n */\nexport function asOf(iso: string | null | undefined): string | null {\n if (!iso) return null;\n const t = new Date(iso);\n if (Number.isNaN(t.getTime())) return null;\n return `as of ${t.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n hour12: false,\n })}`;\n}\n\n/** Compact relative time — \"now\", \"3m ago\", \"2h ago\", \"4d ago\", or a date. */\nexport function relativeTime(when: string | number | Date): string {\n const t = when instanceof Date ? when.getTime() : new Date(when).getTime();\n if (Number.isNaN(t)) return '';\n const diff = Date.now() - t;\n const m = Math.floor(diff / 60_000);\n if (m < 1) return 'now';\n if (m < 60) return `${m}m ago`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h}h ago`;\n const d = Math.floor(h / 24);\n if (d < 30) return `${d}d ago`;\n const mo = Math.floor(d / 30);\n if (mo < 12) return `${mo}mo ago`;\n return `${Math.floor(mo / 12)}y ago`;\n}\n\n/**\n * Truncate a Bitcoin/Lightning address (or any long id) for display:\n * \"bc1qxy…wxyz\". Defaults match the family's most common rule (8 head / 4 tail).\n */\nexport function shortenAddress(value: string, head = 8, tail = 4): string {\n if (!value) return '';\n if (value.length <= head + tail + 1) return value;\n return `${value.slice(0, head)}…${value.slice(-tail)}`;\n}\n\nexport type ExplorerNetwork = 'mainnet' | 'testnet' | 'signet';\nexport type ExplorerTarget =\n | { address: string }\n | { tx: string }\n | { block: string | number };\n\n/** A mempool.space explorer URL for an address, tx, or block. */\nexport function explorerUrl(target: ExplorerTarget, network: ExplorerNetwork = 'mainnet'): string {\n const base =\n network === 'mainnet'\n ? 'https://mempool.space'\n : `https://mempool.space/${network}`;\n if ('address' in target) return `${base}/address/${target.address}`;\n if ('tx' in target) return `${base}/tx/${target.tx}`;\n return `${base}/block/${target.block}`;\n}\n","import { cn } from '../tokens/cn';\nimport { formatSats, satsToUsd } from '../format';\n\nexport interface SatsAmountProps {\n sats: number;\n /** Show the \"sats\" unit. Default true. */\n unit?: boolean;\n /** Append a muted USD conversion. Default false. */\n usd?: boolean;\n /** Override the reference BTC/USD rate for the USD conversion. */\n btcUsd?: number;\n className?: string;\n}\n\n/**\n * Canonical sats display: thousands-grouped, monospace, optional \"sats\" unit and\n * a muted USD conversion. The one true way to render an amount of sats across\n * the family (replaces scattered formatSats() + inline markup).\n */\nexport function SatsAmount({ sats, unit = true, usd = false, btcUsd, className }: SatsAmountProps) {\n return (\n <span className={cn('font-mono tabular-nums', className)}>\n {formatSats(sats)}\n {unit && <span className=\"text-muted-foreground\"> sats</span>}\n {usd && (\n <span className=\"text-muted-foreground\">\n {' · '}\n {satsToUsd(sats, btcUsd)}\n </span>\n )}\n </span>\n );\n}\n","'use client';\n\nimport { Check, Copy } from 'lucide-react';\nimport { useCallback, useRef, useState } from 'react';\n\nimport { cn } from '../tokens/cn';\n\nexport interface CopyButtonProps {\n /** Text to copy. */\n value: string;\n /** Optional visible label beside the icon. */\n label?: string;\n /**\n * Auto-wipe the clipboard after N seconds if it still holds `value`\n * (secrets-manager behaviour, à la 1Password). 0/undefined = never wipe.\n */\n clearAfter?: number;\n size?: 'sm' | 'md';\n className?: string;\n title?: string;\n onCopied?: () => void;\n}\n\n/**\n * Copy-to-clipboard control with \"copied\" feedback and optional auto-wipe.\n * Canonical form of the copy buttons scattered across the family (wallet\n * panels, address displays, share sheets, secret reveals).\n */\nexport function CopyButton({\n value,\n label,\n clearAfter,\n size = 'md',\n className,\n title,\n onCopied,\n}: CopyButtonProps) {\n const [copied, setCopied] = useState(false);\n const resetRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const copy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(value);\n setCopied(true);\n onCopied?.();\n if (resetRef.current) clearTimeout(resetRef.current);\n resetRef.current = setTimeout(() => setCopied(false), 1500);\n if (clearAfter && clearAfter > 0) {\n setTimeout(() => void wipeIfUnchanged(value), clearAfter * 1000);\n }\n } catch {\n /* clipboard unavailable — no-op */\n }\n }, [value, clearAfter, onCopied]);\n\n const iconSize = size === 'sm' ? 'size-3' : 'size-3.5';\n\n return (\n <button\n type=\"button\"\n onClick={copy}\n aria-label={title ?? (copied ? 'copied' : 'copy')}\n title={title ?? 'copy'}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex items-center gap-1.5 rounded-sm transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n size === 'sm' ? 'text-[11px]' : 'text-xs',\n className\n )}\n >\n {copied ? (\n <Check className={cn(iconSize, 'text-success')} aria-hidden />\n ) : (\n <Copy className={iconSize} aria-hidden />\n )}\n {label && <span className=\"font-mono\">{copied ? 'copied' : label}</span>}\n </button>\n );\n}\n\nasync function wipeIfUnchanged(expected: string): Promise<void> {\n try {\n const current = await navigator.clipboard.readText();\n if (current !== expected) return;\n await navigator.clipboard.writeText('');\n } catch {\n try {\n await navigator.clipboard.writeText('');\n } catch {\n /* clipboard fully unavailable */\n }\n }\n}\n","import { cn } from '../tokens/cn';\nimport { shortenAddress } from '../format';\nimport { CopyButton } from './copy-button';\n\nexport interface BitcoinAddressProps {\n /** The full address (or any long id — Lightning, npub, did). */\n address: string;\n head?: number;\n tail?: number;\n /** Show a copy button that copies the FULL address. Default true. */\n copyable?: boolean;\n /** Render the full value untruncated. */\n full?: boolean;\n className?: string;\n}\n\n/**\n * Canonical truncated address display: monospace, `bc1qxy…wxyz`, with a copy\n * button that copies the full value. Replaces the per-site inline truncate+copy\n * patterns (IdentityChip, wallet panels, admin lists).\n */\nexport function BitcoinAddress({\n address,\n head = 8,\n tail = 4,\n copyable = true,\n full = false,\n className,\n}: BitcoinAddressProps) {\n return (\n <span className={cn('inline-flex items-center gap-1.5 font-mono text-xs', className)}>\n <span title={address}>{full ? address : shortenAddress(address, head, tail)}</span>\n {copyable && <CopyButton value={address} size=\"sm\" title=\"copy address\" />}\n </span>\n );\n}\n","'use client';\n\nimport { useEffect, useState } from 'react';\nimport QRCode from 'qrcode';\n\nexport interface QrCodeProps {\n /** String to encode — Lightning invoices, BTC addresses, BIP-21 URIs all work. */\n value: string;\n /** Pixel size of the rendered SVG. Default 200. */\n size?: number;\n /** Accessible label for screen readers. */\n label?: string;\n className?: string;\n}\n\n/**\n * Client-side QR renderer (inline SVG via the `qrcode` package — no canvas, no\n * data-URI). Renders nothing during SSR; encodes on mount. Wrapped in role=\"img\"\n * with the supplied label. White quiet-zone background for reliable scanning in\n * any theme/mode.\n */\nexport function QrCode({ value, size = 200, label, className }: QrCodeProps) {\n const [svg, setSvg] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n QRCode.toString(value, {\n type: 'svg',\n errorCorrectionLevel: 'M',\n margin: 1,\n color: { dark: '#000000', light: '#ffffff' },\n })\n .then((out) => {\n if (!cancelled) setSvg(out);\n })\n .catch(() => {\n if (!cancelled) setSvg(null);\n });\n return () => {\n cancelled = true;\n };\n }, [value]);\n\n return (\n <div\n role=\"img\"\n aria-label={label ?? `QR code for ${value.slice(0, 24)}…`}\n className={'inline-block overflow-hidden rounded-md bg-white p-3 ' + (className ?? '')}\n style={{ width: size, height: size }}\n >\n {svg ? (\n <div\n className=\"size-full [&_svg]:block [&_svg]:size-full\"\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n ) : (\n <div className=\"bg-muted/40 size-full animate-pulse rounded\" aria-hidden />\n )}\n </div>\n );\n}\n"]}
|