@orangecheck/design 0.7.5 → 0.7.6
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/format.d.mts +12 -1
- package/dist/format.d.ts +12 -1
- package/dist/format.js +48 -0
- package/dist/format.js.map +1 -1
- package/dist/format.mjs +47 -1
- package/dist/format.mjs.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +43 -1
- package/dist/index.mjs.map +1 -1
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs.map +1 -1
- package/package.json +2 -2
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/accordion.tsx","../src/primitives/select.tsx","../src/primitives/toaster.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","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 },\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-brand border-brand-soft',\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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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-brand/25 dark:aria-invalid:ring-brand/35',\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\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-xs leading-relaxed shadow-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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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 <div className=\"flex 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\">{title}</DialogPrimitive.Title>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 truncate text-[10px] normal-case tracking-normal\">\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 AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown } 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>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180',\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\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","'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('terminal flex flex-col rounded-sm border scroll-mt-16', toneClass, className)}\n >\n <div className=\"terminal-title flex items-center justify-between gap-3\">\n <div className=\"flex 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 <span className=\"ml-2 truncate\">{title}</span>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 truncate text-[10px] tracking-normal normal-case\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex 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-[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 className={cn('border-border -mb-px flex items-center gap-6 border-b', className)}\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\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/** 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/accordion.tsx","../src/primitives/select.tsx","../src/primitives/toaster.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","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 },\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-brand border-brand-soft',\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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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-brand/25 dark:aria-invalid:ring-brand/35',\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\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-xs leading-relaxed shadow-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-brand/25 dark:aria-invalid:ring-brand/35 aria-invalid:border-brand',\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 <div className=\"flex 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\">{title}</DialogPrimitive.Title>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 truncate text-[10px] normal-case tracking-normal\">\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 AccordionPrimitive from '@radix-ui/react-accordion';\nimport { ChevronDown } 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>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180',\n className\n )}\n {...props}\n >\n {children}\n <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\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","'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('terminal flex flex-col rounded-sm border scroll-mt-16', toneClass, className)}\n >\n <div className=\"terminal-title flex items-center justify-between gap-3\">\n <div className=\"flex 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 <span className=\"ml-2 truncate\">{title}</span>\n {subtitle && (\n <span className=\"text-muted-foreground/70 ml-1 truncate text-[10px] tracking-normal normal-case\">\n · {subtitle}\n </span>\n )}\n </div>\n <div className=\"flex 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-[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 className={cn('border-border -mb-px flex items-center gap-6 border-b', className)}\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"]}
|