@orangecheck/design 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/format.d.mts +19 -0
- package/dist/format.d.ts +19 -0
- package/dist/format.js +68 -0
- package/dist/format.js.map +1 -0
- package/dist/format.mjs +58 -0
- package/dist/format.mjs.map +1 -0
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +490 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +471 -3
- package/dist/index.mjs.map +1 -1
- package/dist/primitives.d.mts +92 -1
- package/dist/primitives.d.ts +92 -1
- package/dist/primitives.js +319 -0
- package/dist/primitives.js.map +1 -1
- package/dist/primitives.mjs +310 -3
- package/dist/primitives.mjs.map +1 -1
- package/dist/tokens.d.mts +8 -1
- package/dist/tokens.d.ts +8 -1
- package/dist/tokens.js +110 -0
- package/dist/tokens.js.map +1 -1
- package/dist/tokens.mjs +111 -2
- package/dist/tokens.mjs.map +1 -1
- package/package.json +8 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/tokens/cn.ts","../src/tokens/themes.ts","../src/tokens/provider.tsx","../src/tokens/theme-bridge.tsx","../src/tokens/theme-picker.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/label.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/components/index.ts"],"names":["ONE_YEAR","useRef","useEffect","useState","jsx","cva","Slot","Icon","jsxs","useTheme","React","SheetPrimitive","useCallback","Dialog2","NODE_ENV","pending","notifyHost","hostMountCount","Dialog3","DialogPrimitive2","X","Sonner"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @orangecheck/design\n *\n * The OrangeCheck design system: multi-theme tokens, primitives, and family\n * composites for the .ochk.io sub-sites. Family-internal — for embeddable\n * OrangeCheck components see @orangecheck/react.\n *\n * Import the CSS once in your app's globals:\n * @import '@orangecheck/design/styles.css';\n *\n * Subpath entries are also available: `@orangecheck/design/tokens`,\n * `/primitives`, `/components`.\n */\nexport * from './tokens';\nexport * from './primitives';\nexport * from './components';\n","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","/**\n * The OrangeCheck theme (skin) registry.\n *\n * A *skin* is the named-theme axis, orthogonal to the light/dark *mode* axis\n * (which stays owned by `next-themes` via the `.dark` class). A skin is applied\n * as `data-oc-theme=\"<id>\"` on `<html>` and persisted in the `oc_skin` cookie at\n * `Domain=.ochk.io` so a choice on one family site carries to every other.\n *\n * Adding a skin = add a `themes/<id>.css` token block in this package and a\n * row here. Every site picks it up on the next `@orangecheck/design` bump; no\n * per-site edits.\n */\nexport interface OcTheme {\n /** Stable id — also the `data-oc-theme` attribute value and the CSS file stem. */\n readonly id: string;\n /** Human label for the picker (lowercase, house voice). */\n readonly label: string;\n /** One-line description shown in the picker / Storybook. */\n readonly description: string;\n}\n\n// Every skin is rooted in the Bitcoin ethos — sharp, flat, cypherpunk — and\n// carries a meaning, not just a colour: the chain, the node, the network, sound\n// money. No SaaS softness.\nexport const OC_THEMES: readonly OcTheme[] = [\n {\n id: 'orangecheck',\n label: 'orangecheck',\n description: 'the chain — Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono',\n },\n {\n id: 'phosphor',\n label: 'phosphor',\n description: 'the node — CRT terminal green, hard 0.125rem, all-mono · sovereignty & verify',\n },\n {\n id: 'lightning',\n label: 'lightning',\n description: 'the network — electric violet (L2), hardest 0rem edges, sans · instant',\n },\n {\n id: 'gold',\n label: 'gold',\n description: 'sound money — digital gold, hard 0.125rem milled edge, mono ledger · 21M',\n },\n] as const;\n\nexport const DEFAULT_OC_THEME = 'orangecheck';\n\nexport type OcThemeId = (typeof OC_THEMES)[number]['id'] | (string & {});\n\nexport function isKnownTheme(id: string | null | undefined): id is OcThemeId {\n return !!id && OC_THEMES.some((t) => t.id === id);\n}\n\nexport function resolveTheme(id: string | null | undefined): string {\n return isKnownTheme(id) ? id : DEFAULT_OC_THEME;\n}\n\n/** Cookie name for the cross-subdomain skin choice. */\nexport const OC_SKIN_COOKIE = 'oc_skin';\n","'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n DEFAULT_OC_THEME,\n OC_SKIN_COOKIE,\n OC_THEMES,\n resolveTheme,\n type OcTheme,\n} from './themes';\n\n/**\n * OcThemeProvider — the skin (named-theme) axis.\n *\n * Orthogonal to `next-themes`, which owns light/dark via the `.dark` class.\n * This provider owns the `data-oc-theme` attribute on `<html>` and persists the\n * choice in the `oc_skin` cookie at `Domain=.ochk.io`, so a skin chosen on one\n * `*.ochk.io` site is honored on every other. It re-reads the cookie on focus /\n * visibility change so a fresh choice picks up when the user returns to a tab\n * (same cross-site pickup trick `OcAccountMenu` uses for sign-in).\n *\n * Mount once, inside (or beside) the `next-themes` `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeProvider>\n * …app…\n * </OcThemeProvider>\n * </ThemeProvider>\n *\n * Pair with `getOcThemeInitScript()` in `_document` to avoid a flash before\n * hydration.\n */\n\nconst ONE_YEAR = 60 * 60 * 24 * 365;\nconst ATTR = 'data-oc-theme';\n\nfunction readSkinCookie(): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${OC_SKIN_COOKIE}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeSkinCookie(value: string): void {\n if (typeof document === 'undefined') return;\n const isLocal =\n location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${OC_SKIN_COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nfunction applyAttr(skin: string): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(ATTR, skin);\n}\n\ninterface OcSkinContextValue {\n /** Current skin id (always resolved to a known theme). */\n skin: string;\n /** Set the skin: validates, applies the attribute, persists the cookie. */\n setSkin: (id: string) => void;\n /** The full registry, for rendering a picker. */\n themes: readonly OcTheme[];\n}\n\nconst OcSkinContext = createContext<OcSkinContextValue | null>(null);\n\nexport interface OcThemeProviderProps {\n children: ReactNode;\n /** Skin to assume before the cookie is read (defaults to `orangecheck`). */\n defaultSkin?: string;\n}\n\nexport function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }: OcThemeProviderProps) {\n const [skin, setSkinState] = useState<string>(() => resolveTheme(defaultSkin));\n const hydratedRef = useRef(false);\n\n // Hydrate from the cookie once on mount and align the attribute.\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const fromCookie = resolveTheme(readSkinCookie() ?? defaultSkin);\n applyAttr(fromCookie);\n setSkinState(fromCookie);\n }, [defaultSkin]);\n\n // Cross-site pickup: re-read the cookie when the tab regains focus.\n useEffect(() => {\n function sync() {\n const fromCookie = resolveTheme(readSkinCookie() ?? skin);\n if (fromCookie !== skin) {\n applyAttr(fromCookie);\n setSkinState(fromCookie);\n }\n }\n window.addEventListener('focus', sync);\n document.addEventListener('visibilitychange', sync);\n return () => {\n window.removeEventListener('focus', sync);\n document.removeEventListener('visibilitychange', sync);\n };\n }, [skin]);\n\n const setSkin = useCallback((id: string) => {\n const next = resolveTheme(id);\n applyAttr(next);\n writeSkinCookie(next);\n setSkinState(next);\n }, []);\n\n const value = useMemo<OcSkinContextValue>(\n () => ({ skin, setSkin, themes: OC_THEMES }),\n [skin, setSkin]\n );\n\n return <OcSkinContext.Provider value={value}>{children}</OcSkinContext.Provider>;\n}\n\n/** Read the current skin + setter. Throws if used outside `OcThemeProvider`. */\nexport function useOcSkin(): OcSkinContextValue {\n const ctx = useContext(OcSkinContext);\n if (!ctx) {\n throw new Error('useOcSkin must be used within <OcThemeProvider>');\n }\n return ctx;\n}\n\n/**\n * Blocking init script for `_document` (Pages Router) `<Head>`. Applies the\n * cookie's skin to `<html>` before first paint so there is no flash of the\n * default skin. Inject with:\n *\n * <script dangerouslySetInnerHTML={{ __html: getOcThemeInitScript() }} />\n */\nexport function getOcThemeInitScript(defaultSkin: string = DEFAULT_OC_THEME): string {\n // Self-contained IIFE — no imports available at parse time.\n return `(function(){try{var m=document.cookie.match(/(?:^|; )${OC_SKIN_COOKIE}=([^;]*)/);var s=m?decodeURIComponent(m[1]):'${defaultSkin}';if(!s){s='${defaultSkin}';}document.documentElement.setAttribute('${ATTR}',s);}catch(e){document.documentElement.setAttribute('${ATTR}','${defaultSkin}');}})();`;\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useTheme } from 'next-themes';\n\n/**\n * OcThemeBridge — cross-subdomain persistence for the MODE axis (light/dark).\n *\n * `next-themes` defaults to origin-scoped `localStorage`, so a dark/light choice\n * on one `*.ochk.io` site won't carry to another. This layers an\n * `oc_theme` cookie at `Domain=.ochk.io` on top so the choice is visible\n * family-wide. (The SKIN axis has its own `oc_skin` bridge inside\n * `OcThemeProvider`; this is the mode counterpart, previously duplicated in\n * every consumer repo.)\n *\n * Mount once inside the next-themes `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeBridge />\n * <OcThemeProvider>…</OcThemeProvider>\n * </ThemeProvider>\n *\n * The cookie is intentionally non-HttpOnly (next-themes JS reads/writes it) and\n * carries no auth value — a leak only reveals a theme preference.\n */\nconst COOKIE = 'oc_theme';\nconst ALLOWED = new Set(['light', 'dark', 'system']);\nconst ONE_YEAR = 60 * 60 * 24 * 365;\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${name}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeCookie(value: string): void {\n if (typeof document === 'undefined') return;\n if (!ALLOWED.has(value)) return;\n const isLocal = location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nexport function OcThemeBridge() {\n const { theme, setTheme } = useTheme();\n const hydratedRef = useRef(false);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const cookieValue = readCookie(COOKIE);\n if (cookieValue && ALLOWED.has(cookieValue) && cookieValue !== theme) {\n setTheme(cookieValue);\n }\n }, [theme, setTheme]);\n\n useEffect(() => {\n if (!hydratedRef.current) return;\n if (!theme) return;\n writeCookie(theme);\n }, [theme]);\n\n return null;\n}\n","'use client';\n\nimport { Check, Palette } from 'lucide-react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from './cn';\nimport { useOcSkin } from './provider';\n\n/**\n * OcThemePicker — the skin selector. Sits beside `ThemeToggle` in the header.\n * Self-contained dropdown (no Radix): outside-click + Escape to close. Mirrors\n * the ghost-icon affordance of `ThemeToggle`. Gate its mount behind\n * `NEXT_PUBLIC_OC_THEME_PICKER` during staged rollout.\n */\nexport interface OcThemePickerProps {\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport function OcThemePicker({ className, triggerClassName, popoverClassName }: OcThemePickerProps) {\n const { skin, setSkin, themes } = useOcSkin();\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn('relative', className)}>\n <button\n type=\"button\"\n aria-label=\"choose theme\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"choose theme\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex size-9 items-center justify-center rounded-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n triggerClassName\n )}\n >\n <Palette className=\"size-4\" aria-hidden />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className={cn(\n 'bg-popover text-popover-foreground absolute right-0 z-50 mt-2 w-64 overflow-hidden rounded-md border shadow-md',\n popoverClassName\n )}\n >\n <div className=\"label-mono text-muted-foreground px-3 pt-3 pb-1\">theme</div>\n <ul className=\"pb-1\">\n {themes.map((t) => {\n const active = t.id === skin;\n return (\n <li key={t.id}>\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => {\n setSkin(t.id);\n setOpen(false);\n }}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-start gap-2 px-3 py-2 text-left transition-colors',\n active && 'text-foreground'\n )}\n >\n <span className=\"mt-0.5 size-4 shrink-0\">\n {active && <Check className=\"size-4 text-primary\" aria-hidden />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{t.label}</span>\n <span className=\"text-muted-foreground block text-xs leading-snug\">\n {t.description}\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\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 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","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 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 fallback?: (error: Error, reset: () => void) => React.ReactNode;\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 // Intentional: we swallow here. In production this would wire to\n // Sentry or similar.\n console.error('[ErrorBoundary]', 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 ! 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 {'> '}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 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 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 SheetContent,\n SheetDescription,\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\">\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","/**\n * Family composites.\n *\n * These are re-exported from `@orangecheck/ui`, which remains the source of\n * truth for the OrangeCheck composite layer (OcLogoDropdown, OcAccountMenu,\n * OcPrimaryNav, dashboard shells, FAMILY_PROPERTIES, …). `@orangecheck/design`\n * surfaces them here so consumers have a single import surface for the whole\n * design system, while the composites continue to version independently.\n */\nexport * from '@orangecheck/ui';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/tokens/cn.ts","../src/tokens/themes.ts","../src/tokens/provider.tsx","../src/tokens/theme-bridge.tsx","../src/tokens/theme-picker.tsx","../src/tokens/appearance-menu.tsx","../src/primitives/button.tsx","../src/primitives/badge.tsx","../src/primitives/input.tsx","../src/primitives/label.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/format/index.ts","../src/primitives/sats-amount.tsx","../src/primitives/copy-button.tsx","../src/primitives/bitcoin-address.tsx","../src/primitives/qr-code.tsx","../src/components/index.ts"],"names":["ONE_YEAR","useRef","useEffect","useState","jsx","useTheme","jsxs","Palette","Icon","Check","cva","Slot","Sun","Moon","React","SheetPrimitive","useCallback","Dialog2","NODE_ENV","pending","notifyHost","hostMountCount","Dialog3","DialogPrimitive2","X","Sonner"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @orangecheck/design\n *\n * The OrangeCheck design system: multi-theme tokens, primitives, and family\n * composites for the .ochk.io sub-sites. Family-internal — for embeddable\n * OrangeCheck components see @orangecheck/react.\n *\n * Import the CSS once in your app's globals:\n * @import '@orangecheck/design/styles.css';\n *\n * Subpath entries are also available: `@orangecheck/design/tokens`,\n * `/primitives`, `/components`.\n */\nexport * from './tokens';\nexport * from './primitives';\nexport * from './components';\nexport * from './format';\n","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","/**\n * The OrangeCheck theme (skin) registry.\n *\n * A *skin* is the named-theme axis, orthogonal to the light/dark *mode* axis\n * (which stays owned by `next-themes` via the `.dark` class). A skin is applied\n * as `data-oc-theme=\"<id>\"` on `<html>` and persisted in the `oc_skin` cookie at\n * `Domain=.ochk.io` so a choice on one family site carries to every other.\n *\n * Adding a skin = add a `themes/<id>.css` token block in this package and a\n * row here. Every site picks it up on the next `@orangecheck/design` bump; no\n * per-site edits.\n */\nexport interface OcTheme {\n /** Stable id — also the `data-oc-theme` attribute value and the CSS file stem. */\n readonly id: string;\n /** Human label for the picker (lowercase, house voice). */\n readonly label: string;\n /** One-line description shown in the picker / Storybook. */\n readonly description: string;\n}\n\n// Every skin is rooted in the Bitcoin ethos — sharp, flat, cypherpunk — and\n// carries a meaning, not just a colour: the chain, the node, the network, sound\n// money. No SaaS softness.\nexport const OC_THEMES: readonly OcTheme[] = [\n {\n id: 'orangecheck',\n label: 'orangecheck',\n description: 'the chain — Bitcoin orange, sharp 0.25rem corners, Inter + JetBrains Mono',\n },\n {\n id: 'phosphor',\n label: 'phosphor',\n description: 'the node — CRT terminal green, hard 0.125rem, all-mono · sovereignty & verify',\n },\n {\n id: 'lightning',\n label: 'lightning',\n description: 'the network — electric violet (L2), hardest 0rem edges, sans · instant',\n },\n {\n id: 'gold',\n label: 'gold',\n description: 'sound money — digital gold, hard 0.125rem milled edge, mono ledger · 21M',\n },\n] as const;\n\nexport const DEFAULT_OC_THEME = 'orangecheck';\n\nexport type OcThemeId = (typeof OC_THEMES)[number]['id'] | (string & {});\n\nexport function isKnownTheme(id: string | null | undefined): id is OcThemeId {\n return !!id && OC_THEMES.some((t) => t.id === id);\n}\n\nexport function resolveTheme(id: string | null | undefined): string {\n return isKnownTheme(id) ? id : DEFAULT_OC_THEME;\n}\n\n/** Cookie name for the cross-subdomain skin choice. */\nexport const OC_SKIN_COOKIE = 'oc_skin';\n","'use client';\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\n\nimport {\n DEFAULT_OC_THEME,\n OC_SKIN_COOKIE,\n OC_THEMES,\n resolveTheme,\n type OcTheme,\n} from './themes';\n\n/**\n * OcThemeProvider — the skin (named-theme) axis.\n *\n * Orthogonal to `next-themes`, which owns light/dark via the `.dark` class.\n * This provider owns the `data-oc-theme` attribute on `<html>` and persists the\n * choice in the `oc_skin` cookie at `Domain=.ochk.io`, so a skin chosen on one\n * `*.ochk.io` site is honored on every other. It re-reads the cookie on focus /\n * visibility change so a fresh choice picks up when the user returns to a tab\n * (same cross-site pickup trick `OcAccountMenu` uses for sign-in).\n *\n * Mount once, inside (or beside) the `next-themes` `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeProvider>\n * …app…\n * </OcThemeProvider>\n * </ThemeProvider>\n *\n * Pair with `getOcThemeInitScript()` in `_document` to avoid a flash before\n * hydration.\n */\n\nconst ONE_YEAR = 60 * 60 * 24 * 365;\nconst ATTR = 'data-oc-theme';\n\nfunction readSkinCookie(): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${OC_SKIN_COOKIE}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeSkinCookie(value: string): void {\n if (typeof document === 'undefined') return;\n const isLocal =\n location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${OC_SKIN_COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nfunction applyAttr(skin: string): void {\n if (typeof document === 'undefined') return;\n document.documentElement.setAttribute(ATTR, skin);\n}\n\ninterface OcSkinContextValue {\n /** Current skin id (always resolved to a known theme). */\n skin: string;\n /** Set the skin: validates, applies the attribute, persists the cookie. */\n setSkin: (id: string) => void;\n /** The full registry, for rendering a picker. */\n themes: readonly OcTheme[];\n}\n\nconst OcSkinContext = createContext<OcSkinContextValue | null>(null);\n\nexport interface OcThemeProviderProps {\n children: ReactNode;\n /** Skin to assume before the cookie is read (defaults to `orangecheck`). */\n defaultSkin?: string;\n}\n\nexport function OcThemeProvider({ children, defaultSkin = DEFAULT_OC_THEME }: OcThemeProviderProps) {\n const [skin, setSkinState] = useState<string>(() => resolveTheme(defaultSkin));\n const hydratedRef = useRef(false);\n\n // Hydrate from the cookie once on mount and align the attribute.\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const fromCookie = resolveTheme(readSkinCookie() ?? defaultSkin);\n applyAttr(fromCookie);\n setSkinState(fromCookie);\n }, [defaultSkin]);\n\n // Cross-site pickup: re-read the cookie when the tab regains focus.\n useEffect(() => {\n function sync() {\n const fromCookie = resolveTheme(readSkinCookie() ?? skin);\n if (fromCookie !== skin) {\n applyAttr(fromCookie);\n setSkinState(fromCookie);\n }\n }\n window.addEventListener('focus', sync);\n document.addEventListener('visibilitychange', sync);\n return () => {\n window.removeEventListener('focus', sync);\n document.removeEventListener('visibilitychange', sync);\n };\n }, [skin]);\n\n const setSkin = useCallback((id: string) => {\n const next = resolveTheme(id);\n applyAttr(next);\n writeSkinCookie(next);\n setSkinState(next);\n }, []);\n\n const value = useMemo<OcSkinContextValue>(\n () => ({ skin, setSkin, themes: OC_THEMES }),\n [skin, setSkin]\n );\n\n return <OcSkinContext.Provider value={value}>{children}</OcSkinContext.Provider>;\n}\n\n/** Read the current skin + setter. Throws if used outside `OcThemeProvider`. */\nexport function useOcSkin(): OcSkinContextValue {\n const ctx = useContext(OcSkinContext);\n if (!ctx) {\n throw new Error('useOcSkin must be used within <OcThemeProvider>');\n }\n return ctx;\n}\n\n/**\n * Blocking init script for `_document` (Pages Router) `<Head>`. Applies the\n * cookie's skin to `<html>` before first paint so there is no flash of the\n * default skin. Inject with:\n *\n * <script dangerouslySetInnerHTML={{ __html: getOcThemeInitScript() }} />\n */\nexport function getOcThemeInitScript(defaultSkin: string = DEFAULT_OC_THEME): string {\n // Self-contained IIFE — no imports available at parse time.\n return `(function(){try{var m=document.cookie.match(/(?:^|; )${OC_SKIN_COOKIE}=([^;]*)/);var s=m?decodeURIComponent(m[1]):'${defaultSkin}';if(!s){s='${defaultSkin}';}document.documentElement.setAttribute('${ATTR}',s);}catch(e){document.documentElement.setAttribute('${ATTR}','${defaultSkin}');}})();`;\n}\n","'use client';\n\nimport { useEffect, useRef } from 'react';\nimport { useTheme } from 'next-themes';\n\n/**\n * OcThemeBridge — cross-subdomain persistence for the MODE axis (light/dark).\n *\n * `next-themes` defaults to origin-scoped `localStorage`, so a dark/light choice\n * on one `*.ochk.io` site won't carry to another. This layers an\n * `oc_theme` cookie at `Domain=.ochk.io` on top so the choice is visible\n * family-wide. (The SKIN axis has its own `oc_skin` bridge inside\n * `OcThemeProvider`; this is the mode counterpart, previously duplicated in\n * every consumer repo.)\n *\n * Mount once inside the next-themes `<ThemeProvider>`:\n *\n * <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n * <OcThemeBridge />\n * <OcThemeProvider>…</OcThemeProvider>\n * </ThemeProvider>\n *\n * The cookie is intentionally non-HttpOnly (next-themes JS reads/writes it) and\n * carries no auth value — a leak only reveals a theme preference.\n */\nconst COOKIE = 'oc_theme';\nconst ALLOWED = new Set(['light', 'dark', 'system']);\nconst ONE_YEAR = 60 * 60 * 24 * 365;\n\nfunction readCookie(name: string): string | null {\n if (typeof document === 'undefined') return null;\n const prefix = `${name}=`;\n for (const part of document.cookie.split(';')) {\n const trimmed = part.trim();\n if (trimmed.startsWith(prefix)) {\n const v = decodeURIComponent(trimmed.slice(prefix.length));\n return v.length > 0 ? v : null;\n }\n }\n return null;\n}\n\nfunction writeCookie(value: string): void {\n if (typeof document === 'undefined') return;\n if (!ALLOWED.has(value)) return;\n const isLocal = location.hostname === 'localhost' || location.hostname === '127.0.0.1';\n const parts = [\n `${COOKIE}=${encodeURIComponent(value)}`,\n 'Path=/',\n `Max-Age=${ONE_YEAR}`,\n 'SameSite=Lax',\n ];\n if (!isLocal) {\n parts.push('Domain=.ochk.io');\n parts.push('Secure');\n }\n document.cookie = parts.join('; ');\n}\n\nexport function OcThemeBridge() {\n const { theme, setTheme } = useTheme();\n const hydratedRef = useRef(false);\n\n useEffect(() => {\n if (hydratedRef.current) return;\n hydratedRef.current = true;\n const cookieValue = readCookie(COOKIE);\n if (cookieValue && ALLOWED.has(cookieValue) && cookieValue !== theme) {\n setTheme(cookieValue);\n }\n }, [theme, setTheme]);\n\n useEffect(() => {\n if (!hydratedRef.current) return;\n if (!theme) return;\n writeCookie(theme);\n }, [theme]);\n\n return null;\n}\n","'use client';\n\nimport { Check, Palette } from 'lucide-react';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from './cn';\nimport { useOcSkin } from './provider';\n\n/**\n * OcThemePicker — the skin selector. Sits beside `ThemeToggle` in the header.\n * Self-contained dropdown (no Radix): outside-click + Escape to close. Mirrors\n * the ghost-icon affordance of `ThemeToggle`. Gate its mount behind\n * `NEXT_PUBLIC_OC_THEME_PICKER` during staged rollout.\n */\nexport interface OcThemePickerProps {\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nexport function OcThemePicker({ className, triggerClassName, popoverClassName }: OcThemePickerProps) {\n const { skin, setSkin, themes } = useOcSkin();\n const [open, setOpen] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n return (\n <div ref={rootRef} className={cn('relative', className)}>\n <button\n type=\"button\"\n aria-label=\"choose theme\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"choose theme\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex size-9 items-center justify-center rounded-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n triggerClassName\n )}\n >\n <Palette className=\"size-4\" aria-hidden />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className={cn(\n 'bg-popover text-popover-foreground absolute right-0 z-50 mt-2 w-64 overflow-hidden rounded-md border shadow-md',\n popoverClassName\n )}\n >\n <div className=\"label-mono text-muted-foreground px-3 pt-3 pb-1\">theme</div>\n <ul className=\"pb-1\">\n {themes.map((t) => {\n const active = t.id === skin;\n return (\n <li key={t.id}>\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => {\n setSkin(t.id);\n setOpen(false);\n }}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-start gap-2 px-3 py-2 text-left transition-colors',\n active && 'text-foreground'\n )}\n >\n <span className=\"mt-0.5 size-4 shrink-0\">\n {active && <Check className=\"size-4 text-primary\" aria-hidden />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{t.label}</span>\n <span className=\"text-muted-foreground block text-xs leading-snug\">\n {t.description}\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\n}\n","'use client';\n\nimport { Check, Monitor, Moon, Palette, Sun } from 'lucide-react';\nimport { useTheme } from 'next-themes';\nimport { useEffect, useRef, useState } from 'react';\n\nimport { cn } from './cn';\nimport { useOcSkin } from './provider';\n\n/**\n * OcAppearanceMenu — the single header control for ALL appearance settings.\n *\n * One icon button opens a dropdown with both axes:\n * • mode — light / dark / system (next-themes `.dark` class)\n * • theme — the registered skins (data-oc-theme, persisted .ochk.io)\n *\n * Replaces the separate `ThemeToggle` + `OcThemePicker` so every family site\n * carries exactly one appearance control. Self-contained dropdown (no Radix):\n * outside-click + Escape to close. Requires `<OcThemeProvider>` above it (skin\n * axis) and a next-themes `<ThemeProvider>` (mode axis) — both already mounted\n * on every family site.\n */\nexport interface OcAppearanceMenuProps {\n className?: string;\n triggerClassName?: string;\n popoverClassName?: string;\n}\n\nconst MODES = [\n { id: 'light', label: 'light', Icon: Sun },\n { id: 'dark', label: 'dark', Icon: Moon },\n { id: 'system', label: 'system', Icon: Monitor },\n] as const;\n\nexport function OcAppearanceMenu({\n className,\n triggerClassName,\n popoverClassName,\n}: OcAppearanceMenuProps) {\n const { skin, setSkin, themes } = useOcSkin();\n const { theme, setTheme } = useTheme();\n const [open, setOpen] = useState(false);\n const [mounted, setMounted] = useState(false);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => setMounted(true), []);\n\n useEffect(() => {\n if (!open) return;\n function onDown(e: MouseEvent) {\n if (rootRef.current && !rootRef.current.contains(e.target as Node)) setOpen(false);\n }\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', onDown);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', onDown);\n document.removeEventListener('keydown', onKey);\n };\n }, [open]);\n\n // Avoid a hydration mismatch: only reflect the active mode after mount.\n const activeMode = mounted ? (theme ?? 'system') : null;\n\n return (\n <div ref={rootRef} className={cn('relative', className)}>\n <button\n type=\"button\"\n aria-label=\"appearance settings\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n title=\"appearance · mode + theme\"\n onClick={() => setOpen((v) => !v)}\n className={cn(\n 'text-muted-foreground hover:text-foreground inline-flex size-9 items-center justify-center rounded-md transition-colors outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n triggerClassName\n )}\n >\n <Palette className=\"size-4\" aria-hidden />\n </button>\n\n {open && (\n <div\n role=\"menu\"\n className={cn(\n 'bg-popover text-popover-foreground absolute right-0 z-50 mt-2 w-64 overflow-hidden rounded-md border shadow-md',\n popoverClassName\n )}\n >\n {/* Mode — segmented light / dark / system */}\n <div className=\"label-mono text-muted-foreground px-3 pt-3 pb-2\">mode</div>\n <div className=\"grid grid-cols-3 gap-1 px-2 pb-2\">\n {MODES.map(({ id, label, Icon }) => {\n const active = activeMode === id;\n return (\n <button\n key={id}\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => setTheme(id)}\n className={cn(\n 'flex flex-col items-center gap-1 rounded-md border py-2 text-[11px] transition-colors',\n active\n ? 'border-primary text-foreground bg-accent'\n : 'border-transparent text-muted-foreground hover:bg-accent hover:text-accent-foreground'\n )}\n >\n <Icon className=\"size-4\" aria-hidden />\n {label}\n </button>\n );\n })}\n </div>\n\n {/* Theme — the registered skins */}\n <div className=\"label-mono text-muted-foreground border-t px-3 pt-3 pb-1\">\n theme\n </div>\n <ul className=\"pb-1\">\n {themes.map((t) => {\n const active = t.id === skin;\n return (\n <li key={t.id}>\n <button\n type=\"button\"\n role=\"menuitemradio\"\n aria-checked={active}\n onClick={() => setSkin(t.id)}\n className={cn(\n 'hover:bg-accent hover:text-accent-foreground flex w-full items-start gap-2 px-3 py-2 text-left transition-colors',\n active && 'text-foreground'\n )}\n >\n <span className=\"mt-0.5 size-4 shrink-0\">\n {active && (\n <Check className=\"text-primary size-4\" aria-hidden />\n )}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-sm font-medium\">{t.label}</span>\n <span className=\"text-muted-foreground block text-xs leading-snug\">\n {t.description}\n </span>\n </span>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </div>\n );\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 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","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 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 fallback?: (error: Error, reset: () => void) => React.ReactNode;\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 // Intentional: we swallow here. In production this would wire to\n // Sentry or similar.\n console.error('[ErrorBoundary]', 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 ! 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 {'> '}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 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 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 SheetContent,\n SheetDescription,\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\">\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 className={cn('font-display text-2xl leading-none', toneClass)}>{value}</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\nexport interface StatusPillProps {\n /** Short lowercase status label (e.g. \"active\", \"broken\", \"pending\"). */\n label: string;\n tone?: StatusTone;\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\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 (mono, lowercase, tone-coloured).\n */\nexport function StatusPill({ label, tone = 'muted', icon, className }: StatusPillProps) {\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 * @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","/**\n * Family composites.\n *\n * These are re-exported from `@orangecheck/ui`, which remains the source of\n * truth for the OrangeCheck composite layer (OcLogoDropdown, OcAccountMenu,\n * OcPrimaryNav, dashboard shells, FAMILY_PROPERTIES, …). `@orangecheck/design`\n * surfaces them here so consumers have a single import surface for the whole\n * design system, while the composites continue to version independently.\n */\nexport * from '@orangecheck/ui';\n"]}
|